Skip to content

Commit

Permalink
Merge remote-tracking branch 'remotes/jasowang/tags/net-pull-request'…
Browse files Browse the repository at this point in the history
… 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>
  • Loading branch information
pm215 committed Mar 14, 2017
2 parents 94b5d57 + adb560f commit 591bce2
Show file tree
Hide file tree
Showing 3 changed files with 141 additions and 9 deletions.
2 changes: 1 addition & 1 deletion hw/net/e1000e.c
Expand Up @@ -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);
}
Expand Down
115 changes: 115 additions & 0 deletions hw/net/mcf_fec.c
Expand Up @@ -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;
Expand All @@ -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
Expand Down Expand Up @@ -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));
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
33 changes: 25 additions & 8 deletions net/colo-compare.c
Expand Up @@ -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,
Expand Down Expand Up @@ -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);
}

Expand Down

0 comments on commit 591bce2

Please sign in to comment.