Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/dev/pci fix wm(4) vlan panic. Reported and tested by Tom...



details:   https://anonhg.NetBSD.org/src/rev/0f140035d419
branches:  trunk
changeset: 827335:0f140035d419
user:      knakahara <knakahara%NetBSD.org@localhost>
date:      Mon Oct 23 23:29:38 2017 +0000

description:
fix wm(4) vlan panic. Reported and tested by Tom Ivar Helbekkmo, thanks.

wm(4) used PRI bits and CFI bit as vlantag by mistake. It is found out
by if_ether.h:r1.67.

XXX need pullup-8

diffstat:

 sys/dev/pci/if_wm.c    |  10 +++++-----
 sys/dev/pci/if_wmreg.h |  14 +++++++++++++-
 2 files changed, 18 insertions(+), 6 deletions(-)

diffs (68 lines):

diff -r 42f9ec03d4ad -r 0f140035d419 sys/dev/pci/if_wm.c
--- a/sys/dev/pci/if_wm.c       Mon Oct 23 21:03:24 2017 +0000
+++ b/sys/dev/pci/if_wm.c       Mon Oct 23 23:29:38 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wm.c,v 1.541 2017/10/23 09:27:21 msaitoh Exp $      */
+/*     $NetBSD: if_wm.c,v 1.542 2017/10/23 23:29:38 knakahara Exp $    */
 
 /*
  * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc.
@@ -83,7 +83,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.541 2017/10/23 09:27:21 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.542 2017/10/23 23:29:38 knakahara Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -8108,11 +8108,11 @@
        struct wm_softc *sc = rxq->rxq_sc;
 
        if (sc->sc_type == WM_T_82574)
-               return rxq->rxq_ext_descs[idx].erx_ctx.erxc_vlan;
+               return EXTRXC_VLAN_ID(rxq->rxq_ext_descs[idx].erx_ctx.erxc_vlan);
        else if ((sc->sc_flags & WM_F_NEWQUEUE) != 0)
-               return rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_vlan;
+               return NQRXC_VLAN_ID(rxq->rxq_nq_descs[idx].nqrx_ctx.nrxc_vlan);
        else
-               return rxq->rxq_descs[idx].wrx_special;
+               return WRX_VLAN_ID(rxq->rxq_descs[idx].wrx_special);
 }
 
 static inline int
diff -r 42f9ec03d4ad -r 0f140035d419 sys/dev/pci/if_wmreg.h
--- a/sys/dev/pci/if_wmreg.h    Mon Oct 23 21:03:24 2017 +0000
+++ b/sys/dev/pci/if_wmreg.h    Mon Oct 23 23:29:38 2017 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_wmreg.h,v 1.103 2017/07/26 06:48:49 msaitoh Exp $   */
+/*     $NetBSD: if_wmreg.h,v 1.104 2017/10/23 23:29:38 knakahara Exp $ */
 
 /*
  * Copyright (c) 2001 Wasabi Systems, Inc.
@@ -208,6 +208,12 @@
 #define EXTRXC_STATUS_PKTTYPE_MASK     __BITS(19,16)
 #define EXTRXC_STATUS_PKTTYPE(status)  __SHIFTOUT(status,EXTRXC_STATUS_PKTTYPE_MASK)
 
+#define        EXTRXC_VLAN_ID_MASK     __BITS(11,0)    /* VLAN identifier mask */
+#define        EXTRXC_VLAN_ID(x)       ((x) & EXTRXC_VLAN_ID_MASK) /* VLAN identifier */
+#define        EXTRXC_VLAN_CFI         __BIT(12)       /* Canonical Form Indicator */
+#define        EXTRXC_VLAN_PRI_MASK    __BITS(15,13)   /* VLAN priority mask */
+#define        EXTRXC_VLAN_PRI(x)      __SHIFTOUT((x),EXTRXC_VLAN_PRI_MASK) /* VLAN priority */
+
 /* advanced RX descriptor for 82575 and newer */
 typedef union nq_rxdesc {
        struct {
@@ -330,6 +336,12 @@
 #define NQRXC_STATUS_MC                __BIT(19) /* Packet received from Manageability Controller */
                                          /* "MBC" in i350 spec */
 
+#define        NQRXC_VLAN_ID_MASK      __BITS(11,0)    /* VLAN identifier mask */
+#define        NQRXC_VLAN_ID(x)        ((x) & NQRXC_VLAN_ID_MASK) /* VLAN identifier */
+#define        NQRXC_VLAN_CFI          __BIT(12)       /* Canonical Form Indicator */
+#define        NQRXC_VLAN_PRI_MASK     __BITS(15,13)   /* VLAN priority mask */
+#define        NQRXC_VLAN_PRI(x)       __SHIFTOUT((x),NQRXC_VLAN_PRI_MASK) /* VLAN priority */
+
 /*
  * The Wiseman transmit descriptor.
  *



Home | Main Index | Thread Index | Old Index