summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorknakahara <knakahara@NetBSD.org>2017-10-23 23:29:38 +0000
committerknakahara <knakahara@NetBSD.org>2017-10-23 23:29:38 +0000
commitc541d0fafe7c3e83b5a6711aa79ed133537db055 (patch)
treea7f652debbeb511156d173766298f5fb939beb15 /sys/dev
parent387a24e78420edd7e36c9e58f061d34062926eb6 (diff)
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 (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/if_wm.c10
-rw-r--r--sys/dev/pci/if_wmreg.h14
2 files changed, 18 insertions, 6 deletions
diff --git a/sys/dev/pci/if_wm.c b/sys/dev/pci/if_wm.c
index 45461f8f8cd..8bd163bc73e 100644
--- a/sys/dev/pci/if_wm.c
+++ b/sys/dev/pci/if_wm.c
@@ -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 @@ wm_rxdesc_get_vlantag(struct wm_rxqueue *rxq, int idx)
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 --git a/sys/dev/pci/if_wmreg.h b/sys/dev/pci/if_wmreg.h
index c005414764c..1eb2e05390b 100644
--- a/sys/dev/pci/if_wmreg.h
+++ b/sys/dev/pci/if_wmreg.h
@@ -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 @@ typedef union ext_rxdesc {
#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 @@ typedef union nq_rxdesc {
#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.
*