CVS commit: src/sys/arch/arm/arm32

2020-02-01 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sun Feb  2 07:55:11 UTC 2020

Modified Files:
src/sys/arch/arm/arm32: pmap.c

Log Message:
KNF


To generate a diff of this commit:
cvs rdiff -u -r1.383 -r1.384 src/sys/arch/arm/arm32/pmap.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/arch/arm/arm32/pmap.c
diff -u src/sys/arch/arm/arm32/pmap.c:1.383 src/sys/arch/arm/arm32/pmap.c:1.384
--- src/sys/arch/arm/arm32/pmap.c:1.383	Sun Feb  2 07:47:51 2020
+++ src/sys/arch/arm/arm32/pmap.c	Sun Feb  2 07:55:11 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.383 2020/02/02 07:47:51 skrll Exp $	*/
+/*	$NetBSD: pmap.c,v 1.384 2020/02/02 07:55:11 skrll Exp $	*/
 
 /*
  * Copyright 2003 Wasabi Systems, Inc.
@@ -197,20 +197,22 @@
 #define _INTR_PRIVATE
 #endif
 
+#include 
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.384 2020/02/02 07:55:11 skrll Exp $");
+
 #include 
 #include 
-#include 
-#include 
-#include 
+#include 
+#include 
+#include 
 #include 
-#include 
+#include 
+#include 
 #include 
-#include 
-#include 
+#include 
+#include 
 #include 
-#include 
-#include 
-#include 
+#include 
 
 #include 
 #include 
@@ -221,8 +223,6 @@
 #include 
 #endif
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.383 2020/02/02 07:47:51 skrll Exp $");
-
 //#define PMAP_DEBUG
 #ifdef PMAP_DEBUG
 



CVS commit: src/sys/arch/arm/arm32

2020-02-01 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sun Feb  2 07:55:11 UTC 2020

Modified Files:
src/sys/arch/arm/arm32: pmap.c

Log Message:
KNF


To generate a diff of this commit:
cvs rdiff -u -r1.383 -r1.384 src/sys/arch/arm/arm32/pmap.c

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



CVS commit: src/sys/arch/arm/arm32

2020-02-01 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sun Feb  2 07:47:51 UTC 2020

Modified Files:
src/sys/arch/arm/arm32: pmap.c

Log Message:
Fix comment


To generate a diff of this commit:
cvs rdiff -u -r1.382 -r1.383 src/sys/arch/arm/arm32/pmap.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/arch/arm/arm32/pmap.c
diff -u src/sys/arch/arm/arm32/pmap.c:1.382 src/sys/arch/arm/arm32/pmap.c:1.383
--- src/sys/arch/arm/arm32/pmap.c:1.382	Sat Jan 25 16:19:29 2020
+++ src/sys/arch/arm/arm32/pmap.c	Sun Feb  2 07:47:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pmap.c,v 1.382 2020/01/25 16:19:29 skrll Exp $	*/
+/*	$NetBSD: pmap.c,v 1.383 2020/02/02 07:47:51 skrll Exp $	*/
 
 /*
  * Copyright 2003 Wasabi Systems, Inc.
@@ -221,7 +221,7 @@
 #include 
 #endif
 
-__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.382 2020/01/25 16:19:29 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pmap.c,v 1.383 2020/02/02 07:47:51 skrll Exp $");
 
 //#define PMAP_DEBUG
 #ifdef PMAP_DEBUG
@@ -614,7 +614,7 @@ struct l1_ttable {
 /*
  * L1 Page Tables are tracked using a Least Recently Used list.
  *  - New L1s are allocated from the HEAD.
- *  - Freed L1s are added to the TAIl.
+ *  - Freed L1s are added to the TAIL.
  *  - Recently accessed L1s (where an 'access' is some change to one of
  *the userland pmaps which owns this L1) are moved to the TAIL.
  */



CVS commit: src/sys/arch/arm/arm32

2020-02-01 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sun Feb  2 07:47:51 UTC 2020

Modified Files:
src/sys/arch/arm/arm32: pmap.c

Log Message:
Fix comment


To generate a diff of this commit:
cvs rdiff -u -r1.382 -r1.383 src/sys/arch/arm/arm32/pmap.c

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



CVS commit: src/sys/dev/i2c

2020-02-01 Thread Michael Lorenz
Module Name:src
Committed By:   macallan
Date:   Sun Feb  2 06:43:14 UTC 2020

Modified Files:
src/sys/dev/i2c: pcagpio.c

Log Message:
break long lines


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/i2c/pcagpio.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/dev/i2c/pcagpio.c
diff -u src/sys/dev/i2c/pcagpio.c:1.2 src/sys/dev/i2c/pcagpio.c:1.3
--- src/sys/dev/i2c/pcagpio.c:1.2	Sun Feb  2 06:41:27 2020
+++ src/sys/dev/i2c/pcagpio.c	Sun Feb  2 06:43:14 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: pcagpio.c,v 1.2 2020/02/02 06:41:27 macallan Exp $ */
+/* $NetBSD: pcagpio.c,v 1.3 2020/02/02 06:43:14 macallan Exp $ */
 
 /*-
  * Copyright (c) 2020 Michael Lorenz
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: pcagpio.c,v 1.2 2020/02/02 06:41:27 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcagpio.c,v 1.3 2020/02/02 06:43:14 macallan Exp $");
 
 #include 
 #include 
@@ -77,7 +77,8 @@ struct pcagpio_softc {
 
 static void 	pcagpio_writereg(struct pcagpio_softc *, int, uint32_t);
 static uint32_t pcagpio_readreg(struct pcagpio_softc *, int);
-static void	pcagpio_attach_led(struct pcagpio_softc *, char *, int, int, int);
+static void	pcagpio_attach_led(
+			struct pcagpio_softc *, char *, int, int, int);
 static int	pcagpio_get(void *);
 static void	pcagpio_set(void *, int);
 
@@ -172,10 +173,12 @@ pcagpio_attach(device_t parent, device_t
 		for (i = 0; i < prop_array_count(pins); i++) {
 			nptr = NULL;
 			pin = prop_array_get(pins, i);
-			ok &= prop_dictionary_get_cstring_nocopy(pin, "name", );
+			ok &= prop_dictionary_get_cstring_nocopy(pin, "name",
+			);
 			strncpy(name, nptr, 31);
 			ok &= prop_dictionary_get_uint32(pin, "pin", );
-			ok &= prop_dictionary_get_bool(pin, "active_high", );
+			ok &= prop_dictionary_get_bool(
+			pin, "active_high", );
 			/* optional default state */
 			def = -1;
 			prop_dictionary_get_int32(pin, "default_state", );
@@ -244,7 +247,8 @@ pcagpio_attach_led(struct pcagpio_softc 
 	l->v_off = act ? 0 : l->mask;
 	led_attach(n, l, pcagpio_get, pcagpio_set);
 	if (def != -1) pcagpio_set(l, def);
-	DPRINTF("%s: %04x %04x %04x def %d\n", __func__, l->mask, l->v_on, l->v_off, def);
+	DPRINTF("%s: %04x %04x %04x def %d\n",
+	__func__, l->mask, l->v_on, l->v_off, def);
 	sc->sc_nleds++;
 }
 



CVS commit: src/sys/dev/i2c

2020-02-01 Thread Michael Lorenz
Module Name:src
Committed By:   macallan
Date:   Sun Feb  2 06:43:14 UTC 2020

Modified Files:
src/sys/dev/i2c: pcagpio.c

Log Message:
break long lines


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/i2c/pcagpio.c

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



CVS commit: src/sys/dev/i2c

2020-02-01 Thread Michael Lorenz
Module Name:src
Committed By:   macallan
Date:   Sun Feb  2 06:41:27 UTC 2020

Modified Files:
src/sys/dev/i2c: files.i2c pcagpio.c

Log Message:
attach LEDs according to info passed as device properties


To generate a diff of this commit:
cvs rdiff -u -r1.109 -r1.110 src/sys/dev/i2c/files.i2c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/i2c/pcagpio.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/dev/i2c/files.i2c
diff -u src/sys/dev/i2c/files.i2c:1.109 src/sys/dev/i2c/files.i2c:1.110
--- src/sys/dev/i2c/files.i2c:1.109	Wed Jan 29 05:27:05 2020
+++ src/sys/dev/i2c/files.i2c	Sun Feb  2 06:41:27 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files.i2c,v 1.109 2020/01/29 05:27:05 macallan Exp $
+#	$NetBSD: files.i2c,v 1.110 2020/02/02 06:41:27 macallan Exp $
 
 obsolete defflag	opt_i2cbus.h		I2C_SCAN
 define	i2cbus { }
@@ -387,6 +387,6 @@ attach	cwfg at iic
 file	dev/i2c/cwfg.ccwfg
 
 # Philips PCA955x GPIO
-device	pcagpio
+device	pcagpio: leds
 attach	pcagpio at iic
 file	dev/i2c/pcagpio.c			pcagpio

Index: src/sys/dev/i2c/pcagpio.c
diff -u src/sys/dev/i2c/pcagpio.c:1.1 src/sys/dev/i2c/pcagpio.c:1.2
--- src/sys/dev/i2c/pcagpio.c:1.1	Wed Jan 29 05:27:05 2020
+++ src/sys/dev/i2c/pcagpio.c	Sun Feb  2 06:41:27 2020
@@ -1,7 +1,7 @@
-/* $NetBSD: pcagpio.c,v 1.1 2020/01/29 05:27:05 macallan Exp $ */
+/* $NetBSD: pcagpio.c,v 1.2 2020/02/02 06:41:27 macallan Exp $ */
 
 /*-
- * Copyright (c) 2018 Michael Lorenz
+ * Copyright (c) 2020 Michael Lorenz
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: pcagpio.c,v 1.1 2020/01/29 05:27:05 macallan Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pcagpio.c,v 1.2 2020/02/02 06:41:27 macallan Exp $");
 
 #include 
 #include 
@@ -40,6 +40,13 @@ __KERNEL_RCSID(0, "$NetBSD: pcagpio.c,v 
 #include 
 
 #include 
+#include 
+
+#ifdef PCAGPIO_DEBUG
+#define DPRINTF printf
+#else
+#define DPRINTF if (0) printf
+#endif
 
 /* commands */
 #define PCAGPIO_INPUT	0x00	/* line status */
@@ -50,17 +57,29 @@ __KERNEL_RCSID(0, "$NetBSD: pcagpio.c,v 
 static int	pcagpio_match(device_t, cfdata_t, void *);
 static void	pcagpio_attach(device_t, device_t, void *);
 
+/* we can only pass one cookie to led_attach() but we need several values... */
+struct pcagpio_led {
+	void *cookie;
+	uint32_t mask, v_on, v_off;
+};
+
 struct pcagpio_softc {
 	device_t	sc_dev;
 	i2c_tag_t	sc_i2c;
 	i2c_addr_t	sc_addr;
 
 	int		sc_is_16bit;
+	uint32_t	sc_state;
+	struct pcagpio_led sc_leds[16];
+	int		sc_nleds;
 };
 
 
 static void 	pcagpio_writereg(struct pcagpio_softc *, int, uint32_t);
 static uint32_t pcagpio_readreg(struct pcagpio_softc *, int);
+static void	pcagpio_attach_led(struct pcagpio_softc *, char *, int, int, int);
+static int	pcagpio_get(void *);
+static void	pcagpio_set(void *, int);
 
 CFATTACH_DECL_NEW(pcagpio, sizeof(struct pcagpio_softc),
 pcagpio_match, pcagpio_attach, NULL, NULL);
@@ -85,6 +104,7 @@ pcagpio_match(device_t parent, cfdata_t 
 	return 0;
 }
 
+#ifdef PCAGPIO_DEBUG
 static void
 printdir(uint32_t val, uint32_t mask, char letter)
 {
@@ -103,6 +123,7 @@ printdir(uint32_t val, uint32_t mask, ch
 	printf("dir: %s\n", flags);
 	printf("lvl: %s\n", bits);
 }	
+#endif
 
 static void
 pcagpio_attach(device_t parent, device_t self, void *aux)
@@ -110,11 +131,14 @@ pcagpio_attach(device_t parent, device_t
 	struct pcagpio_softc *sc = device_private(self);
 	struct i2c_attach_args *ia = aux;
 	const struct device_compatible_entry *dce;
-	uint32_t dir, in, out;
+	prop_dictionary_t dict = device_properties(self);
+	prop_array_t pins;
+	prop_dictionary_t pin;
 
 	sc->sc_dev = self;
 	sc->sc_i2c = ia->ia_tag;
 	sc->sc_addr = ia->ia_addr;
+	sc->sc_nleds = 0;
 
 	aprint_naive("\n");
 	sc->sc_is_16bit = 0;
@@ -123,17 +147,43 @@ pcagpio_attach(device_t parent, device_t
 
 	aprint_normal(": %s\n", sc->sc_is_16bit ? "PCA9555" : "PCA9556");
 
-	if (sc->sc_addr == 0x38) pcagpio_writereg(sc, 1, 0xff & ~0x10);
-	
-	dir = pcagpio_readreg(sc, 3);
-	in = pcagpio_readreg(sc, 0);
-	out = pcagpio_readreg(sc, 1);
+	sc->sc_state = pcagpio_readreg(sc, PCAGPIO_OUTPUT);
+
+#ifdef PCAGPIO_DEBUG
+	uint32_t dir, in, out;
+	dir = pcagpio_readreg(sc, PCAGPIO_CONFIG);
+	in = pcagpio_readreg(sc, PCAGPIO_INPUT);
+	out = sc->sc_state;
 
 	out &= ~dir;
 	in &= dir;
 	
 	printdir(in, dir, 'I');
 	printdir(out, ~dir, 'O');
+#endif
+
+	pins = prop_dictionary_get(dict, "pins");
+	if (pins != NULL) {
+		int i, num, def;
+		char name[32];
+		const char *nptr;
+		bool ok = TRUE, act;
+
+		for (i = 0; i < prop_array_count(pins); i++) {
+			nptr = NULL;
+			pin = prop_array_get(pins, i);
+			ok &= prop_dictionary_get_cstring_nocopy(pin, "name", );
+			strncpy(name, nptr, 31);
+			ok &= prop_dictionary_get_uint32(pin, "pin", );
+			ok &= prop_dictionary_get_bool(pin, "active_high", );
+			/* optional default state */
+			def = 

CVS commit: src/sys/dev/i2c

2020-02-01 Thread Michael Lorenz
Module Name:src
Committed By:   macallan
Date:   Sun Feb  2 06:41:27 UTC 2020

Modified Files:
src/sys/dev/i2c: files.i2c pcagpio.c

Log Message:
attach LEDs according to info passed as device properties


To generate a diff of this commit:
cvs rdiff -u -r1.109 -r1.110 src/sys/dev/i2c/files.i2c
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/i2c/pcagpio.c

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



CVS commit: src/sys/arch/sparc64/sparc64

2020-02-01 Thread Michael Lorenz
Module Name:src
Committed By:   macallan
Date:   Sun Feb  2 06:38:24 UTC 2020

Modified Files:
src/sys/arch/sparc64/sparc64: autoconf.c

Log Message:
pass pin info to pcagpio instances, so far for front panel LEDs on
Sun Fire v210 only


To generate a diff of this commit:
cvs rdiff -u -r1.215 -r1.216 src/sys/arch/sparc64/sparc64/autoconf.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/arch/sparc64/sparc64/autoconf.c
diff -u src/sys/arch/sparc64/sparc64/autoconf.c:1.215 src/sys/arch/sparc64/sparc64/autoconf.c:1.216
--- src/sys/arch/sparc64/sparc64/autoconf.c:1.215	Sat Jan  5 15:46:02 2019
+++ src/sys/arch/sparc64/sparc64/autoconf.c	Sun Feb  2 06:38:23 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: autoconf.c,v 1.215 2019/01/05 15:46:02 martin Exp $ */
+/*	$NetBSD: autoconf.c,v 1.216 2020/02/02 06:38:23 macallan Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -48,7 +48,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.215 2019/01/05 15:46:02 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: autoconf.c,v 1.216 2020/02/02 06:38:23 macallan Exp $");
 
 #include "opt_ddb.h"
 #include "opt_kgdb.h"
@@ -1046,6 +1046,48 @@ device_setofnode(device_t dev, int node)
 	device_xname(dev), node));
 }
 
+static void
+add_gpio_LED(prop_array_t pins, const char *name, int num, int act, int def)
+{
+	prop_dictionary_t pin = prop_dictionary_create();
+	prop_dictionary_set_cstring(pin, "name", name);
+	prop_dictionary_set_uint32(pin, "type", 0);	/* 0 for LED, for now */
+	prop_dictionary_set_uint32(pin, "pin", num);
+	prop_dictionary_set_bool(pin, "active_high", act);
+	if (def != -1)
+		prop_dictionary_set_int32(pin, "default_state", def);
+	prop_array_add(pins, pin);
+	prop_object_release(pin);
+}
+	
+static void
+add_gpio_props_v210(device_t dev, void *aux)
+{
+	struct i2c_attach_args *ia = aux;
+	prop_dictionary_t dict = device_properties(dev);
+	prop_array_t pins;
+
+	switch (ia->ia_addr) {
+		case 0x38:	/* front panel LEDs */
+			pins = prop_array_create();
+			add_gpio_LED(pins, "indicator", 7, 0, -1);
+			add_gpio_LED(pins, "fault", 5, 0, 0);
+			add_gpio_LED(pins, "power", 4, 0, 1);
+			prop_dictionary_set(dict, "pins", pins);
+			prop_object_release(pins);
+			break;
+		case 0x23:	/* drive bay LEDs */
+			pins = prop_array_create();
+			add_gpio_LED(pins, "bay0_fault", 10, 0, 0);
+			add_gpio_LED(pins, "bay1_fault", 11, 0, 0);
+			add_gpio_LED(pins, "bay0_remove", 12, 0, 0);
+			add_gpio_LED(pins, "bay1_remove", 13, 0, 0);
+			prop_dictionary_set(dict, "pins", pins);
+			prop_object_release(pins);
+			break;
+	}
+}
+
 /*
  * Called back during autoconfiguration for each device found
  */
@@ -1090,6 +1132,11 @@ device_register(device_t dev, void *aux)
 			return;
 
 		ofnode = (int)ia->ia_cookie;
+		if (device_is_a(dev, "pcagpio")) {
+			if (strcmp(machine_model, "SUNW,Sun-Fire-V210") == 0) {
+add_gpio_props_v210(dev, aux);
+			}
+		} 
 	} else if (device_is_a(dev, "sd") || device_is_a(dev, "cd")) {
 		struct scsipibus_attach_args *sa = aux;
 		struct scsipi_periph *periph = sa->sa_periph;



CVS commit: src/sys/arch/sparc64/sparc64

2020-02-01 Thread Michael Lorenz
Module Name:src
Committed By:   macallan
Date:   Sun Feb  2 06:38:24 UTC 2020

Modified Files:
src/sys/arch/sparc64/sparc64: autoconf.c

Log Message:
pass pin info to pcagpio instances, so far for front panel LEDs on
Sun Fire v210 only


To generate a diff of this commit:
cvs rdiff -u -r1.215 -r1.216 src/sys/arch/sparc64/sparc64/autoconf.c

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



CVS commit: src/sys/dev/pcmcia

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sun Feb  2 05:56:42 UTC 2020

Modified Files:
src/sys/dev/pcmcia: if_xi.c

Log Message:
- Adopt .
- Use ifmedia_fini().


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/pcmcia/if_xi.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/dev/pcmcia/if_xi.c
diff -u src/sys/dev/pcmcia/if_xi.c:1.93 src/sys/dev/pcmcia/if_xi.c:1.94
--- src/sys/dev/pcmcia/if_xi.c:1.93	Mon Jan  6 07:15:03 2020
+++ src/sys/dev/pcmcia/if_xi.c	Sun Feb  2 05:56:42 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_xi.c,v 1.93 2020/01/06 07:15:03 msaitoh Exp $ */
+/*	$NetBSD: if_xi.c,v 1.94 2020/02/02 05:56:42 thorpej Exp $ */
 /*	OpenBSD: if_xe.c,v 1.9 1999/09/16 11:28:42 niklas Exp 	*/
 
 /*
@@ -55,7 +55,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_xi.c,v 1.93 2020/01/06 07:15:03 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_xi.c,v 1.94 2020/02/02 05:56:42 thorpej Exp $");
 
 #include "opt_inet.h"
 
@@ -259,9 +259,9 @@ xi_detach(device_t self, int flags)
 	rnd_detach_source(>sc_rnd_source);
 
 	mii_detach(>sc_mii, MII_PHY_ANY, MII_OFFSET_ANY);
-	ifmedia_delete_instance(>sc_mii.mii_media, IFM_INST_ANY);
 	ether_ifdetach(ifp);
 	if_detach(ifp);
+	ifmedia_fini(>sc_mii.mii_media);
 
 	return 0;
 }
@@ -323,7 +323,7 @@ xi_intr(void *arg)
 		if (recvcount > MAX_BYTES_INTR) {
 			DPRINTF(XID_INTR,
 			("xi: too many bytes this interrupt\n"));
-			ifp->if_iqdrops++;
+			if_statinc(ifp, if_iqdrops);
 			/* Drop packet. */
 			bus_space_write_2(sc->sc_bst, sc->sc_bsh, DO0,
 			DO_SKIP_RX_PKT);
@@ -336,25 +336,25 @@ xi_intr(void *arg)
 
 	/* Packet too long? */
 	if (rsr & RSR_TOO_LONG) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		DPRINTF(XID_INTR, ("xi: packet too long\n"));
 	}
 
 	/* CRC error? */
 	if (rsr & RSR_CRCERR) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		DPRINTF(XID_INTR, ("xi: CRC error detected\n"));
 	}
 
 	/* Alignment error? */
 	if (rsr & RSR_ALIGNERR) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		DPRINTF(XID_INTR, ("xi: alignment error detected\n"));
 	}
 
 	/* Check for rx overrun. */
 	if (rx_status & RX_OVERRUN) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		bus_space_write_1(sc->sc_bst, sc->sc_bsh, CR, CLR_RX_OVERRUN);
 		DPRINTF(XID_INTR, ("xi: overrun cleared\n"));
 	}
@@ -363,14 +363,14 @@ xi_intr(void *arg)
 	if_schedule_deferred_start(ifp);
 
 	/* Detected excessive collisions? */
-	if ((tx_status & EXCESSIVE_COLL) && ifp->if_opackets > 0) {
+	if ((tx_status & EXCESSIVE_COLL) /* XXX && ifp->if_opackets > 0 */) {
 		DPRINTF(XID_INTR, ("xi: excessive collisions\n"));
 		bus_space_write_1(sc->sc_bst, sc->sc_bsh, CR, RESTART_TX);
-		ifp->if_oerrors++;
+		if_statinc(ifp, if_oerrors);
 	}
 
-	if ((tx_status & TX_ABORT) && ifp->if_opackets > 0)
-		ifp->if_oerrors++;
+	if ((tx_status & TX_ABORT) /* && XXX ifp->if_opackets > 0 */)
+		if_statinc(ifp, if_oerrors);
 
 	/* have handled the interrupt */
 	rnd_add_uint32(>sc_rnd_source, tx_status);
@@ -645,7 +645,7 @@ xi_watchdog(struct ifnet *ifp)
 	struct xi_softc *sc = ifp->if_softc;
 
 	printf("%s: device timeout\n", device_xname(sc->sc_dev));
-	++ifp->if_oerrors;
+	if_statinc(ifp, if_oerrors);
 
 	xi_reset(sc);
 }
@@ -824,7 +824,7 @@ xi_start(struct ifnet *ifp)
 	splx(s);
 
 	ifp->if_timer = 5;
-	++ifp->if_opackets;
+	if_statinc(ifp, if_opackets);
 }
 
 STATIC int



CVS commit: src/sys/dev/pcmcia

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sun Feb  2 05:56:42 UTC 2020

Modified Files:
src/sys/dev/pcmcia: if_xi.c

Log Message:
- Adopt .
- Use ifmedia_fini().


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/pcmcia/if_xi.c

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



CVS commit: src/sys/arch/x86/pci

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sun Feb  2 05:27:21 UTC 2020

Modified Files:
src/sys/arch/x86/pci: if_vmx.c

Log Message:
- Adopt .
- Use ifmedia_fini().


To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/arch/x86/pci/if_vmx.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/arch/x86/pci/if_vmx.c
diff -u src/sys/arch/x86/pci/if_vmx.c:1.56 src/sys/arch/x86/pci/if_vmx.c:1.57
--- src/sys/arch/x86/pci/if_vmx.c:1.56	Wed Jan 29 08:43:30 2020
+++ src/sys/arch/x86/pci/if_vmx.c	Sun Feb  2 05:27:21 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vmx.c,v 1.56 2020/01/29 08:43:30 knakahara Exp $	*/
+/*	$NetBSD: if_vmx.c,v 1.57 2020/02/02 05:27:21 thorpej Exp $	*/
 /*	$OpenBSD: if_vmx.c,v 1.16 2014/01/22 06:04:17 brad Exp $	*/
 
 /*
@@ -19,7 +19,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.56 2020/01/29 08:43:30 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.57 2020/02/02 05:27:21 thorpej Exp $");
 
 #include 
 #include 
@@ -179,9 +179,11 @@ struct vmxnet3_comp_ring {
 };
 
 struct vmxnet3_txq_stats {
+#if 0
 	uint64_t vmtxs_opackets;	/* if_opackets */
 	uint64_t vmtxs_obytes;		/* if_obytes */
 	uint64_t vmtxs_omcasts;		/* if_omcasts */
+#endif
 	uint64_t vmtxs_csum;
 	uint64_t vmtxs_tso;
 	uint64_t vmtxs_full;
@@ -211,12 +213,14 @@ struct vmxnet3_txqueue {
 	struct evcnt vxtxq_defrag_failed;
 };
 
+#if 0
 struct vmxnet3_rxq_stats {
 	uint64_t vmrxs_ipackets;	/* if_ipackets */
 	uint64_t vmrxs_ibytes;		/* if_ibytes */
 	uint64_t vmrxs_iqdrops;		/* if_iqdrops */
 	uint64_t vmrxs_ierrors;		/* if_ierrors */
 };
+#endif
 
 struct vmxnet3_rxqueue {
 	kmutex_t *vxrxq_mtx;
@@ -225,7 +229,9 @@ struct vmxnet3_rxqueue {
 	struct mbuf *vxrxq_mtail;
 	struct vmxnet3_rxring vxrxq_cmd_ring[VMXNET3_RXRINGS_PERQ];
 	struct vmxnet3_comp_ring vxrxq_comp_ring;
+#if 0
 	struct vmxnet3_rxq_stats vxrxq_stats;
+#endif
 	struct vmxnet3_rxq_shared *vxrxq_rs;
 	char vxrxq_name[16];
 
@@ -670,10 +676,9 @@ vmxnet3_detach(device_t self, int flags)
 		callout_destroy(>vmx_tick);
 		VMXNET3_CORE_UNLOCK(sc);
 
-		ifmedia_delete_instance(>vmx_media, IFM_INST_ANY);
-
 		ether_ifdetach(ifp);
 		if_detach(ifp);
+		ifmedia_fini(>vmx_media);
 	}
 
 	vmxnet3_teardown_stats(sc);
@@ -2109,6 +2114,7 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 	struct vmxnet3_comp_ring *txc;
 	struct vmxnet3_txcompdesc *txcd;
 	struct vmxnet3_txbuf *txb;
+	struct ifnet *ifp;
 	struct mbuf *m;
 	u_int sop;
 	bool more = false;
@@ -2116,9 +2122,11 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 	sc = txq->vxtxq_sc;
 	txr = >vxtxq_cmd_ring;
 	txc = >vxtxq_comp_ring;
+	ifp = >vmx_ethercom.ec_if;
 
 	VMXNET3_TXQ_LOCK_ASSERT(txq);
 
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 	for (;;) {
 		if (limit-- == 0) {
 			more = true;
@@ -2144,10 +2152,10 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 			BUS_DMASYNC_POSTWRITE);
 			bus_dmamap_unload(sc->vmx_dmat, txb->vtxb_dmamap);
 
-			txq->vxtxq_stats.vmtxs_opackets++;
-			txq->vxtxq_stats.vmtxs_obytes += m->m_pkthdr.len;
+			if_statinc_ref(nsr, if_opackets);
+			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
 			if (m->m_flags & M_MCAST)
-txq->vxtxq_stats.vmtxs_omcasts++;
+if_statinc_ref(nsr, if_omcasts);
 
 			m_freem(m);
 			txb->vtxb_m = NULL;
@@ -2155,6 +2163,7 @@ vmxnet3_txq_eof(struct vmxnet3_txqueue *
 
 		txr->vxtxr_next = (txcd->eop_idx + 1) % txr->vxtxr_ndesc;
 	}
+	IF_STAT_PUTREF(ifp);
 
 	if (txr->vxtxr_head == txr->vxtxr_next)
 		txq->vxtxq_watchdog = 0;
@@ -2310,7 +2319,7 @@ vmxnet3_rxq_input(struct vmxnet3_rxqueue
 	ifp = >vmx_ethercom.ec_if;
 
 	if (rxcd->error) {
-		rxq->vxrxq_stats.vmrxs_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		m_freem(m);
 		return;
 	}
@@ -2320,8 +2329,10 @@ vmxnet3_rxq_input(struct vmxnet3_rxqueue
 	if (rxcd->vlan)
 		vlan_set_tag(m, rxcd->vtag);
 
-	rxq->vxrxq_stats.vmrxs_ipackets++;
-	rxq->vxrxq_stats.vmrxs_ibytes += m->m_pkthdr.len;
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+	if_statinc_ref(nsr, if_ipackets);
+	if_statadd_ref(nsr, if_ibytes, m->m_pkthdr.len);
+	IF_STAT_PUTREF(ifp);
 
 	if_percpuq_enqueue(ifp->if_percpuq, m);
 }
@@ -2412,7 +2423,7 @@ vmxnet3_rxq_eof(struct vmxnet3_rxqueue *
 			}
 
 			if (vmxnet3_newbuf(sc, rxq, rxr) != 0) {
-rxq->vxrxq_stats.vmrxs_iqdrops++;
+if_statinc(ifp, if_iqdrops);
 vmxnet3_rxq_eof_discard(rxq, rxr, idx);
 if (!rxcd->eop)
 	vmxnet3_rxq_discard_chain(rxq);
@@ -2431,7 +2442,7 @@ vmxnet3_rxq_eof(struct vmxnet3_rxqueue *
 			KASSERT(m_head != NULL);
 
 			if (vmxnet3_newbuf(sc, rxq, rxr) != 0) {
-rxq->vxrxq_stats.vmrxs_iqdrops++;
+if_statinc(ifp, if_iqdrops);
 vmxnet3_rxq_eof_discard(rxq, rxr, idx);
 if (!rxcd->eop)
 	vmxnet3_rxq_discard_chain(rxq);
@@ -3385,45 +3396,7 @@ vmxnet3_ioctl(struct ifnet *ifp, u_long 
 		}
 		break;
 	}
-	case SIOCGIFDATA:
-	case SIOCZIFDATA:
-		ifp->if_ipackets = 0;
-		ifp->if_ibytes = 0;
-		

CVS commit: src/sys/arch/x86/pci

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sun Feb  2 05:27:21 UTC 2020

Modified Files:
src/sys/arch/x86/pci: if_vmx.c

Log Message:
- Adopt .
- Use ifmedia_fini().


To generate a diff of this commit:
cvs rdiff -u -r1.56 -r1.57 src/sys/arch/x86/pci/if_vmx.c

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



CVS commit: src/usr.bin/netstat

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sun Feb  2 03:41:12 UTC 2020

Modified Files:
src/usr.bin/netstat: if.c

Log Message:
Update for per-cpu interface statistics.


To generate a diff of this commit:
cvs rdiff -u -r1.95 -r1.96 src/usr.bin/netstat/if.c

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



CVS commit: src/usr.bin/netstat

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sun Feb  2 03:41:12 UTC 2020

Modified Files:
src/usr.bin/netstat: if.c

Log Message:
Update for per-cpu interface statistics.


To generate a diff of this commit:
cvs rdiff -u -r1.95 -r1.96 src/usr.bin/netstat/if.c

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

Modified files:

Index: src/usr.bin/netstat/if.c
diff -u src/usr.bin/netstat/if.c:1.95 src/usr.bin/netstat/if.c:1.96
--- src/usr.bin/netstat/if.c:1.95	Wed Jul 11 07:46:20 2018
+++ src/usr.bin/netstat/if.c	Sun Feb  2 03:41:12 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.95 2018/07/11 07:46:20 msaitoh Exp $	*/
+/*	$NetBSD: if.c,v 1.96 2020/02/02 03:41:12 thorpej Exp $	*/
 
 /*
  * Copyright (c) 1983, 1988, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "from: @(#)if.c	8.2 (Berkeley) 2/21/94";
 #else
-__RCSID("$NetBSD: if.c,v 1.95 2018/07/11 07:46:20 msaitoh Exp $");
+__RCSID("$NetBSD: if.c,v 1.96 2020/02/02 03:41:12 thorpej Exp $");
 #endif
 #endif /* not lint */
 
@@ -289,9 +289,34 @@ union ifaddr_u {
 };
 
 static void
+ifnet_to_ifdata_kvm(const struct ifnet * const ifp, struct if_data * const ifd)
+{
+
+	/*
+	 * Interface statistics are no longer kept in struct ifnet,
+	 * and thus an if_data is no longer embedded in struct ifnet.
+	 * We cannot read stats via kvm without chasing per-cpu data,
+	 * and maybe someday we could do that.  But for now, this is
+	 * what we have.
+	 *
+	 * Just copy the fields that do exist.
+	 */
+	memset(ifd, 0, sizeof(*ifd));
+	ifd->ifi_type = ifp->if_type;
+	ifd->ifi_addrlen = ifp->if_addrlen;
+	ifd->ifi_hdrlen = ifp->if_hdrlen;
+	ifd->ifi_link_state = ifp->if_link_state;
+	ifd->ifi_mtu = ifp->if_mtu;
+	ifd->ifi_metric = ifp->if_metric;
+	ifd->ifi_baudrate = ifp->if_baudrate;
+	ifd->ifi_lastchange = ifp->if_lastchange;
+}
+
+static void
 intpr_kvm(u_long ifnetaddr, void (*pfunc)(const char *))
 {
 	struct ifnet ifnet;
+	struct if_data ifd;
 	union ifaddr_u ifaddr;
 	u_long ifaddraddr;
 	struct ifnet_head ifhead;	/* TAILQ_HEAD */
@@ -358,8 +383,9 @@ intpr_kvm(u_long ifnetaddr, void (*pfunc
 			cp = (CP(ifaddr.ifa.ifa_addr) - CP(ifaddraddr)) +
 			CP();
 			sa = (struct sockaddr *)cp;
+			ifnet_to_ifdata_kvm(, );
 			print_addr(ifnet.if_index, sa, (void *),
-			_data, );
+			, );
 		}
 		ifaddraddr = (u_long)ifaddr.ifa.ifa_list.tqe_next;
 	}
@@ -787,6 +813,7 @@ sidewaysintpr_kvm(unsigned interval, u_l
 	sigset_t emptyset;
 	sigset_t noalrm;
 	struct ifnet ifnet;
+	struct if_data ifd;
 	u_long firstifnet;
 	struct iftot *ip, *total;
 	unsigned line;
@@ -906,53 +933,54 @@ loop:
 			off = 0;
 			continue;
 		}
+		ifnet_to_ifdata_kvm(, );
 		if (ip == interesting) {
 			if (bflag) {
 char humbuf[HUMBUF_SIZE];
 
 if (hflag && humanize_number(humbuf,
 sizeof(humbuf),
-ifnet.if_ibytes - ip->ift_ib, "",
+ifd.ifi_ibytes - ip->ift_ib, "",
 HN_AUTOSCALE, HN_NOSPACE | HN_B) > 0)
 	printf("%10s %8.8s ", humbuf, " ");
 else
 	printf("%10llu %8.8s ", 
 	(unsigned long long)
-	(ifnet.if_ibytes-ip->ift_ib), " ");
+	(ifd.ifi_ibytes-ip->ift_ib), " ");
 
 if (hflag && humanize_number(humbuf,
 sizeof(humbuf),
-ifnet.if_obytes - ip->ift_ob, "",
+ifd.ifi_obytes - ip->ift_ob, "",
 HN_AUTOSCALE, HN_NOSPACE | HN_B) > 0)
 	printf("%10s %5.5s", humbuf, " ");
 else
 	printf("%10llu %5.5s", 
 	(unsigned long long)
-	(ifnet.if_obytes-ip->ift_ob), " ");
+	(ifd.ifi_obytes-ip->ift_ob), " ");
 			} else {
 printf("%8llu %5llu %8llu %5llu %5llu",
 (unsigned long long)
-	(ifnet.if_ipackets - ip->ift_ip),
+	(ifd.ifi_ipackets - ip->ift_ip),
 (unsigned long long)
-	(ifnet.if_ierrors - ip->ift_ie),
+	(ifd.ifi_ierrors - ip->ift_ie),
 (unsigned long long)
-	(ifnet.if_opackets - ip->ift_op),
+	(ifd.ifi_opackets - ip->ift_op),
 (unsigned long long)
-	(ifnet.if_oerrors - ip->ift_oe),
+	(ifd.ifi_oerrors - ip->ift_oe),
 (unsigned long long)
-	(ifnet.if_collisions - ip->ift_co));
+	(ifd.ifi_collisions - ip->ift_co));
 			}
 			if (dflag)
 printf(" %5" PRIu64,
 	ifnet.if_snd.ifq_drops - ip->ift_dr);
 		}
-		ip->ift_ip = ifnet.if_ipackets;
-		ip->ift_ib = ifnet.if_ibytes;
-		ip->ift_ie = ifnet.if_ierrors;
-		ip->ift_op = ifnet.if_opackets;
-		ip->ift_ob = ifnet.if_obytes;
-		ip->ift_oe = ifnet.if_oerrors;
-		ip->ift_co = ifnet.if_collisions;
+		ip->ift_ip = ifd.ifi_ipackets;
+		ip->ift_ib = ifd.ifi_ibytes;
+		ip->ift_ie = ifd.ifi_ierrors;
+		ip->ift_op = ifd.ifi_opackets;
+		ip->ift_ob = ifd.ifi_obytes;
+		ip->ift_oe = ifd.ifi_oerrors;
+		ip->ift_co = ifd.ifi_collisions;
 		ip->ift_dr = ifnet.if_snd.ifq_drops;
 		sum->ift_ip += ip->ift_ip;
 		sum->ift_ib += ip->ift_ib;



CVS commit: src/sys/rump/net/lib/libvirtif

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 22:45:02 UTC 2020

Modified Files:
src/sys/rump/net/lib/libvirtif: if_virt.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/rump/net/lib/libvirtif/if_virt.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/rump/net/lib/libvirtif/if_virt.c
diff -u src/sys/rump/net/lib/libvirtif/if_virt.c:1.57 src/sys/rump/net/lib/libvirtif/if_virt.c:1.58
--- src/sys/rump/net/lib/libvirtif/if_virt.c:1.57	Tue Jun 26 06:48:03 2018
+++ src/sys/rump/net/lib/libvirtif/if_virt.c	Sat Feb  1 22:45:01 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_virt.c,v 1.57 2018/06/26 06:48:03 msaitoh Exp $	*/
+/*	$NetBSD: if_virt.c,v 1.58 2020/02/01 22:45:01 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2008, 2013 Antti Kantee.  All Rights Reserved.
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_virt.c,v 1.57 2018/06/26 06:48:03 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_virt.c,v 1.58 2020/02/01 22:45:01 thorpej Exp $");
 
 #include 
 #include 
@@ -325,7 +325,7 @@ virtif_start(struct ifnet *ifp)
 		VIFHYPER_SEND(sc->sc_viu, io, i);
 
 		m_freem(m0);
-		ifp->if_opackets++;
+		if_statinc(ifp, if_opackets);
 	}
 
 	ifp->if_flags &= ~IFF_OACTIVE;



CVS commit: src/sys/rump/net/lib/libvirtif

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 22:45:02 UTC 2020

Modified Files:
src/sys/rump/net/lib/libvirtif: if_virt.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.57 -r1.58 src/sys/rump/net/lib/libvirtif/if_virt.c

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



CVS commit: src/sys/rump/net/lib/libshmif

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 22:38:31 UTC 2020

Modified Files:
src/sys/rump/net/lib/libshmif: if_shmem.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.76 -r1.77 src/sys/rump/net/lib/libshmif/if_shmem.c

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



CVS commit: src/sys/rump/net/lib/libshmif

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 22:38:31 UTC 2020

Modified Files:
src/sys/rump/net/lib/libshmif: if_shmem.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.76 -r1.77 src/sys/rump/net/lib/libshmif/if_shmem.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/rump/net/lib/libshmif/if_shmem.c
diff -u src/sys/rump/net/lib/libshmif/if_shmem.c:1.76 src/sys/rump/net/lib/libshmif/if_shmem.c:1.77
--- src/sys/rump/net/lib/libshmif/if_shmem.c:1.76	Wed Dec 12 01:51:32 2018
+++ src/sys/rump/net/lib/libshmif/if_shmem.c	Sat Feb  1 22:38:31 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_shmem.c,v 1.76 2018/12/12 01:51:32 rin Exp $	*/
+/*	$NetBSD: if_shmem.c,v 1.77 2020/02/01 22:38:31 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2009, 2010 Antti Kantee.  All Rights Reserved.
@@ -28,7 +28,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_shmem.c,v 1.76 2018/12/12 01:51:32 rin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_shmem.c,v 1.77 2020/02/01 22:38:31 thorpej Exp $");
 
 #include 
 #include 
@@ -561,7 +561,7 @@ shmif_start(struct ifnet *ifp)
 
 		m = ether_sw_offload_tx(ifp, m);
 		if (m == NULL) {
-			ifp->if_oerrors++;
+			if_statinc(ifp, if_oerrors);
 			break;
 		}
 
@@ -630,7 +630,7 @@ shmif_snd(struct ifnet *ifp, struct mbuf
 	shmif_unlockbus(busmem);
 
 	m_freem(m0);
-	ifp->if_opackets++;
+	if_statinc(ifp, if_opackets);
 
 	DPRINTF(("shmif_start: send %d bytes at off %d\n", pktsize,
 	busmem->shm_last));



CVS commit: src/sys/external/bsd/common/linux

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 22:38:05 UTC 2020

Modified Files:
src/sys/external/bsd/common/linux: linux_work.c

Log Message:
Fix abuse of TAILQ_CONCAT.

Other parts of this expect that the entries will be on wq->wq_queue
or wq->wq_dqueue, so we can't just move a batch of entries onto a
temporary queue.  Instead, use a marker node to delimit when the
batch ends.

XXX pullup


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/sys/external/bsd/common/linux/linux_work.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/external/bsd/common/linux/linux_work.c
diff -u src/sys/external/bsd/common/linux/linux_work.c:1.44 src/sys/external/bsd/common/linux/linux_work.c:1.45
--- src/sys/external/bsd/common/linux/linux_work.c:1.44	Tue Mar 19 08:17:46 2019
+++ src/sys/external/bsd/common/linux/linux_work.c	Sat Feb  1 22:38:05 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_work.c,v 1.44 2019/03/19 08:17:46 ryo Exp $	*/
+/*	$NetBSD: linux_work.c,v 1.45 2020/02/01 22:38:05 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.44 2019/03/19 08:17:46 ryo Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_work.c,v 1.45 2020/02/01 22:38:05 riastradh Exp $");
 
 #include 
 #include 
@@ -348,8 +348,8 @@ static void __dead
 linux_workqueue_thread(void *cookie)
 {
 	struct workqueue_struct *const wq = cookie;
-	struct work_head queue, dqueue;
-	struct work_head *const q[2] = { ,  };
+	struct work_head *const q[2] = { >wq_queue, >wq_dqueue };
+	struct work_struct marker, *work;
 	unsigned i;
 
 	lwp_setspecific(workqueue_key, wq);
@@ -368,22 +368,22 @@ linux_workqueue_thread(void *cookie)
 			continue;
 		}
 
-		/* Grab a batch of work off the queue.  */
+		/*
+		 * Start a batch of work.  Use a marker to delimit when
+		 * the batch ends so we can advance the generation
+		 * after the batch.
+		 */
 		SDT_PROBE1(sdt, linux, work, batch__start,  wq);
-		TAILQ_INIT();
-		TAILQ_INIT();
-		TAILQ_CONCAT(, >wq_queue, work_entry);
-		TAILQ_CONCAT(, >wq_dqueue, work_entry);
-
-		/* Process each work item in the batch.  */
 		for (i = 0; i < 2; i++) {
-			while (!TAILQ_EMPTY(q[i])) {
-struct work_struct *work = TAILQ_FIRST(q[i]);
+			if (TAILQ_EMPTY(q[i]))
+continue;
+			TAILQ_INSERT_TAIL(q[i], , work_entry);
+			while ((work = TAILQ_FIRST(q[i])) != ) {
 void (*func)(struct work_struct *);
 
 KASSERT(work_queue(work) == wq);
 KASSERT(work_claimed(work, wq));
-KASSERTMSG((q[i] !=  ||
+KASSERTMSG((q[i] != >wq_dqueue ||
 	container_of(work, struct delayed_work,
 	work)->dw_state ==
 	DELAYED_WORK_IDLE),
@@ -407,6 +407,7 @@ linux_workqueue_thread(void *cookie)
 wq->wq_current_work = NULL;
 cv_broadcast(>wq_cv);
 			}
+			TAILQ_REMOVE(q[i], , work_entry);
 		}
 
 		/* Notify flush that we've completed a batch of work.  */



CVS commit: src/sys/external/bsd/common/linux

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 22:38:05 UTC 2020

Modified Files:
src/sys/external/bsd/common/linux: linux_work.c

Log Message:
Fix abuse of TAILQ_CONCAT.

Other parts of this expect that the entries will be on wq->wq_queue
or wq->wq_dqueue, so we can't just move a batch of entries onto a
temporary queue.  Instead, use a marker node to delimit when the
batch ends.

XXX pullup


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/sys/external/bsd/common/linux/linux_work.c

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



CVS commit: src/sys/net

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:59:40 UTC 2020

Modified Files:
src/sys/net: if.h

Log Message:
Make if_stats competely opaque to user-space.


To generate a diff of this commit:
cvs rdiff -u -r1.279 -r1.280 src/sys/net/if.h

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.h
diff -u src/sys/net/if.h:1.279 src/sys/net/if.h:1.280
--- src/sys/net/if.h:1.279	Sat Feb  1 21:11:10 2020
+++ src/sys/net/if.h	Sat Feb  1 21:59:39 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.h,v 1.279 2020/02/01 21:11:10 thorpej Exp $	*/
+/*	$NetBSD: if.h,v 1.280 2020/02/01 21:59:39 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -291,7 +291,11 @@ typedef struct ifnet {
 	uint64_t	if_metric;	/* :? routing metric (external only) */
 	uint64_t	if_baudrate;	/* :? linespeed */
 	struct timespec	if_lastchange;	/* :? last operational state change */
+#ifdef _KERNEL
 	percpu_t	*if_stats;	/* :: statistics */
+#else
+	void		*if_stats;	/* opaque to user-space */
+#endif /* _KERNEL */
 #else /* ! __IF_STATS_PERCPU */
 	struct if_data	if_data;	/* ?: statistics and other data */
 #endif /* __IF_STATS_PERCPU */



CVS commit: src/sys/net

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:59:40 UTC 2020

Modified Files:
src/sys/net: if.h

Log Message:
Make if_stats competely opaque to user-space.


To generate a diff of this commit:
cvs rdiff -u -r1.279 -r1.280 src/sys/net/if.h

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



CVS commit: src/sys/arch/arm/gemini

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:46:49 UTC 2020

Modified Files:
src/sys/arch/arm/gemini: if_gmc.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/gemini/if_gmc.c

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



CVS commit: src/sys/arch/arm/gemini

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:46:49 UTC 2020

Modified Files:
src/sys/arch/arm/gemini: if_gmc.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/gemini/if_gmc.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/arch/arm/gemini/if_gmc.c
diff -u src/sys/arch/arm/gemini/if_gmc.c:1.12 src/sys/arch/arm/gemini/if_gmc.c:1.13
--- src/sys/arch/arm/gemini/if_gmc.c:1.12	Tue May 28 08:59:33 2019
+++ src/sys/arch/arm/gemini/if_gmc.c	Sat Feb  1 21:46:49 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gmc.c,v 1.12 2019/05/28 08:59:33 msaitoh Exp $ */
+/* $NetBSD: if_gmc.c,v 1.13 2020/02/01 21:46:49 thorpej Exp $ */
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -47,7 +47,7 @@
 #include 
 #include 
 
-__KERNEL_RCSID(0, "$NetBSD: if_gmc.c,v 1.12 2019/05/28 08:59:33 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gmc.c,v 1.13 2020/02/01 21:46:49 thorpej Exp $");
 
 #define	MAX_TXSEG	32
 
@@ -134,7 +134,7 @@ gmc_txqueue(struct gmc_softc *sc, gmac_h
 		error);
 		gmac_mapcache_put(hwq->hwq_hqm->hqm_mc, map);
 		m_freem(m);
-		sc->sc_if.if_oerrors++;
+		if_statinc(>sc_if, if_oerrors);
 		return true;
 	}
 	KASSERT(map->dm_nsegs > 0);
@@ -702,7 +702,7 @@ gmc_intr(void *arg)
 			gmac_swfree_min_update(psc);
 		}
 #endif
-		sc->sc_if.if_ierrors++;
+		if_statinc(>sc_if, if_ierrors);
 	}
 	if (status & INT4_RGMII_STSCHG) {
 		mii_pollstat(>sc_mii);



CVS commit: src/sys/arch/arm/gemini

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:45:11 UTC 2020

Modified Files:
src/sys/arch/arm/gemini: if_gpn.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/gemini/if_gpn.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/arch/arm/gemini/if_gpn.c
diff -u src/sys/arch/arm/gemini/if_gpn.c:1.13 src/sys/arch/arm/gemini/if_gpn.c:1.14
--- src/sys/arch/arm/gemini/if_gpn.c:1.13	Wed Oct 30 10:12:37 2019
+++ src/sys/arch/arm/gemini/if_gpn.c	Sat Feb  1 21:45:11 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gpn.c,v 1.13 2019/10/30 10:12:37 msaitoh Exp $ */
+/* $NetBSD: if_gpn.c,v 1.14 2020/02/01 21:45:11 thorpej Exp $ */
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -32,7 +32,7 @@
 
 #include "opt_gemini.h"
 
-__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.13 2019/10/30 10:12:37 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.14 2020/02/01 21:45:11 thorpej Exp $");
 
 #include 
 #include 
@@ -252,12 +252,12 @@ gpn_process_data(struct gpn_softc *sc, c
 	bool ok;
 
 	if ((subtype & GPN_SOF) == 0 && sc->sc_rxmbuf == NULL) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		goto out;
 	}
 
 	if ((subtype & GPN_SOF) && sc->sc_rxmbuf != NULL) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		m_freem(sc->sc_rxmbuf);
 		sc->sc_rxmbuf = NULL;
 	}
@@ -266,13 +266,13 @@ gpn_process_data(struct gpn_softc *sc, c
 		struct mbuf *m;
 		MGETHDR(m, M_DONTWAIT, MT_DATA);
 		if (m == NULL) {
-			ifp->if_ierrors++;
+			if_statinc(ifp, if_ierrors);
 			goto out;
 		}
 		if (pktlen > MHLEN - 2) {
 			MCLGET(m, M_DONTWAIT);
 			if ((m->m_flags & M_EXT) == 0) {
-ifp->if_ierrors++;
+if_statinc(ifp, if_ierrors);
 m_free(m);
 goto out;
 			}
@@ -287,7 +287,7 @@ gpn_process_data(struct gpn_softc *sc, c
 	if (ok && gd->gd_addr2 && gd->gd_len2)
 		ok = gpn_add_data(sc, gd->gd_addr2, gd->gd_len2);
 	if (!ok) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		m_freem(sc->sc_rxmbuf);
 		sc->sc_rxmbuf = NULL;
 		goto out;
@@ -411,6 +411,7 @@ gpn_ifstart(struct ifnet *ifp)
 		gd.gd_tag = IPM_TAG_GPN;
 		gd.gd_subtype = GPN_SOF;
 		gd.gd_pktlen64 = (m->m_pkthdr.len + 63) >> 6;
+		net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
 		for (; m != NULL; m = m0) {
 			struct gpn_txinfo *ti;
 			bus_dmamap_t map;
@@ -442,7 +443,7 @@ gpn_ifstart(struct ifnet *ifp)
 			mtod(m, void *), m->m_len, NULL,
 			BUS_DMA_READ | BUS_DMA_NOWAIT);
 			if (error) {
-ifp->if_oerrors++;
+if_statinc_ref(nsr, if_oerrors);
 m_freem(m);
 break;
 			}
@@ -465,9 +466,10 @@ gpn_ifstart(struct ifnet *ifp)
 			gd.gd_txid = id;
 			ti->ti_mbuf = m;
 			last_gd = 
-			ifp->if_obytes += m->m_len;
+			if_statadd_ref(nsr, if_obytes, m->m_len);
 		}
-		ifp->if_opackets++;
+		if_statinc_ref(nsr, if_opackets);
+		IF_STAT_PUTREF(ifp);
 
 		/*
 		 * XXX XXX 'last_gd' could be NULL
@@ -608,8 +610,6 @@ gpn_ifstop(struct ifnet *ifp, int disabl
 static int
 gpn_ifioctl(struct ifnet *ifp, u_long cmd, void *data)
 {
-	struct gpn_softc * const sc = ifp->if_softc;
-	struct ifreq * const ifr = data;
 	struct ifaliasreq * const ifra = data;
 	int s, error;
 



CVS commit: src/sys/arch/arm/gemini

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:45:11 UTC 2020

Modified Files:
src/sys/arch/arm/gemini: if_gpn.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/arch/arm/gemini/if_gpn.c

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



Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Kamil Rytarowski
Good idea. It could be checked quicker... however I presume that
t1->pt_magic + t1->pt_magic already crash on invalid t1/t2 pointers as
the argument with condition is evaluated.

Ryo, you might check:
$ export PTHREAD_DIAGASSERT=ae
$ firefox

It should create a coredump for investigation.

According to POSIX
(https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_equal.html)
passing invalid parameters is UB.

GLIBC, Illumos and all other BSDs (+ older NetBSD) have no sanity check
in pthread_equal(3). Apparently we are the first ones to notice the bug.

On 01.02.2020 21:18, Andrew Doran wrote:
> Hmm.  Was there not originally an environment variable to control this
> behaviour, since many applications are buggy?
> 
> Andrew
> 
> On Sun, Feb 02, 2020 at 01:01:49AM +0900, Ryo ONODERA wrote:
>> Hi,
>>
>> pthread__error()s in pthread_equal() cause segfault
>> during start of pkgsrc/www/firefox-72.0.2.
>>
>> Without pthread__error()s, www/firefox works fine
>> like as follows.
>> However I have no idea why I get segfaults.
>>
>> Could you take a look at this problem?
>>
>> Index: lib/libpthread/pthread.c
>> ===
>> RCS file: /cvsroot/src/lib/libpthread/pthread.c,v
>> retrieving revision 1.162
>> diff -u -r1.162 pthread.c
>> --- lib/libpthread/pthread.c 29 Jan 2020 17:11:57 -  1.162
>> +++ lib/libpthread/pthread.c 1 Feb 2020 15:58:03 -
>> @@ -770,11 +770,13 @@
>>  if (__predict_false(__uselibcstub))
>>  return __libc_thr_equal_stub(t1, t2);
>>  
>> +#if 0
>>  pthread__error(EINVAL, "Invalid thread",
>>  t1->pt_magic == PT_MAGIC);
>>  
>>  pthread__error(EINVAL, "Invalid thread",
>>  t2->pt_magic == PT_MAGIC);
>> +#endif
>>  
>>  /* Nothing special here. */
>>  return (t1 == t2);
>> @@ -1108,7 +1110,7 @@
>>  {
>>  char buf[1024];
>>  size_t len;
>> -
>> +
>>  if (pthread__diagassert == 0)
>>  return;
>>  
>>
>>
>> "Kamil Rytarowski"  writes:
>>
>>> Module Name:src
>>> Committed By:   kamil
>>> Date:   Wed Jan 29 16:03:44 UTC 2020
>>>
>>> Modified Files:
>>> src/lib/libpthread: pthread.c pthread_getcpuclockid.c
>>>
>>> Log Message:
>>> Chack thread->pt_magic with PT_MAGIC promptly
>>>
>>> Rearrange some checks to avoid verifying pthread_t after using it.
>>>
>>>
>>> To generate a diff of this commit:
>>> cvs rdiff -u -r1.160 -r1.161 src/lib/libpthread/pthread.c
>>> cvs rdiff -u -r1.2 -r1.3 src/lib/libpthread/pthread_getcpuclockid.c
>>>
>>> Please note that diffs are not public domain; they are subject to the
>>> copyright notices on the relevant files.
>>>
>>
>> -- 
>> Ryo ONODERA // r...@tetera.org
>> PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3




signature.asc
Description: OpenPGP digital signature


CVS commit: src/doc

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:14:45 UTC 2020

Modified Files:
src/doc: CHANGES

Log Message:
Note per-cpu network interface statistics.


To generate a diff of this commit:
cvs rdiff -u -r1.2646 -r1.2647 src/doc/CHANGES

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

Modified files:

Index: src/doc/CHANGES
diff -u src/doc/CHANGES:1.2646 src/doc/CHANGES:1.2647
--- src/doc/CHANGES:1.2646	Wed Jan 29 19:04:12 2020
+++ src/doc/CHANGES	Sat Feb  1 21:14:44 2020
@@ -1,4 +1,4 @@
-# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.2646 $>
+# LIST OF CHANGES FROM LAST RELEASE:			<$Revision: 1.2647 $>
 #
 #
 # [Note: This file does not mention every change made to the NetBSD source tree.
@@ -139,3 +139,5 @@ Changes from NetBSD 9.0 to NetBSD 10.0:
 	dhcpcd(8): Import dhcpcd-8.1.6 [roy 20200127]
 	openresolv(8): Import openresolv-3.10.0 [roy 20200127]
 	urio(4): Removed from the tree. [maya 20200129]
+	Collect network interface statistics using per-cpu counters
+		that are collated when they are queried. [thorpej 20200201]



CVS commit: src/doc

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:14:45 UTC 2020

Modified Files:
src/doc: CHANGES

Log Message:
Note per-cpu network interface statistics.


To generate a diff of this commit:
cvs rdiff -u -r1.2646 -r1.2647 src/doc/CHANGES

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



CVS commit: src/sys/sys

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:12:13 UTC 2020

Modified Files:
src/sys/sys: param.h

Log Message:
NetBSD 9.99.45 -- struct ifnet changed, per-cpu ifnet stats.


To generate a diff of this commit:
cvs rdiff -u -r1.647 -r1.648 src/sys/sys/param.h

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



CVS commit: src/sys/sys

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:12:13 UTC 2020

Modified Files:
src/sys/sys: param.h

Log Message:
NetBSD 9.99.45 -- struct ifnet changed, per-cpu ifnet stats.


To generate a diff of this commit:
cvs rdiff -u -r1.647 -r1.648 src/sys/sys/param.h

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

Modified files:

Index: src/sys/sys/param.h
diff -u src/sys/sys/param.h:1.647 src/sys/sys/param.h:1.648
--- src/sys/sys/param.h:1.647	Wed Jan 29 05:50:34 2020
+++ src/sys/sys/param.h	Sat Feb  1 21:12:13 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: param.h,v 1.647 2020/01/29 05:50:34 thorpej Exp $	*/
+/*	$NetBSD: param.h,v 1.648 2020/02/01 21:12:13 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -67,7 +67,7 @@
  *	2.99.9		(299000900)
  */
 
-#define	__NetBSD_Version__	999004400	/* NetBSD 9.99.44 */
+#define	__NetBSD_Version__	999004500	/* NetBSD 9.99.45 */
 
 #define __NetBSD_Prereq__(M,m,p) (M) * 1) + \
 (m) * 100) + (p) * 100) <= __NetBSD_Version__)



CVS commit: src/sys/net

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:11:10 UTC 2020

Modified Files:
src/sys/net: if.h

Log Message:
Flip the switch to the per-cpu implementation in .  Leave
the conditional in place for a time in case serious problems are discovered,
so that the Old Way can be re-enabled quickly.  After some time, the Old
Way will be removed completely.


To generate a diff of this commit:
cvs rdiff -u -r1.278 -r1.279 src/sys/net/if.h

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.h
diff -u src/sys/net/if.h:1.278 src/sys/net/if.h:1.279
--- src/sys/net/if.h:1.278	Wed Jan 29 03:16:28 2020
+++ src/sys/net/if.h	Sat Feb  1 21:11:10 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.h,v 1.278 2020/01/29 03:16:28 thorpej Exp $	*/
+/*	$NetBSD: if.h,v 1.279 2020/02/01 21:11:10 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001 The NetBSD Foundation, Inc.
@@ -63,6 +63,12 @@
 #ifndef _NET_IF_H_
 #define _NET_IF_H_
 
+/*
+ * Temporary, to allow for a quick disable if problems are discovered
+ * during a transition period.
+ */
+#define	__IF_STATS_PERCPU
+
 #if !defined(_KERNEL) && !defined(_STANDALONE)
 #include 
 #endif



CVS commit: src/sys/net

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 21:11:10 UTC 2020

Modified Files:
src/sys/net: if.h

Log Message:
Flip the switch to the per-cpu implementation in .  Leave
the conditional in place for a time in case serious problems are discovered,
so that the Old Way can be re-enabled quickly.  After some time, the Old
Way will be removed completely.


To generate a diff of this commit:
cvs rdiff -u -r1.278 -r1.279 src/sys/net/if.h

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



CVS commit: src/sys/net

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 20:56:17 UTC 2020

Modified Files:
src/sys/net: if_media.c if_media.h

Log Message:
- Add an ifmedia_fini() routine, to free resources assocated with
  an ifmedia.  Currently calls ifmedia_removeall().  All drivers
  that call ifmedia_init() and support detach should call this
  routine.
- In ifmedia_delete_instance(), set ifm->ifm_cur to NULL and
  ifm->ifm_media to IFM_NONE when removing / freeing that entry,
  not simply when we've been asked to delete every media instance.


To generate a diff of this commit:
cvs rdiff -u -r1.50 -r1.51 src/sys/net/if_media.c
cvs rdiff -u -r1.68 -r1.69 src/sys/net/if_media.h

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_media.c
diff -u src/sys/net/if_media.c:1.50 src/sys/net/if_media.c:1.51
--- src/sys/net/if_media.c:1.50	Fri Jan 31 00:49:18 2020
+++ src/sys/net/if_media.c	Sat Feb  1 20:56:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_media.c,v 1.50 2020/01/31 00:49:18 thorpej Exp $	*/
+/*	$NetBSD: if_media.c,v 1.51 2020/02/01 20:56:16 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_media.c,v 1.50 2020/01/31 00:49:18 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_media.c,v 1.51 2020/02/01 20:56:16 thorpej Exp $");
 
 #include 
 #include 
@@ -122,6 +122,16 @@ ifmedia_init(struct ifmedia *ifm, int do
 	ifm->ifm_status = status_callback;
 }
 
+/*
+ * Free resources associated with an ifmedia.
+ */
+void
+ifmedia_fini(struct ifmedia *ifm)
+{
+
+	ifmedia_removeall(ifm);
+}
+
 int
 ifmedia_change(struct ifmedia *ifm, struct ifnet *ifp)
 {
@@ -423,14 +433,14 @@ ifmedia_delete_instance(struct ifmedia *
 	TAILQ_FOREACH_SAFE(ife, >ifm_list, ifm_list, nife) {
 		if (inst == IFM_INST_ANY ||
 		inst == IFM_INST(ife->ifm_media)) {
+			if (ifm->ifm_cur == ife) {
+ifm->ifm_cur = NULL;
+ifm->ifm_media = IFM_NONE;
+			}
 			TAILQ_REMOVE(>ifm_list, ife, ifm_list);
 			kmem_free(ife, sizeof(*ife));
 		}
 	}
-	if (inst == IFM_INST_ANY) {
-		ifm->ifm_cur = NULL;
-		ifm->ifm_media = IFM_NONE;
-	}
 }
 
 void

Index: src/sys/net/if_media.h
diff -u src/sys/net/if_media.h:1.68 src/sys/net/if_media.h:1.69
--- src/sys/net/if_media.h:1.68	Thu Dec  5 05:29:27 2019
+++ src/sys/net/if_media.h	Sat Feb  1 20:56:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_media.h,v 1.68 2019/12/05 05:29:27 msaitoh Exp $	*/
+/*	$NetBSD: if_media.h,v 1.69 2020/02/01 20:56:16 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2000, 2001 The NetBSD Foundation, Inc.
@@ -900,6 +900,9 @@ struct ifmedia {
 /* Initialize an interface's struct if_media field. */
 void	ifmedia_init(struct ifmedia *, int, ifm_change_cb_t, ifm_stat_cb_t);
 
+/* Release resourecs associated with an ifmedia. */
+void	ifmedia_fini(struct ifmedia *);
+
 int	ifmedia_change(struct ifmedia *, struct ifnet *);
 
 /* Add one supported medium to a struct ifmedia. */



CVS commit: src/sys/net

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 20:56:17 UTC 2020

Modified Files:
src/sys/net: if_media.c if_media.h

Log Message:
- Add an ifmedia_fini() routine, to free resources assocated with
  an ifmedia.  Currently calls ifmedia_removeall().  All drivers
  that call ifmedia_init() and support detach should call this
  routine.
- In ifmedia_delete_instance(), set ifm->ifm_cur to NULL and
  ifm->ifm_media to IFM_NONE when removing / freeing that entry,
  not simply when we've been asked to delete every media instance.


To generate a diff of this commit:
cvs rdiff -u -r1.50 -r1.51 src/sys/net/if_media.c
cvs rdiff -u -r1.68 -r1.69 src/sys/net/if_media.h

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



Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Andrew Doran
Hmm.  Was there not originally an environment variable to control this
behaviour, since many applications are buggy?

Andrew

On Sun, Feb 02, 2020 at 01:01:49AM +0900, Ryo ONODERA wrote:
> Hi,
> 
> pthread__error()s in pthread_equal() cause segfault
> during start of pkgsrc/www/firefox-72.0.2.
> 
> Without pthread__error()s, www/firefox works fine
> like as follows.
> However I have no idea why I get segfaults.
> 
> Could you take a look at this problem?
> 
> Index: lib/libpthread/pthread.c
> ===
> RCS file: /cvsroot/src/lib/libpthread/pthread.c,v
> retrieving revision 1.162
> diff -u -r1.162 pthread.c
> --- lib/libpthread/pthread.c  29 Jan 2020 17:11:57 -  1.162
> +++ lib/libpthread/pthread.c  1 Feb 2020 15:58:03 -
> @@ -770,11 +770,13 @@
>   if (__predict_false(__uselibcstub))
>   return __libc_thr_equal_stub(t1, t2);
>  
> +#if 0
>   pthread__error(EINVAL, "Invalid thread",
>   t1->pt_magic == PT_MAGIC);
>  
>   pthread__error(EINVAL, "Invalid thread",
>   t2->pt_magic == PT_MAGIC);
> +#endif
>  
>   /* Nothing special here. */
>   return (t1 == t2);
> @@ -1108,7 +1110,7 @@
>  {
>   char buf[1024];
>   size_t len;
> - 
> +
>   if (pthread__diagassert == 0)
>   return;
>  
> 
> 
> "Kamil Rytarowski"  writes:
> 
> > Module Name:src
> > Committed By:   kamil
> > Date:   Wed Jan 29 16:03:44 UTC 2020
> >
> > Modified Files:
> > src/lib/libpthread: pthread.c pthread_getcpuclockid.c
> >
> > Log Message:
> > Chack thread->pt_magic with PT_MAGIC promptly
> >
> > Rearrange some checks to avoid verifying pthread_t after using it.
> >
> >
> > To generate a diff of this commit:
> > cvs rdiff -u -r1.160 -r1.161 src/lib/libpthread/pthread.c
> > cvs rdiff -u -r1.2 -r1.3 src/lib/libpthread/pthread_getcpuclockid.c
> >
> > Please note that diffs are not public domain; they are subject to the
> > copyright notices on the relevant files.
> >
> 
> -- 
> Ryo ONODERA // r...@tetera.org
> PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3


Re: CVS commit: src/common/lib/libc/arch

2020-02-01 Thread Andrew Doran
On Sat, Feb 01, 2020 at 03:02:02PM +, m...@netbsd.org wrote:
> On Mon, Jan 27, 2020 at 10:09:21PM +, Andrew Doran wrote:
> > Module Name:src
> > Committed By:   ad
> > Date:   Mon Jan 27 22:09:21 UTC 2020
> > 
> > Removed Files:
> > src/common/lib/libc/arch/i386/string: memcmp.S
> > src/common/lib/libc/arch/x86_64/string: bcmp.S memcmp.S
> > 
> > Log Message:
> > x86 uses the C versions of bcmp() and memcmp() now.
> > 
> 
> Why?

REP CMPS is very slow on the modern CPUs I have access to.  The updated C
version is 1.5-10x faster in the configurations I have tried, from tiny
strings up to N-megabyte strings.  MOVS and STOS are very good though.

Andrew


CVS commit: src/sys/dev/acpi

2020-02-01 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Sat Feb  1 20:11:24 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
fix build


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/acpi/sdhc_acpi.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/dev/acpi/sdhc_acpi.c
diff -u src/sys/dev/acpi/sdhc_acpi.c:1.13 src/sys/dev/acpi/sdhc_acpi.c:1.14
--- src/sys/dev/acpi/sdhc_acpi.c:1.13	Sat Feb  1 19:11:59 2020
+++ src/sys/dev/acpi/sdhc_acpi.c	Sat Feb  1 20:11:24 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdhc_acpi.c,v 1.13 2020/02/01 19:11:59 christos Exp $	*/
+/*	$NetBSD: sdhc_acpi.c,v 1.14 2020/02/01 20:11:24 tnn Exp $	*/
 
 /*
  * Copyright (c) 2016 Kimihiro Nonaka 
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.13 2020/02/01 19:11:59 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.14 2020/02/01 20:11:24 tnn Exp $");
 
 #include 
 #include 
@@ -91,7 +91,7 @@ static const struct sdhc_acpi_slot {
 	{ .hid = "INT344D",		 .type = SLOT_TYPE_SD },
 	{ .hid = "NXP0003",  .uid = "0", .type = SLOT_TYPE_SD,
 	 .flags = SDHC_ESDHC_FLAGS },
-	{ .hid = "NXP0003",  .uid = "1", .type SLOT_TYPE_EMMC,
+	{ .hid = "NXP0003",  .uid = "1", .type = SLOT_TYPE_EMMC,
 	 .flags = SDHC_ESDHC_FLAGS },
 
 	/* Generic IDs last */



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Tobias Nygren
Module Name:src
Committed By:   tnn
Date:   Sat Feb  1 20:11:24 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
fix build


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/acpi/sdhc_acpi.c

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



Re: CVS commit: src/sys

2020-02-01 Thread Andrew Doran
On Sat, Feb 01, 2020 at 02:23:24AM +, Taylor R Campbell wrote:

> Module Name:  src
> Committed By: riastradh
> Date: Sat Feb  1 02:23:23 UTC 2020
> 
> Modified Files:
>   src/sys/ddb: db_xxx.c
>   src/sys/kern: kern_descrip.c kern_sig.c subr_exec_fd.c uipc_socket2.c
>   uipc_usrreq.c
> 
> Log Message:
> Load struct fdfile::ff_file with atomic_load_consume.
> 
> Exceptions: when we're only testing whether it's there, not about to
> dereference it.
> 
> Note: We do not use atomic_store_release to set it because the
> preceding mutex_exit should be enough.
> 
> (That said, it's not clear the mutex_enter/exit is needed unless
> refcnt > 0 already, in which case maybe it would be a win to switch
> from the membar implied by mutex_enter to the membar implied by
> atomic_store_release -- which I would generally expect to be much
> cheaper.  And a little clearer without a long comment.)

Likely procfs and sysctl since they go the strongly-locked route.

Andrew


CVS commit: src

2020-02-01 Thread Izumi Tsutsui
Module Name:src
Committed By:   tsutsui
Date:   Sat Feb  1 19:41:50 UTC 2020

Modified Files:
src/distrib/sets/lists/comp: ad.m68k
src/sys/arch/amiga/include: vmparam.h
src/sys/arch/atari/include: vmparam.h
src/sys/arch/cesfic/include: vmparam.h
src/sys/arch/hp300/include: vmparam.h
src/sys/arch/luna68k/include: vmparam.h
src/sys/arch/m68k/include: Makefile
src/sys/arch/mac68k/include: vmparam.h
src/sys/arch/mvme68k/include: vmparam.h
src/sys/arch/news68k/include: vmparam.h
src/sys/arch/next68k/include: vmparam.h
src/sys/arch/sun3/include: vmparam.h
src/sys/arch/x68k/include: vmparam.h
Added Files:
src/sys/arch/m68k/include: vmparam.h

Log Message:
Add MAX/MIN PAGE_SIZE and PAGE_SHIFT definitions of m68k for jemalloc(3).

Background:
- All m68k ports have fixed PAGE_SIZE value in their kernels,
  but each port uses different PAGE_SIZE value (4096 or 8192)
  due to historical reasons.
- Currently module(7) binaries are built per each port so
  all m68k kernel sources don't support run-time variable PAGE_SIZE.
- MI  assumes that the port supports a variable
  PAGE_SIZE on module(7) builds if both MAX_PAGE_SIZE and MIN_PAGE_SIZE
  are defined and they have different values.
- On the other hand, jemalloc(3) checks MAX_PAGE_SHIFT in
  src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_internal_defs.h
  for internal optimization.
- m68k ports share userland binaries (especially pkgsrc binaries)
  among all ports, so we need to define MAX_PAGE_SHIFT as 13 to
  support m68k ports where PAGE_SIZE==8192.
  (though this would affect only if static binaries built on
   4k page hosts are executed on 8k page hosts)

To solve these inconsistency on PAGE_SIZE definitions,
we should have an independent PAGE_SIZE related definitions
for userland, but it requires major reorganization.
For now (especially for netbsd-9) we define MAX/MIN PAGE_SIZE and
PAGE_SHIFT values in  only in !defined(_KERNEL) case.

Discussed on source-changes-d@ and tech-kern@ with christos@ and thorpej@:
 https://mail-index.netbsd.org/source-changes-d/2020/01/thread1.html#012035
 https://mail-index.netbsd.org/tech-kern/2020/01/thread1.html#025954

Should be pulled up to netbsd-9.


To generate a diff of this commit:
cvs rdiff -u -r1.62 -r1.63 src/distrib/sets/lists/comp/ad.m68k
cvs rdiff -u -r1.47 -r1.48 src/sys/arch/amiga/include/vmparam.h
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/atari/include/vmparam.h
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/cesfic/include/vmparam.h
cvs rdiff -u -r1.40 -r1.41 src/sys/arch/hp300/include/vmparam.h
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/luna68k/include/vmparam.h
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/m68k/include/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/arch/m68k/include/vmparam.h
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/mac68k/include/vmparam.h
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/mvme68k/include/vmparam.h
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/news68k/include/vmparam.h
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/next68k/include/vmparam.h
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/sun3/include/vmparam.h
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/x68k/include/vmparam.h

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

Modified files:

Index: src/distrib/sets/lists/comp/ad.m68k
diff -u src/distrib/sets/lists/comp/ad.m68k:1.62 src/distrib/sets/lists/comp/ad.m68k:1.63
--- src/distrib/sets/lists/comp/ad.m68k:1.62	Thu Oct  3 00:59:50 2019
+++ src/distrib/sets/lists/comp/ad.m68k	Sat Feb  1 19:41:48 2020
@@ -1,4 +1,4 @@
-# $NetBSD: ad.m68k,v 1.62 2019/10/03 00:59:50 mrg Exp $
+# $NetBSD: ad.m68k,v 1.63 2020/02/01 19:41:48 tsutsui Exp $
 ./usr/bin/elf2aoutcomp-sysutil-bin
 ./usr/include/gcc-4.5/math-68881.h		comp-c-include		obsolete
 ./usr/include/gcc-4.5/tgmath.h			comp-c-include		obsolete
@@ -70,6 +70,7 @@
 ./usr/include/m68k/trap.h			comp-c-include
 ./usr/include/m68k/types.h			comp-c-include
 ./usr/include/m68k/varargs.h			comp-obsolete		obsolete
+./usr/include/m68k/vmparam.h			comp-c-include
 ./usr/include/m68k/wchar_limits.h		comp-c-include
 ./usr/lib/libm68k.acomp-c-lib
 ./usr/lib/libm68k_p.acomp-c-lib		profile

Index: src/sys/arch/amiga/include/vmparam.h
diff -u src/sys/arch/amiga/include/vmparam.h:1.47 src/sys/arch/amiga/include/vmparam.h:1.48
--- src/sys/arch/amiga/include/vmparam.h:1.47	Wed Mar 27 17:15:29 2019
+++ src/sys/arch/amiga/include/vmparam.h	Sat Feb  1 19:41:48 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmparam.h,v 1.47 2019/03/27 17:15:29 christos Exp $	*/
+/*	$NetBSD: vmparam.h,v 1.48 2020/02/01 19:41:48 tsutsui Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -46,12 +46,9 @@
  */
 
 /*
- * We use 8K pages on the Amiga.  Override the PAGE_* definitions
- * to be compie-time constants.
+ * Use common m68k definitions to define PAGE_SIZE and related constants.
  */
-#define	PAGE_SHIFT	PGSHIFT
-#define	

CVS commit: src

2020-02-01 Thread Izumi Tsutsui
Module Name:src
Committed By:   tsutsui
Date:   Sat Feb  1 19:41:50 UTC 2020

Modified Files:
src/distrib/sets/lists/comp: ad.m68k
src/sys/arch/amiga/include: vmparam.h
src/sys/arch/atari/include: vmparam.h
src/sys/arch/cesfic/include: vmparam.h
src/sys/arch/hp300/include: vmparam.h
src/sys/arch/luna68k/include: vmparam.h
src/sys/arch/m68k/include: Makefile
src/sys/arch/mac68k/include: vmparam.h
src/sys/arch/mvme68k/include: vmparam.h
src/sys/arch/news68k/include: vmparam.h
src/sys/arch/next68k/include: vmparam.h
src/sys/arch/sun3/include: vmparam.h
src/sys/arch/x68k/include: vmparam.h
Added Files:
src/sys/arch/m68k/include: vmparam.h

Log Message:
Add MAX/MIN PAGE_SIZE and PAGE_SHIFT definitions of m68k for jemalloc(3).

Background:
- All m68k ports have fixed PAGE_SIZE value in their kernels,
  but each port uses different PAGE_SIZE value (4096 or 8192)
  due to historical reasons.
- Currently module(7) binaries are built per each port so
  all m68k kernel sources don't support run-time variable PAGE_SIZE.
- MI  assumes that the port supports a variable
  PAGE_SIZE on module(7) builds if both MAX_PAGE_SIZE and MIN_PAGE_SIZE
  are defined and they have different values.
- On the other hand, jemalloc(3) checks MAX_PAGE_SHIFT in
  src/external/bsd/jemalloc/include/jemalloc/internal/jemalloc_internal_defs.h
  for internal optimization.
- m68k ports share userland binaries (especially pkgsrc binaries)
  among all ports, so we need to define MAX_PAGE_SHIFT as 13 to
  support m68k ports where PAGE_SIZE==8192.
  (though this would affect only if static binaries built on
   4k page hosts are executed on 8k page hosts)

To solve these inconsistency on PAGE_SIZE definitions,
we should have an independent PAGE_SIZE related definitions
for userland, but it requires major reorganization.
For now (especially for netbsd-9) we define MAX/MIN PAGE_SIZE and
PAGE_SHIFT values in  only in !defined(_KERNEL) case.

Discussed on source-changes-d@ and tech-kern@ with christos@ and thorpej@:
 https://mail-index.netbsd.org/source-changes-d/2020/01/thread1.html#012035
 https://mail-index.netbsd.org/tech-kern/2020/01/thread1.html#025954

Should be pulled up to netbsd-9.


To generate a diff of this commit:
cvs rdiff -u -r1.62 -r1.63 src/distrib/sets/lists/comp/ad.m68k
cvs rdiff -u -r1.47 -r1.48 src/sys/arch/amiga/include/vmparam.h
cvs rdiff -u -r1.33 -r1.34 src/sys/arch/atari/include/vmparam.h
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/cesfic/include/vmparam.h
cvs rdiff -u -r1.40 -r1.41 src/sys/arch/hp300/include/vmparam.h
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/luna68k/include/vmparam.h
cvs rdiff -u -r1.31 -r1.32 src/sys/arch/m68k/include/Makefile
cvs rdiff -u -r0 -r1.1 src/sys/arch/m68k/include/vmparam.h
cvs rdiff -u -r1.45 -r1.46 src/sys/arch/mac68k/include/vmparam.h
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/mvme68k/include/vmparam.h
cvs rdiff -u -r1.22 -r1.23 src/sys/arch/news68k/include/vmparam.h
cvs rdiff -u -r1.26 -r1.27 src/sys/arch/next68k/include/vmparam.h
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/sun3/include/vmparam.h
cvs rdiff -u -r1.39 -r1.40 src/sys/arch/x68k/include/vmparam.h

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



CVS commit: src/sys/kern

2020-02-01 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Feb  1 19:29:27 UTC 2020

Modified Files:
src/sys/kern: kern_sleepq.c

Log Message:
fix incorrect type


To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/sys/kern/kern_sleepq.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/kern/kern_sleepq.c
diff -u src/sys/kern/kern_sleepq.c:1.59 src/sys/kern/kern_sleepq.c:1.60
--- src/sys/kern/kern_sleepq.c:1.59	Sun Jan 26 14:01:56 2020
+++ src/sys/kern/kern_sleepq.c	Sat Feb  1 14:29:27 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: kern_sleepq.c,v 1.59 2020/01/26 19:01:56 ad Exp $	*/
+/*	$NetBSD: kern_sleepq.c,v 1.60 2020/02/01 19:29:27 christos Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007, 2008, 2009, 2019, 2020 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: kern_sleepq.c,v 1.59 2020/01/26 19:01:56 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_sleepq.c,v 1.60 2020/02/01 19:29:27 christos Exp $");
 
 #include 
 #include 
@@ -189,7 +189,7 @@ sleepq_insert(sleepq_t *sq, lwp_t *l, sy
 
 	if ((sobj->sobj_flag & SOBJ_SLEEPQ_SORTED) != 0) {
 		lwp_t *l2;
-		const int pri = lwp_eprio(l);
+		const pri_t pri = lwp_eprio(l);
 
 		TAILQ_FOREACH(l2, sq, l_sleepchain) {
 			if (lwp_eprio(l2) < pri) {



CVS commit: src/sys/kern

2020-02-01 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Feb  1 19:29:27 UTC 2020

Modified Files:
src/sys/kern: kern_sleepq.c

Log Message:
fix incorrect type


To generate a diff of this commit:
cvs rdiff -u -r1.59 -r1.60 src/sys/kern/kern_sleepq.c

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



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Feb  1 19:11:59 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
use designated initializers


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/acpi/sdhc_acpi.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/dev/acpi/sdhc_acpi.c
diff -u src/sys/dev/acpi/sdhc_acpi.c:1.12 src/sys/dev/acpi/sdhc_acpi.c:1.13
--- src/sys/dev/acpi/sdhc_acpi.c:1.12	Sat Feb  1 13:24:24 2020
+++ src/sys/dev/acpi/sdhc_acpi.c	Sat Feb  1 14:11:59 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdhc_acpi.c,v 1.12 2020/02/01 18:24:24 jmcneill Exp $	*/
+/*	$NetBSD: sdhc_acpi.c,v 1.13 2020/02/01 19:11:59 christos Exp $	*/
 
 /*
  * Copyright (c) 2016 Kimihiro Nonaka 
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.12 2020/02/01 18:24:24 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.13 2020/02/01 19:11:59 christos Exp $");
 
 #include 
 #include 
@@ -78,22 +78,25 @@ static const struct sdhc_acpi_slot {
 #define	SLOT_TYPE_EMMC	1	/* eMMC */
 	uint32_t flags;
 } sdhc_acpi_slot_map[] = {
-	{ "80865ACA",	NULL,	SLOT_TYPE_SD,	0 },
-	{ "80865ACC",	NULL,	SLOT_TYPE_EMMC,	0 },
-	{ "80865AD0",	NULL,	SLOT_TYPE_SD,	0 },
-	{ "80860F14",   "1",	SLOT_TYPE_EMMC,	0 },
-	{ "80860F14",   "3",	SLOT_TYPE_SD,	0 },
-	{ "80860F16",   NULL,	SLOT_TYPE_SD,	0 },
-	{ "INT33BB",	"2",	SLOT_TYPE_SD,	0 },
-	{ "INT33BB",	"3",	SLOT_TYPE_SD,	0 },
-	{ "INT33C6",	NULL,	SLOT_TYPE_SD,	0 },
-	{ "INT3436",	NULL,	SLOT_TYPE_SD,	0 },
-	{ "INT344D",	NULL,	SLOT_TYPE_SD,	0 },
-	{ "NXP0003",	"0",	SLOT_TYPE_SD,	SDHC_ESDHC_FLAGS },
-	{ "NXP0003",	"1",	SLOT_TYPE_EMMC,	SDHC_ESDHC_FLAGS },
+	{ .hid = "80865ACA",		 .type = SLOT_TYPE_SD },
+	{ .hid = "80865ACC",		 .type = SLOT_TYPE_EMMC },
+	{ .hid = "80865AD0",		 .type = SLOT_TYPE_SD },
+	{ .hid = "80860F14", .uid = "1", .type = SLOT_TYPE_EMMC },
+	{ .hid = "80860F14", .uid = "3", .type = SLOT_TYPE_SD },
+	{ .hid = "80860F16",   		 .type = SLOT_TYPE_SD },
+	{ .hid = "INT33BB",  .uid = "2", .type = SLOT_TYPE_SD },
+	{ .hid = "INT33BB",  .uid = "3", .type = SLOT_TYPE_SD },
+	{ .hid = "INT33C6",		 .type = SLOT_TYPE_SD },
+	{ .hid = "INT3436",		 .type = SLOT_TYPE_SD },
+	{ .hid = "INT344D",		 .type = SLOT_TYPE_SD },
+	{ .hid = "NXP0003",  .uid = "0", .type = SLOT_TYPE_SD,
+	 .flags = SDHC_ESDHC_FLAGS },
+	{ .hid = "NXP0003",  .uid = "1", .type SLOT_TYPE_EMMC,
+	 .flags = SDHC_ESDHC_FLAGS },
+
 	/* Generic IDs last */
-	{ "PNP0D40",	NULL,	SLOT_TYPE_SD,	0 },
-	{ "PNP0FFF",	"3",	SLOT_TYPE_SD,	0 },
+	{ .hid = "PNP0D40",		 .type = SLOT_TYPE_SD },
+	{ .hid = "PNP0FFF",  .uid = "3", .type = SLOT_TYPE_SD },
 };
 
 static const struct sdhc_acpi_slot *



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Christos Zoulas
Module Name:src
Committed By:   christos
Date:   Sat Feb  1 19:11:59 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
use designated initializers


To generate a diff of this commit:
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/acpi/sdhc_acpi.c

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



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 18:24:24 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
appease -Werror=missing-field-initializers


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/acpi/sdhc_acpi.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/dev/acpi/sdhc_acpi.c
diff -u src/sys/dev/acpi/sdhc_acpi.c:1.11 src/sys/dev/acpi/sdhc_acpi.c:1.12
--- src/sys/dev/acpi/sdhc_acpi.c:1.11	Sat Feb  1 13:40:55 2020
+++ src/sys/dev/acpi/sdhc_acpi.c	Sat Feb  1 18:24:24 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdhc_acpi.c,v 1.11 2020/02/01 13:40:55 jmcneill Exp $	*/
+/*	$NetBSD: sdhc_acpi.c,v 1.12 2020/02/01 18:24:24 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2016 Kimihiro Nonaka 
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.11 2020/02/01 13:40:55 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.12 2020/02/01 18:24:24 jmcneill Exp $");
 
 #include 
 #include 
@@ -78,22 +78,22 @@ static const struct sdhc_acpi_slot {
 #define	SLOT_TYPE_EMMC	1	/* eMMC */
 	uint32_t flags;
 } sdhc_acpi_slot_map[] = {
-	{ "80865ACA",	NULL,	SLOT_TYPE_SD },
-	{ "80865ACC",	NULL,	SLOT_TYPE_EMMC },
-	{ "80865AD0",	NULL,	SLOT_TYPE_SD },
-	{ "80860F14",   "1",	SLOT_TYPE_EMMC },
-	{ "80860F14",   "3",	SLOT_TYPE_SD },
-	{ "80860F16",   NULL,	SLOT_TYPE_SD },
-	{ "INT33BB",	"2",	SLOT_TYPE_SD },
-	{ "INT33BB",	"3",	SLOT_TYPE_SD },
-	{ "INT33C6",	NULL,	SLOT_TYPE_SD },
-	{ "INT3436",	NULL,	SLOT_TYPE_SD },
-	{ "INT344D",	NULL,	SLOT_TYPE_SD },
+	{ "80865ACA",	NULL,	SLOT_TYPE_SD,	0 },
+	{ "80865ACC",	NULL,	SLOT_TYPE_EMMC,	0 },
+	{ "80865AD0",	NULL,	SLOT_TYPE_SD,	0 },
+	{ "80860F14",   "1",	SLOT_TYPE_EMMC,	0 },
+	{ "80860F14",   "3",	SLOT_TYPE_SD,	0 },
+	{ "80860F16",   NULL,	SLOT_TYPE_SD,	0 },
+	{ "INT33BB",	"2",	SLOT_TYPE_SD,	0 },
+	{ "INT33BB",	"3",	SLOT_TYPE_SD,	0 },
+	{ "INT33C6",	NULL,	SLOT_TYPE_SD,	0 },
+	{ "INT3436",	NULL,	SLOT_TYPE_SD,	0 },
+	{ "INT344D",	NULL,	SLOT_TYPE_SD,	0 },
 	{ "NXP0003",	"0",	SLOT_TYPE_SD,	SDHC_ESDHC_FLAGS },
 	{ "NXP0003",	"1",	SLOT_TYPE_EMMC,	SDHC_ESDHC_FLAGS },
 	/* Generic IDs last */
-	{ "PNP0D40",	NULL,	SLOT_TYPE_SD },
-	{ "PNP0FFF",	"3",	SLOT_TYPE_SD },
+	{ "PNP0D40",	NULL,	SLOT_TYPE_SD,	0 },
+	{ "PNP0FFF",	"3",	SLOT_TYPE_SD,	0 },
 };
 
 static const struct sdhc_acpi_slot *



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 18:24:24 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
appease -Werror=missing-field-initializers


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/acpi/sdhc_acpi.c

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



CVS commit: src/lib

2020-02-01 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Sat Feb  1 18:14:16 UTC 2020

Modified Files:
src/lib/libc/gen: pthread_atfork.c
src/lib/libpthread: pthread_mutex.c

Log Message:
Revert previous

'git grep' breaks now.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/gen/pthread_atfork.c
cvs rdiff -u -r1.73 -r1.74 src/lib/libpthread/pthread_mutex.c

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

Modified files:

Index: src/lib/libc/gen/pthread_atfork.c
diff -u src/lib/libc/gen/pthread_atfork.c:1.11 src/lib/libc/gen/pthread_atfork.c:1.12
--- src/lib/libc/gen/pthread_atfork.c:1.11	Sat Feb  1 15:38:46 2020
+++ src/lib/libc/gen/pthread_atfork.c	Sat Feb  1 18:14:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_atfork.c,v 1.11 2020/02/01 15:38:46 kamil Exp $	*/
+/*	$NetBSD: pthread_atfork.c,v 1.12 2020/02/01 18:14:16 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -31,17 +31,15 @@
 
 #include 
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: pthread_atfork.c,v 1.11 2020/02/01 15:38:46 kamil Exp $");
+__RCSID("$NetBSD: pthread_atfork.c,v 1.12 2020/02/01 18:14:16 kamil Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
 
-#include 
-#include 
-#include 
 #include 
 #include 
 #include 
+#include 
 #include "reentrant.h"
 
 #ifdef __weak_alias
@@ -75,22 +73,11 @@ static struct atfork_callback_q childq =
 static struct atfork_callback *
 af_alloc(void)
 {
-	void *arena;
-	size_t sz;
 
 	if (atfork_builtin.fn == NULL)
 		return _builtin;
 
-	/*
-	 * Avoid using here malloc() as this function is used on early init
-	 * and can prematuraly initialize the malloc library.
-	 * malloc() allocations here also confuse the LLVM Leak Sanitizer.
-	 */
-	sz = sizeof(atfork_builtin);
-	arena = mmap(NULL, sz, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0);
-	if (arena == MAP_FAILED)
-		return NULL;
-	return arena;
+	return malloc(sizeof(atfork_builtin));
 }
 
 static void
@@ -98,7 +85,7 @@ af_free(struct atfork_callback *af)
 {
 
 	if (af != _builtin)
-		munmap(af, sizeof(atfork_builtin));
+		free(af);
 }
 
 int

Index: src/lib/libpthread/pthread_mutex.c
diff -u src/lib/libpthread/pthread_mutex.c:1.73 src/lib/libpthread/pthread_mutex.c:1.74
--- src/lib/libpthread/pthread_mutex.c:1.73	Sat Feb  1 15:39:56 2020
+++ src/lib/libpthread/pthread_mutex.c	Sat Feb  1 18:14:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_mutex.c,v 1.73 2020/02/01 15:39:56 kamil Exp $	*/
+/*	$NetBSD: pthread_mutex.c,v 1.74 2020/02/01 18:14:16 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2003, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: pthread_mutex.c,v 1.73 2020/02/01 15:39:56 kamil Exp $");
+__RCSID("$NetBSD: pthread_mutex.c,v 1.74 2020/02/01 18:14:16 kamil Exp $");
 
 #include 
 #include 
@@ -122,12 +122,14 @@ pthread_mutex_init(pthread_mutex_t *ptm,
 {
 	uintptr_t type, proto, val, ceil;
 
+#if 0
 	/*
 	 * Always initialize the mutex structure, maybe be used later
 	 * and the cost should be minimal.
 	 */
 	if (__predict_false(__uselibcstub))
 		return __libc_mutex_init_stub(ptm, attr);
+#endif
 
 	pthread__error(EINVAL, "Invalid mutes attribute",
 	attr == NULL || attr->ptma_magic == _PT_MUTEXATTR_MAGIC);
@@ -617,9 +619,10 @@ pthread__mutex_wakeup(pthread_t self, pt
 int
 pthread_mutexattr_init(pthread_mutexattr_t *attr)
 {
-
+#if 0
 	if (__predict_false(__uselibcstub))
 		return __libc_mutexattr_init_stub(attr);
+#endif
 
 	attr->ptma_magic = _PT_MUTEXATTR_MAGIC;
 	attr->ptma_private = (void *)PTHREAD_MUTEX_DEFAULT;



CVS commit: src/lib

2020-02-01 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Sat Feb  1 18:14:16 UTC 2020

Modified Files:
src/lib/libc/gen: pthread_atfork.c
src/lib/libpthread: pthread_mutex.c

Log Message:
Revert previous

'git grep' breaks now.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/lib/libc/gen/pthread_atfork.c
cvs rdiff -u -r1.73 -r1.74 src/lib/libpthread/pthread_mutex.c

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



Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Ryo ONODERA
Kamil Rytarowski  writes:

> On 01.02.2020 17:01, Ryo ONODERA wrote:
>> Hi,
>> 
>> pthread__error()s in pthread_equal() cause segfault
>> during start of pkgsrc/www/firefox-72.0.2.
>> 
>> Without pthread__error()s, www/firefox works fine
>> like as follows.
>> However I have no idea why I get segfaults.
>> 
>> Could you take a look at this problem?
>> 
>> Index: lib/libpthread/pthread.c
>> ===
>> RCS file: /cvsroot/src/lib/libpthread/pthread.c,v
>> retrieving revision 1.162
>> diff -u -r1.162 pthread.c
>> --- lib/libpthread/pthread.c 29 Jan 2020 17:11:57 -  1.162
>> +++ lib/libpthread/pthread.c 1 Feb 2020 15:58:03 -
>> @@ -770,11 +770,13 @@
>>  if (__predict_false(__uselibcstub))
>>  return __libc_thr_equal_stub(t1, t2);
>>  
>> +#if 0
>>  pthread__error(EINVAL, "Invalid thread",
>>  t1->pt_magic == PT_MAGIC);
>>  
>>  pthread__error(EINVAL, "Invalid thread",
>>  t2->pt_magic == PT_MAGIC);
>> +#endif
>>  
>>  /* Nothing special here. */
>>  return (t1 == t2);
>> @@ -1108,7 +1110,7 @@
>>  {
>>  char buf[1024];
>>  size_t len;
>> -
>> +
>>  if (pthread__diagassert == 0)
>>  return;
>>  
>> 
>> 
>> "Kamil Rytarowski"  writes:
>> 
>>> Module Name:src
>>> Committed By:   kamil
>>> Date:   Wed Jan 29 16:03:44 UTC 2020
>>>
>>> Modified Files:
>>> src/lib/libpthread: pthread.c pthread_getcpuclockid.c
>>>
>>> Log Message:
>>> Chack thread->pt_magic with PT_MAGIC promptly
>>>
>>> Rearrange some checks to avoid verifying pthread_t after using it.
>>>
>>>
>>> To generate a diff of this commit:
>>> cvs rdiff -u -r1.160 -r1.161 src/lib/libpthread/pthread.c
>>> cvs rdiff -u -r1.2 -r1.3 src/lib/libpthread/pthread_getcpuclockid.c
>>>
>>> Please note that diffs are not public domain; they are subject to the
>>> copyright notices on the relevant files.
>>>
>> 
>
> I will have a look, but it will take a while to build firefox for me.

Thank you.
Of course I can wait.

-- 
Ryo ONODERA // r...@tetera.org
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3


Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Kamil Rytarowski
On 01.02.2020 17:01, Ryo ONODERA wrote:
> Hi,
> 
> pthread__error()s in pthread_equal() cause segfault
> during start of pkgsrc/www/firefox-72.0.2.
> 
> Without pthread__error()s, www/firefox works fine
> like as follows.
> However I have no idea why I get segfaults.
> 
> Could you take a look at this problem?
> 
> Index: lib/libpthread/pthread.c
> ===
> RCS file: /cvsroot/src/lib/libpthread/pthread.c,v
> retrieving revision 1.162
> diff -u -r1.162 pthread.c
> --- lib/libpthread/pthread.c  29 Jan 2020 17:11:57 -  1.162
> +++ lib/libpthread/pthread.c  1 Feb 2020 15:58:03 -
> @@ -770,11 +770,13 @@
>   if (__predict_false(__uselibcstub))
>   return __libc_thr_equal_stub(t1, t2);
>  
> +#if 0
>   pthread__error(EINVAL, "Invalid thread",
>   t1->pt_magic == PT_MAGIC);
>  
>   pthread__error(EINVAL, "Invalid thread",
>   t2->pt_magic == PT_MAGIC);
> +#endif
>  
>   /* Nothing special here. */
>   return (t1 == t2);
> @@ -1108,7 +1110,7 @@
>  {
>   char buf[1024];
>   size_t len;
> - 
> +
>   if (pthread__diagassert == 0)
>   return;
>  
> 
> 
> "Kamil Rytarowski"  writes:
> 
>> Module Name: src
>> Committed By:kamil
>> Date:Wed Jan 29 16:03:44 UTC 2020
>>
>> Modified Files:
>>  src/lib/libpthread: pthread.c pthread_getcpuclockid.c
>>
>> Log Message:
>> Chack thread->pt_magic with PT_MAGIC promptly
>>
>> Rearrange some checks to avoid verifying pthread_t after using it.
>>
>>
>> To generate a diff of this commit:
>> cvs rdiff -u -r1.160 -r1.161 src/lib/libpthread/pthread.c
>> cvs rdiff -u -r1.2 -r1.3 src/lib/libpthread/pthread_getcpuclockid.c
>>
>> Please note that diffs are not public domain; they are subject to the
>> copyright notices on the relevant files.
>>
> 

I will have a look, but it will take a while to build firefox for me.



signature.asc
Description: OpenPGP digital signature


Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Ryo ONODERA
Hi,

pthread__error()s in pthread_equal() cause segfault
during start of pkgsrc/www/firefox-72.0.2.

Without pthread__error()s, www/firefox works fine
like as follows.
However I have no idea why I get segfaults.

Could you take a look at this problem?

Index: lib/libpthread/pthread.c
===
RCS file: /cvsroot/src/lib/libpthread/pthread.c,v
retrieving revision 1.162
diff -u -r1.162 pthread.c
--- lib/libpthread/pthread.c29 Jan 2020 17:11:57 -  1.162
+++ lib/libpthread/pthread.c1 Feb 2020 15:58:03 -
@@ -770,11 +770,13 @@
if (__predict_false(__uselibcstub))
return __libc_thr_equal_stub(t1, t2);
 
+#if 0
pthread__error(EINVAL, "Invalid thread",
t1->pt_magic == PT_MAGIC);
 
pthread__error(EINVAL, "Invalid thread",
t2->pt_magic == PT_MAGIC);
+#endif
 
/* Nothing special here. */
return (t1 == t2);
@@ -1108,7 +1110,7 @@
 {
char buf[1024];
size_t len;
-   
+
if (pthread__diagassert == 0)
return;
 


"Kamil Rytarowski"  writes:

> Module Name:  src
> Committed By: kamil
> Date: Wed Jan 29 16:03:44 UTC 2020
>
> Modified Files:
>   src/lib/libpthread: pthread.c pthread_getcpuclockid.c
>
> Log Message:
> Chack thread->pt_magic with PT_MAGIC promptly
>
> Rearrange some checks to avoid verifying pthread_t after using it.
>
>
> To generate a diff of this commit:
> cvs rdiff -u -r1.160 -r1.161 src/lib/libpthread/pthread.c
> cvs rdiff -u -r1.2 -r1.3 src/lib/libpthread/pthread_getcpuclockid.c
>
> Please note that diffs are not public domain; they are subject to the
> copyright notices on the relevant files.
>

-- 
Ryo ONODERA // r...@tetera.org
PGP fingerprint = 82A2 DC91 76E0 A10A 8ABB  FD1B F404 27FA C7D1 15F3


Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Kamil Rytarowski
Actually it happened that modifiying pthread_atfork() to stop
malloc()ing is enough to address the problem.

I have landed the changes and removed '#if 0' kludge.

Thanks!

On 01.02.2020 13:59, Kamil Rytarowski wrote:
> On 31.01.2020 22:10, Andrew Doran wrote:
>> On Fri, Jan 31, 2020 at 06:55:00PM -, Christos Zoulas wrote:
>>
>>> In article <724af477-010b-9ddf-6ece-e23d7cf59...@gmx.com>,
>>> Kamil Rytarowski   wrote:
 -=-=-=-=-=-
 -=-=-=-=-=-

 On 31.01.2020 03:38, Christos Zoulas wrote:
> And it is fixed now.
>
> christos
>

 OK. I am going to submit a bug report upstream and get some feedback
 what is the way forward here, delaying initialization.
>>>
>>> I think that the way forward (on our side) is to do away with libpthread,
>>> merge it with libc and kill all the stub nonsense.
>>
>> Agreed.
>>
>> pthread__init() does some expensive stuff like _lwp_ctl().  I think we can
>> safely & without hacks defer a lot of that till the first pthread_create().
>>
>> Andrew
>>
> 
> This libc-libpthread split/merge is a red herring.
> 
> The problem here is with a mutual dependencies between POSIX threads
> library and malloc library.
> 
> I did some investigation and here are my findings:
> 
> 1. jemalloc abuses initialization and initializes self very early, with
> a constructor:
> 
> /*
>  * If an application creates a thread before doing any allocation in the
> main
>  * thread, then calls fork(2) in the main thread followed by memory
> allocation
>  * in the child process, a race can occur that results in deadlock
> within the
>  * child: the main thread may have forked while the created thread had
>  * partially initialized the allocator.  Ordinarily jemalloc prevents
>  * fork/malloc races via the following functions it registers during
>  * initialization using pthread_atfork(), but of course that does no good if
>  * the allocator isn't fully initialized at fork time.  The following
> library
>  * constructor is a partial solution to this problem.  It may still be
> possible
>  * to trigger the deadlock described above, but doing so would involve
> forking
>  * via a library constructor that runs before jemalloc's runs.
>  */
> #ifndef JEMALLOC_JET
> JEMALLOC_ATTR(constructor)
> static void
> 
> jemalloc_constructor(void) {
> malloc_init();
> }
> #endif
> 
> Relevant commit:
> 
> commit 20f1fc95adb35ea63dc61f47f2b0ffbd37d39f32
> Author: Jason Evans 
> Date:   Tue Oct 9 14:46:22 2012 -0700
> 
> Fix fork(2)-related deadlocks.
> 
> Add a library constructor for jemalloc that initializes the allocator.
> This fixes a race that could occur if threads were created by the main
> thread prior to any memory allocation, followed by fork(2), and then
> memory allocation in the child process.
> 
> Fix the prefork/postfork functions to acquire/release the ctl, prof, and
> rtree mutexes.  This fixes various fork() child process deadlocks, but
> one possible deadlock remains (intentionally) unaddressed: prof
> backtracing can acquire runtime library mutexes, so deadlock is still
> possible if heap profiling is enabled during fork().  This deadlock is
> known to be a real issue in at least the case of libgcc-based
> backtracing.
> 
> Reported by tfengjun.
> 
> 2. FreeBSD added a hack and an internal pthread_mutex_init() version
> called: _pthread_mutex_init_calloc_cb().. it passes a callback pointer
> to jemalloc's tiny calloc().
> 
> This is very ugly and I consider it as the wrong way of boostraping malloc.
> 
> 3. There is a problem inside libpthread. It as designed to not malloc()
> early to not trigger malloc initialization, however it was broken as it
> calls at_fork functions:
> 
> #0  malloc (size=size@entry=16) at
> /usr/src/external/bsd/jemalloc/lib/../dist/src/jemalloc.c:2052
> #1  0x776b71d71a44 in af_alloc () at
> /usr/src/lib/libc/gen/pthread_atfork.c:80
> #2  af_alloc () at /usr/src/lib/libc/gen/pthread_atfork.c:74
> #3  _pthread_atfork (prepare=prepare@entry=0x0, parent=parent@entry=0x0,
> child=child@entry=0x776b7220b3e5 )
> at /usr/src/lib/libc/gen/pthread_atfork.c:121
> #4  0x776b7220cacd in pthread__init () at
> /usr/src/lib/libpthread/pthread.c:260
> #5  0x776b71d7a585 in _libc_init () at
> /usr/src/lib/libc/misc/initfini.c:128
> 
> These at_fork routines caused also issues with false-positives in Leak
> Sanitizer. I had to pacify the sanitizer and disable tracking of its
> allocations.
> 
> 
> This patch removes '#if 0' hack from src/lib/libpthread and switches
> at_fork to mmap()+munmap().
> 
> http://netbsd.org/~kamil/patch-00219-libpthread-libc-jemalloc.txt
> 
> This test disabled the constructor hack:
> 
> http://netbsd.org/~kamil/patch-00220-jemalloc-disable-constructor.txt
> 
> With these changes everything seems to work.
> 
> In order to avoid the FreeBSD specific hack with the constructor and
> initialize jemalloc always during libc bootstrap I propose the 

CVS commit: src/lib/libpthread

2020-02-01 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Sat Feb  1 15:39:56 UTC 2020

Modified Files:
src/lib/libpthread: pthread_mutex.c

Log Message:
Remove 'ifdef 0' hacks

It is no longer needed as the proper fix avoiding premature malloc()
landed the sources.


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/lib/libpthread/pthread_mutex.c

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

Modified files:

Index: src/lib/libpthread/pthread_mutex.c
diff -u src/lib/libpthread/pthread_mutex.c:1.72 src/lib/libpthread/pthread_mutex.c:1.73
--- src/lib/libpthread/pthread_mutex.c:1.72	Fri Jan 31 17:52:14 2020
+++ src/lib/libpthread/pthread_mutex.c	Sat Feb  1 15:39:56 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_mutex.c,v 1.72 2020/01/31 17:52:14 kamil Exp $	*/
+/*	$NetBSD: pthread_mutex.c,v 1.73 2020/02/01 15:39:56 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2001, 2003, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -47,7 +47,7 @@
  */
 
 #include 
-__RCSID("$NetBSD: pthread_mutex.c,v 1.72 2020/01/31 17:52:14 kamil Exp $");
+__RCSID("$NetBSD: pthread_mutex.c,v 1.73 2020/02/01 15:39:56 kamil Exp $");
 
 #include 
 #include 
@@ -122,14 +122,12 @@ pthread_mutex_init(pthread_mutex_t *ptm,
 {
 	uintptr_t type, proto, val, ceil;
 
-#if 0
 	/*
 	 * Always initialize the mutex structure, maybe be used later
 	 * and the cost should be minimal.
 	 */
 	if (__predict_false(__uselibcstub))
 		return __libc_mutex_init_stub(ptm, attr);
-#endif
 
 	pthread__error(EINVAL, "Invalid mutes attribute",
 	attr == NULL || attr->ptma_magic == _PT_MUTEXATTR_MAGIC);
@@ -619,10 +617,9 @@ pthread__mutex_wakeup(pthread_t self, pt
 int
 pthread_mutexattr_init(pthread_mutexattr_t *attr)
 {
-#if 0
+
 	if (__predict_false(__uselibcstub))
 		return __libc_mutexattr_init_stub(attr);
-#endif
 
 	attr->ptma_magic = _PT_MUTEXATTR_MAGIC;
 	attr->ptma_private = (void *)PTHREAD_MUTEX_DEFAULT;



CVS commit: src/lib/libpthread

2020-02-01 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Sat Feb  1 15:39:56 UTC 2020

Modified Files:
src/lib/libpthread: pthread_mutex.c

Log Message:
Remove 'ifdef 0' hacks

It is no longer needed as the proper fix avoiding premature malloc()
landed the sources.


To generate a diff of this commit:
cvs rdiff -u -r1.72 -r1.73 src/lib/libpthread/pthread_mutex.c

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



CVS commit: src/lib/libc/gen

2020-02-01 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Sat Feb  1 15:38:46 UTC 2020

Modified Files:
src/lib/libc/gen: pthread_atfork.c

Log Message:
Switch atform allocations from malloc()+free() to mmap()+munmap()

This avoid bootstrapping malloc too early when libc+libpthread are not
ready. It is called through pthread__init() -> _pthread_atfork().

This also helps LLVM Leak Sanitizer to pacify false positive reports.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/gen/pthread_atfork.c

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

Modified files:

Index: src/lib/libc/gen/pthread_atfork.c
diff -u src/lib/libc/gen/pthread_atfork.c:1.10 src/lib/libc/gen/pthread_atfork.c:1.11
--- src/lib/libc/gen/pthread_atfork.c:1.10	Tue Jan 20 18:31:25 2015
+++ src/lib/libc/gen/pthread_atfork.c	Sat Feb  1 15:38:46 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pthread_atfork.c,v 1.10 2015/01/20 18:31:25 christos Exp $	*/
+/*	$NetBSD: pthread_atfork.c,v 1.11 2020/02/01 15:38:46 kamil Exp $	*/
 
 /*-
  * Copyright (c) 2002 The NetBSD Foundation, Inc.
@@ -31,15 +31,17 @@
 
 #include 
 #if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: pthread_atfork.c,v 1.10 2015/01/20 18:31:25 christos Exp $");
+__RCSID("$NetBSD: pthread_atfork.c,v 1.11 2020/02/01 15:38:46 kamil Exp $");
 #endif /* LIBC_SCCS and not lint */
 
 #include "namespace.h"
 
+#include 
+#include 
+#include 
 #include 
 #include 
 #include 
-#include 
 #include "reentrant.h"
 
 #ifdef __weak_alias
@@ -73,11 +75,22 @@ static struct atfork_callback_q childq =
 static struct atfork_callback *
 af_alloc(void)
 {
+	void *arena;
+	size_t sz;
 
 	if (atfork_builtin.fn == NULL)
 		return _builtin;
 
-	return malloc(sizeof(atfork_builtin));
+	/*
+	 * Avoid using here malloc() as this function is used on early init
+	 * and can prematuraly initialize the malloc library.
+	 * malloc() allocations here also confuse the LLVM Leak Sanitizer.
+	 */
+	sz = sizeof(atfork_builtin);
+	arena = mmap(NULL, sz, PROT_READ|PROT_WRITE, MAP_ANON, -1, 0);
+	if (arena == MAP_FAILED)
+		return NULL;
+	return arena;
 }
 
 static void
@@ -85,7 +98,7 @@ af_free(struct atfork_callback *af)
 {
 
 	if (af != _builtin)
-		free(af);
+		munmap(af, sizeof(atfork_builtin));
 }
 
 int



CVS commit: src/lib/libc/gen

2020-02-01 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Sat Feb  1 15:38:46 UTC 2020

Modified Files:
src/lib/libc/gen: pthread_atfork.c

Log Message:
Switch atform allocations from malloc()+free() to mmap()+munmap()

This avoid bootstrapping malloc too early when libc+libpthread are not
ready. It is called through pthread__init() -> _pthread_atfork().

This also helps LLVM Leak Sanitizer to pacify false positive reports.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/lib/libc/gen/pthread_atfork.c

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



CVS commit: src/sys/arch/arm/cortex

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 15:33:48 UTC 2020

Modified Files:
src/sys/arch/arm/cortex: gicv3_its.c

Log Message:
Use kmem_zalloc for its state, fixes possible crash if a driver tries to
set affinity before a CPU is online.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/cortex/gicv3_its.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/arch/arm/cortex/gicv3_its.c
diff -u src/sys/arch/arm/cortex/gicv3_its.c:1.24 src/sys/arch/arm/cortex/gicv3_its.c:1.25
--- src/sys/arch/arm/cortex/gicv3_its.c:1.24	Fri Jan 17 13:54:47 2020
+++ src/sys/arch/arm/cortex/gicv3_its.c	Sat Feb  1 15:33:48 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: gicv3_its.c,v 1.24 2020/01/17 13:54:47 jmcneill Exp $ */
+/* $NetBSD: gicv3_its.c,v 1.25 2020/02/01 15:33:48 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 #define _INTR_PRIVATE
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: gicv3_its.c,v 1.24 2020/01/17 13:54:47 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gicv3_its.c,v 1.25 2020/02/01 15:33:48 jmcneill Exp $");
 
 #include 
 #include 
@@ -846,7 +846,7 @@ gicv3_its_init(struct gicv3_softc *sc, b
 	if ((typer & GITS_TYPER_Physical) == 0)
 		return ENXIO;
 
-	its = kmem_alloc(sizeof(*its), KM_SLEEP);
+	its = kmem_zalloc(sizeof(*its), KM_SLEEP);
 	its->its_id = its_id;
 	its->its_bst = sc->sc_bst;
 	its->its_bsh = bsh;



CVS commit: src/sys/arch/arm/cortex

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 15:33:48 UTC 2020

Modified Files:
src/sys/arch/arm/cortex: gicv3_its.c

Log Message:
Use kmem_zalloc for its state, fixes possible crash if a driver tries to
set affinity before a CPU is online.


To generate a diff of this commit:
cvs rdiff -u -r1.24 -r1.25 src/sys/arch/arm/cortex/gicv3_its.c

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



CVS commit: src/sys/dev/ic

2020-02-01 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sat Feb  1 15:24:04 UTC 2020

Modified Files:
src/sys/dev/ic: com.c

Log Message:
Use designated initializers


To generate a diff of this commit:
cvs rdiff -u -r1.356 -r1.357 src/sys/dev/ic/com.c

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



CVS commit: src/sys/dev/ic

2020-02-01 Thread Nick Hudson
Module Name:src
Committed By:   skrll
Date:   Sat Feb  1 15:24:04 UTC 2020

Modified Files:
src/sys/dev/ic: com.c

Log Message:
Use designated initializers


To generate a diff of this commit:
cvs rdiff -u -r1.356 -r1.357 src/sys/dev/ic/com.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/dev/ic/com.c
diff -u src/sys/dev/ic/com.c:1.356 src/sys/dev/ic/com.c:1.357
--- src/sys/dev/ic/com.c:1.356	Sun Nov 10 21:16:35 2019
+++ src/sys/dev/ic/com.c	Sat Feb  1 15:24:04 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: com.c,v 1.356 2019/11/10 21:16:35 chs Exp $ */
+/* $NetBSD: com.c,v 1.357 2020/02/01 15:24:04 skrll Exp $ */
 
 /*-
  * Copyright (c) 1998, 1999, 2004, 2008 The NetBSD Foundation, Inc.
@@ -66,7 +66,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.356 2019/11/10 21:16:35 chs Exp $");
+__KERNEL_RCSID(0, "$NetBSD: com.c,v 1.357 2020/02/01 15:24:04 skrll Exp $");
 
 #include "opt_com.h"
 #include "opt_ddb.h"
@@ -192,8 +192,11 @@ static struct comcons_info comcons_info;
  * Following are all routines needed for COM to act as console
  */
 static struct consdev comcons = {
-	NULL, NULL, comcngetc, comcnputc, comcnpollc, NULL, NULL, NULL,
-	NODEV, CN_NORMAL
+	.cn_getc = comcngetc,
+	.cn_putc = comcnputc,
+	.cn_pollc = comcnpollc,
+	.cn_dev = NODEV,
+	.cn_pri = CN_NORMAL
 };
 
 



Re: CVS commit: src/common/lib/libc/arch

2020-02-01 Thread maya
On Mon, Jan 27, 2020 at 10:09:21PM +, Andrew Doran wrote:
> Module Name:  src
> Committed By: ad
> Date: Mon Jan 27 22:09:21 UTC 2020
> 
> Removed Files:
>   src/common/lib/libc/arch/i386/string: memcmp.S
>   src/common/lib/libc/arch/x86_64/string: bcmp.S memcmp.S
> 
> Log Message:
> x86 uses the C versions of bcmp() and memcmp() now.
> 

Why?


CVS commit: src/sys/opencrypto

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 13:48:09 UTC 2020

Modified Files:
src/sys/opencrypto: crypto.c

Log Message:
softint_disestablish does xc_barrier(0) for us already.


To generate a diff of this commit:
cvs rdiff -u -r1.111 -r1.112 src/sys/opencrypto/crypto.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/opencrypto/crypto.c
diff -u src/sys/opencrypto/crypto.c:1.111 src/sys/opencrypto/crypto.c:1.112
--- src/sys/opencrypto/crypto.c:1.111	Sat Feb  1 12:54:30 2020
+++ src/sys/opencrypto/crypto.c	Sat Feb  1 13:48:08 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: crypto.c,v 1.111 2020/02/01 12:54:30 riastradh Exp $ */
+/*	$NetBSD: crypto.c,v 1.112 2020/02/01 13:48:08 riastradh Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/crypto.c,v 1.4.2.5 2003/02/26 00:14:05 sam Exp $	*/
 /*	$OpenBSD: crypto.c,v 1.41 2002/07/17 23:52:38 art Exp $	*/
 
@@ -53,7 +53,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: crypto.c,v 1.111 2020/02/01 12:54:30 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: crypto.c,v 1.112 2020/02/01 13:48:08 riastradh Exp $");
 
 #include 
 #include 
@@ -644,10 +644,7 @@ crypto_destroy(bool exit_kthread)
 		 * prohibit touch crypto_drivers[] and each element after here.
 		 */
 
-		/*
-		 * Ensure cryptoret_softint() is never scheduled and then wait
-		 * for last softint_execute().
-		 */
+		/* Ensure cryptoret_softint() is never scheduled again.  */
 		for (i = 0; i < ncpu; i++) {
 			struct crypto_crp_ret_qs *qs;
 			struct cpu_info *ci = cpu_lookup(i);
@@ -656,7 +653,6 @@ crypto_destroy(bool exit_kthread)
 			qs->crp_ret_q_exit_flag = true;
 			crypto_put_crp_ret_qs(ci);
 		}
-		xc_barrier(0);
 	}
 
 	if (sysctl_opencrypto_clog != NULL)



CVS commit: src/sys/opencrypto

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 13:48:09 UTC 2020

Modified Files:
src/sys/opencrypto: crypto.c

Log Message:
softint_disestablish does xc_barrier(0) for us already.


To generate a diff of this commit:
cvs rdiff -u -r1.111 -r1.112 src/sys/opencrypto/crypto.c

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



CVS commit: src/sys/dev/pci/qat

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 13:48:18 UTC 2020

Modified Files:
src/sys/dev/pci/qat: qat.c

Log Message:
opencrypto orders new_session -> process for us.

No need for membar_producer.

Discussed with hikaru@.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/pci/qat/qat.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/dev/pci/qat/qat.c
diff -u src/sys/dev/pci/qat/qat.c:1.3 src/sys/dev/pci/qat/qat.c:1.4
--- src/sys/dev/pci/qat/qat.c:1.3	Wed Dec  4 01:06:28 2019
+++ src/sys/dev/pci/qat/qat.c	Sat Feb  1 13:48:18 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: qat.c,v 1.3 2019/12/04 01:06:28 hikaru Exp $	*/
+/*	$NetBSD: qat.c,v 1.4 2020/02/01 13:48:18 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2019 Internet Initiative Japan, Inc.
@@ -57,7 +57,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: qat.c,v 1.3 2019/12/04 01:06:28 hikaru Exp $");
+__KERNEL_RCSID(0, "$NetBSD: qat.c,v 1.4 2020/02/01 13:48:18 riastradh Exp $");
 
 #include 
 #include 
@@ -1969,8 +1969,6 @@ qat_crypto_new_session(void *arg, uint32
 	qcy->qcy_sc->sc_hw.qhw_crypto_setup_desc(qcy, qs, >qs_dec_desc, crie, cria);
 	qcy->qcy_sc->sc_hw.qhw_crypto_setup_desc(qcy, qs, >qs_enc_desc, crie, cria);
 
-	membar_producer();
-
 	return 0;
 fail:
 	if (qs != NULL) {



CVS commit: src/sys/dev/pci/qat

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 13:48:18 UTC 2020

Modified Files:
src/sys/dev/pci/qat: qat.c

Log Message:
opencrypto orders new_session -> process for us.

No need for membar_producer.

Discussed with hikaru@.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/pci/qat/qat.c

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



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 13:40:55 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
Add NXP/Freescale ESDHC specific support


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/acpi/sdhc_acpi.c

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



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 13:40:55 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
Add NXP/Freescale ESDHC specific support


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/acpi/sdhc_acpi.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/dev/acpi/sdhc_acpi.c
diff -u src/sys/dev/acpi/sdhc_acpi.c:1.10 src/sys/dev/acpi/sdhc_acpi.c:1.11
--- src/sys/dev/acpi/sdhc_acpi.c:1.10	Sat Feb  1 13:09:08 2020
+++ src/sys/dev/acpi/sdhc_acpi.c	Sat Feb  1 13:40:55 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdhc_acpi.c,v 1.10 2020/02/01 13:09:08 jmcneill Exp $	*/
+/*	$NetBSD: sdhc_acpi.c,v 1.11 2020/02/01 13:40:55 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2016 Kimihiro Nonaka 
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.10 2020/02/01 13:09:08 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.11 2020/02/01 13:40:55 jmcneill Exp $");
 
 #include 
 #include 
@@ -41,6 +41,10 @@ __KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,
 #include 
 #include 
 
+/* Freescale ESDHC */
+#define	SDHC_ESDHC_FLAGS	\
+(SDHC_FLAG_HAVE_DVS|SDHC_FLAG_NO_PWR0|SDHC_FLAG_32BIT_ACCESS|SDHC_FLAG_ENHANCED)
+
 #define _COMPONENT	ACPI_RESOURCE_COMPONENT
 ACPI_MODULE_NAME	("sdhc_acpi")
 
@@ -72,6 +76,7 @@ static const struct sdhc_acpi_slot {
 	int type;
 #define	SLOT_TYPE_SD	0	/* SD or SDIO */
 #define	SLOT_TYPE_EMMC	1	/* eMMC */
+	uint32_t flags;
 } sdhc_acpi_slot_map[] = {
 	{ "80865ACA",	NULL,	SLOT_TYPE_SD },
 	{ "80865ACC",	NULL,	SLOT_TYPE_EMMC },
@@ -84,6 +89,9 @@ static const struct sdhc_acpi_slot {
 	{ "INT33C6",	NULL,	SLOT_TYPE_SD },
 	{ "INT3436",	NULL,	SLOT_TYPE_SD },
 	{ "INT344D",	NULL,	SLOT_TYPE_SD },
+	{ "NXP0003",	"0",	SLOT_TYPE_SD,	SDHC_ESDHC_FLAGS },
+	{ "NXP0003",	"1",	SLOT_TYPE_EMMC,	SDHC_ESDHC_FLAGS },
+	/* Generic IDs last */
 	{ "PNP0D40",	NULL,	SLOT_TYPE_SD },
 	{ "PNP0FFF",	"3",	SLOT_TYPE_SD },
 };
@@ -192,6 +200,8 @@ sdhc_acpi_attach(device_t parent, device
 
 	sc->sc.sc_host = kmem_zalloc(sizeof(struct sdhc_host *), KM_SLEEP);
 
+	sc->sc.sc_flags |= slot->flags;
+
 	/* Enable DMA transfer */
 	sc->sc.sc_flags |= SDHC_FLAG_USE_DMA;
 



CVS commit: src/share/man/man9

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 13:35:12 UTC 2020

Modified Files:
src/share/man/man9: xcall.9

Log Message:
Redocument xc_barrier.

Be more clearer, and more correcter, about what it does.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/share/man/man9/xcall.9

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

Modified files:

Index: src/share/man/man9/xcall.9
diff -u src/share/man/man9/xcall.9:1.16 src/share/man/man9/xcall.9:1.17
--- src/share/man/man9/xcall.9:1.16	Sat Nov 30 02:22:23 2019
+++ src/share/man/man9/xcall.9	Sat Feb  1 13:35:11 2020
@@ -1,4 +1,4 @@
-.\" $NetBSD: xcall.9,v 1.16 2019/11/30 02:22:23 riastradh Exp $
+.\" $NetBSD: xcall.9,v 1.17 2020/02/01 13:35:11 riastradh Exp $
 .\"
 .\" Copyright (c) 2010 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,7 +27,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd November 29, 2019
+.Dd February 1, 2020
 .Dt XCALL 9
 .Os
 .Sh NAME
@@ -97,7 +97,7 @@ Functions being called should be relativ
 They may block on locks, but carefully and minimally, to not interfere
 with other cross calls in the system.
 .Sh FUNCTIONS
-.Bl -tag -width Fn
+.Bl -tag -width abcd
 .It Fn xc_broadcast "flags" "func" "arg1" "arg2"
 Call
 .Pf (* Fa func\| ) Ns Fo ""
@@ -147,19 +147,33 @@ for the corresponding cross-call to comp
 .Fn xc_wait
 should be called from a thread context.
 .It Fn xc_barrier "flags"
-Issue a broadcast cross-call that does nothing, using
-.Fa flags ,
+Issue a broadcast cross-call that does nothing,
 and wait for it to complete.
-This has two effects:
+.Pp
+This functions like a memory barrier that forces all prior operations
+in program order to globally happen before all subsequent operations in
+program order, as witnessed by every CPU.
+.Pp
+This additionally waits for all higher-priority activity on the CPU to
+complete, according to
+.Fa flags :
 .Bl -dash -compact
 .It
-This waits for the interrupt priority level to transition to
+.Fo xc_barrier
+.Li 0
+.Fc
+waits for any pending
+.Xr kpreempt_disable 9
+sections or activity at interrupt priority level above
 .Dv IPL_NONE
-at least once on all CPUs.
+to finish on all CPUs.
 .It
-This functions like a memory barrier that forces all prior operations
-in program order to globally happen before all subsequent operations in
-program order, as witnessed by every CPU.
+.Fo xc_barrier
+.Dv XC_HIGHPRI_IPL\| Ns Fn "" ipl
+.Fc
+waits for any pending activity at the software interrupt priority level
+.Fa ipl
+or higher to finish on all CPUs.
 .El
 .Pp
 .Fn xc_barrier



CVS commit: src/share/man/man9

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 13:35:12 UTC 2020

Modified Files:
src/share/man/man9: xcall.9

Log Message:
Redocument xc_barrier.

Be more clearer, and more correcter, about what it does.


To generate a diff of this commit:
cvs rdiff -u -r1.16 -r1.17 src/share/man/man9/xcall.9

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



CVS commit: src/sys/arch/arm/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 13:26:43 UTC 2020

Modified Files:
src/sys/arch/arm/acpi: acpi_pci_machdep.c acpi_pci_machdep.h files.acpi
Added Files:
src/sys/arch/arm/acpi: acpi_pci_layerscape_gen4.c

Log Message:
Add support for NXP Layerscape PCIe Gen4 (not ECAM compliant)


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/acpi/acpi_pci_layerscape_gen4.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/acpi/acpi_pci_machdep.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/acpi/acpi_pci_machdep.h
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/acpi/files.acpi

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



CVS commit: src/sys/arch/arm/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 13:26:43 UTC 2020

Modified Files:
src/sys/arch/arm/acpi: acpi_pci_machdep.c acpi_pci_machdep.h files.acpi
Added Files:
src/sys/arch/arm/acpi: acpi_pci_layerscape_gen4.c

Log Message:
Add support for NXP Layerscape PCIe Gen4 (not ECAM compliant)


To generate a diff of this commit:
cvs rdiff -u -r0 -r1.1 src/sys/arch/arm/acpi/acpi_pci_layerscape_gen4.c
cvs rdiff -u -r1.14 -r1.15 src/sys/arch/arm/acpi/acpi_pci_machdep.c
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/arm/acpi/acpi_pci_machdep.h
cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/acpi/files.acpi

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

Modified files:

Index: src/sys/arch/arm/acpi/acpi_pci_machdep.c
diff -u src/sys/arch/arm/acpi/acpi_pci_machdep.c:1.14 src/sys/arch/arm/acpi/acpi_pci_machdep.c:1.15
--- src/sys/arch/arm/acpi/acpi_pci_machdep.c:1.14	Thu Jan 23 11:59:37 2020
+++ src/sys/arch/arm/acpi/acpi_pci_machdep.c	Sat Feb  1 13:26:43 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_pci_machdep.c,v 1.14 2020/01/23 11:59:37 jmcneill Exp $ */
+/* $NetBSD: acpi_pci_machdep.c,v 1.15 2020/02/01 13:26:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
 #define	_INTR_PRIVATE
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: acpi_pci_machdep.c,v 1.14 2020/01/23 11:59:37 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_pci_machdep.c,v 1.15 2020/02/01 13:26:43 jmcneill Exp $");
 
 #include 
 #include 
@@ -101,6 +101,7 @@ static const struct acpi_pci_quirk acpi_
 	{ "AMAZON",	"GRAVITON",	0,		-1,	acpi_pci_graviton_init },
 	{ "ARMLTD",	"ARMN1SDP",	0x20181101,	0,	acpi_pci_n1sdp_init },
 	{ "ARMLTD",	"ARMN1SDP",	0x20181101,	1,	acpi_pci_n1sdp_init },
+	{ "NXP   ", "LX2160  ", 0,  -1,	acpi_pci_layerscape_gen4_init },
 };
 
 pci_chipset_tag_t acpi_pci_md_get_chipset_tag(struct acpi_softc *, int, int);

Index: src/sys/arch/arm/acpi/acpi_pci_machdep.h
diff -u src/sys/arch/arm/acpi/acpi_pci_machdep.h:1.6 src/sys/arch/arm/acpi/acpi_pci_machdep.h:1.7
--- src/sys/arch/arm/acpi/acpi_pci_machdep.h:1.6	Fri Jan 17 17:06:33 2020
+++ src/sys/arch/arm/acpi/acpi_pci_machdep.h	Sat Feb  1 13:26:43 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_pci_machdep.h,v 1.6 2020/01/17 17:06:33 jmcneill Exp $ */
+/* $NetBSD: acpi_pci_machdep.h,v 1.7 2020/02/01 13:26:43 jmcneill Exp $ */
 
 /*-
  * Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -43,6 +43,7 @@ struct acpi_pci_context {
 	bus_space_handle_t ap_conf_bsh;
 	int (*ap_conf_read)(pci_chipset_tag_t, pcitag_t, int, pcireg_t *);
 	int (*ap_conf_write)(pci_chipset_tag_t, pcitag_t, int, pcireg_t);
+	void *ap_conf_priv;
 	int ap_pciflags_clear;
 };
 
@@ -57,6 +58,7 @@ struct acpi_pci_quirk {
 const struct acpi_pci_quirk *	acpi_pci_md_find_quirk(int);
 
 void	acpi_pci_graviton_init(struct acpi_pci_context *);
+void	acpi_pci_layerscape_gen4_init(struct acpi_pci_context *);
 void	acpi_pci_n1sdp_init(struct acpi_pci_context *);
 
 #endif /* !_ARM_ACPI_PCI_MACHDEP_H */

Index: src/sys/arch/arm/acpi/files.acpi
diff -u src/sys/arch/arm/acpi/files.acpi:1.9 src/sys/arch/arm/acpi/files.acpi:1.10
--- src/sys/arch/arm/acpi/files.acpi:1.9	Fri Jan 17 17:06:33 2020
+++ src/sys/arch/arm/acpi/files.acpi	Sat Feb  1 13:26:43 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: files.acpi,v 1.9 2020/01/17 17:06:33 jmcneill Exp $
+#	$NetBSD: files.acpi,v 1.10 2020/02/01 13:26:43 jmcneill Exp $
 #
 # Configuration info for ACPI compliant ARM boards.
 #
@@ -14,6 +14,7 @@ file	arch/arm/acpi/acpi_iort.c		acpi
 file	arch/arm/acpi/acpi_machdep.c		acpi
 file	arch/arm/acpi/acpi_pci_machdep.c	acpi & pci
 file	arch/arm/acpi/acpi_pci_graviton.c	acpi & pci
+file	arch/arm/acpi/acpi_pci_layerscape_gen4.c	acpi & pci
 file	arch/arm/acpi/acpi_pci_n1sdp.c		acpi & pci
 file	arch/arm/acpi/acpi_platform.c		acpi
 file	arch/arm/acpi/acpi_simplefb.c		acpi & wsdisplay & genfb

Added files:

Index: src/sys/arch/arm/acpi/acpi_pci_layerscape_gen4.c
diff -u /dev/null src/sys/arch/arm/acpi/acpi_pci_layerscape_gen4.c:1.1
--- /dev/null	Sat Feb  1 13:26:43 2020
+++ src/sys/arch/arm/acpi/acpi_pci_layerscape_gen4.c	Sat Feb  1 13:26:43 2020
@@ -0,0 +1,277 @@
+/* $NetBSD: acpi_pci_layerscape_gen4.c,v 1.1 2020/02/01 13:26:43 jmcneill Exp $ */
+
+/*-
+ * Copyright (c) 2020 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Jared McNeill .
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *notice, this list of conditions and the following disclaimer in the
+ *documentation and/or other materials provided with the 

CVS commit: src/sys/dev/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 13:09:09 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
Use acpi_match_hid to match both _HID and _CID


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/acpi/sdhc_acpi.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/dev/acpi/sdhc_acpi.c
diff -u src/sys/dev/acpi/sdhc_acpi.c:1.9 src/sys/dev/acpi/sdhc_acpi.c:1.10
--- src/sys/dev/acpi/sdhc_acpi.c:1.9	Sun Dec 29 12:46:43 2019
+++ src/sys/dev/acpi/sdhc_acpi.c	Sat Feb  1 13:09:08 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: sdhc_acpi.c,v 1.9 2019/12/29 12:46:43 jmcneill Exp $	*/
+/*	$NetBSD: sdhc_acpi.c,v 1.10 2020/02/01 13:09:08 jmcneill Exp $	*/
 
 /*
  * Copyright (c) 2016 Kimihiro Nonaka 
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.9 2019/12/29 12:46:43 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sdhc_acpi.c,v 1.10 2020/02/01 13:09:08 jmcneill Exp $");
 
 #include 
 #include 
@@ -103,7 +103,8 @@ sdhc_acpi_find_slot(ACPI_DEVICE_INFO *ad
 
 	for (i = 0; i < __arraycount(sdhc_acpi_slot_map); i++) {
 		slot = _acpi_slot_map[i];
-		if (strcmp(hid, slot->hid) == 0) {
+		const char * const slot_id[] = { slot->hid, NULL };
+		if (acpi_match_hid(ad, slot_id)) {
 			if (slot->uid == NULL ||
 			((ad->Valid & ACPI_VALID_UID) != 0 &&
 			 uid != NULL &&



CVS commit: src/sys/dev/acpi

2020-02-01 Thread Jared D. McNeill
Module Name:src
Committed By:   jmcneill
Date:   Sat Feb  1 13:09:09 UTC 2020

Modified Files:
src/sys/dev/acpi: sdhc_acpi.c

Log Message:
Use acpi_match_hid to match both _HID and _CID


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/acpi/sdhc_acpi.c

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



Re: CVS commit: src/lib/libpthread

2020-02-01 Thread Kamil Rytarowski
On 31.01.2020 22:10, Andrew Doran wrote:
> On Fri, Jan 31, 2020 at 06:55:00PM -, Christos Zoulas wrote:
> 
>> In article <724af477-010b-9ddf-6ece-e23d7cf59...@gmx.com>,
>> Kamil Rytarowski   wrote:
>>> -=-=-=-=-=-
>>> -=-=-=-=-=-
>>>
>>> On 31.01.2020 03:38, Christos Zoulas wrote:
 And it is fixed now.

 christos

>>>
>>> OK. I am going to submit a bug report upstream and get some feedback
>>> what is the way forward here, delaying initialization.
>>
>> I think that the way forward (on our side) is to do away with libpthread,
>> merge it with libc and kill all the stub nonsense.
> 
> Agreed.
> 
> pthread__init() does some expensive stuff like _lwp_ctl().  I think we can
> safely & without hacks defer a lot of that till the first pthread_create().
> 
> Andrew
> 

This libc-libpthread split/merge is a red herring.

The problem here is with a mutual dependencies between POSIX threads
library and malloc library.

I did some investigation and here are my findings:

1. jemalloc abuses initialization and initializes self very early, with
a constructor:

/*
 * If an application creates a thread before doing any allocation in the
main
 * thread, then calls fork(2) in the main thread followed by memory
allocation
 * in the child process, a race can occur that results in deadlock
within the
 * child: the main thread may have forked while the created thread had
 * partially initialized the allocator.  Ordinarily jemalloc prevents
 * fork/malloc races via the following functions it registers during
 * initialization using pthread_atfork(), but of course that does no good if
 * the allocator isn't fully initialized at fork time.  The following
library
 * constructor is a partial solution to this problem.  It may still be
possible
 * to trigger the deadlock described above, but doing so would involve
forking
 * via a library constructor that runs before jemalloc's runs.
 */
#ifndef JEMALLOC_JET
JEMALLOC_ATTR(constructor)
static void

jemalloc_constructor(void) {
malloc_init();
}
#endif

Relevant commit:

commit 20f1fc95adb35ea63dc61f47f2b0ffbd37d39f32
Author: Jason Evans 
Date:   Tue Oct 9 14:46:22 2012 -0700

Fix fork(2)-related deadlocks.

Add a library constructor for jemalloc that initializes the allocator.
This fixes a race that could occur if threads were created by the main
thread prior to any memory allocation, followed by fork(2), and then
memory allocation in the child process.

Fix the prefork/postfork functions to acquire/release the ctl, prof, and
rtree mutexes.  This fixes various fork() child process deadlocks, but
one possible deadlock remains (intentionally) unaddressed: prof
backtracing can acquire runtime library mutexes, so deadlock is still
possible if heap profiling is enabled during fork().  This deadlock is
known to be a real issue in at least the case of libgcc-based
backtracing.

Reported by tfengjun.

2. FreeBSD added a hack and an internal pthread_mutex_init() version
called: _pthread_mutex_init_calloc_cb().. it passes a callback pointer
to jemalloc's tiny calloc().

This is very ugly and I consider it as the wrong way of boostraping malloc.

3. There is a problem inside libpthread. It as designed to not malloc()
early to not trigger malloc initialization, however it was broken as it
calls at_fork functions:

#0  malloc (size=size@entry=16) at
/usr/src/external/bsd/jemalloc/lib/../dist/src/jemalloc.c:2052
#1  0x776b71d71a44 in af_alloc () at
/usr/src/lib/libc/gen/pthread_atfork.c:80
#2  af_alloc () at /usr/src/lib/libc/gen/pthread_atfork.c:74
#3  _pthread_atfork (prepare=prepare@entry=0x0, parent=parent@entry=0x0,
child=child@entry=0x776b7220b3e5 )
at /usr/src/lib/libc/gen/pthread_atfork.c:121
#4  0x776b7220cacd in pthread__init () at
/usr/src/lib/libpthread/pthread.c:260
#5  0x776b71d7a585 in _libc_init () at
/usr/src/lib/libc/misc/initfini.c:128

These at_fork routines caused also issues with false-positives in Leak
Sanitizer. I had to pacify the sanitizer and disable tracking of its
allocations.


This patch removes '#if 0' hack from src/lib/libpthread and switches
at_fork to mmap()+munmap().

http://netbsd.org/~kamil/patch-00219-libpthread-libc-jemalloc.txt

This test disabled the constructor hack:

http://netbsd.org/~kamil/patch-00220-jemalloc-disable-constructor.txt

With these changes everything seems to work.

In order to avoid the FreeBSD specific hack with the constructor and
initialize jemalloc always during libc bootstrap I propose the following
approach:

 - add __libc_malloc_init() call in _libc_init()
 - redirect __libc_malloc_init() to jemalloc__init() with jemalloc
 - otherwise redirect to an empty stub

Here is a patch that does everything and works fine for me.

http://netbsd.org/~kamil/patch-00222-jemalloc-enhancements.txt

There are no longer jemalloc calls before being ready and jemalloc is
still initialized always but in its proper time.

(gdb) r
The program being 

CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:26 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
Reduce some ifdefs.


To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.55 src/sys/arch/arm/pic/pic.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/arch/arm/pic/pic.c
diff -u src/sys/arch/arm/pic/pic.c:1.54 src/sys/arch/arm/pic/pic.c:1.55
--- src/sys/arch/arm/pic/pic.c:1.54	Sat Feb  1 12:55:13 2020
+++ src/sys/arch/arm/pic/pic.c	Sat Feb  1 12:55:26 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pic.c,v 1.54 2020/02/01 12:55:13 riastradh Exp $	*/
+/*	$NetBSD: pic.c,v 1.55 2020/02/01 12:55:26 riastradh Exp $	*/
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -33,7 +33,7 @@
 #include "opt_multiprocessor.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.54 2020/02/01 12:55:13 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.55 2020/02/01 12:55:26 riastradh Exp $");
 
 #include 
 #include 
@@ -81,8 +81,20 @@ static void
 
 #ifdef MULTIPROCESSOR
 percpu_t *pic_pending_percpu;
+static struct pic_pending *
+pic_pending_get(void)
+{
+	return percpu_getref(pic_pending_percpu);
+}
+static void
+pic_pending_put(struct pic_pending *pend)
+{
+	percpu_putref(pic_pending_percpu);
+}
 #else
 struct pic_pending pic_pending;
+#define	pic_pending_get()	(_pending)
+#define	pic_pending_put(pend)	__nothing
 #endif /* MULTIPROCESSOR */
 #endif /* __HAVE_PIC_PENDING_INTRS */
 
@@ -244,16 +256,10 @@ pic_mark_pending_source(struct pic_softc
 	__BIT(is->is_irq & 0x1f));
 
 	atomic_or_32(>pic_pending_ipls, ipl_mask);
-#ifdef MULTIPROCESSOR
-	struct pic_pending *pend = percpu_getref(pic_pending_percpu);
-#else
-	struct pic_pending *pend = _pending;
-#endif
+	struct pic_pending *pend = pic_pending_get();
 	atomic_or_32(>pending_ipls, ipl_mask);
 	atomic_or_32(>pending_pics, __BIT(pic->pic_id));
-#ifdef MULTIPROCESSOR
-	percpu_putref(pic_pending_percpu);
-#endif
+	pic_pending_put(pend);
 }
 
 void
@@ -296,16 +302,10 @@ pic_mark_pending_sources(struct pic_soft
 	}
 
 	atomic_or_32(>pic_pending_ipls, ipl_mask);
-#ifdef MULTIPROCESSOR
-	struct pic_pending *pend = percpu_getref(pic_pending_percpu);
-#else
-	struct pic_pending *pend = _pending;
-#endif
+	struct pic_pending *pend = pic_pending_get();
 	atomic_or_32(>pending_ipls, ipl_mask);
 	atomic_or_32(>pending_pics, __BIT(pic->pic_id));
-#ifdef MULTIPROCESSOR
-	percpu_putref(pic_pending_percpu);
-#endif
+	pic_pending_put(pend);
 	return ipl_mask;
 }
 
@@ -553,11 +553,7 @@ pic_do_pending_ints(register_t psw, int 
 		return;
 	}
 #if defined(__HAVE_PIC_PENDING_INTRS)
-#ifdef MULTIPROCESSOR
-	struct pic_pending *pend = percpu_getref(pic_pending_percpu);
-#else
-	struct pic_pending *pend = _pending;
-#endif
+	struct pic_pending *pend = pic_pending_get();
 	while ((pend->pending_ipls & ~__BIT(newipl)) > __BIT(newipl)) {
 		KASSERT(pend->pending_ipls < __BIT(NIPL));
 		for (;;) {
@@ -571,9 +567,7 @@ pic_do_pending_ints(register_t psw, int 
 			pic_list_unblock_irqs(pend);
 		}
 	}
-#ifdef MULTIPROCESSOR
-	percpu_putref(pic_pending_percpu);
-#endif
+	pic_pending_put(pend);
 #endif /* __HAVE_PIC_PENDING_INTRS */
 #ifdef __HAVE_PREEMPTION
 	if (newipl == IPL_NONE && (ci->ci_astpending & __BIT(1))) {



CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:03 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
Switch arm pic allocation and initialization to percpu_create.


To generate a diff of this commit:
cvs rdiff -u -r1.52 -r1.53 src/sys/arch/arm/pic/pic.c

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



CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:03 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
Switch arm pic allocation and initialization to percpu_create.


To generate a diff of this commit:
cvs rdiff -u -r1.52 -r1.53 src/sys/arch/arm/pic/pic.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/arch/arm/pic/pic.c
diff -u src/sys/arch/arm/pic/pic.c:1.52 src/sys/arch/arm/pic/pic.c:1.53
--- src/sys/arch/arm/pic/pic.c:1.52	Tue Dec 24 20:40:09 2019
+++ src/sys/arch/arm/pic/pic.c	Sat Feb  1 12:55:02 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pic.c,v 1.52 2019/12/24 20:40:09 skrll Exp $	*/
+/*	$NetBSD: pic.c,v 1.53 2020/02/01 12:55:02 riastradh Exp $	*/
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -33,7 +33,7 @@
 #include "opt_multiprocessor.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.52 2019/12/24 20:40:09 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.53 2020/02/01 12:55:02 riastradh Exp $");
 
 #include 
 #include 
@@ -647,12 +647,8 @@ pic_add(struct pic_softc *pic, int irqba
 
 #if defined(__HAVE_PIC_PENDING_INTRS) && defined(MULTIPROCESSOR)
 	if (__predict_false(pic_pending_percpu == NULL)) {
-		pic_pending_percpu = percpu_alloc(sizeof(struct pic_pending));
-
-		/*
-		 * Now zero the per-cpu pending data.
-		 */
-		percpu_foreach(pic_pending_percpu, pic_pending_zero, NULL);
+		pic_pending_percpu = percpu_create(sizeof(struct pic_pending),
+		pic_pending_zero, NULL, NULL);
 	}
 #endif /* __HAVE_PIC_PENDING_INTRS && MULTIPROCESSOR */
 
@@ -702,12 +698,8 @@ pic_add(struct pic_softc *pic, int irqba
 	 * corrupt the pointers in the evcnts themselves.  Remember, any
 	 * problem can be solved with sufficient indirection.
 	 */
-	pic->pic_percpu = percpu_alloc(sizeof(struct pic_percpu));
-
-	/*
-	 * Now allocate the per-cpu evcnts.
-	 */
-	percpu_foreach(pic->pic_percpu, pic_percpu_allocate, pic);
+	pic->pic_percpu = percpu_create(sizeof(struct pic_percpu),
+	pic_percpu_allocate, NULL, pic);
 
 	pic->pic_sources = _sources[sourcebase];
 	pic->pic_irqbase = irqbase;



CVS commit: src/sys/dev/pci/ixgbe

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 12:55:23 UTC 2020

Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c

Log Message:
Adopt .

XXX This driver needs some work in this regard (practually no
stats are reported).


To generate a diff of this commit:
cvs rdiff -u -r1.221 -r1.222 src/sys/dev/pci/ixgbe/ixgbe.c

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



CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:13 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
pic_pending_zero is unnecessary; percpu_alloc already zeroes.


To generate a diff of this commit:
cvs rdiff -u -r1.53 -r1.54 src/sys/arch/arm/pic/pic.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/arch/arm/pic/pic.c
diff -u src/sys/arch/arm/pic/pic.c:1.53 src/sys/arch/arm/pic/pic.c:1.54
--- src/sys/arch/arm/pic/pic.c:1.53	Sat Feb  1 12:55:02 2020
+++ src/sys/arch/arm/pic/pic.c	Sat Feb  1 12:55:13 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pic.c,v 1.53 2020/02/01 12:55:02 riastradh Exp $	*/
+/*	$NetBSD: pic.c,v 1.54 2020/02/01 12:55:13 riastradh Exp $	*/
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -33,7 +33,7 @@
 #include "opt_multiprocessor.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.53 2020/02/01 12:55:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.54 2020/02/01 12:55:13 riastradh Exp $");
 
 #include 
 #include 
@@ -616,15 +616,6 @@ pic_percpu_allocate(void *v0, void *v1, 
 #endif
 }
 
-#if defined(__HAVE_PIC_PENDING_INTRS) && defined(MULTIPROCESSOR)
-static void
-pic_pending_zero(void *v0, void *v1, struct cpu_info *ci)
-{
-	struct pic_pending * const p = v0;
-	memset(p, 0, sizeof(*p));
-}
-#endif /* __HAVE_PIC_PENDING_INTRS && MULTIPROCESSOR */
-
 static int
 pic_init(void)
 {
@@ -646,10 +637,8 @@ pic_add(struct pic_softc *pic, int irqba
 	KASSERT(strlen(pic->pic_name) > 0);
 
 #if defined(__HAVE_PIC_PENDING_INTRS) && defined(MULTIPROCESSOR)
-	if (__predict_false(pic_pending_percpu == NULL)) {
-		pic_pending_percpu = percpu_create(sizeof(struct pic_pending),
-		pic_pending_zero, NULL, NULL);
-	}
+	if (__predict_false(pic_pending_percpu == NULL))
+		pic_pending_percpu = percpu_alloc(sizeof(struct pic_pending));
 #endif /* __HAVE_PIC_PENDING_INTRS && MULTIPROCESSOR */
 
 	mutex_enter(_lock);



CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:26 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
Reduce some ifdefs.


To generate a diff of this commit:
cvs rdiff -u -r1.54 -r1.55 src/sys/arch/arm/pic/pic.c

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



CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:35 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
KNF


To generate a diff of this commit:
cvs rdiff -u -r1.55 -r1.56 src/sys/arch/arm/pic/pic.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/arch/arm/pic/pic.c
diff -u src/sys/arch/arm/pic/pic.c:1.55 src/sys/arch/arm/pic/pic.c:1.56
--- src/sys/arch/arm/pic/pic.c:1.55	Sat Feb  1 12:55:26 2020
+++ src/sys/arch/arm/pic/pic.c	Sat Feb  1 12:55:35 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: pic.c,v 1.55 2020/02/01 12:55:26 riastradh Exp $	*/
+/*	$NetBSD: pic.c,v 1.56 2020/02/01 12:55:35 riastradh Exp $	*/
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -33,20 +33,20 @@
 #include "opt_multiprocessor.h"
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.55 2020/02/01 12:55:26 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: pic.c,v 1.56 2020/02/01 12:55:35 riastradh Exp $");
 
 #include 
 #include 
 #include 
 #include 
+#include 
 #include 
+#include 
 #include 
 #include 
 #include 
 #include 
-#include 
 #include 
-#include 
 
 #include 
 #include 
@@ -366,7 +366,6 @@ pic_dispatch(struct intrsource *is, void
 #endif
 		(void)(*func)(arg);
 
-
 	struct pic_percpu * const pcpu = percpu_getref(is->is_pic->pic_percpu);
 	KASSERT(pcpu->pcpu_magic == PICPERCPU_MAGIC);
 	pcpu->pcpu_evs[is->is_irq].ev_count++;
@@ -509,7 +508,6 @@ pic_list_unblock_irqs(struct pic_pending
 	}
 }
 
-
 struct pic_softc *
 pic_list_find_pic_by_pending_ipl(struct pic_pending *pend, uint32_t ipl_mask)
 {



CVS commit: src/sys/dev/pci/ixgbe

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 12:55:23 UTC 2020

Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c

Log Message:
Adopt .

XXX This driver needs some work in this regard (practually no
stats are reported).


To generate a diff of this commit:
cvs rdiff -u -r1.221 -r1.222 src/sys/dev/pci/ixgbe/ixgbe.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/dev/pci/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.221 src/sys/dev/pci/ixgbe/ixgbe.c:1.222
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.221	Tue Jan 21 14:55:55 2020
+++ src/sys/dev/pci/ixgbe/ixgbe.c	Sat Feb  1 12:55:22 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.221 2020/01/21 14:55:55 msaitoh Exp $ */
+/* $NetBSD: ixgbe.c,v 1.222 2020/02/01 12:55:22 thorpej Exp $ */
 
 /**
 
@@ -1701,11 +1701,13 @@ ixgbe_update_stats_counters(struct adapt
 	 * adapter->stats counters. It's required to make ifconfig -z
 	 * (SOICZIFDATA) work.
 	 */
-	ifp->if_collisions = 0;
+	/* XXX Actually, just fill in the per-cpu stats, please !!! */
 
 	/* Rx Errors */
-	ifp->if_iqdrops += total_missed_rx;
-	ifp->if_ierrors += crcerrs + rlec;
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+	if_statadd_ref(nsr, if_iqdrops, total_missed_rx);
+	if_statadd_ref(nsr, if_ierrors, crcerrs + rlec);
+	IF_STAT_PUTREF(ifp);
 } /* ixgbe_update_stats_counters */
 
 /



CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:35 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
KNF


To generate a diff of this commit:
cvs rdiff -u -r1.55 -r1.56 src/sys/arch/arm/pic/pic.c

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



CVS commit: src/sys

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:54:51 UTC 2020

Modified Files:
src/sys/net: if.c if_l2tp.c route.c
src/sys/netinet: wqinput.c

Log Message:
Switch sys/net to percpu_create.


To generate a diff of this commit:
cvs rdiff -u -r1.469 -r1.470 src/sys/net/if.c
cvs rdiff -u -r1.42 -r1.43 src/sys/net/if_l2tp.c
cvs rdiff -u -r1.226 -r1.227 src/sys/net/route.c
cvs rdiff -u -r1.6 -r1.7 src/sys/netinet/wqinput.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.469 src/sys/net/if.c:1.470
--- src/sys/net/if.c:1.469	Wed Jan 29 03:16:28 2020
+++ src/sys/net/if.c	Sat Feb  1 12:54:50 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if.c,v 1.469 2020/01/29 03:16:28 thorpej Exp $	*/
+/*	$NetBSD: if.c,v 1.470 2020/02/01 12:54:50 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2008 The NetBSD Foundation, Inc.
@@ -90,7 +90,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.469 2020/01/29 03:16:28 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if.c,v 1.470 2020/02/01 12:54:50 riastradh Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "opt_inet.h"
@@ -2916,17 +2916,6 @@ if_tunnel_ro_init_pc(void *p, void *arg 
 	tro->tr_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NONE);
 }
 
-percpu_t *
-if_tunnel_alloc_ro_percpu(void)
-{
-	percpu_t *ro_percpu;
-
-	ro_percpu = percpu_alloc(sizeof(struct tunnel_ro));
-	percpu_foreach(ro_percpu, if_tunnel_ro_init_pc, NULL);
-
-	return ro_percpu;
-}
-
 static void
 if_tunnel_ro_fini_pc(void *p, void *arg __unused, struct cpu_info *ci __unused)
 {
@@ -2938,11 +2927,18 @@ if_tunnel_ro_fini_pc(void *p, void *arg 
 	mutex_obj_free(tro->tr_lock);
 }
 
+percpu_t *
+if_tunnel_alloc_ro_percpu(void)
+{
+
+	return percpu_create(sizeof(struct tunnel_ro),
+	if_tunnel_ro_init_pc, if_tunnel_ro_fini_pc, NULL);
+}
+
 void
 if_tunnel_free_ro_percpu(percpu_t *ro_percpu)
 {
 
-	percpu_foreach(ro_percpu, if_tunnel_ro_fini_pc, NULL);
 	percpu_free(ro_percpu, sizeof(struct tunnel_ro));
 }
 

Index: src/sys/net/if_l2tp.c
diff -u src/sys/net/if_l2tp.c:1.42 src/sys/net/if_l2tp.c:1.43
--- src/sys/net/if_l2tp.c:1.42	Sat Feb  1 02:58:05 2020
+++ src/sys/net/if_l2tp.c	Sat Feb  1 12:54:50 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_l2tp.c,v 1.42 2020/02/01 02:58:05 riastradh Exp $	*/
+/*	$NetBSD: if_l2tp.c,v 1.43 2020/02/01 12:54:50 riastradh Exp $	*/
 
 /*
  * Copyright (c) 2017 Internet Initiative Japan Inc.
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_l2tp.c,v 1.42 2020/02/01 02:58:05 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_l2tp.c,v 1.43 2020/02/01 12:54:50 riastradh Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -267,8 +267,8 @@ l2tp_clone_create(struct if_clone *ifc, 
 
 	sc->l2tp_ro_percpu = if_tunnel_alloc_ro_percpu();
 
-	sc->l2tp_ifq_percpu = percpu_alloc(sizeof(struct ifqueue *));
-	percpu_foreach(sc->l2tp_ifq_percpu, l2tp_ifq_init_pc, NULL);
+	sc->l2tp_ifq_percpu = percpu_create(sizeof(struct ifqueue *),
+	l2tp_ifq_init_pc, l2tp_ifq_fini_pc, NULL);
 	sc->l2tp_si = softint_establish(si_flags, l2tpintr_softint, sc);
 
 	mutex_enter(_softcs.lock);
@@ -367,7 +367,6 @@ l2tp_clone_destroy(struct ifnet *ifp)
 	mutex_exit(>l2tp_lock);
 
 	softint_disestablish(sc->l2tp_si);
-	percpu_foreach(sc->l2tp_ifq_percpu, l2tp_ifq_fini_pc, NULL);
 	percpu_free(sc->l2tp_ifq_percpu, sizeof(struct ifqueue *));
 
 	mutex_enter(_softcs.lock);

Index: src/sys/net/route.c
diff -u src/sys/net/route.c:1.226 src/sys/net/route.c:1.227
--- src/sys/net/route.c:1.226	Wed Nov 13 02:51:22 2019
+++ src/sys/net/route.c	Sat Feb  1 12:54:50 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: route.c,v 1.226 2019/11/13 02:51:22 ozaki-r Exp $	*/
+/*	$NetBSD: route.c,v 1.227 2020/02/01 12:54:50 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc.
@@ -97,7 +97,7 @@
 #endif
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.226 2019/11/13 02:51:22 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: route.c,v 1.227 2020/02/01 12:54:50 riastradh Exp $");
 
 #include 
 #ifdef RTFLUSH_DEBUG
@@ -2231,12 +2231,9 @@ rtcache_percpu_init_cpu(void *p, void *a
 percpu_t *
 rtcache_percpu_alloc(void)
 {
-	percpu_t *pc;
 
-	pc = percpu_alloc(sizeof(struct route *));
-	percpu_foreach(pc, rtcache_percpu_init_cpu, NULL);
-
-	return pc;
+	return percpu_create(sizeof(struct route *),
+	rtcache_percpu_init_cpu, NULL, NULL);
 }
 
 const struct sockaddr *

Index: src/sys/netinet/wqinput.c
diff -u src/sys/netinet/wqinput.c:1.6 src/sys/netinet/wqinput.c:1.7
--- src/sys/netinet/wqinput.c:1.6	Thu Sep 19 04:09:34 2019
+++ src/sys/netinet/wqinput.c	Sat Feb  1 12:54:51 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: wqinput.c,v 1.6 2019/09/19 04:09:34 ozaki-r Exp $	*/
+/*	$NetBSD: wqinput.c,v 1.7 2020/02/01 12:54:51 riastradh Exp $	*/
 
 /*-
  * Copyright (c) 2017 Internet Initiative Japan Inc.
@@ -188,8 +188,8 @@ wqinput_create(const char *name, void 

CVS commit: src/sys/arch/arm/pic

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:55:13 UTC 2020

Modified Files:
src/sys/arch/arm/pic: pic.c

Log Message:
pic_pending_zero is unnecessary; percpu_alloc already zeroes.


To generate a diff of this commit:
cvs rdiff -u -r1.53 -r1.54 src/sys/arch/arm/pic/pic.c

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



CVS commit: src/sys/opencrypto

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:54:30 UTC 2020

Modified Files:
src/sys/opencrypto: crypto.c

Log Message:
Switch opencrypto to percpu_create.

Can't sleep for allocation in percpu_foreach.


To generate a diff of this commit:
cvs rdiff -u -r1.110 -r1.111 src/sys/opencrypto/crypto.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/opencrypto/crypto.c
diff -u src/sys/opencrypto/crypto.c:1.110 src/sys/opencrypto/crypto.c:1.111
--- src/sys/opencrypto/crypto.c:1.110	Sun Oct  6 15:11:17 2019
+++ src/sys/opencrypto/crypto.c	Sat Feb  1 12:54:30 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: crypto.c,v 1.110 2019/10/06 15:11:17 uwe Exp $ */
+/*	$NetBSD: crypto.c,v 1.111 2020/02/01 12:54:30 riastradh Exp $ */
 /*	$FreeBSD: src/sys/opencrypto/crypto.c,v 1.4.2.5 2003/02/26 00:14:05 sam Exp $	*/
 /*	$OpenBSD: crypto.c,v 1.41 2002/07/17 23:52:38 art Exp $	*/
 
@@ -53,7 +53,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: crypto.c,v 1.110 2019/10/06 15:11:17 uwe Exp $");
+__KERNEL_RCSID(0, "$NetBSD: crypto.c,v 1.111 2020/02/01 12:54:30 riastradh Exp $");
 
 #include 
 #include 
@@ -562,8 +562,8 @@ crypto_init0(void)
 	cryptkop_cache = pool_cache_init(sizeof(struct cryptkop),
 	coherency_unit, 0, 0, "cryptkop", NULL, IPL_NET, NULL, NULL, NULL);
 
-	crypto_crp_qs_percpu = percpu_alloc(sizeof(struct crypto_crp_qs));
-	percpu_foreach(crypto_crp_qs_percpu, crypto_crp_qs_init_pc, NULL);
+	crypto_crp_qs_percpu = percpu_create(sizeof(struct crypto_crp_qs),
+	crypto_crp_qs_init_pc, /*XXX*/NULL, NULL);
 
 	crypto_crp_ret_qs_init();
 



CVS commit: src/sys

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:54:51 UTC 2020

Modified Files:
src/sys/net: if.c if_l2tp.c route.c
src/sys/netinet: wqinput.c

Log Message:
Switch sys/net to percpu_create.


To generate a diff of this commit:
cvs rdiff -u -r1.469 -r1.470 src/sys/net/if.c
cvs rdiff -u -r1.42 -r1.43 src/sys/net/if_l2tp.c
cvs rdiff -u -r1.226 -r1.227 src/sys/net/route.c
cvs rdiff -u -r1.6 -r1.7 src/sys/netinet/wqinput.c

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



CVS commit: src/sys/opencrypto

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:54:30 UTC 2020

Modified Files:
src/sys/opencrypto: crypto.c

Log Message:
Switch opencrypto to percpu_create.

Can't sleep for allocation in percpu_foreach.


To generate a diff of this commit:
cvs rdiff -u -r1.110 -r1.111 src/sys/opencrypto/crypto.c

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



CVS commit: src/sys/kern

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:53:41 UTC 2020

Modified Files:
src/sys/kern: subr_percpu.c

Log Message:
KNF


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/kern/subr_percpu.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/kern/subr_percpu.c
diff -u src/sys/kern/subr_percpu.c:1.22 src/sys/kern/subr_percpu.c:1.23
--- src/sys/kern/subr_percpu.c:1.22	Sat Feb  1 12:51:18 2020
+++ src/sys/kern/subr_percpu.c	Sat Feb  1 12:53:41 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_percpu.c,v 1.22 2020/02/01 12:51:18 riastradh Exp $	*/
+/*	$NetBSD: subr_percpu.c,v 1.23 2020/02/01 12:53:41 riastradh Exp $	*/
 
 /*-
  * Copyright (c)2007,2008 YAMAMOTO Takashi,
@@ -31,12 +31,12 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: subr_percpu.c,v 1.22 2020/02/01 12:51:18 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_percpu.c,v 1.23 2020/02/01 12:53:41 riastradh Exp $");
 
 #include 
 #include 
-#include 
 #include 
+#include 
 #include 
 #include 
 #include 



CVS commit: src/sys/kern

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:53:41 UTC 2020

Modified Files:
src/sys/kern: subr_percpu.c

Log Message:
KNF


To generate a diff of this commit:
cvs rdiff -u -r1.22 -r1.23 src/sys/kern/subr_percpu.c

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



CVS commit: src/sys/kern

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:51:19 UTC 2020

Modified Files:
src/sys/kern: subr_percpu.c

Log Message:
Use __read_mostly and gather related __cacheline_aligned together.

Should save a few bytes of kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/kern/subr_percpu.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/kern/subr_percpu.c
diff -u src/sys/kern/subr_percpu.c:1.21 src/sys/kern/subr_percpu.c:1.22
--- src/sys/kern/subr_percpu.c:1.21	Sat Feb  1 12:49:02 2020
+++ src/sys/kern/subr_percpu.c	Sat Feb  1 12:51:18 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: subr_percpu.c,v 1.21 2020/02/01 12:49:02 riastradh Exp $	*/
+/*	$NetBSD: subr_percpu.c,v 1.22 2020/02/01 12:51:18 riastradh Exp $	*/
 
 /*-
  * Copyright (c)2007,2008 YAMAMOTO Takashi,
@@ -31,7 +31,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: subr_percpu.c,v 1.21 2020/02/01 12:49:02 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: subr_percpu.c,v 1.22 2020/02/01 12:51:18 riastradh Exp $");
 
 #include 
 #include 
@@ -55,9 +55,11 @@ struct percpu {
 };
 
 static krwlock_t	percpu_swap_lock	__cacheline_aligned;
-static kmutex_t		percpu_allocation_lock	__cacheline_aligned;
-static vmem_t *		percpu_offset_arena	__cacheline_aligned;
-static unsigned int	percpu_nextoff		__cacheline_aligned;
+static vmem_t *		percpu_offset_arena	__read_mostly;
+static struct {
+	kmutex_t	lock;
+	unsigned int	nextoff;
+} percpu_allocation __cacheline_aligned;
 
 static percpu_cpu_t *
 cpu_percpu(struct cpu_info *ci)
@@ -71,7 +73,7 @@ percpu_offset(percpu_t *pc)
 {
 	const unsigned int off = pc->pc_offset;
 
-	KASSERT(off < percpu_nextoff);
+	KASSERT(off < percpu_allocation.nextoff);
 	return off;
 }
 
@@ -172,10 +174,10 @@ percpu_backend_alloc(vmem_t *dummy, vmem
 		return ENOMEM;
 
 	size = roundup(size, PERCPU_IMPORT_SIZE);
-	mutex_enter(_allocation_lock);
-	offset = percpu_nextoff;
-	percpu_nextoff = nextoff = percpu_nextoff + size;
-	mutex_exit(_allocation_lock);
+	mutex_enter(_allocation.lock);
+	offset = percpu_allocation.nextoff;
+	percpu_allocation.nextoff = nextoff = percpu_allocation.nextoff + size;
+	mutex_exit(_allocation.lock);
 
 	percpu_cpu_enlarge(nextoff);
 
@@ -213,8 +215,8 @@ percpu_init(void)
 
 	ASSERT_SLEEPABLE();
 	rw_init(_swap_lock);
-	mutex_init(_allocation_lock, MUTEX_DEFAULT, IPL_NONE);
-	percpu_nextoff = PERCPU_QUANTUM_SIZE;
+	mutex_init(_allocation.lock, MUTEX_DEFAULT, IPL_NONE);
+	percpu_allocation.nextoff = PERCPU_QUANTUM_SIZE;
 
 	percpu_offset_arena = vmem_xcreate("percpu", 0, 0, PERCPU_QUANTUM_SIZE,
 	percpu_backend_alloc, NULL, NULL, PERCPU_QCACHE_MAX, VM_SLEEP,
@@ -231,7 +233,7 @@ void
 percpu_init_cpu(struct cpu_info *ci)
 {
 	percpu_cpu_t * const pcc = cpu_percpu(ci);
-	size_t size = percpu_nextoff; /* XXX racy */
+	size_t size = percpu_allocation.nextoff; /* XXX racy */
 
 	ASSERT_SLEEPABLE();
 	pcc->pcc_size = size;



CVS commit: src/sys/kern

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:51:19 UTC 2020

Modified Files:
src/sys/kern: subr_percpu.c

Log Message:
Use __read_mostly and gather related __cacheline_aligned together.

Should save a few bytes of kernel.


To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/kern/subr_percpu.c

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



CVS commit: src

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:49:02 UTC 2020

Modified Files:
src/distrib/sets/lists/comp: mi
src/share/man/man9: Makefile percpu.9
src/sys/kern: subr_percpu.c
src/sys/sys: percpu.h

Log Message:
New function percpu_create.

Associates a constructor and destructor with the percpu.  Currently
the constructor runs immediately, but in principle we could use the
same API for future CPU hotplug support.

This lets you sleep for allocation or draining users before
deallocation when setting up or tearing down a percpu -- currently we
have many abuses of percpu_foreach in tree for that purpose.

Proposed on tech-kern:
https://mail-index.NetBSD.org/tech-kern/2020/01/30/msg026036.html


To generate a diff of this commit:
cvs rdiff -u -r1.2307 -r1.2308 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.445 -r1.446 src/share/man/man9/Makefile
cvs rdiff -u -r1.12 -r1.13 src/share/man/man9/percpu.9
cvs rdiff -u -r1.20 -r1.21 src/sys/kern/subr_percpu.c
cvs rdiff -u -r1.3 -r1.4 src/sys/sys/percpu.h

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

Modified files:

Index: src/distrib/sets/lists/comp/mi
diff -u src/distrib/sets/lists/comp/mi:1.2307 src/distrib/sets/lists/comp/mi:1.2308
--- src/distrib/sets/lists/comp/mi:1.2307	Wed Jan 29 18:39:04 2020
+++ src/distrib/sets/lists/comp/mi	Sat Feb  1 12:49:02 2020
@@ -1,4 +1,4 @@
-#	$NetBSD: mi,v 1.2307 2020/01/29 18:39:04 maya Exp $
+#	$NetBSD: mi,v 1.2308 2020/02/01 12:49:02 riastradh Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 ./etc/mtree/set.compcomp-sys-root
@@ -11570,6 +11570,7 @@
 ./usr/share/man/cat9/pcu_used_p.0		comp-sys-catman		.cat
 ./usr/share/man/cat9/percpu.0			comp-sys-catman		.cat
 ./usr/share/man/cat9/percpu_alloc.0		comp-sys-catman		.cat
+./usr/share/man/cat9/percpu_create.0		comp-sys-catman		.cat
 ./usr/share/man/cat9/percpu_foreach.0		comp-sys-catman		.cat
 ./usr/share/man/cat9/percpu_free.0		comp-sys-catman		.cat
 ./usr/share/man/cat9/percpu_getref.0		comp-sys-catman		.cat
@@ -19498,6 +19499,7 @@
 ./usr/share/man/html9/pcu_used_p.html		comp-sys-htmlman	html
 ./usr/share/man/html9/percpu.html		comp-sys-htmlman	html
 ./usr/share/man/html9/percpu_alloc.html		comp-sys-htmlman	html
+./usr/share/man/html9/percpu_create.html	comp-sys-htmlman	html
 ./usr/share/man/html9/percpu_foreach.html	comp-sys-htmlman	html
 ./usr/share/man/html9/percpu_free.html		comp-sys-htmlman	html
 ./usr/share/man/html9/percpu_getref.html	comp-sys-htmlman	html
@@ -27585,6 +27587,7 @@
 ./usr/share/man/man9/pcu_used_p.9		comp-sys-man		.man
 ./usr/share/man/man9/percpu.9			comp-sys-man		.man
 ./usr/share/man/man9/percpu_alloc.9		comp-sys-man		.man
+./usr/share/man/man9/percpu_create.9		comp-sys-man		.man
 ./usr/share/man/man9/percpu_foreach.9		comp-sys-man		.man
 ./usr/share/man/man9/percpu_free.9		comp-sys-man		.man
 ./usr/share/man/man9/percpu_getref.9		comp-sys-man		.man

Index: src/share/man/man9/Makefile
diff -u src/share/man/man9/Makefile:1.445 src/share/man/man9/Makefile:1.446
--- src/share/man/man9/Makefile:1.445	Mon Jan 20 18:38:18 2020
+++ src/share/man/man9/Makefile	Sat Feb  1 12:49:02 2020
@@ -1,4 +1,4 @@
-#   $NetBSD: Makefile,v 1.445 2020/01/20 18:38:18 thorpej Exp $
+#   $NetBSD: Makefile,v 1.446 2020/02/01 12:49:02 riastradh Exp $
 
 #	Makefile for section 9 (kernel function and variable) manual pages.
 
@@ -663,6 +663,7 @@ MLINKS+=pcmcia.9 pcmcia_function_init.9 
 	pcmcia.9 pcmcia_cis_read_n.9 \
 	pcmcia.9 pcmcia_scan_cis.9
 MLINKS+=percpu.9 percpu_alloc.9 \
+	percpu.9 percpu_create.9 \
 	percpu.9 percpu_free.9 \
 	percpu.9 percpu_getref.9 \
 	percpu.9 percpu_putref.9 \

Index: src/share/man/man9/percpu.9
diff -u src/share/man/man9/percpu.9:1.12 src/share/man/man9/percpu.9:1.13
--- src/share/man/man9/percpu.9:1.12	Wed May 31 23:54:17 2017
+++ src/share/man/man9/percpu.9	Sat Feb  1 12:49:02 2020
@@ -1,4 +1,4 @@
-.\" $NetBSD: percpu.9,v 1.12 2017/05/31 23:54:17 chs Exp $
+.\" $NetBSD: percpu.9,v 1.13 2020/02/01 12:49:02 riastradh Exp $
 .\"
 .\" Copyright (c) 2010 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -27,12 +27,13 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd May 31, 2017
+.Dd January 29, 2020
 .Dt PERCPU 9
 .Os
 .Sh NAME
 .Nm percpu ,
 .Nm percpu_alloc ,
+.Nm percpu_create ,
 .Nm percpu_free ,
 .Nm percpu_getref ,
 .Nm percpu_putref ,
@@ -43,6 +44,8 @@
 .Vt typedef void (*percpu_callback_t)(void *, void *, struct cpu_info *);
 .Ft percpu_t *
 .Fn percpu_alloc "size_t size"
+.Ft percpu_t *
+.Fn percpu_create "size_t size" "percpu_callback_t ctor" "percpu_callback_t dtor" "void *arg"
 .Ft void
 .Fn percpu_free "percpu_t *pc" "size_t size"
 .Ft void *
@@ -85,6 +88,30 @@ The storage is initialized with zeroes.
 Treat this as an expensive operation.
 .Fn percpu_alloc
 returns a handle 

CVS commit: src

2020-02-01 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Sat Feb  1 12:49:02 UTC 2020

Modified Files:
src/distrib/sets/lists/comp: mi
src/share/man/man9: Makefile percpu.9
src/sys/kern: subr_percpu.c
src/sys/sys: percpu.h

Log Message:
New function percpu_create.

Associates a constructor and destructor with the percpu.  Currently
the constructor runs immediately, but in principle we could use the
same API for future CPU hotplug support.

This lets you sleep for allocation or draining users before
deallocation when setting up or tearing down a percpu -- currently we
have many abuses of percpu_foreach in tree for that purpose.

Proposed on tech-kern:
https://mail-index.NetBSD.org/tech-kern/2020/01/30/msg026036.html


To generate a diff of this commit:
cvs rdiff -u -r1.2307 -r1.2308 src/distrib/sets/lists/comp/mi
cvs rdiff -u -r1.445 -r1.446 src/share/man/man9/Makefile
cvs rdiff -u -r1.12 -r1.13 src/share/man/man9/percpu.9
cvs rdiff -u -r1.20 -r1.21 src/sys/kern/subr_percpu.c
cvs rdiff -u -r1.3 -r1.4 src/sys/sys/percpu.h

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



CVS commit: src/sys/dev/pci

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 12:45:05 UTC 2020

Modified Files:
src/sys/dev/pci: if_ixl.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/sys/dev/pci/if_ixl.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/dev/pci/if_ixl.c
diff -u src/sys/dev/pci/if_ixl.c:1.34 src/sys/dev/pci/if_ixl.c:1.35
--- src/sys/dev/pci/if_ixl.c:1.34	Fri Jan 31 03:30:37 2020
+++ src/sys/dev/pci/if_ixl.c	Sat Feb  1 12:45:05 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ixl.c,v 1.34 2020/01/31 03:30:37 yamaguchi Exp $	*/
+/*	$NetBSD: if_ixl.c,v 1.35 2020/02/01 12:45:05 thorpej Exp $	*/
 
 /*
  * Copyright (c) 2013-2015, Intel Corporation
@@ -434,11 +434,6 @@ struct ixl_tx_ring {
 	pcq_t			*txr_intrq;
 	void			*txr_si;
 
-	uint64_t		 txr_oerrors;	/* if_oerrors */
-	uint64_t		 txr_opackets;	/* if_opackets */
-	uint64_t		 txr_obytes;	/* if_obytes */
-	uint64_t		 txr_omcasts;	/* if_omcasts */
-
 	struct evcnt		 txr_defragged;
 	struct evcnt		 txr_defrag_failed;
 	struct evcnt		 txr_pcqdrop;
@@ -467,11 +462,6 @@ struct ixl_rx_ring {
 	bus_size_t		 rxr_tail;
 	unsigned int		 rxr_qid;
 
-	uint64_t		 rxr_ipackets;	/* if_ipackets */
-	uint64_t		 rxr_ibytes;	/* if_ibytes */
-	uint64_t		 rxr_iqdrops;	/* iqdrops */
-	uint64_t		 rxr_ierrors;	/* if_ierrors */
-
 	struct evcnt		 rxr_mgethdr_failed;
 	struct evcnt		 rxr_mgetcl_failed;
 	struct evcnt		 rxr_mbuf_load_failed;
@@ -1842,12 +1832,10 @@ ixl_ioctl(struct ifnet *ifp, u_long cmd,
 {
 	struct ifreq *ifr = (struct ifreq *)data;
 	struct ixl_softc *sc = (struct ixl_softc *)ifp->if_softc;
-	struct ixl_tx_ring *txr;
-	struct ixl_rx_ring *rxr;
 	const struct sockaddr *sa;
 	uint8_t addrhi[ETHER_ADDR_LEN], addrlo[ETHER_ADDR_LEN];
 	int s, error = 0;
-	unsigned int i, nmtu;
+	unsigned int nmtu;
 
 	switch (cmd) {
 	case SIOCSIFMTU:
@@ -1891,45 +1879,6 @@ ixl_ioctl(struct ifnet *ifp, u_long cmd,
 		}
 		break;
 
-	case SIOCGIFDATA:
-	case SIOCZIFDATA:
-		ifp->if_ipackets = 0;
-		ifp->if_ibytes = 0;
-		ifp->if_iqdrops = 0;
-		ifp->if_ierrors = 0;
-		ifp->if_opackets = 0;
-		ifp->if_obytes = 0;
-		ifp->if_omcasts = 0;
-
-		for (i = 0; i < sc->sc_nqueue_pairs_max; i++) {
-			txr = sc->sc_qps[i].qp_txr;
-			rxr = sc->sc_qps[i].qp_rxr;
-
-			mutex_enter(>rxr_lock);
-			ifp->if_ipackets += rxr->rxr_ipackets;
-			ifp->if_ibytes += rxr->rxr_ibytes;
-			ifp->if_iqdrops += rxr->rxr_iqdrops;
-			ifp->if_ierrors += rxr->rxr_ierrors;
-			if (cmd == SIOCZIFDATA) {
-rxr->rxr_ipackets = 0;
-rxr->rxr_ibytes = 0;
-rxr->rxr_iqdrops = 0;
-rxr->rxr_ierrors = 0;
-			}
-			mutex_exit(>rxr_lock);
-
-			mutex_enter(>txr_lock);
-			ifp->if_opackets += txr->txr_opackets;
-			ifp->if_obytes += txr->txr_obytes;
-			ifp->if_omcasts += txr->txr_omcasts;
-			if (cmd == SIOCZIFDATA) {
-txr->txr_opackets = 0;
-txr->txr_obytes = 0;
-txr->txr_omcasts = 0;
-			}
-			mutex_exit(>txr_lock);
-		}
-		/* FALLTHROUGH */
 	default:
 		s = splnet();
 		error = ether_ioctl(ifp, cmd, data);
@@ -2787,7 +2736,7 @@ ixl_tx_common_locked(struct ifnet *ifp, 
 		map = txm->txm_map;
 
 		if (ixl_load_mbuf(sc->sc_dmat, map, , txr) != 0) {
-			txr->txr_oerrors++;
+			if_statinc(ifp, if_oerrors);
 			m_freem(m);
 			continue;
 		}
@@ -2870,6 +2819,8 @@ ixl_txeof(struct ixl_softc *sc, struct i
 	ring = IXL_DMA_KVA(>txr_mem);
 	mask = sc->sc_tx_ring_ndescs - 1;
 
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+
 	do {
 		if (txlimit-- <= 0) {
 			more = 1;
@@ -2892,10 +2843,10 @@ ixl_txeof(struct ixl_softc *sc, struct i
 
 		m = txm->txm_m;
 		if (m != NULL) {
-			txr->txr_opackets++;
-			txr->txr_obytes += m->m_pkthdr.len;
+			if_statinc_ref(nsr, if_opackets);
+			if_statadd_ref(nsr, if_obytes, m->m_pkthdr.len);
 			if (ISSET(m->m_flags, M_MCAST))
-txr->txr_omcasts++;
+if_statinc_ref(nsr, if_omcasts);
 			m_freem(m);
 		}
 
@@ -2907,6 +2858,8 @@ ixl_txeof(struct ixl_softc *sc, struct i
 		done = 1;
 	} while (cons != prod);
 
+	IF_STAT_PUTREF(ifp);
+
 	bus_dmamap_sync(sc->sc_dmat, IXL_DMA_MAP(>txr_mem),
 	0, IXL_DMA_LEN(>txr_mem), BUS_DMASYNC_PREREAD);
 
@@ -3260,6 +3213,8 @@ ixl_rxeof(struct ixl_softc *sc, struct i
 	ring = IXL_DMA_KVA(>rxr_mem);
 	mask = sc->sc_rx_ring_ndescs - 1;
 
+	net_stat_ref_t nsr = IF_STAT_GETREF(ifp);
+
 	do {
 		if (rxlimit-- <= 0) {
 			more = 1;
@@ -3310,11 +3265,12 @@ ixl_rxeof(struct ixl_softc *sc, struct i
 			if (!ISSET(word,
 			IXL_RX_DESC_RXE | IXL_RX_DESC_OVERSIZE)) {
 m_set_rcvif(m, ifp);
-rxr->rxr_ipackets++;
-rxr->rxr_ibytes += m->m_pkthdr.len;
+if_statinc_ref(nsr, if_ipackets);
+if_statadd_ref(nsr, if_ibytes,
+m->m_pkthdr.len);
 if_percpuq_enqueue(ifp->if_percpuq, m);
 			} else {
-rxr->rxr_ierrors++;
+if_statinc_ref(nsr, if_ierrors);
 m_freem(m);
 			}
 
@@ -3331,9 +3287,11 @@ ixl_rxeof(struct ixl_softc *sc, struct i
 	if (done) {
 		rxr->rxr_cons = cons;
 	

CVS commit: src/sys/dev/pci

2020-02-01 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Sat Feb  1 12:45:05 UTC 2020

Modified Files:
src/sys/dev/pci: if_ixl.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.34 -r1.35 src/sys/dev/pci/if_ixl.c

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



  1   2   >