Module Name:    src
Committed By:   ozaki-r
Date:           Mon Jul 28 14:24:48 UTC 2014

Modified Files:
        src/sys/net: if.c if_ether.h if_ethersubr.c

Log Message:
Add a mutex for global variables of if_ethersubr.c

To initialize the mutex, we introduce etherinit that is called from ifinit1.


To generate a diff of this commit:
cvs rdiff -u -r1.285 -r1.286 src/sys/net/if.c
cvs rdiff -u -r1.63 -r1.64 src/sys/net/if_ether.h
cvs rdiff -u -r1.202 -r1.203 src/sys/net/if_ethersubr.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/net/if.c
diff -u src/sys/net/if.c:1.285 src/sys/net/if.c:1.286
--- src/sys/net/if.c:1.285	Tue Jul  1 10:16:02 2014
+++ src/sys/net/if.c	Mon Jul 28 14:24:48 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.285 2014/07/01 10:16:02 ozaki-r Exp $	*/
+/*	$NetBSD: if.c,v 1.286 2014/07/28 14:24:48 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -90,7 +90,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.285 2014/07/01 10:16:02 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.286 2014/07/28 14:24:48 ozaki-r Exp $");
 
 #include "opt_inet.h"
 
@@ -252,6 +252,8 @@ ifinit1(void)
 
 	if_pfil = pfil_head_create(PFIL_TYPE_IFNET, NULL);
 	KASSERT(if_pfil != NULL);
+
+	etherinit();
 }
 
 ifnet_t *

Index: src/sys/net/if_ether.h
diff -u src/sys/net/if_ether.h:1.63 src/sys/net/if_ether.h:1.64
--- src/sys/net/if_ether.h:1.63	Tue Jun 10 09:38:30 2014
+++ src/sys/net/if_ether.h	Mon Jul 28 14:24:48 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ether.h,v 1.63 2014/06/10 09:38:30 joerg Exp $	*/
+/*	$NetBSD: if_ether.h,v 1.64 2014/07/28 14:24:48 ozaki-r Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1993
@@ -324,6 +324,7 @@ vlan_input_tag(struct ifnet *ifp, struct
 /* test if any VLAN is configured for this interface */
 #define VLAN_ATTACHED(ec)	((ec)->ec_nvlans > 0)
 
+void	etherinit(void);
 void	ether_ifattach(struct ifnet *, const uint8_t *);
 void	ether_ifdetach(struct ifnet *);
 int	ether_mediachange(struct ifnet *);

Index: src/sys/net/if_ethersubr.c
diff -u src/sys/net/if_ethersubr.c:1.202 src/sys/net/if_ethersubr.c:1.203
--- src/sys/net/if_ethersubr.c:1.202	Mon Jun 30 10:03:41 2014
+++ src/sys/net/if_ethersubr.c	Mon Jul 28 14:24:48 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ethersubr.c,v 1.202 2014/06/30 10:03:41 ozaki-r Exp $	*/
+/*	$NetBSD: if_ethersubr.c,v 1.203 2014/07/28 14:24:48 ozaki-r Exp $	*/
 
 /*
  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.202 2014/06/30 10:03:41 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ethersubr.c,v 1.203 2014/07/28 14:24:48 ozaki-r Exp $");
 
 #include "opt_inet.h"
 #include "opt_atalk.h"
@@ -175,6 +175,7 @@ extern u_char	aarp_org_code[3];
 static struct timeval bigpktppslim_last;
 static int bigpktppslim = 2;	/* XXX */
 static int bigpktpps_count;
+static kmutex_t bigpktpps_lock __cacheline_aligned;
 
 
 const uint8_t etherbroadcastaddr[ETHER_ADDR_LEN] =
@@ -603,11 +604,13 @@ ether_input(struct ifnet *ifp, struct mb
 	 */
 	if (etype != ETHERTYPE_MPLS && m->m_pkthdr.len >
 	    ETHER_MAX_FRAME(ifp, etype, m->m_flags & M_HASFCS)) {
+		mutex_enter(&bigpktpps_lock);
 		if (ppsratecheck(&bigpktppslim_last, &bigpktpps_count,
 			    bigpktppslim)) {
 			printf("%s: discarding oversize frame (len=%d)\n",
 			    ifp->if_xname, m->m_pkthdr.len);
 		}
+		mutex_exit(&bigpktpps_lock);
 		m_freem(m);
 		return;
 	}
@@ -1532,3 +1535,9 @@ SYSCTL_SETUP(sysctl_net_ether_setup, "sy
 		       ether_multicast_sysctl, 0, NULL, 0,
 		       CTL_CREATE, CTL_EOL);
 }
+
+void
+etherinit(void)
+{
+	mutex_init(&bigpktpps_lock, MUTEX_DEFAULT, IPL_NET);
+}

Reply via email to