mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-25 04:30:02 +00:00
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1 iQEcBAABAgAGBQJYx6HVAAoJEO8Ells5jWIRAQgIAK4pR+SgHyrxy2BJKseN4t8Y /+4QAKHt4v/uWJqft7m5sk1YQS7V7GW4LXBcv/kshN3tX7hPeXT2D4+NBV/BbXgp ghHQt9o0/sNkKiyVY31heWaB/x5hioYzJ4S3SieeEZlkbn72gtp/8qWogCo36gPV 7L7dTcUldKxZV/57hLGTXY8OJ/jMzOY3gLIoqg8tqvHPo0prYe/PAuaf0lEyZuXR /iPS9Q1/k7adsD989oUAM1mI+uks8X02ywv17HkxwdwAtI2o4aYRoQgUqd3TbSBd +HA0cWFutKK6/hpGfsaL1005q4XdW265WgqHpACimHXDQw6ZbwwajbSSpQChSHk= =PX31 -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/jasowang/tags/net-pull-request' into staging # gpg: Signature made Tue 14 Mar 2017 07:55:01 GMT # gpg: using RSA key 0xEF04965B398D6211 # gpg: Good signature from "Jason Wang (Jason Wang on RedHat) <jasowang@redhat.com>" # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 215D 46F4 8246 689E C77F 3562 EF04 965B 398D 6211 * remotes/jasowang/tags/net-pull-request: hw/net: implement MIB counters in mcf_fec driver COLO-compare: Fix trace_event print bug e1000e: correctly tear down MSI-X memory regions Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
591bce29b1
@ -306,7 +306,7 @@ e1000e_init_msix(E1000EState *s)
|
||||
static void
|
||||
e1000e_cleanup_msix(E1000EState *s)
|
||||
{
|
||||
if (msix_enabled(PCI_DEVICE(s))) {
|
||||
if (msix_present(PCI_DEVICE(s))) {
|
||||
e1000e_unuse_msix_vectors(s, E1000E_MSIX_VEC_NUM);
|
||||
msix_uninit(PCI_DEVICE(s), &s->msix, &s->msix);
|
||||
}
|
||||
|
115
hw/net/mcf_fec.c
115
hw/net/mcf_fec.c
@ -27,6 +27,7 @@ do { printf("mcf_fec: " fmt , ## __VA_ARGS__); } while (0)
|
||||
|
||||
#define FEC_MAX_DESC 1024
|
||||
#define FEC_MAX_FRAME_SIZE 2032
|
||||
#define FEC_MIB_SIZE 64
|
||||
|
||||
typedef struct {
|
||||
SysBusDevice parent_obj;
|
||||
@ -51,6 +52,7 @@ typedef struct {
|
||||
uint32_t erdsr;
|
||||
uint32_t etdsr;
|
||||
uint32_t emrbr;
|
||||
uint32_t mib[FEC_MIB_SIZE];
|
||||
} mcf_fec_state;
|
||||
|
||||
#define FEC_INT_HB 0x80000000
|
||||
@ -111,6 +113,63 @@ typedef struct {
|
||||
#define FEC_BD_OV 0x0002
|
||||
#define FEC_BD_TR 0x0001
|
||||
|
||||
#define MIB_RMON_T_DROP 0
|
||||
#define MIB_RMON_T_PACKETS 1
|
||||
#define MIB_RMON_T_BC_PKT 2
|
||||
#define MIB_RMON_T_MC_PKT 3
|
||||
#define MIB_RMON_T_CRC_ALIGN 4
|
||||
#define MIB_RMON_T_UNDERSIZE 5
|
||||
#define MIB_RMON_T_OVERSIZE 6
|
||||
#define MIB_RMON_T_FRAG 7
|
||||
#define MIB_RMON_T_JAB 8
|
||||
#define MIB_RMON_T_COL 9
|
||||
#define MIB_RMON_T_P64 10
|
||||
#define MIB_RMON_T_P65TO127 11
|
||||
#define MIB_RMON_T_P128TO255 12
|
||||
#define MIB_RMON_T_P256TO511 13
|
||||
#define MIB_RMON_T_P512TO1023 14
|
||||
#define MIB_RMON_T_P1024TO2047 15
|
||||
#define MIB_RMON_T_P_GTE2048 16
|
||||
#define MIB_RMON_T_OCTETS 17
|
||||
#define MIB_IEEE_T_DROP 18
|
||||
#define MIB_IEEE_T_FRAME_OK 19
|
||||
#define MIB_IEEE_T_1COL 20
|
||||
#define MIB_IEEE_T_MCOL 21
|
||||
#define MIB_IEEE_T_DEF 22
|
||||
#define MIB_IEEE_T_LCOL 23
|
||||
#define MIB_IEEE_T_EXCOL 24
|
||||
#define MIB_IEEE_T_MACERR 25
|
||||
#define MIB_IEEE_T_CSERR 26
|
||||
#define MIB_IEEE_T_SQE 27
|
||||
#define MIB_IEEE_T_FDXFC 28
|
||||
#define MIB_IEEE_T_OCTETS_OK 29
|
||||
|
||||
#define MIB_RMON_R_DROP 32
|
||||
#define MIB_RMON_R_PACKETS 33
|
||||
#define MIB_RMON_R_BC_PKT 34
|
||||
#define MIB_RMON_R_MC_PKT 35
|
||||
#define MIB_RMON_R_CRC_ALIGN 36
|
||||
#define MIB_RMON_R_UNDERSIZE 37
|
||||
#define MIB_RMON_R_OVERSIZE 38
|
||||
#define MIB_RMON_R_FRAG 39
|
||||
#define MIB_RMON_R_JAB 40
|
||||
#define MIB_RMON_R_RESVD_0 41
|
||||
#define MIB_RMON_R_P64 42
|
||||
#define MIB_RMON_R_P65TO127 43
|
||||
#define MIB_RMON_R_P128TO255 44
|
||||
#define MIB_RMON_R_P256TO511 45
|
||||
#define MIB_RMON_R_P512TO1023 46
|
||||
#define MIB_RMON_R_P1024TO2047 47
|
||||
#define MIB_RMON_R_P_GTE2048 48
|
||||
#define MIB_RMON_R_OCTETS 49
|
||||
#define MIB_IEEE_R_DROP 50
|
||||
#define MIB_IEEE_R_FRAME_OK 51
|
||||
#define MIB_IEEE_R_CRC 52
|
||||
#define MIB_IEEE_R_ALIGN 53
|
||||
#define MIB_IEEE_R_MACERR 54
|
||||
#define MIB_IEEE_R_FDXFC 55
|
||||
#define MIB_IEEE_R_OCTETS_OK 56
|
||||
|
||||
static void mcf_fec_read_bd(mcf_fec_bd *bd, uint32_t addr)
|
||||
{
|
||||
cpu_physical_memory_read(addr, bd, sizeof(*bd));
|
||||
@ -147,6 +206,31 @@ static void mcf_fec_update(mcf_fec_state *s)
|
||||
s->irq_state = active;
|
||||
}
|
||||
|
||||
static void mcf_fec_tx_stats(mcf_fec_state *s, int size)
|
||||
{
|
||||
s->mib[MIB_RMON_T_PACKETS]++;
|
||||
s->mib[MIB_RMON_T_OCTETS] += size;
|
||||
if (size < 64) {
|
||||
s->mib[MIB_RMON_T_FRAG]++;
|
||||
} else if (size == 64) {
|
||||
s->mib[MIB_RMON_T_P64]++;
|
||||
} else if (size < 128) {
|
||||
s->mib[MIB_RMON_T_P65TO127]++;
|
||||
} else if (size < 256) {
|
||||
s->mib[MIB_RMON_T_P128TO255]++;
|
||||
} else if (size < 512) {
|
||||
s->mib[MIB_RMON_T_P256TO511]++;
|
||||
} else if (size < 1024) {
|
||||
s->mib[MIB_RMON_T_P512TO1023]++;
|
||||
} else if (size < 2048) {
|
||||
s->mib[MIB_RMON_T_P1024TO2047]++;
|
||||
} else {
|
||||
s->mib[MIB_RMON_T_P_GTE2048]++;
|
||||
}
|
||||
s->mib[MIB_IEEE_T_FRAME_OK]++;
|
||||
s->mib[MIB_IEEE_T_OCTETS_OK] += size;
|
||||
}
|
||||
|
||||
static void mcf_fec_do_tx(mcf_fec_state *s)
|
||||
{
|
||||
uint32_t addr;
|
||||
@ -180,6 +264,7 @@ static void mcf_fec_do_tx(mcf_fec_state *s)
|
||||
/* Last buffer in frame. */
|
||||
DPRINTF("Sending packet\n");
|
||||
qemu_send_packet(qemu_get_queue(s->nic), frame, frame_size);
|
||||
mcf_fec_tx_stats(s, frame_size);
|
||||
ptr = frame;
|
||||
frame_size = 0;
|
||||
s->eir |= FEC_INT_TXF;
|
||||
@ -302,6 +387,7 @@ static uint64_t mcf_fec_read(void *opaque, hwaddr addr,
|
||||
case 0x180: return s->erdsr;
|
||||
case 0x184: return s->etdsr;
|
||||
case 0x188: return s->emrbr;
|
||||
case 0x200 ... 0x2e0: return s->mib[(addr & 0x1ff) / 4];
|
||||
default:
|
||||
hw_error("mcf_fec_read: Bad address 0x%x\n", (int)addr);
|
||||
return 0;
|
||||
@ -399,12 +485,40 @@ static void mcf_fec_write(void *opaque, hwaddr addr,
|
||||
case 0x188:
|
||||
s->emrbr = value > 0 ? value & 0x7F0 : 0x7F0;
|
||||
break;
|
||||
case 0x200 ... 0x2e0:
|
||||
s->mib[(addr & 0x1ff) / 4] = value;
|
||||
break;
|
||||
default:
|
||||
hw_error("mcf_fec_write Bad address 0x%x\n", (int)addr);
|
||||
}
|
||||
mcf_fec_update(s);
|
||||
}
|
||||
|
||||
static void mcf_fec_rx_stats(mcf_fec_state *s, int size)
|
||||
{
|
||||
s->mib[MIB_RMON_R_PACKETS]++;
|
||||
s->mib[MIB_RMON_R_OCTETS] += size;
|
||||
if (size < 64) {
|
||||
s->mib[MIB_RMON_R_FRAG]++;
|
||||
} else if (size == 64) {
|
||||
s->mib[MIB_RMON_R_P64]++;
|
||||
} else if (size < 128) {
|
||||
s->mib[MIB_RMON_R_P65TO127]++;
|
||||
} else if (size < 256) {
|
||||
s->mib[MIB_RMON_R_P128TO255]++;
|
||||
} else if (size < 512) {
|
||||
s->mib[MIB_RMON_R_P256TO511]++;
|
||||
} else if (size < 1024) {
|
||||
s->mib[MIB_RMON_R_P512TO1023]++;
|
||||
} else if (size < 2048) {
|
||||
s->mib[MIB_RMON_R_P1024TO2047]++;
|
||||
} else {
|
||||
s->mib[MIB_RMON_R_P_GTE2048]++;
|
||||
}
|
||||
s->mib[MIB_IEEE_R_FRAME_OK]++;
|
||||
s->mib[MIB_IEEE_R_OCTETS_OK] += size;
|
||||
}
|
||||
|
||||
static int mcf_fec_have_receive_space(mcf_fec_state *s, size_t want)
|
||||
{
|
||||
mcf_fec_bd bd;
|
||||
@ -500,6 +614,7 @@ static ssize_t mcf_fec_receive(NetClientState *nc, const uint8_t *buf, size_t si
|
||||
}
|
||||
}
|
||||
s->rx_descriptor = addr;
|
||||
mcf_fec_rx_stats(s, retsize);
|
||||
mcf_fec_enable_rx(s);
|
||||
mcf_fec_update(s);
|
||||
return retsize;
|
||||
|
@ -182,10 +182,18 @@ static int packet_enqueue(CompareState *s, int mode)
|
||||
*/
|
||||
static int colo_packet_compare_common(Packet *ppkt, Packet *spkt, int offset)
|
||||
{
|
||||
trace_colo_compare_ip_info(ppkt->size, inet_ntoa(ppkt->ip->ip_src),
|
||||
inet_ntoa(ppkt->ip->ip_dst), spkt->size,
|
||||
inet_ntoa(spkt->ip->ip_src),
|
||||
inet_ntoa(spkt->ip->ip_dst));
|
||||
if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
|
||||
char pri_ip_src[20], pri_ip_dst[20], sec_ip_src[20], sec_ip_dst[20];
|
||||
|
||||
strcpy(pri_ip_src, inet_ntoa(ppkt->ip->ip_src));
|
||||
strcpy(pri_ip_dst, inet_ntoa(ppkt->ip->ip_dst));
|
||||
strcpy(sec_ip_src, inet_ntoa(spkt->ip->ip_src));
|
||||
strcpy(sec_ip_dst, inet_ntoa(spkt->ip->ip_dst));
|
||||
|
||||
trace_colo_compare_ip_info(ppkt->size, pri_ip_src,
|
||||
pri_ip_dst, spkt->size,
|
||||
sec_ip_src, sec_ip_dst);
|
||||
}
|
||||
|
||||
if (ppkt->size == spkt->size) {
|
||||
return memcmp(ppkt->data + offset, spkt->data + offset,
|
||||
@ -336,10 +344,19 @@ static int colo_packet_compare_icmp(Packet *spkt, Packet *ppkt)
|
||||
static int colo_packet_compare_other(Packet *spkt, Packet *ppkt)
|
||||
{
|
||||
trace_colo_compare_main("compare other");
|
||||
trace_colo_compare_ip_info(ppkt->size, inet_ntoa(ppkt->ip->ip_src),
|
||||
inet_ntoa(ppkt->ip->ip_dst), spkt->size,
|
||||
inet_ntoa(spkt->ip->ip_src),
|
||||
inet_ntoa(spkt->ip->ip_dst));
|
||||
if (trace_event_get_state(TRACE_COLO_COMPARE_MISCOMPARE)) {
|
||||
char pri_ip_src[20], pri_ip_dst[20], sec_ip_src[20], sec_ip_dst[20];
|
||||
|
||||
strcpy(pri_ip_src, inet_ntoa(ppkt->ip->ip_src));
|
||||
strcpy(pri_ip_dst, inet_ntoa(ppkt->ip->ip_dst));
|
||||
strcpy(sec_ip_src, inet_ntoa(spkt->ip->ip_src));
|
||||
strcpy(sec_ip_dst, inet_ntoa(spkt->ip->ip_dst));
|
||||
|
||||
trace_colo_compare_ip_info(ppkt->size, pri_ip_src,
|
||||
pri_ip_dst, spkt->size,
|
||||
sec_ip_src, sec_ip_dst);
|
||||
}
|
||||
|
||||
return colo_packet_compare_common(ppkt, spkt, 0);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user