CVS commit: src/distrib/sets/lists/base

2023-03-22 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Thu Mar 23 05:38:19 UTC 2023

Modified Files:
src/distrib/sets/lists/base: shl.mi

Log Message:
un-obsolete ./usr/lib/libisns.so*.  it's normal for these to be
symlinks in this case, and they also exist in the case that
MKDYNAMICROOT is not set.

also fixes running "makefs" against a destdir and it's METALOG*.


To generate a diff of this commit:
cvs rdiff -u -r1.944 -r1.945 src/distrib/sets/lists/base/shl.mi

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/base/shl.mi
diff -u src/distrib/sets/lists/base/shl.mi:1.944 src/distrib/sets/lists/base/shl.mi:1.945
--- src/distrib/sets/lists/base/shl.mi:1.944	Wed Feb  8 15:52:46 2023
+++ src/distrib/sets/lists/base/shl.mi	Thu Mar 23 05:38:18 2023
@@ -1,4 +1,4 @@
-# $NetBSD: shl.mi,v 1.944 2023/02/08 15:52:46 christos Exp $
+# $NetBSD: shl.mi,v 1.945 2023/03/23 05:38:18 mrg Exp $
 #
 # Note:	Don't delete entries from here - mark them as "obsolete" instead,
 #	unless otherwise stated below.
@@ -393,9 +393,9 @@
 ./usr/lib/libiscsi.sobase-iscsi-shlib	iscsi,compatfile
 ./usr/lib/libiscsi.so.2base-iscsi-shlib	iscsi,compatfile
 ./usr/lib/libiscsi.so.2.0			base-iscsi-shlib	iscsi,compatfile
-./usr/lib/libisns.sobase-isns-shlib		obsolete,compatfile
-./usr/lib/libisns.so.0base-isns-shlib		obsolete,compatfile
-./usr/lib/libisns.so.0.0			base-isns-shlib		obsolete,compatfile
+./usr/lib/libisns.sobase-isns-shlib		compatfile
+./usr/lib/libisns.so.0base-isns-shlib		compatfile
+./usr/lib/libisns.so.0.0			base-isns-shlib		compatfile
 ./usr/lib/libjemalloc.so			base-sys-shlib		compatfile
 ./usr/lib/libjemalloc.so.0			base-sys-shlib		compatfile
 ./usr/lib/libjemalloc.so.0.0			base-sys-shlib		compatfile



CVS commit: src/distrib/sets/lists/base

2023-03-22 Thread matthew green
Module Name:src
Committed By:   mrg
Date:   Thu Mar 23 05:38:19 UTC 2023

Modified Files:
src/distrib/sets/lists/base: shl.mi

Log Message:
un-obsolete ./usr/lib/libisns.so*.  it's normal for these to be
symlinks in this case, and they also exist in the case that
MKDYNAMICROOT is not set.

also fixes running "makefs" against a destdir and it's METALOG*.


To generate a diff of this commit:
cvs rdiff -u -r1.944 -r1.945 src/distrib/sets/lists/base/shl.mi

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



CVS commit: xsrc/external/mit/libXaw/dist/src

2023-03-22 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Thu Mar 23 05:26:15 UTC 2023

Modified Files:
xsrc/external/mit/libXaw/dist/src: Pixmap.c Text.c TextAction.c

Log Message:
merge libXaw 1.0.15.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 xsrc/external/mit/libXaw/dist/src/Pixmap.c \
xsrc/external/mit/libXaw/dist/src/TextAction.c
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/libXaw/dist/src/Text.c

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



CVS commit: xsrc/external/mit/libXaw/dist/src

2023-03-22 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Thu Mar 23 05:26:15 UTC 2023

Modified Files:
xsrc/external/mit/libXaw/dist/src: Pixmap.c Text.c TextAction.c

Log Message:
merge libXaw 1.0.15.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 xsrc/external/mit/libXaw/dist/src/Pixmap.c \
xsrc/external/mit/libXaw/dist/src/TextAction.c
cvs rdiff -u -r1.3 -r1.4 xsrc/external/mit/libXaw/dist/src/Text.c

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

Modified files:

Index: xsrc/external/mit/libXaw/dist/src/Pixmap.c
diff -u xsrc/external/mit/libXaw/dist/src/Pixmap.c:1.2 xsrc/external/mit/libXaw/dist/src/Pixmap.c:1.3
--- xsrc/external/mit/libXaw/dist/src/Pixmap.c:1.2	Sun May  9 16:58:19 2021
+++ xsrc/external/mit/libXaw/dist/src/Pixmap.c	Thu Mar 23 05:26:15 2023
@@ -690,6 +690,7 @@ GetResourcePixmapPath(Display *display)
 		length = (length + (int)strlen(tok) + 3);
 	}
 	}
+	XtFree(buffer);
 	pixmap_path = XtRealloc(pixmap_path, (Cardinal)((size_t)length + strlen(default_path) + 2));
 	if (length)
 	pixmap_path[length++] = ':';
Index: xsrc/external/mit/libXaw/dist/src/TextAction.c
diff -u xsrc/external/mit/libXaw/dist/src/TextAction.c:1.2 xsrc/external/mit/libXaw/dist/src/TextAction.c:1.3
--- xsrc/external/mit/libXaw/dist/src/TextAction.c:1.2	Sun May  9 16:58:57 2021
+++ xsrc/external/mit/libXaw/dist/src/TextAction.c	Thu Mar 23 05:26:15 2023
@@ -2607,7 +2607,7 @@ InsertNewLineAndIndent(Widget w, XEvent 
 	strcpy(++ptr, line_to_ip);
 
 	length++;
-	while (length && (isspace(*ptr) || (*ptr == XawTAB)))
+	while (length && (isspace((unsigned char)*ptr) || (*ptr == XawTAB)))
 	ptr++, length--;
 	*ptr = '\0';
 	text.length = (int)strlen(text.ptr);
@@ -2822,7 +2822,7 @@ RedrawDisplay(Widget w, XEvent *event, S
 
 /* This is kind of a hack, but, only one text widget can have focus at
  * a time on one display. There is a problem in the implementation of the
- * text widget, the scrollbars can not be adressed via editres, since they
+ * text widget, the scrollbars can not be addressed via editres, since they
  * are not children of a subclass of composite.
  * The focus variable is required to make sure only one text window will
  * show a block cursor at one time.
@@ -2971,7 +2971,7 @@ TextLeaveWindow(Widget w, XEvent *event,
  *	Arguments: ctx - The text widget.
  *
  * Description:
- *	  Breaks the line at the previous word boundry when
+ *	  Breaks the line at the previous word boundary when
  *	called inside InsertChar.
  */
 static void
@@ -3201,7 +3201,7 @@ InsertChar(Widget w, XEvent *event, Stri
  *
  * i18n requires the ability to specify multiple characters in a hexa-
  * decimal string at once.  Since Insert was already too long, I made
- * this a seperate routine.
+ * this a separate routine.
  *
  * A legal hex string in MBNF: '0' 'x' ( HEX-DIGIT HEX-DIGIT )+ '\0'
  *
@@ -3257,7 +3257,7 @@ IfHexConvertHexElseReturnParam(const cha
 	}
 }
 
-/* We quit the above loop becasue we hit a non hex.  If that char is \0... */
+/* We quit the above loop because we hit a non hex.  If that char is \0... */
 if ((c == '\0') && first_digit) {
 	*len_return = (int)strlen(hexval);
 	return (hexval);   /* ...it was a legal hex string, so return it */
@@ -3391,7 +3391,7 @@ Numeric(Widget w, XEvent *event, String 
 	long mult = ctx->text.mult;
 
 	if (*num_params != 1 || strlen(params[0]) != 1
-	|| (!isdigit(params[0][0])
+	|| (!isdigit((unsigned char)params[0][0])
 		&& (params[0][0] != '-' || mult != 0))) {
 	char err_buf[256];
 
@@ -3589,7 +3589,7 @@ StripOutOldCRs(TextWidget ctx, XawTextPo
 		if (!iswspace(((wchar_t*)buf)[i]) || ((periodPos + i) >= to))
 			break;
 		}
-		else if (!isspace(buf[i]) || (periodPos + i) >= to)
+		else if (!isspace((unsigned char)buf[i]) || (periodPos + i) >= to)
 		break;
 
 	XtFree(buf);
@@ -3679,7 +3679,7 @@ InsertNewCRs(TextWidget ctx, XawTextPosi
 		if (!iswspace(((wchar_t*)buf)[i]))
 		break;
 	}
-	else if (!isspace(buf[i]))
+	else if (!isspace((unsigned char)buf[i]))
 		break;
 
 	to -= (i - 1);
@@ -3809,7 +3809,7 @@ GetBlockBoundaries(TextWidget ctx,
 			   XawMin(ctx->text.s.left, ctx->text.s.right),
 			   XawstEOL, XawsdLeft, 1, False);
 	to   = SrcScan(ctx->text.source,
-			   XawMax(ctx->text.s.right, ctx->text.s.right),
+			   XawMax(ctx->text.s.left, ctx->text.s.right),
 			   XawstEOL, XawsdRight, 1, False);
 	}
 	else {
@@ -4128,7 +4128,7 @@ NoOp(Widget w, XEvent *event _X_UNUSED, 
 	case 'R':
 	case 'r':
 	XBell(XtDisplay(w), 0);
-	/*FALLTROUGH*/
+	/*FALLTHROUGH*/
 	default:
 	break;
 }

Index: xsrc/external/mit/libXaw/dist/src/Text.c
diff -u xsrc/external/mit/libXaw/dist/src/Text.c:1.3 xsrc/external/mit/libXaw/dist/src/Text.c:1.4
--- xsrc/external/mit/libXaw/dist/src/Text.c:1.3	Mon Apr 26 21:25:12 2021
+++ xsrc/external/mit/libXaw/dist/src/Text.c	Thu Mar 23 05:26:15 2023
@@ -925,7 

CVS import: xsrc/external/mit/libXaw/dist

2023-03-22 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Thu Mar 23 05:25:50 UTC 2023

Update of /cvsroot/xsrc/external/mit/libXaw/dist
In directory ivanova.netbsd.org:/tmp/cvs-serv8243

Log Message:
initial import of libXaw-1.0.15

Status:

Vendor Tag: xorg
Release Tags:   libXaw-1-0-15

U xsrc/external/mit/libXaw/dist/docbook.am
U xsrc/external/mit/libXaw/dist/COPYING
U xsrc/external/mit/libXaw/dist/config.h.in
U xsrc/external/mit/libXaw/dist/compile
U xsrc/external/mit/libXaw/dist/config.guess
U xsrc/external/mit/libXaw/dist/missing
U xsrc/external/mit/libXaw/dist/ltmain.sh
U xsrc/external/mit/libXaw/dist/aclocal.m4
U xsrc/external/mit/libXaw/dist/depcomp
U xsrc/external/mit/libXaw/dist/install-sh
U xsrc/external/mit/libXaw/dist/autogen.sh
U xsrc/external/mit/libXaw/dist/Makefile.in
U xsrc/external/mit/libXaw/dist/xaw7.pc.in
U xsrc/external/mit/libXaw/dist/INSTALL
U xsrc/external/mit/libXaw/dist/xaw6.pc.in
U xsrc/external/mit/libXaw/dist/configure
U xsrc/external/mit/libXaw/dist/Makefile.am
U xsrc/external/mit/libXaw/dist/configure.ac
U xsrc/external/mit/libXaw/dist/config.sub
U xsrc/external/mit/libXaw/dist/README.md
U xsrc/external/mit/libXaw/dist/ChangeLog
U xsrc/external/mit/libXaw/dist/specs/SmeLine.xml
U xsrc/external/mit/libXaw/dist/specs/Box.xml
U xsrc/external/mit/libXaw/dist/specs/SimpleMenu.xml
U xsrc/external/mit/libXaw/dist/specs/List.xml
U xsrc/external/mit/libXaw/dist/specs/Template_public_header_file.xml
U xsrc/external/mit/libXaw/dist/specs/Label.xml
U xsrc/external/mit/libXaw/dist/specs/TextSource.xml
U xsrc/external/mit/libXaw/dist/specs/Tree.xml
U xsrc/external/mit/libXaw/dist/specs/Viewport.xml
U xsrc/external/mit/libXaw/dist/specs/Sme.xml
U xsrc/external/mit/libXaw/dist/specs/CH1.xml
U xsrc/external/mit/libXaw/dist/specs/CH6.xml
U xsrc/external/mit/libXaw/dist/specs/Template_widget_source_file.xml
U xsrc/external/mit/libXaw/dist/specs/TextSink.xml
U xsrc/external/mit/libXaw/dist/specs/libXaw.xml
U xsrc/external/mit/libXaw/dist/specs/libXaw.ent.in
U xsrc/external/mit/libXaw/dist/specs/Paned.xml
U xsrc/external/mit/libXaw/dist/specs/TextFuncs.xml
U xsrc/external/mit/libXaw/dist/specs/Scrollbar.xml
U xsrc/external/mit/libXaw/dist/specs/Grip.xml
U xsrc/external/mit/libXaw/dist/specs/AsciiSink.xml
U xsrc/external/mit/libXaw/dist/specs/Template_private_header_file.xml
U xsrc/external/mit/libXaw/dist/specs/CH7.xml
U xsrc/external/mit/libXaw/dist/specs/Repeater.xml
U xsrc/external/mit/libXaw/dist/specs/Porthole.xml
U xsrc/external/mit/libXaw/dist/specs/TextCustom.xml
U xsrc/external/mit/libXaw/dist/specs/CH3.xml
U xsrc/external/mit/libXaw/dist/specs/CH4.xml
U xsrc/external/mit/libXaw/dist/specs/Simple.xml
U xsrc/external/mit/libXaw/dist/specs/Template.xml
U xsrc/external/mit/libXaw/dist/specs/AsciiText.xml
U xsrc/external/mit/libXaw/dist/specs/Text.xml
U xsrc/external/mit/libXaw/dist/specs/Makefile.am
U xsrc/external/mit/libXaw/dist/specs/Toggle.xml
U xsrc/external/mit/libXaw/dist/specs/Form.xml
U xsrc/external/mit/libXaw/dist/specs/Dialog.xml
U xsrc/external/mit/libXaw/dist/specs/TPage_Credits.xml
U xsrc/external/mit/libXaw/dist/specs/Panner.xml
U xsrc/external/mit/libXaw/dist/specs/TextActions.xml
U 
xsrc/external/mit/libXaw/dist/specs/TextActions_default_translation_bindings.xml
U xsrc/external/mit/libXaw/dist/specs/SmeBSB.xml
U xsrc/external/mit/libXaw/dist/specs/CH5.xml
U xsrc/external/mit/libXaw/dist/specs/CH2.xml
U xsrc/external/mit/libXaw/dist/specs/StripChart.xml
U xsrc/external/mit/libXaw/dist/specs/AsciiSource.xml
U xsrc/external/mit/libXaw/dist/specs/MenuButton.xml
U xsrc/external/mit/libXaw/dist/specs/Makefile.in
U xsrc/external/mit/libXaw/dist/specs/TextActions_text_widget_actions.xml
U xsrc/external/mit/libXaw/dist/specs/Command.xml
U xsrc/external/mit/libXaw/dist/include/Makefile.in
U xsrc/external/mit/libXaw/dist/include/Makefile.am
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Tip.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/AsciiTextP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/CommandP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/MenuButtoP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Form.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Scrollbar.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Dialog.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/MenuButton.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/PortholeP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/GripP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/VendorEP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/List.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/ListP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Text.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/TextSrc.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Toggle.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/TextSinkP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/TreeP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Sme.h
U 

CVS import: xsrc/external/mit/libXaw/dist

2023-03-22 Thread matthew green
Module Name:xsrc
Committed By:   mrg
Date:   Thu Mar 23 05:25:50 UTC 2023

Update of /cvsroot/xsrc/external/mit/libXaw/dist
In directory ivanova.netbsd.org:/tmp/cvs-serv8243

Log Message:
initial import of libXaw-1.0.15

Status:

Vendor Tag: xorg
Release Tags:   libXaw-1-0-15

U xsrc/external/mit/libXaw/dist/docbook.am
U xsrc/external/mit/libXaw/dist/COPYING
U xsrc/external/mit/libXaw/dist/config.h.in
U xsrc/external/mit/libXaw/dist/compile
U xsrc/external/mit/libXaw/dist/config.guess
U xsrc/external/mit/libXaw/dist/missing
U xsrc/external/mit/libXaw/dist/ltmain.sh
U xsrc/external/mit/libXaw/dist/aclocal.m4
U xsrc/external/mit/libXaw/dist/depcomp
U xsrc/external/mit/libXaw/dist/install-sh
U xsrc/external/mit/libXaw/dist/autogen.sh
U xsrc/external/mit/libXaw/dist/Makefile.in
U xsrc/external/mit/libXaw/dist/xaw7.pc.in
U xsrc/external/mit/libXaw/dist/INSTALL
U xsrc/external/mit/libXaw/dist/xaw6.pc.in
U xsrc/external/mit/libXaw/dist/configure
U xsrc/external/mit/libXaw/dist/Makefile.am
U xsrc/external/mit/libXaw/dist/configure.ac
U xsrc/external/mit/libXaw/dist/config.sub
U xsrc/external/mit/libXaw/dist/README.md
U xsrc/external/mit/libXaw/dist/ChangeLog
U xsrc/external/mit/libXaw/dist/specs/SmeLine.xml
U xsrc/external/mit/libXaw/dist/specs/Box.xml
U xsrc/external/mit/libXaw/dist/specs/SimpleMenu.xml
U xsrc/external/mit/libXaw/dist/specs/List.xml
U xsrc/external/mit/libXaw/dist/specs/Template_public_header_file.xml
U xsrc/external/mit/libXaw/dist/specs/Label.xml
U xsrc/external/mit/libXaw/dist/specs/TextSource.xml
U xsrc/external/mit/libXaw/dist/specs/Tree.xml
U xsrc/external/mit/libXaw/dist/specs/Viewport.xml
U xsrc/external/mit/libXaw/dist/specs/Sme.xml
U xsrc/external/mit/libXaw/dist/specs/CH1.xml
U xsrc/external/mit/libXaw/dist/specs/CH6.xml
U xsrc/external/mit/libXaw/dist/specs/Template_widget_source_file.xml
U xsrc/external/mit/libXaw/dist/specs/TextSink.xml
U xsrc/external/mit/libXaw/dist/specs/libXaw.xml
U xsrc/external/mit/libXaw/dist/specs/libXaw.ent.in
U xsrc/external/mit/libXaw/dist/specs/Paned.xml
U xsrc/external/mit/libXaw/dist/specs/TextFuncs.xml
U xsrc/external/mit/libXaw/dist/specs/Scrollbar.xml
U xsrc/external/mit/libXaw/dist/specs/Grip.xml
U xsrc/external/mit/libXaw/dist/specs/AsciiSink.xml
U xsrc/external/mit/libXaw/dist/specs/Template_private_header_file.xml
U xsrc/external/mit/libXaw/dist/specs/CH7.xml
U xsrc/external/mit/libXaw/dist/specs/Repeater.xml
U xsrc/external/mit/libXaw/dist/specs/Porthole.xml
U xsrc/external/mit/libXaw/dist/specs/TextCustom.xml
U xsrc/external/mit/libXaw/dist/specs/CH3.xml
U xsrc/external/mit/libXaw/dist/specs/CH4.xml
U xsrc/external/mit/libXaw/dist/specs/Simple.xml
U xsrc/external/mit/libXaw/dist/specs/Template.xml
U xsrc/external/mit/libXaw/dist/specs/AsciiText.xml
U xsrc/external/mit/libXaw/dist/specs/Text.xml
U xsrc/external/mit/libXaw/dist/specs/Makefile.am
U xsrc/external/mit/libXaw/dist/specs/Toggle.xml
U xsrc/external/mit/libXaw/dist/specs/Form.xml
U xsrc/external/mit/libXaw/dist/specs/Dialog.xml
U xsrc/external/mit/libXaw/dist/specs/TPage_Credits.xml
U xsrc/external/mit/libXaw/dist/specs/Panner.xml
U xsrc/external/mit/libXaw/dist/specs/TextActions.xml
U 
xsrc/external/mit/libXaw/dist/specs/TextActions_default_translation_bindings.xml
U xsrc/external/mit/libXaw/dist/specs/SmeBSB.xml
U xsrc/external/mit/libXaw/dist/specs/CH5.xml
U xsrc/external/mit/libXaw/dist/specs/CH2.xml
U xsrc/external/mit/libXaw/dist/specs/StripChart.xml
U xsrc/external/mit/libXaw/dist/specs/AsciiSource.xml
U xsrc/external/mit/libXaw/dist/specs/MenuButton.xml
U xsrc/external/mit/libXaw/dist/specs/Makefile.in
U xsrc/external/mit/libXaw/dist/specs/TextActions_text_widget_actions.xml
U xsrc/external/mit/libXaw/dist/specs/Command.xml
U xsrc/external/mit/libXaw/dist/include/Makefile.in
U xsrc/external/mit/libXaw/dist/include/Makefile.am
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Tip.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/AsciiTextP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/CommandP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/MenuButtoP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Form.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Scrollbar.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Dialog.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/MenuButton.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/PortholeP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/GripP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/VendorEP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/List.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/ListP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Text.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/TextSrc.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Toggle.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/TextSinkP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/TreeP.h
U xsrc/external/mit/libXaw/dist/include/X11/Xaw/Sme.h
U 

CVS commit: src/sys/dev

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:55:11 UTC 2023

Modified Files:
src/sys/dev/pci: if_vioif.c ld_virtio.c vio9p.c viomb.c viornd.c
vioscsi.c virtio.c virtiovar.h
src/sys/dev/virtio: viocon.c

Log Message:
Added functions to set interrupt handler and index into virtqueue


To generate a diff of this commit:
cvs rdiff -u -r1.103 -r1.104 src/sys/dev/pci/if_vioif.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/ld_virtio.c \
src/sys/dev/pci/vioscsi.c
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/pci/vio9p.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/viomb.c
cvs rdiff -u -r1.19 -r1.20 src/sys/dev/pci/viornd.c
cvs rdiff -u -r1.66 -r1.67 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/pci/virtiovar.h
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/virtio/viocon.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.103 src/sys/dev/pci/if_vioif.c:1.104
--- src/sys/dev/pci/if_vioif.c:1.103	Thu Mar 23 03:27:48 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 03:55:11 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.103 2023/03/23 03:27:48 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.104 2023/03/23 03:55:11 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.103 2023/03/23 03:27:48 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.104 2023/03/23 03:55:11 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -596,8 +596,10 @@ vioif_attach(device_t parent, device_t s
 		 * Allocating a virtqueue for control channel
 		 */
 		sc->sc_ctrlq.ctrlq_vq = >sc_vqs[ctrlq_idx];
-		r = virtio_alloc_vq(vsc, ctrlq->ctrlq_vq, ctrlq_idx,
-		NBPG, 1, "control");
+		virtio_init_vq(vsc, ctrlq->ctrlq_vq, ctrlq_idx,
+		vioif_ctrl_intr, ctrlq);
+
+		r = virtio_alloc_vq(vsc, ctrlq->ctrlq_vq, NBPG, 1, "control");
 		if (r != 0) {
 			aprint_error_dev(self, "failed to allocate "
 			"a virtqueue for control channel, error code %d\n",
@@ -606,9 +608,6 @@ vioif_attach(device_t parent, device_t s
 			sc->sc_has_ctrl = false;
 			cv_destroy(>ctrlq_wait);
 			mutex_destroy(>ctrlq_wait_lock);
-		} else {
-			ctrlq->ctrlq_vq->vq_intrhand = vioif_ctrl_intr;
-			ctrlq->ctrlq_vq->vq_intrhand_arg = (void *) ctrlq;
 		}
 	}
 
@@ -623,7 +622,7 @@ vioif_attach(device_t parent, device_t s
 		goto err;
 
 	r = virtio_child_attach_finish(vsc, sc->sc_vqs, nvqs,
-	vioif_config_change, virtio_vq_intrhand, req_flags);
+	vioif_config_change, req_flags);
 	if (r != 0)
 		goto err;
 
@@ -1470,15 +1469,15 @@ vioif_netqueue_init(struct vioif_softc *
 	"%s-%s", device_xname(sc->sc_dev), qname);
 
 	mutex_init(>netq_lock, MUTEX_DEFAULT, IPL_NET);
-	r = virtio_alloc_vq(vsc, vq, qid,
+	virtio_init_vq(vsc, vq, qid, params[dir].intrhand, netq);
+
+	r = virtio_alloc_vq(vsc, vq,
 	params[dir].segsize + sc->sc_hdr_size,
 	params[dir].nsegs, qname);
 	if (r != 0)
 		goto err;
 	netq->netq_vq = vq;
 
-	netq->netq_vq->vq_intrhand = params[dir].intrhand;
-	netq->netq_vq->vq_intrhand_arg = netq;
 	netq->netq_softint = softint_establish(softint_flags,
 	params[dir].sihand, netq);
 	if (netq->netq_softint == NULL) {
@@ -1534,8 +1533,6 @@ err:
 		softint_disestablish(netq->netq_softint);
 		netq->netq_softint = NULL;
 	}
-	netq->netq_vq->vq_intrhand = NULL;
-	netq->netq_vq->vq_intrhand_arg = NULL;
 
 	virtio_free_vq(vsc, vq);
 	mutex_destroy(>netq_lock);

Index: src/sys/dev/pci/ld_virtio.c
diff -u src/sys/dev/pci/ld_virtio.c:1.31 src/sys/dev/pci/ld_virtio.c:1.32
--- src/sys/dev/pci/ld_virtio.c:1.31	Thu Mar 23 03:27:48 2023
+++ src/sys/dev/pci/ld_virtio.c	Thu Mar 23 03:55:11 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: ld_virtio.c,v 1.31 2023/03/23 03:27:48 yamaguchi Exp $	*/
+/*	$NetBSD: ld_virtio.c,v 1.32 2023/03/23 03:55:11 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2010 Minoura Makoto.
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ld_virtio.c,v 1.31 2023/03/23 03:27:48 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld_virtio.c,v 1.32 2023/03/23 03:55:11 yamaguchi Exp $");
 
 #include 
 #include 
@@ -332,15 +332,17 @@ ld_virtio_attach(device_t parent, device
 	/* 2 for the minimum size */
 	maxnsegs += VIRTIO_BLK_MIN_SEGMENTS;
 
-	if (virtio_alloc_vq(vsc, >sc_vq, 0, maxxfersize, maxnsegs,
+	virtio_init_vq_vqdone(vsc, >sc_vq, 0,
+	ld_virtio_vq_done);
+
+	if (virtio_alloc_vq(vsc, >sc_vq, maxxfersize, maxnsegs,
 	"I/O request") != 0) {
 		goto err;
 	}
 	qsize = sc->sc_vq.vq_num;
-	sc->sc_vq.vq_done = ld_virtio_vq_done;
 
 	if (virtio_child_attach_finish(vsc, >sc_vq, 1,
-	NULL, virtio_vq_intr, VIRTIO_F_INTR_MSIX) != 0)
+	NULL, VIRTIO_F_INTR_MSIX) != 0)
 		goto err;
 
 	ld->sc_dv = self;
Index: src/sys/dev/pci/vioscsi.c
diff -u src/sys/dev/pci/vioscsi.c:1.31 

CVS commit: src/sys/dev

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:55:11 UTC 2023

Modified Files:
src/sys/dev/pci: if_vioif.c ld_virtio.c vio9p.c viomb.c viornd.c
vioscsi.c virtio.c virtiovar.h
src/sys/dev/virtio: viocon.c

Log Message:
Added functions to set interrupt handler and index into virtqueue


To generate a diff of this commit:
cvs rdiff -u -r1.103 -r1.104 src/sys/dev/pci/if_vioif.c
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/ld_virtio.c \
src/sys/dev/pci/vioscsi.c
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/pci/vio9p.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/viomb.c
cvs rdiff -u -r1.19 -r1.20 src/sys/dev/pci/viornd.c
cvs rdiff -u -r1.66 -r1.67 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/pci/virtiovar.h
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/virtio/viocon.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/virtio

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:44:28 UTC 2023

Modified Files:
src/sys/dev/virtio: viocon.c

Log Message:
viocon(4): fix not to allocate unused virtqueue

viocon(4) allocates 4 virtqueues but it only uses 2 (0 and 1) queues.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/virtio/viocon.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/virtio/viocon.c
diff -u src/sys/dev/virtio/viocon.c:1.6 src/sys/dev/virtio/viocon.c:1.7
--- src/sys/dev/virtio/viocon.c:1.6	Thu Mar 23 03:27:48 2023
+++ src/sys/dev/virtio/viocon.c	Thu Mar 23 03:44:28 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: viocon.c,v 1.6 2023/03/23 03:27:48 yamaguchi Exp $	*/
+/*	$NetBSD: viocon.c,v 1.7 2023/03/23 03:44:28 yamaguchi Exp $	*/
 /*	$OpenBSD: viocon.c,v 1.8 2021/11/05 11:38:29 mpi Exp $	*/
 
 /*
@@ -18,7 +18,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: viocon.c,v 1.6 2023/03/23 03:27:48 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: viocon.c,v 1.7 2023/03/23 03:44:28 yamaguchi Exp $");
 
 #include 
 #include 
@@ -123,6 +123,9 @@ struct viocon_softc {
 	struct device		*sc_dev;
 	struct virtio_softc	*sc_virtio;
 	struct virtqueue	*sc_vqs;
+#define VIOCON_PORT_RX	0
+#define VIOCON_PORT_TX	1
+#define VIOCON_PORT_NQS	2
 
 	struct virtqueue*sc_c_vq_rx;
 	struct virtqueue*sc_c_vq_tx;
@@ -194,6 +197,7 @@ viocon_attach(struct device *parent, str
 	struct viocon_softc *sc = device_private(self);
 	struct virtio_softc *vsc = device_private(parent);
 	int maxports = 1;
+	size_t nvqs;
 
 	sc->sc_dev = self;
 	if (virtio_child(vsc) != NULL) {
@@ -203,8 +207,9 @@ viocon_attach(struct device *parent, str
 	}
 	sc->sc_virtio = vsc;
 	sc->sc_max_ports = maxports;
+	nvqs = VIOCON_PORT_NQS * maxports;
 
-	sc->sc_vqs = kmem_zalloc(2 * (maxports + 1) * sizeof(sc->sc_vqs[0]),
+	sc->sc_vqs = kmem_zalloc(nvqs * sizeof(sc->sc_vqs[0]),
 	KM_SLEEP);
 	sc->sc_ports = kmem_zalloc(maxports * sizeof(sc->sc_ports[0]),
 	KM_SLEEP);
@@ -219,13 +224,13 @@ viocon_attach(struct device *parent, str
 	}
 	viocon_rx_fill(sc->sc_ports[0]);
 
-	if (virtio_child_attach_finish(vsc, sc->sc_vqs, sc->sc_max_ports * 2,
+	if (virtio_child_attach_finish(vsc, sc->sc_vqs, nvqs,
 	/*config_change*/NULL, virtio_vq_intr, /*req_flags*/0) != 0)
 		goto err;
 
 	return;
 err:
-	kmem_free(sc->sc_vqs, 2 * (maxports + 1) * sizeof(sc->sc_vqs[0]));
+	kmem_free(sc->sc_vqs, nvqs * sizeof(sc->sc_vqs[0]));
 	kmem_free(sc->sc_ports, maxports * sizeof(sc->sc_ports[0]));
 	virtio_child_attach_failed(vsc);
 }
@@ -247,11 +252,8 @@ viocon_port_create(struct viocon_softc *
 	vp->vp_sc = sc;
 	DPRINTF("%s: vp: %p\n", __func__, vp);
 
-	if (portidx == 0)
-		rxidx = 0;
-	else
-		rxidx = 2 * (portidx + 1);
-	txidx = rxidx + 1;
+	rxidx = (portidx * VIOCON_PORT_NQS) + VIOCON_PORT_RX;
+	txidx = (portidx * VIOCON_PORT_NQS) + VIOCON_PORT_TX;
 
 	snprintf(name, sizeof(name), "p%drx", portidx);
 	if (virtio_alloc_vq(vsc, >sc_vqs[rxidx], rxidx, BUFSIZE, 1,



CVS commit: src/sys/dev/virtio

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:44:28 UTC 2023

Modified Files:
src/sys/dev/virtio: viocon.c

Log Message:
viocon(4): fix not to allocate unused virtqueue

viocon(4) allocates 4 virtqueues but it only uses 2 (0 and 1) queues.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/virtio/viocon.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/make

2023-03-22 Thread Simon J. Gerraty
Module Name:src
Committed By:   sjg
Date:   Thu Mar 23 03:29:28 UTC 2023

Modified Files:
src/usr.bin/make: make.1

Log Message:
Document unexplained *** Error code 6


To generate a diff of this commit:
cvs rdiff -u -r1.360 -r1.361 src/usr.bin/make/make.1

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/make/make.1
diff -u src/usr.bin/make/make.1:1.360 src/usr.bin/make/make.1:1.361
--- src/usr.bin/make/make.1:1.360	Thu Jan 26 20:48:17 2023
+++ src/usr.bin/make/make.1	Thu Mar 23 03:29:28 2023
@@ -1,4 +1,4 @@
-.\"	$NetBSD: make.1,v 1.360 2023/01/26 20:48:17 sjg Exp $
+.\"	$NetBSD: make.1,v 1.361 2023/03/23 03:29:28 sjg Exp $
 .\"
 .\" Copyright (c) 1990, 1993
 .\"	The Regents of the University of California.  All rights reserved.
@@ -29,7 +29,7 @@
 .\"
 .\"	from: @(#)make.1	8.4 (Berkeley) 3/19/94
 .\"
-.Dd January 26, 2023
+.Dd March 22, 2023
 .Dt MAKE 1
 .Os
 .Sh NAME
@@ -267,7 +267,9 @@ cooperate to avoid overloading the syste
 Specify the maximum number of jobs that
 .Nm
 may have running at any one time.
-The value is saved in
+The value of
+.Ar max_jobs
+is saved in
 .Va .MAKE.JOBS .
 Turns compatibility mode off, unless the
 .Fl B
@@ -280,6 +282,13 @@ command invocation and then expect to st
 on the next line.
 It is more efficient to correct the scripts rather than turn backwards
 compatibility on.
+.Pp
+A job token pool with
+.Ar max_jobs
+tokens is used to control the total number of jobs running.
+Each instance of
+.Nm
+will wait for a token from the pool before running a new job.
 .It Fl k
 Continue processing after errors are encountered, but only on those targets
 that do not depend on the target whose creation caused the error.
@@ -2710,3 +2719,15 @@ In many places
 just counts {} and () in order to find the end of a variable expansion.
 .Pp
 There is no way of escaping a space character in a filename.
+.Pp
+In jobs mode, when a target fails;
+.Nm
+will put an error token into the job token pool.
+This will cause all other instances of
+.Nm
+using that token pool to abort the build and exit with error code 6.
+Sometimes the attempt to suppress a cascade of unnecessary errors,
+can result in a seemingly unexplained
+.Ql *** Error code 6
+
+



CVS commit: src/usr.bin/make

2023-03-22 Thread Simon J. Gerraty
Module Name:src
Committed By:   sjg
Date:   Thu Mar 23 03:29:28 UTC 2023

Modified Files:
src/usr.bin/make: make.1

Log Message:
Document unexplained *** Error code 6


To generate a diff of this commit:
cvs rdiff -u -r1.360 -r1.361 src/usr.bin/make/make.1

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



CVS commit: src/sys/dev

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:27:48 UTC 2023

Modified Files:
src/sys/dev/pci: if_vioif.c ld_virtio.c vio9p.c viomb.c viornd.c
vioscsi.c virtio.c virtio_pci.c virtiovar.h
src/sys/dev/virtio: viocon.c

Log Message:
Set virtqueues in virtio_child_attach_finish

The number of virtqueue maybe change in a part of VirtIO devices
(e.g. vioif(4)). And it is fixed after negotiation of features.
So the configuration is moved into the function.


To generate a diff of this commit:
cvs rdiff -u -r1.102 -r1.103 src/sys/dev/pci/if_vioif.c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/pci/ld_virtio.c \
src/sys/dev/pci/vioscsi.c
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pci/vio9p.c
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/pci/viomb.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/pci/viornd.c
cvs rdiff -u -r1.65 -r1.66 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.38 -r1.39 src/sys/dev/pci/virtio_pci.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/virtiovar.h
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/virtio/viocon.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.102 src/sys/dev/pci/if_vioif.c:1.103
--- src/sys/dev/pci/if_vioif.c:1.102	Thu Mar 23 03:02:17 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 03:27:48 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.102 2023/03/23 03:02:17 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.103 2023/03/23 03:27:48 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.102 2023/03/23 03:02:17 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.103 2023/03/23 03:27:48 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -465,7 +465,7 @@ vioif_attach(device_t parent, device_t s
 	u_int softint_flags;
 	int r, i, req_flags;
 	char xnamebuf[MAXCOMLEN];
-	size_t netq_num;
+	size_t nvqs;
 
 	if (virtio_child(vsc) != NULL) {
 		aprint_normal(": child already attached for %s; "
@@ -509,11 +509,11 @@ vioif_attach(device_t parent, device_t s
 #ifdef VIOIF_MULTIQ
 	req_features |= VIRTIO_NET_F_MQ;
 #endif
-	virtio_child_attach_start(vsc, self, IPL_NET, NULL,
-	vioif_config_change, virtio_vq_intrhand, req_flags,
-	req_features, VIRTIO_NET_FLAG_BITS);
 
+	virtio_child_attach_start(vsc, self, IPL_NET,
+	req_features, VIRTIO_NET_FLAG_BITS);
 	features = virtio_features(vsc);
+
 	if (features == 0)
 		goto err;
 
@@ -565,10 +565,12 @@ vioif_attach(device_t parent, device_t s
 
 		/* Limit the number of queue pairs to use */
 		sc->sc_req_nvq_pairs = MIN(sc->sc_max_nvq_pairs, ncpu);
+
+		if (sc->sc_max_nvq_pairs > 1)
+			req_flags |= VIRTIO_F_INTR_PERVQ;
 	}
 
 	vioif_alloc_queues(sc);
-	virtio_child_attach_set_vqs(vsc, sc->sc_vqs, sc->sc_req_nvq_pairs);
 
 #ifdef VIOIF_MPSAFE
 	softint_flags = SOFTINT_NET | SOFTINT_MPSAFE;
@@ -579,15 +581,17 @@ vioif_attach(device_t parent, device_t s
 	/*
 	 * Initialize network queues
 	 */
-	netq_num = sc->sc_max_nvq_pairs * 2;
-	for (i = 0; i < netq_num; i++) {
+	nvqs = sc->sc_max_nvq_pairs * 2;
+	for (i = 0; i < nvqs; i++) {
 		r = vioif_netqueue_init(sc, vsc, i, softint_flags);
 		if (r != 0)
 			goto err;
 	}
 
 	if (sc->sc_has_ctrl) {
-		int ctrlq_idx = sc->sc_max_nvq_pairs * 2;
+		int ctrlq_idx = nvqs;
+
+		nvqs++;
 		/*
 		 * Allocating a virtqueue for control channel
 		 */
@@ -618,7 +622,9 @@ vioif_attach(device_t parent, device_t s
 	if (vioif_alloc_mems(sc) < 0)
 		goto err;
 
-	if (virtio_child_attach_finish(vsc) != 0)
+	r = virtio_child_attach_finish(vsc, sc->sc_vqs, nvqs,
+	vioif_config_change, virtio_vq_intrhand, req_flags);
+	if (r != 0)
 		goto err;
 
 	if (vioif_setup_sysctl(sc) != 0) {
@@ -656,8 +662,8 @@ vioif_attach(device_t parent, device_t s
 	return;
 
 err:
-	netq_num = sc->sc_max_nvq_pairs * 2;
-	for (i = 0; i < netq_num; i++) {
+	nvqs = sc->sc_max_nvq_pairs * 2;
+	for (i = 0; i < nvqs; i++) {
 		vioif_netqueue_teardown(sc, vsc, i);
 	}
 

Index: src/sys/dev/pci/ld_virtio.c
diff -u src/sys/dev/pci/ld_virtio.c:1.30 src/sys/dev/pci/ld_virtio.c:1.31
--- src/sys/dev/pci/ld_virtio.c:1.30	Wed Apr 13 10:42:12 2022
+++ src/sys/dev/pci/ld_virtio.c	Thu Mar 23 03:27:48 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: ld_virtio.c,v 1.30 2022/04/13 10:42:12 uwe Exp $	*/
+/*	$NetBSD: ld_virtio.c,v 1.31 2023/03/23 03:27:48 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2010 Minoura Makoto.
@@ -26,7 +26,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ld_virtio.c,v 1.30 2022/04/13 10:42:12 uwe Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ld_virtio.c,v 1.31 2023/03/23 03:27:48 yamaguchi Exp $");
 
 #include 
 #include 
@@ -275,8 +275,7 @@ ld_virtio_attach(device_t parent, device
 	sc->sc_dev = self;
 	sc->sc_virtio = vsc;
 
-	virtio_child_attach_start(vsc, self, IPL_BIO, >sc_vq,
-	NULL, virtio_vq_intr, VIRTIO_F_INTR_MSIX,
+	

CVS commit: src/sys/dev

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:27:48 UTC 2023

Modified Files:
src/sys/dev/pci: if_vioif.c ld_virtio.c vio9p.c viomb.c viornd.c
vioscsi.c virtio.c virtio_pci.c virtiovar.h
src/sys/dev/virtio: viocon.c

Log Message:
Set virtqueues in virtio_child_attach_finish

The number of virtqueue maybe change in a part of VirtIO devices
(e.g. vioif(4)). And it is fixed after negotiation of features.
So the configuration is moved into the function.


To generate a diff of this commit:
cvs rdiff -u -r1.102 -r1.103 src/sys/dev/pci/if_vioif.c
cvs rdiff -u -r1.30 -r1.31 src/sys/dev/pci/ld_virtio.c \
src/sys/dev/pci/vioscsi.c
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pci/vio9p.c
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/pci/viomb.c
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/pci/viornd.c
cvs rdiff -u -r1.65 -r1.66 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.38 -r1.39 src/sys/dev/pci/virtio_pci.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/virtiovar.h
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/virtio/viocon.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:02:17 UTC 2023

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

Log Message:
vioif(4): divide IFF_OACTIVE into per-queue


To generate a diff of this commit:
cvs rdiff -u -r1.101 -r1.102 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.101 src/sys/dev/pci/if_vioif.c:1.102
--- src/sys/dev/pci/if_vioif.c:1.101	Thu Mar 23 02:57:54 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 03:02:17 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.101 2023/03/23 02:57:54 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.102 2023/03/23 03:02:17 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.101 2023/03/23 02:57:54 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.102 2023/03/23 03:02:17 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -266,6 +266,7 @@ struct vioif_netqueue {
 
 struct vioif_tx_context {
 	bool			 txc_link_active;
+	bool			 txc_no_free_slots;
 	pcq_t			*txc_intrq;
 	void			*txc_deferred_transmit;
 
@@ -730,7 +731,6 @@ vioif_init(struct ifnet *ifp)
 		sc->sc_act_nvq_pairs = 1;
 
 	SET(ifp->if_flags, IFF_RUNNING);
-	CLR(ifp->if_flags, IFF_OACTIVE);
 
 	vioif_net_intr_enable(sc, vsc);
 
@@ -860,7 +860,12 @@ vioif_watchdog(struct ifnet *ifp)
 	struct vioif_netqueue *netq;
 	int i;
 
-	if (ifp->if_flags & IFF_RUNNING) {
+	if (ISSET(ifp->if_flags, IFF_RUNNING)) {
+		if (ISSET(ifp->if_flags, IFF_DEBUG)) {
+			log(LOG_DEBUG, "%s: watchdog timed out\n",
+			ifp->if_xname);
+		}
+
 		for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
 			netq = >sc_netqs[VIOIF_NETQ_TXQID(i)];
 
@@ -1496,6 +1501,7 @@ vioif_netqueue_init(struct vioif_softc *
 			goto err;
 		}
 		txc->txc_link_active = VIOIF_IS_LINK_ACTIVE(sc);
+		txc->txc_no_free_slots = false;
 		txc->txc_intrq = pcq_create(vq->vq_num, KM_SLEEP);
 		break;
 	}
@@ -1971,18 +1977,17 @@ vioif_send_common_locked(struct ifnet *i
 
 	txc = netq->netq_ctx;
 
-	if (!txc->txc_link_active)
-		return;
-
-	if (!is_transmit &&
-	ISSET(ifp->if_flags, IFF_OACTIVE))
+	if (!txc->txc_link_active ||
+	txc->txc_no_free_slots)
 		return;
 
 	for (;;) {
 		int slot, r;
 		r = virtio_enqueue_prep(vsc, vq, );
-		if (r == EAGAIN)
+		if (r == EAGAIN) {
+			txc->txc_no_free_slots = true;
 			break;
+		}
 		if (__predict_false(r != 0))
 			panic("enqueue_prep for tx buffers");
 
@@ -2049,21 +2054,25 @@ vioif_send_common_locked(struct ifnet *i
 /* dequeue sent mbufs */
 static bool
 vioif_tx_deq_locked(struct vioif_softc *sc, struct virtio_softc *vsc,
-struct vioif_netqueue *netq, u_int limit)
+struct vioif_netqueue *netq, u_int limit, size_t *ndeqp)
 {
 	struct virtqueue *vq = netq->netq_vq;
 	struct ifnet *ifp = >sc_ethercom.ec_if;
 	struct vioif_net_map *map;
 	struct mbuf *m;
 	int slot, len;
-	bool more = false;
+	bool more;
+	size_t ndeq;
 
 	KASSERT(mutex_owned(>netq_lock));
 
+	more = false;
+	ndeq = 0;
+
 	if (virtio_vq_is_enqueued(vsc, vq) == false)
-		return false;
+		goto done;
 
-	for (;;) {
+	for (;;ndeq++) {
 		if (limit-- == 0) {
 			more = true;
 			break;
@@ -2082,6 +2091,9 @@ vioif_tx_deq_locked(struct vioif_softc *
 		m_freem(m);
 	}
 
+done:
+	if (ndeqp != NULL)
+		*ndeqp = ndeq;
 	return more;
 }
 
@@ -2089,6 +2101,7 @@ static void
 vioif_tx_queue_clear(struct vioif_softc *sc, struct virtio_softc *vsc,
 struct vioif_netqueue *netq)
 {
+	struct vioif_tx_context *txc;
 	struct vioif_net_map *map;
 	struct mbuf *m;
 	unsigned int i, vq_num;
@@ -2096,9 +2109,11 @@ vioif_tx_queue_clear(struct vioif_softc 
 
 	mutex_enter(>netq_lock);
 
+	txc = netq->netq_ctx;
 	vq_num = netq->netq_vq->vq_num;
+
 	for (;;) {
-		more = vioif_tx_deq_locked(sc, vsc, netq, vq_num);
+		more = vioif_tx_deq_locked(sc, vsc, netq, vq_num, NULL);
 		if (more == false)
 			break;
 	}
@@ -2113,6 +2128,9 @@ vioif_tx_queue_clear(struct vioif_softc 
 		vioif_net_unload_mbuf(vsc, map);
 		m_freem(m);
 	}
+
+	txc->txc_no_free_slots = false;
+
 	mutex_exit(>netq_lock);
 }
 
@@ -2157,11 +2175,17 @@ vioif_tx_handle_locked(struct vioif_netq
 	struct ifnet *ifp = >sc_ethercom.ec_if;
 	bool more;
 	int enqueued;
+	size_t ndeq;
 
 	KASSERT(mutex_owned(>netq_lock));
 	KASSERT(!netq->netq_stopping);
 
-	more = vioif_tx_deq_locked(sc, vsc, netq, limit);
+	more = vioif_tx_deq_locked(sc, vsc, netq, limit, );
+	if (txc->txc_no_free_slots && ndeq > 0) {
+		txc->txc_no_free_slots = false;
+		softint_schedule(txc->txc_deferred_transmit);
+	}
+
 	if (more) {
 		vioif_net_sched_handle(sc, netq);
 		return;
@@ -2179,10 +2203,9 @@ vioif_tx_handle_locked(struct vioif_netq
 	netq->netq_running_handle = false;
 
 	/* for ALTQ */
-	if (netq == >sc_netqs[VIOIF_NETQ_TXQID(0)]) {
+	if (netq == >sc_netqs[VIOIF_NETQ_TXQID(0)])
 	

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 03:02:17 UTC 2023

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

Log Message:
vioif(4): divide IFF_OACTIVE into per-queue


To generate a diff of this commit:
cvs rdiff -u -r1.101 -r1.102 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:57:54 UTC 2023

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

Log Message:
vioif(4): reorganize functions

iThis change is move of function and rename,
and this is no functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.100 -r1.101 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.100 src/sys/dev/pci/if_vioif.c:1.101
--- src/sys/dev/pci/if_vioif.c:1.100	Thu Mar 23 02:52:29 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:57:54 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.100 2023/03/23 02:52:29 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.101 2023/03/23 02:57:54 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.100 2023/03/23 02:52:29 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.101 2023/03/23 02:57:54 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -330,7 +330,7 @@ struct vioif_softc {
 	void			*sc_dmamem;
 	void			*sc_kmem;
 
-	void			*sc_ctl_softint;
+	void			*sc_cfg_softint;
 
 	struct workqueue	*sc_txrx_workqueue;
 	bool			 sc_txrx_workqueue_sysctl;
@@ -360,1171 +360,1213 @@ static int	vioif_finalize_teardown(devic
 static int	vioif_init(struct ifnet *);
 static void	vioif_stop(struct ifnet *, int);
 static void	vioif_start(struct ifnet *);
-static void	vioif_start_locked(struct ifnet *, struct vioif_netqueue *);
 static int	vioif_transmit(struct ifnet *, struct mbuf *);
-static void	vioif_transmit_locked(struct ifnet *, struct vioif_netqueue *);
 static int	vioif_ioctl(struct ifnet *, u_long, void *);
 static void	vioif_watchdog(struct ifnet *);
+static int	vioif_ifflags(struct vioif_softc *);
 static int	vioif_ifflags_cb(struct ethercom *);
 
 /* tx & rx */
-static void	vioif_net_sched_handle(struct vioif_softc *,
-		struct vioif_netqueue *);
-static int	vioif_net_load_mbuf(struct virtio_softc *,
-		struct vioif_net_map *, struct mbuf *, int);
-static void	vioif_net_unload_mbuf(struct virtio_softc *,
-		struct vioif_net_map *);
-static int	vioif_net_enqueue_tx(struct virtio_softc *, struct virtqueue *,
-		int, struct vioif_net_map *);
-static int	vioif_net_enqueue_rx(struct virtio_softc *, struct virtqueue *,
-		int, struct vioif_net_map *);
-static struct mbuf *
-		vioif_net_dequeue_commit(struct virtio_softc *,
-		struct virtqueue *, int, struct vioif_net_map *, int);
+static int	vioif_netqueue_init(struct vioif_softc *,
+		struct virtio_softc *, size_t, u_int);
+static void	vioif_netqueue_teardown(struct vioif_softc *,
+		struct virtio_softc *, size_t);
 static void	vioif_net_intr_enable(struct vioif_softc *,
 		struct virtio_softc *);
 static void	vioif_net_intr_disable(struct vioif_softc *,
 		struct virtio_softc *);
+static void	vioif_net_sched_handle(struct vioif_softc *,
+		struct vioif_netqueue *);
 
 /* rx */
 static void	vioif_populate_rx_mbufs_locked(struct vioif_softc *,
 		struct vioif_netqueue *);
-static void	vioif_rx_queue_clear(struct vioif_softc *, struct virtio_softc *,
-		struct vioif_netqueue *);
-static bool	vioif_rx_deq_locked(struct vioif_softc *, struct virtio_softc *,
-		struct vioif_netqueue *, u_int, size_t *);
 static int	vioif_rx_intr(void *);
 static void	vioif_rx_handle(void *);
+static void	vioif_rx_queue_clear(struct vioif_softc *,
+		struct virtio_softc *, struct vioif_netqueue *);
 
 /* tx */
+static void	vioif_start_locked(struct ifnet *, struct vioif_netqueue *);
+static void	vioif_transmit_locked(struct ifnet *, struct vioif_netqueue *);
+static void	vioif_deferred_transmit(void *);
 static int	vioif_tx_intr(void *);
 static void	vioif_tx_handle(void *);
 static void	vioif_tx_queue_clear(struct vioif_softc *, struct virtio_softc *,
 		struct vioif_netqueue *);
-static bool	vioif_tx_deq_locked(struct vioif_softc *, struct virtio_softc *,
-		struct vioif_netqueue *, u_int);
-static void	vioif_deferred_transmit(void *);
-
-/* workqueue */
-static struct workqueue*
-		vioif_workq_create(const char *, pri_t, int, int);
-static void	vioif_workq_destroy(struct workqueue *);
-static void	vioif_workq_work(struct work *, void *);
-static void	vioif_work_set(struct vioif_work *, void(*)(void *), void *);
-static void	vioif_work_add(struct workqueue *, struct vioif_work *);
-static void	vioif_work_wait(struct workqueue *, struct vioif_work *);
 
-/* other control */
-static int	vioif_get_link_status(struct vioif_softc *);
-static void	vioif_update_link_status(struct vioif_softc *);
+/* controls */
+static int	vioif_ctrl_intr(void *);
 static int	vioif_ctrl_rx(struct vioif_softc *, int, bool);
 static int	vioif_set_promisc(struct vioif_softc *, bool);
 static int	

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:57:54 UTC 2023

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

Log Message:
vioif(4): reorganize functions

iThis change is move of function and rename,
and this is no functional change.


To generate a diff of this commit:
cvs rdiff -u -r1.100 -r1.101 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:52:29 UTC 2023

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

Log Message:
vioif(4): rename sc_hdr_segs to sc_segs


To generate a diff of this commit:
cvs rdiff -u -r1.99 -r1.100 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:52:29 UTC 2023

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

Log Message:
vioif(4): rename sc_hdr_segs to sc_segs


To generate a diff of this commit:
cvs rdiff -u -r1.99 -r1.100 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.99 src/sys/dev/pci/if_vioif.c:1.100
--- src/sys/dev/pci/if_vioif.c:1.99	Thu Mar 23 02:48:29 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:52:29 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.99 2023/03/23 02:48:29 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.100 2023/03/23 02:52:29 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.99 2023/03/23 02:48:29 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.100 2023/03/23 02:52:29 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -326,7 +326,7 @@ struct vioif_softc {
 	bool			sc_has_ctrl;
 	struct vioif_ctrlqueue	sc_ctrlq;
 
-	bus_dma_segment_t	sc_hdr_segs[1];
+	bus_dma_segment_t	 sc_segs[1];
 	void			*sc_dmamem;
 	void			*sc_kmem;
 
@@ -752,14 +752,14 @@ vioif_alloc_mems(struct vioif_softc *sc)
 	}
 
 	r = bus_dmamem_alloc(virtio_dmat(vsc), dmamemsize, 0, 0,
-	>sc_hdr_segs[0], 1, , BUS_DMA_NOWAIT);
+	>sc_segs[0], 1, , BUS_DMA_NOWAIT);
 	if (r != 0) {
 		aprint_error_dev(sc->sc_dev,
 		"DMA memory allocation failed, size %zu, "
 		"error code %d\n", dmamemsize, r);
 		goto err_none;
 	}
-	r = bus_dmamem_map(virtio_dmat(vsc),>sc_hdr_segs[0], 1,
+	r = bus_dmamem_map(virtio_dmat(vsc), >sc_segs[0], 1,
 	dmamemsize, , BUS_DMA_NOWAIT);
 	if (r != 0) {
 		aprint_error_dev(sc->sc_dev,
@@ -953,7 +953,7 @@ err_reqs:
 	}
 	bus_dmamem_unmap(virtio_dmat(vsc), sc->sc_dmamem, dmamemsize);
 err_dmamem_alloc:
-	bus_dmamem_free(virtio_dmat(vsc), >sc_hdr_segs[0], 1);
+	bus_dmamem_free(virtio_dmat(vsc), >sc_segs[0], 1);
 err_none:
 	return -1;
 }



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:48:30 UTC 2023

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

Log Message:
vioif(4): added functions to manipulate network queues


To generate a diff of this commit:
cvs rdiff -u -r1.98 -r1.99 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:48:30 UTC 2023

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

Log Message:
vioif(4): added functions to manipulate network queues


To generate a diff of this commit:
cvs rdiff -u -r1.98 -r1.99 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.98 src/sys/dev/pci/if_vioif.c:1.99
--- src/sys/dev/pci/if_vioif.c:1.98	Thu Mar 23 02:42:49 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:48:29 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.98 2023/03/23 02:42:49 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.99 2023/03/23 02:48:29 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.98 2023/03/23 02:42:49 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.99 2023/03/23 02:48:29 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -259,7 +259,7 @@ struct vioif_netqueue {
 
 	char			 netq_evgroup[32];
 	struct evcnt		 netq_mbuf_load_failed;
-	struct evcnt		 netq_enqueue_reserve_failed;
+	struct evcnt		 netq_enqueue_failed;
 
 	void			*netq_ctx;
 };
@@ -370,6 +370,21 @@ static int	vioif_ifflags_cb(struct ether
 /* tx & rx */
 static void	vioif_net_sched_handle(struct vioif_softc *,
 		struct vioif_netqueue *);
+static int	vioif_net_load_mbuf(struct virtio_softc *,
+		struct vioif_net_map *, struct mbuf *, int);
+static void	vioif_net_unload_mbuf(struct virtio_softc *,
+		struct vioif_net_map *);
+static int	vioif_net_enqueue_tx(struct virtio_softc *, struct virtqueue *,
+		int, struct vioif_net_map *);
+static int	vioif_net_enqueue_rx(struct virtio_softc *, struct virtqueue *,
+		int, struct vioif_net_map *);
+static struct mbuf *
+		vioif_net_dequeue_commit(struct virtio_softc *,
+		struct virtqueue *, int, struct vioif_net_map *, int);
+static void	vioif_net_intr_enable(struct vioif_softc *,
+		struct virtio_softc *);
+static void	vioif_net_intr_disable(struct vioif_softc *,
+		struct virtio_softc *);
 
 /* rx */
 static void	vioif_populate_rx_mbufs_locked(struct vioif_softc *,
@@ -412,12 +427,11 @@ static int	vioif_ctrl_intr(void *);
 static int	vioif_config_change(struct virtio_softc *);
 static void	vioif_ctl_softint(void *);
 static int	vioif_ctrl_mq_vq_pairs_set(struct vioif_softc *, int);
-static void	vioif_enable_interrupt_vqpairs(struct vioif_softc *);
-static void	vioif_disable_interrupt_vqpairs(struct vioif_softc *);
 static int	vioif_setup_sysctl(struct vioif_softc *);
 static void	vioif_setup_stats(struct vioif_softc *);
 static int	vioif_ifflags(struct vioif_softc *);
 static void	vioif_intr_barrier(void);
+static void	vioif_notify(struct virtio_softc *, struct virtqueue *);
 
 CFATTACH_DECL_NEW(vioif, sizeof(struct vioif_softc),
 		  vioif_match, vioif_attach, NULL, NULL);
@@ -1180,34 +1194,6 @@ vioif_finalize_teardown(device_t self)
 	return 0;
 }
 
-static void
-vioif_enable_interrupt_vqpairs(struct vioif_softc *sc)
-{
-	struct virtio_softc *vsc = sc->sc_virtio;
-	struct vioif_netqueue *netq;
-	size_t i, netq_act_num;
-
-	netq_act_num = sc->sc_act_nvq_pairs * 2;
-	for (i = 0; i < netq_act_num; i++) {
-		netq = >sc_netqs[i];
-		virtio_start_vq_intr(vsc, netq->netq_vq);
-	}
-}
-
-static void
-vioif_disable_interrupt_vqpairs(struct vioif_softc *sc)
-{
-	struct virtio_softc *vsc = sc->sc_virtio;
-	struct vioif_netqueue *netq;
-	size_t i, netq_act_num;
-
-	netq_act_num = sc->sc_act_nvq_pairs * 2;
-	for (i = 0; i < netq_act_num; i++) {
-		netq = >sc_netqs[i];
-		virtio_stop_vq_intr(vsc, netq->netq_vq);
-	}
-}
-
 /*
  * Interface functions for ifnet
  */
@@ -1252,7 +1238,7 @@ vioif_init(struct ifnet *ifp)
 	SET(ifp->if_flags, IFF_RUNNING);
 	CLR(ifp->if_flags, IFF_OACTIVE);
 
-	vioif_enable_interrupt_vqpairs(sc);
+	vioif_net_intr_enable(sc, vsc);
 
 	vioif_update_link_status(sc);
 	r = vioif_rx_filter(sc);
@@ -1267,12 +1253,12 @@ vioif_stop(struct ifnet *ifp, int disabl
 	struct virtio_softc *vsc = sc->sc_virtio;
 	struct vioif_netqueue *netq;
 	struct vioif_ctrlqueue *ctrlq = >sc_ctrlq;
-	size_t i, netq_act_num;
+	size_t i, act_qnum;
 
-	netq_act_num = sc->sc_act_nvq_pairs * 2;
+	act_qnum = sc->sc_act_nvq_pairs * 2;
 
 	CLR(ifp->if_flags, IFF_RUNNING);
-	for (i = 0; i < netq_act_num; i++) {
+	for (i = 0; i < act_qnum; i++) {
 		netq = >sc_netqs[i];
 
 		mutex_enter(>netq_lock);
@@ -1281,7 +1267,7 @@ vioif_stop(struct ifnet *ifp, int disabl
 	}
 
 	/* disable interrupts */
-	vioif_disable_interrupt_vqpairs(sc);
+	vioif_net_intr_disable(sc, vsc);
 	if (sc->sc_has_ctrl)
 		virtio_stop_vq_intr(vsc, ctrlq->ctrlq_vq);
 
@@ -1295,7 +1281,7 @@ vioif_stop(struct ifnet *ifp, int disabl
 
 	vioif_intr_barrier();
 
-	for (i = 0; i < netq_act_num; i++) {
+	for (i = 0; i < act_qnum; i++) {
 		

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:42:49 UTC 2023

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

Log Message:
vioif(4): added new data structure for network queues

and moved the same parameters in vioif_txqueue and
vioif_rxqueue into the new structure


To generate a diff of this commit:
cvs rdiff -u -r1.97 -r1.98 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.97 src/sys/dev/pci/if_vioif.c:1.98
--- src/sys/dev/pci/if_vioif.c:1.97	Thu Mar 23 02:33:34 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:42:49 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.97 2023/03/23 02:33:34 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.98 2023/03/23 02:42:49 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.97 2023/03/23 02:33:34 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.98 2023/03/23 02:42:49 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -205,12 +205,13 @@ struct virtio_net_ctrl_mq {
 
 /*
  * Locking notes:
- * + a field in vioif_txqueue is protected by txq_lock (a spin mutex), and
- *   a field in vioif_rxqueue is protected by rxq_lock (a spin mutex).
+ * + a field in vioif_netueue is protected by netq_lock (a spin mutex)
  *  - more than one lock cannot be held at onece
+ * + a field in vioif_tx_context and vioif_rx_context is also protected
+ *   by netq_lock.
  * + ctrlq_inuse is protected by ctrlq_wait_lock.
  *  - other fields in vioif_ctrlqueue are protected by ctrlq_inuse
- *  - txq_lock or rxq_lock cannot be held along with ctrlq_wait_lock
+ *  - netq_lock cannot be held along with ctrlq_wait_lock
  * + fields in vioif_softc except queues are protected by
  *   sc->sc_lock(an adaptive mutex)
  *  - the lock is held before acquisition of other locks
@@ -236,49 +237,44 @@ struct vioif_net_map {
 	bus_dmamap_t		 vnm_mbuf_map;
 };
 
-struct vioif_txqueue {
-	kmutex_t		*txq_lock;	/* lock for tx operations */
+#define VIOIF_NETQ_RX		0
+#define VIOIF_NETQ_TX		1
+#define VIOIF_NETQ_IDX		2
+#define VIOIF_NETQ_DIR(n)	((n) % VIOIF_NETQ_IDX)
+#define VIOIF_NETQ_PAIRIDX(n)	((n) / VIOIF_NETQ_IDX)
+#define VIOIF_NETQ_RXQID(n)	((n) * VIOIF_NETQ_IDX + VIOIF_NETQ_RX)
+#define VIOIF_NETQ_TXQID(n)	((n) * VIOIF_NETQ_IDX + VIOIF_NETQ_TX)
+
+struct vioif_netqueue {
+	kmutex_t		 netq_lock;
+	struct virtqueue	*netq_vq;
+	bool			 netq_stopping;
+	bool			 netq_running_handle;
+	void			*netq_maps_kva;
+	struct vioif_net_map	*netq_maps;
+
+	void			*netq_softint;
+	struct vioif_work	 netq_work;
+	bool			 netq_workqueue;
+
+	char			 netq_evgroup[32];
+	struct evcnt		 netq_mbuf_load_failed;
+	struct evcnt		 netq_enqueue_reserve_failed;
 
-	struct virtqueue	*txq_vq;
-	bool			txq_stopping;
-	bool			txq_link_active;
-	pcq_t			*txq_intrq;
-
-	void			*txq_maps_kva;
-	struct vioif_net_map	*txq_maps;
-
-	void			*txq_deferred_transmit;
-	void			*txq_handle_si;
-	struct vioif_work	 txq_work;
-	bool			 txq_workqueue;
-	bool			 txq_running_handle;
-
-	char			 txq_evgroup[16];
-	struct evcnt		 txq_defrag_failed;
-	struct evcnt		 txq_mbuf_load_failed;
-	struct evcnt		 txq_enqueue_reserve_failed;
+	void			*netq_ctx;
 };
 
-struct vioif_rxqueue {
-	kmutex_t		*rxq_lock;	/* lock for rx operations */
+struct vioif_tx_context {
+	bool			 txc_link_active;
+	pcq_t			*txc_intrq;
+	void			*txc_deferred_transmit;
 
-	struct virtqueue	*rxq_vq;
-	bool			rxq_stopping;
-
-	void			*rxq_maps_kva;
-	struct vioif_net_map	*rxq_maps;
-
-	void			*rxq_handle_si;
-	struct vioif_work	 rxq_work;
-	bool			 rxq_workqueue;
-	bool			 rxq_running_handle;
-
-	char			 rxq_evgroup[16];
-	struct evcnt		 rxq_mbuf_enobufs;
-	struct evcnt		 rxq_mbuf_load_failed;
-	struct evcnt		 rxq_enqueue_reserve_failed;
+	struct evcnt		 txc_defrag_failed;
 };
 
+struct vioif_rx_context {
+	struct evcnt		 rxc_mbuf_enobufs;
+};
 struct vioif_ctrlqueue {
 	struct virtqueue		*ctrlq_vq;
 	enum {
@@ -325,8 +321,7 @@ struct vioif_softc {
 	struct ethercom		sc_ethercom;
 	int			sc_link_state;
 
-	struct vioif_txqueue	*sc_txq;
-	struct vioif_rxqueue	*sc_rxq;
+	struct vioif_netqueue	*sc_netqs;
 
 	bool			sc_has_ctrl;
 	struct vioif_ctrlqueue	sc_ctrlq;
@@ -365,34 +360,34 @@ static int	vioif_finalize_teardown(devic
 static int	vioif_init(struct ifnet *);
 static void	vioif_stop(struct ifnet *, int);
 static void	vioif_start(struct ifnet *);
-static void	vioif_start_locked(struct ifnet *, struct vioif_txqueue *);
+static void	vioif_start_locked(struct ifnet *, struct vioif_netqueue *);
 static int	vioif_transmit(struct ifnet *, struct mbuf *);
-static void	vioif_transmit_locked(struct ifnet *, struct vioif_txqueue *);
+static void	vioif_transmit_locked(struct ifnet *, struct vioif_netqueue *);
 static int	

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:42:49 UTC 2023

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

Log Message:
vioif(4): added new data structure for network queues

and moved the same parameters in vioif_txqueue and
vioif_rxqueue into the new structure


To generate a diff of this commit:
cvs rdiff -u -r1.97 -r1.98 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:33:34 UTC 2023

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

Log Message:
vioif(4): added __predct_false to error check


To generate a diff of this commit:
cvs rdiff -u -r1.96 -r1.97 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.96 src/sys/dev/pci/if_vioif.c:1.97
--- src/sys/dev/pci/if_vioif.c:1.96	Thu Mar 23 02:30:14 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:33:34 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.96 2023/03/23 02:30:14 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.97 2023/03/23 02:33:34 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.96 2023/03/23 02:30:14 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.97 2023/03/23 02:33:34 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1532,7 +1532,7 @@ vioif_populate_rx_mbufs_locked(struct vi
 		r = virtio_enqueue_prep(vsc, vq, );
 		if (r == EAGAIN)
 			break;
-		if (r != 0)
+		if (__predict_false(r != 0))
 			panic("enqueue_prep for rx buffers");
 
 		map = >rxq_maps[slot];



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:33:34 UTC 2023

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

Log Message:
vioif(4): added __predct_false to error check


To generate a diff of this commit:
cvs rdiff -u -r1.96 -r1.97 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:30:14 UTC 2023

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

Log Message:
vioif(4): prepare slot before dequeuing


To generate a diff of this commit:
cvs rdiff -u -r1.95 -r1.96 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.95 src/sys/dev/pci/if_vioif.c:1.96
--- src/sys/dev/pci/if_vioif.c:1.95	Thu Mar 23 02:26:43 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:30:14 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.95 2023/03/23 02:26:43 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.96 2023/03/23 02:30:14 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.95 2023/03/23 02:26:43 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.96 2023/03/23 02:30:14 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1307,24 +1307,21 @@ vioif_send_common_locked(struct ifnet *i
 
 	for (;;) {
 		int slot, r;
+		r = virtio_enqueue_prep(vsc, vq, );
+		if (r == EAGAIN)
+			break;
+		if (__predict_false(r != 0))
+			panic("enqueue_prep for tx buffers");
 
 		if (is_transmit)
 			m = pcq_get(txq->txq_intrq);
 		else
 			IFQ_DEQUEUE(>if_snd, m);
 
-		if (m == NULL)
-			break;
-
-		r = virtio_enqueue_prep(vsc, vq, );
-		if (r == EAGAIN) {
-			ifp->if_flags |= IFF_OACTIVE;
-			m_freem(m);
-			if_statinc(ifp, if_oerrors);
+		if (m == NULL) {
+			virtio_enqueue_abort(vsc, vq, slot);
 			break;
 		}
-		if (r != 0)
-			panic("enqueue_prep for a tx buffer");
 
 		map = >txq_maps[slot];
 		KASSERT(map->vnm_mbuf == NULL);



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:30:14 UTC 2023

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

Log Message:
vioif(4): prepare slot before dequeuing


To generate a diff of this commit:
cvs rdiff -u -r1.95 -r1.96 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:26:43 UTC 2023

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

Log Message:
vioif(4): added a structure to manage variables for packet processings


To generate a diff of this commit:
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.94 src/sys/dev/pci/if_vioif.c:1.95
--- src/sys/dev/pci/if_vioif.c:1.94	Thu Mar 23 02:15:53 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:26:43 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.94 2023/03/23 02:15:53 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.95 2023/03/23 02:26:43 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.94 2023/03/23 02:15:53 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.95 2023/03/23 02:26:43 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -229,6 +229,13 @@ struct vioif_work {
 	unsigned int	 added;
 };
 
+struct vioif_net_map {
+	struct virtio_net_hdr	*vnm_hdr;
+	bus_dmamap_t		 vnm_hdr_map;
+	struct mbuf		*vnm_mbuf;
+	bus_dmamap_t		 vnm_mbuf_map;
+};
+
 struct vioif_txqueue {
 	kmutex_t		*txq_lock;	/* lock for tx operations */
 
@@ -237,11 +244,8 @@ struct vioif_txqueue {
 	bool			txq_link_active;
 	pcq_t			*txq_intrq;
 
-	struct virtio_net_hdr	*txq_hdrs;
-	bus_dmamap_t		*txq_hdr_dmamaps;
-
-	struct mbuf		**txq_mbufs;
-	bus_dmamap_t		*txq_dmamaps;
+	void			*txq_maps_kva;
+	struct vioif_net_map	*txq_maps;
 
 	void			*txq_deferred_transmit;
 	void			*txq_handle_si;
@@ -261,11 +265,8 @@ struct vioif_rxqueue {
 	struct virtqueue	*rxq_vq;
 	bool			rxq_stopping;
 
-	struct virtio_net_hdr	*rxq_hdrs;
-	bus_dmamap_t		*rxq_hdr_dmamaps;
-
-	struct mbuf		**rxq_mbufs;
-	bus_dmamap_t		*rxq_dmamaps;
+	void			*rxq_maps_kva;
+	struct vioif_net_map	*rxq_maps;
 
 	void			*rxq_handle_si;
 	struct vioif_work	 rxq_work;
@@ -552,8 +553,8 @@ vioif_free_queues(struct vioif_softc *sc
 /* allocate memory */
 /*
  * dma memory is used for:
- *   rxq_hdrs[slot]:	 metadata array for received frames (READ)
- *   txq_hdrs[slot]:	 metadata array for frames to be sent (WRITE)
+ *   rxq_maps_kva:	 metadata array for received frames (READ)
+ *   txq_maps_kva:	 metadata array for frames to be sent (WRITE)
  *   ctrlq_cmd:		 command to be sent via ctrl vq (WRITE)
  *   ctrlq_status:	 return value for a command via ctrl vq (READ)
  *   ctrlq_rx:		 parameter for a VIRTIO_NET_CTRL_RX class command
@@ -565,21 +566,13 @@ vioif_free_queues(struct vioif_softc *sc
  * ctrlq_* structures are allocated only one each; they are protected by
  * ctrlq_inuse variable and ctrlq_wait condvar.
  */
-/*
- * dynamically allocated memory is used for:
- *   rxq_hdr_dmamaps[slot]:	bus_dmamap_t array for sc_rx_hdrs[slot]
- *   txq_hdr_dmamaps[slot]:	bus_dmamap_t array for sc_tx_hdrs[slot]
- *   rxq_dmamaps[slot]:		bus_dmamap_t array for received payload
- *   txq_dmamaps[slot]:		bus_dmamap_t array for sent payload
- *   rxq_mbufs[slot]:		mbuf pointer array for received frames
- *   txq_mbufs[slot]:		mbuf pointer array for sent frames
- */
 static int
 vioif_alloc_mems(struct vioif_softc *sc)
 {
 	struct virtio_softc *vsc = sc->sc_virtio;
 	struct vioif_txqueue *txq;
 	struct vioif_rxqueue *rxq;
+	struct vioif_net_map *maps;
 	struct vioif_ctrlqueue *ctrlq = >sc_ctrlq;
 	int allocsize, allocsize2, r, rsegs, i, qid;
 	void *vaddr;
@@ -628,9 +621,9 @@ vioif_alloc_mems(struct vioif_softc *sc)
 		rxq = >sc_rxq[qid];
 		txq = >sc_txq[qid];
 
-		rxq->rxq_hdrs = vioif_assign_mem(,
+		rxq->rxq_maps_kva = vioif_assign_mem(,
 		sizeof(struct virtio_net_hdr) * rxq->rxq_vq->vq_num);
-		txq->txq_hdrs = vioif_assign_mem(,
+		txq->txq_maps_kva = vioif_assign_mem(,
 		sizeof(struct virtio_net_hdr) * txq->txq_vq->vq_num);
 	}
 	if (sc->sc_has_ctrl) {
@@ -657,16 +650,12 @@ vioif_alloc_mems(struct vioif_softc *sc)
 
 		rxq = >sc_rxq[qid];
 		txq = >sc_txq[qid];
+
 		rxqsize = rxq->rxq_vq->vq_num;
 		txqsize = txq->txq_vq->vq_num;
 
-		allocsize2 += sizeof(rxq->rxq_dmamaps[0]) * rxqsize;
-		allocsize2 += sizeof(rxq->rxq_hdr_dmamaps[0]) * rxqsize;
-		allocsize2 += sizeof(rxq->rxq_mbufs[0]) * rxqsize;
-
-		allocsize2 += sizeof(txq->txq_dmamaps[0]) * txqsize;
-		allocsize2 += sizeof(txq->txq_hdr_dmamaps[0]) * txqsize;
-		allocsize2 += sizeof(txq->txq_mbufs[0]) * txqsize;
+		allocsize2 += sizeof(rxq->rxq_maps[0]) * rxqsize;
+		allocsize2 += sizeof(txq->txq_maps[0]) * txqsize;
 	}
 	vaddr = kmem_zalloc(allocsize2, KM_SLEEP);
 	sc->sc_kmem = vaddr;
@@ -679,46 +668,48 @@ vioif_alloc_mems(struct vioif_softc *sc)
 		rxqsize = rxq->rxq_vq->vq_num;
 		txqsize = txq->txq_vq->vq_num;
 
-		rxq->rxq_hdr_dmamaps = vioif_assign_mem(,
-		sizeof(rxq->rxq_hdr_dmamaps[0]) * rxqsize);
-		

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:26:43 UTC 2023

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

Log Message:
vioif(4): added a structure to manage variables for packet processings


To generate a diff of this commit:
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:15:53 UTC 2023

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

Log Message:
vioif(4): increase output error counter


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.93 src/sys/dev/pci/if_vioif.c:1.94
--- src/sys/dev/pci/if_vioif.c:1.93	Thu Mar 23 02:03:01 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:15:53 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.93 2023/03/23 02:03:01 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.94 2023/03/23 02:15:53 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.93 2023/03/23 02:03:01 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.94 2023/03/23 02:15:53 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1322,6 +1322,7 @@ vioif_send_common_locked(struct ifnet *i
 		if (r == EAGAIN) {
 			ifp->if_flags |= IFF_OACTIVE;
 			m_freem(m);
+			if_statinc(ifp, if_oerrors);
 			break;
 		}
 		if (r != 0)
@@ -1347,6 +1348,7 @@ vioif_send_common_locked(struct ifnet *i
 txq->txq_mbuf_load_failed.ev_count++;
 skip:
 m_freem(m);
+if_statinc(ifp, if_oerrors);
 virtio_enqueue_abort(vsc, vq, slot);
 continue;
 			}
@@ -1361,6 +1363,7 @@ skip:
 			 txq->txq_dmamaps[slot]);
 			/* slot already freed by virtio_enqueue_reserve */
 			m_freem(m);
+			if_statinc(ifp, if_oerrors);
 			continue;
 		}
 



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:15:53 UTC 2023

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

Log Message:
vioif(4): increase output error counter


To generate a diff of this commit:
cvs rdiff -u -r1.93 -r1.94 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:03:01 UTC 2023

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

Log Message:
vioif(4): merge drain into clear of queue


To generate a diff of this commit:
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.92 src/sys/dev/pci/if_vioif.c:1.93
--- src/sys/dev/pci/if_vioif.c:1.92	Thu Mar 23 01:58:04 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 02:03:01 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.92 2023/03/23 01:58:04 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.93 2023/03/23 02:03:01 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.92 2023/03/23 01:58:04 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.93 2023/03/23 02:03:01 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -374,24 +374,24 @@ static int	vioif_ifflags_cb(struct ether
 /* rx */
 static void	vioif_populate_rx_mbufs_locked(struct vioif_softc *,
 		struct vioif_rxqueue *);
-static void	vioif_rx_queue_clear(struct vioif_rxqueue *);
+static void	vioif_rx_queue_clear(struct vioif_softc *, struct virtio_softc *,
+		struct vioif_rxqueue *);
 static bool	vioif_rx_deq_locked(struct vioif_softc *, struct virtio_softc *,
 		struct vioif_rxqueue *, u_int, size_t *);
 static int	vioif_rx_intr(void *);
 static void	vioif_rx_handle(void *);
 static void	vioif_rx_sched_handle(struct vioif_softc *,
 		struct vioif_rxqueue *);
-static void	vioif_rx_drain(struct vioif_rxqueue *);
 
 /* tx */
 static int	vioif_tx_intr(void *);
 static void	vioif_tx_handle(void *);
 static void	vioif_tx_sched_handle(struct vioif_softc *,
 		struct vioif_txqueue *);
-static void	vioif_tx_queue_clear(struct vioif_txqueue *);
+static void	vioif_tx_queue_clear(struct vioif_softc *, struct virtio_softc *,
+		struct vioif_txqueue *);
 static bool	vioif_tx_deq_locked(struct vioif_softc *, struct virtio_softc *,
 		struct vioif_txqueue *, u_int);
-static void	vioif_tx_drain(struct vioif_txqueue *);
 static void	vioif_deferred_transmit(void *);
 
 /* workqueue */
@@ -1262,8 +1262,8 @@ vioif_stop(struct ifnet *ifp, int disabl
 	}
 
 	for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
-		vioif_rx_queue_clear(>sc_rxq[i]);
-		vioif_tx_queue_clear(>sc_txq[i]);
+		vioif_rx_queue_clear(sc, vsc, >sc_rxq[i]);
+		vioif_tx_queue_clear(sc, vsc, >sc_txq[i]);
 	}
 
 	ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
@@ -1283,14 +1283,6 @@ vioif_stop(struct ifnet *ifp, int disabl
 		KASSERT(!txq->txq_running_handle);
 		mutex_exit(txq->txq_lock);
 	}
-
-	for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
-		txq = >sc_txq[i];
-		rxq = >sc_rxq[i];
-
-		vioif_rx_drain(rxq);
-		vioif_tx_drain(txq);
-	}
 }
 
 static void
@@ -1505,11 +1497,19 @@ void
 vioif_watchdog(struct ifnet *ifp)
 {
 	struct vioif_softc *sc = ifp->if_softc;
+	struct vioif_txqueue *txq;
 	int i;
 
 	if (ifp->if_flags & IFF_RUNNING) {
 		for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
-			vioif_tx_queue_clear(>sc_txq[i]);
+			txq = >sc_txq[i];
+
+			mutex_enter(txq->txq_lock);
+			if (!txq->txq_running_handle) {
+txq->txq_running_handle = true;
+vioif_tx_sched_handle(sc, txq);
+			}
+			mutex_exit(txq->txq_lock);
 		}
 	}
 }
@@ -1589,20 +1589,31 @@ vioif_populate_rx_mbufs_locked(struct vi
 }
 
 static void
-vioif_rx_queue_clear(struct vioif_rxqueue *rxq)
+vioif_rx_queue_clear(struct vioif_softc *sc, struct virtio_softc *vsc,
+struct vioif_rxqueue *rxq)
 {
-	struct virtqueue *vq = rxq->rxq_vq;
-	struct virtio_softc *vsc = vq->vq_owner;
-	struct vioif_softc *sc = device_private(virtio_child(vsc));
-	u_int limit = UINT_MAX;
+	struct mbuf *m;
+	unsigned int i, vq_num;
 	bool more;
 
 	mutex_enter(rxq->rxq_lock);
+	vq_num = rxq->rxq_vq->vq_num;
+
 	for (;;) {
-		more = vioif_rx_deq_locked(sc, vsc, rxq, limit, NULL);
+		more = vioif_rx_deq_locked(sc, vsc, rxq, vq_num, NULL);
 		if (more == false)
 			break;
 	}
+
+	for (i = 0; i < vq_num; i++) {
+		m = rxq->rxq_mbufs[i];
+		if (m == NULL)
+			continue;
+		rxq->rxq_mbufs[i] = NULL;
+
+		bus_dmamap_unload(virtio_dmat(vsc), rxq->rxq_dmamaps[i]);
+		m_freem(m);
+	}
 	mutex_exit(rxq->rxq_lock);
 }
 
@@ -1764,25 +1775,6 @@ vioif_rx_sched_handle(struct vioif_softc
 		softint_schedule(rxq->rxq_handle_si);
 }
 
-/* free all the mbufs; called from if_stop(disable) */
-static void
-vioif_rx_drain(struct vioif_rxqueue *rxq)
-{
-	struct virtqueue *vq = rxq->rxq_vq;
-	struct virtio_softc *vsc = vq->vq_owner;
-	struct mbuf *m;
-	int i;
-
-	for (i = 0; i < vq->vq_num; i++) {
-		m = rxq->rxq_mbufs[i];
-		if (m == NULL)
-			continue;
-		rxq->rxq_mbufs[i] = NULL;
-		bus_dmamap_unload(virtio_dmat(vsc), rxq->rxq_dmamaps[i]);
-		m_freem(m);
-	}
-}
-
 /*
  * 

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 02:03:01 UTC 2023

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

Log Message:
vioif(4): merge drain into clear of queue


To generate a diff of this commit:
cvs rdiff -u -r1.92 -r1.93 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:58:04 UTC 2023

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

Log Message:
vioif(4): divide interrupt handler for receiving
into dequeuing and preparing of buffers


To generate a diff of this commit:
cvs rdiff -u -r1.91 -r1.92 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.91 src/sys/dev/pci/if_vioif.c:1.92
--- src/sys/dev/pci/if_vioif.c:1.91	Thu Mar 23 01:52:42 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:58:04 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.91 2023/03/23 01:52:42 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.92 2023/03/23 01:58:04 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.91 2023/03/23 01:52:42 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.92 2023/03/23 01:58:04 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -376,7 +376,7 @@ static void	vioif_populate_rx_mbufs_lock
 		struct vioif_rxqueue *);
 static void	vioif_rx_queue_clear(struct vioif_rxqueue *);
 static bool	vioif_rx_deq_locked(struct vioif_softc *, struct virtio_softc *,
-		struct vioif_rxqueue *, u_int);
+		struct vioif_rxqueue *, u_int, size_t *);
 static int	vioif_rx_intr(void *);
 static void	vioif_rx_handle(void *);
 static void	vioif_rx_sched_handle(struct vioif_softc *,
@@ -1528,9 +1528,6 @@ vioif_populate_rx_mbufs_locked(struct vi
 
 	KASSERT(mutex_owned(rxq->rxq_lock));
 
-	if (rxq->rxq_stopping)
-		return;
-
 	for (i = 0; i < vq->vq_num; i++) {
 		int slot;
 		r = virtio_enqueue_prep(vsc, vq, );
@@ -1600,11 +1597,9 @@ vioif_rx_queue_clear(struct vioif_rxqueu
 	u_int limit = UINT_MAX;
 	bool more;
 
-	KASSERT(rxq->rxq_stopping);
-
 	mutex_enter(rxq->rxq_lock);
 	for (;;) {
-		more = vioif_rx_deq_locked(sc, vsc, rxq, limit);
+		more = vioif_rx_deq_locked(sc, vsc, rxq, limit, NULL);
 		if (more == false)
 			break;
 	}
@@ -1614,21 +1609,25 @@ vioif_rx_queue_clear(struct vioif_rxqueu
 /* dequeue received packets */
 static bool
 vioif_rx_deq_locked(struct vioif_softc *sc, struct virtio_softc *vsc,
-struct vioif_rxqueue *rxq, u_int limit)
+struct vioif_rxqueue *rxq, u_int limit, size_t *ndeqp)
 {
 	struct virtqueue *vq = rxq->rxq_vq;
 	struct ifnet *ifp = >sc_ethercom.ec_if;
 	struct mbuf *m;
 	int slot, len;
-	bool more = false, dequeued = false;
+	bool more;
+	size_t ndeq;
 
 	KASSERT(mutex_owned(rxq->rxq_lock));
 
+	more = false;
+	ndeq = 0;
+
 	if (virtio_vq_is_enqueued(vsc, vq) == false)
-		return false;
+		goto done;
 
-	for (;;) {
-		if (limit-- == 0) {
+	for (;;ndeq++) {
+		if (ndeq >= limit) {
 			more = true;
 			break;
 		}
@@ -1636,8 +1635,6 @@ vioif_rx_deq_locked(struct vioif_softc *
 		if (virtio_dequeue(vsc, vq, , ) != 0)
 			break;
 
-		dequeued = true;
-
 		len -= sc->sc_hdr_size;
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_hdr_dmamaps[slot],
 		0, sc->sc_hdr_size, BUS_DMASYNC_POSTREAD);
@@ -1654,8 +1651,10 @@ vioif_rx_deq_locked(struct vioif_softc *
 		if_percpuq_enqueue(ifp->if_percpuq, m);
 	}
 
-	if (dequeued)
-		vioif_populate_rx_mbufs_locked(sc, rxq);
+
+done:
+	if (ndeqp != NULL)
+		*ndeqp = ndeq;
 
 	return more;
 }
@@ -1671,11 +1670,15 @@ vioif_rx_handle_locked(void *xrxq, u_int
 	struct vioif_softc *sc = device_private(virtio_child(vsc));
 	bool more;
 	int enqueued;
+	size_t ndeq;
 
 	KASSERT(mutex_owned(rxq->rxq_lock));
 	KASSERT(!rxq->rxq_stopping);
 
-	more = vioif_rx_deq_locked(sc, vsc, rxq, limit);
+	more = vioif_rx_deq_locked(sc, vsc, rxq, limit, );
+	if (ndeq > 0)
+		vioif_populate_rx_mbufs_locked(sc, rxq);
+
 	if (more) {
 		vioif_rx_sched_handle(sc, rxq);
 		return;



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:58:04 UTC 2023

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

Log Message:
vioif(4): divide interrupt handler for receiving
into dequeuing and preparing of buffers


To generate a diff of this commit:
cvs rdiff -u -r1.91 -r1.92 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:52:42 UTC 2023

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

Log Message:
vioif(4): drain receive buffer on stopping the device
to remove branch in vioif_populate_rx_mbufs_locked()


To generate a diff of this commit:
cvs rdiff -u -r1.90 -r1.91 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.90 src/sys/dev/pci/if_vioif.c:1.91
--- src/sys/dev/pci/if_vioif.c:1.90	Thu Mar 23 01:46:30 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:52:42 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.90 2023/03/23 01:46:30 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.91 2023/03/23 01:52:42 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.90 2023/03/23 01:46:30 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.91 2023/03/23 01:52:42 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1288,9 +1288,7 @@ vioif_stop(struct ifnet *ifp, int disabl
 		txq = >sc_txq[i];
 		rxq = >sc_rxq[i];
 
-		if (disable)
-			vioif_rx_drain(rxq);
-
+		vioif_rx_drain(rxq);
 		vioif_tx_drain(txq);
 	}
 }
@@ -1541,36 +1539,31 @@ vioif_populate_rx_mbufs_locked(struct vi
 		if (r != 0)
 			panic("enqueue_prep for rx buffers");
 
-		m = rxq->rxq_mbufs[slot];
+		MGETHDR(m, M_DONTWAIT, MT_DATA);
 		if (m == NULL) {
-			MGETHDR(m, M_DONTWAIT, MT_DATA);
-			if (m == NULL) {
-virtio_enqueue_abort(vsc, vq, slot);
-rxq->rxq_mbuf_enobufs.ev_count++;
-break;
-			}
-			MCLGET(m, M_DONTWAIT);
-			if ((m->m_flags & M_EXT) == 0) {
-virtio_enqueue_abort(vsc, vq, slot);
-m_freem(m);
-rxq->rxq_mbuf_enobufs.ev_count++;
-break;
-			}
+			virtio_enqueue_abort(vsc, vq, slot);
+			rxq->rxq_mbuf_enobufs.ev_count++;
+			break;
+		}
+		MCLGET(m, M_DONTWAIT);
+		if ((m->m_flags & M_EXT) == 0) {
+			virtio_enqueue_abort(vsc, vq, slot);
+			m_freem(m);
+			rxq->rxq_mbuf_enobufs.ev_count++;
+			break;
+		}
 
-			m->m_len = m->m_pkthdr.len = MCLBYTES;
-			m_adj(m, ETHER_ALIGN);
+		m->m_len = m->m_pkthdr.len = MCLBYTES;
+		m_adj(m, ETHER_ALIGN);
 
-			r = bus_dmamap_load_mbuf(virtio_dmat(vsc),
-			rxq->rxq_dmamaps[slot], m, BUS_DMA_READ | BUS_DMA_NOWAIT);
+		r = bus_dmamap_load_mbuf(virtio_dmat(vsc),
+		rxq->rxq_dmamaps[slot], m, BUS_DMA_READ | BUS_DMA_NOWAIT);
 
-			if (r != 0) {
-virtio_enqueue_abort(vsc, vq, slot);
-m_freem(m);
-rxq->rxq_mbuf_load_failed.ev_count++;
-break;
-			}
-		} else {
-			rxq->rxq_mbufs[slot] = NULL;
+		if (r != 0) {
+			virtio_enqueue_abort(vsc, vq, slot);
+			m_freem(m);
+			rxq->rxq_mbuf_load_failed.ev_count++;
+			break;
 		}
 
 		r = virtio_enqueue_reserve(vsc, vq, slot,
@@ -1582,6 +1575,7 @@ vioif_populate_rx_mbufs_locked(struct vi
 			/* slot already freed by virtio_enqueue_reserve */
 			break;
 		}
+		KASSERT(rxq->rxq_mbufs[slot] == NULL);
 		rxq->rxq_mbufs[slot] = m;
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_hdr_dmamaps[slot],
 		0, sc->sc_hdr_size, BUS_DMASYNC_PREREAD);



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:52:42 UTC 2023

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

Log Message:
vioif(4): drain receive buffer on stopping the device
to remove branch in vioif_populate_rx_mbufs_locked()


To generate a diff of this commit:
cvs rdiff -u -r1.90 -r1.91 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:46:30 UTC 2023

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

Log Message:
vioif(4): fix missing virtio_enqueue_abort for error handling


To generate a diff of this commit:
cvs rdiff -u -r1.89 -r1.90 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.89 src/sys/dev/pci/if_vioif.c:1.90
--- src/sys/dev/pci/if_vioif.c:1.89	Thu Mar 23 01:42:32 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:46:30 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.89 2023/03/23 01:42:32 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.90 2023/03/23 01:46:30 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.89 2023/03/23 01:42:32 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.90 2023/03/23 01:46:30 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1545,11 +1545,13 @@ vioif_populate_rx_mbufs_locked(struct vi
 		if (m == NULL) {
 			MGETHDR(m, M_DONTWAIT, MT_DATA);
 			if (m == NULL) {
+virtio_enqueue_abort(vsc, vq, slot);
 rxq->rxq_mbuf_enobufs.ev_count++;
 break;
 			}
 			MCLGET(m, M_DONTWAIT);
 			if ((m->m_flags & M_EXT) == 0) {
+virtio_enqueue_abort(vsc, vq, slot);
 m_freem(m);
 rxq->rxq_mbuf_enobufs.ev_count++;
 break;
@@ -1562,6 +1564,7 @@ vioif_populate_rx_mbufs_locked(struct vi
 			rxq->rxq_dmamaps[slot], m, BUS_DMA_READ | BUS_DMA_NOWAIT);
 
 			if (r != 0) {
+virtio_enqueue_abort(vsc, vq, slot);
 m_freem(m);
 rxq->rxq_mbuf_load_failed.ev_count++;
 break;



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:46:30 UTC 2023

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

Log Message:
vioif(4): fix missing virtio_enqueue_abort for error handling


To generate a diff of this commit:
cvs rdiff -u -r1.89 -r1.90 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:42:33 UTC 2023

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

Log Message:
vioif(4): added event counters related to receive processing


To generate a diff of this commit:
cvs rdiff -u -r1.88 -r1.89 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.88 src/sys/dev/pci/if_vioif.c:1.89
--- src/sys/dev/pci/if_vioif.c:1.88	Thu Mar 23 01:39:52 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:42:32 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.88 2023/03/23 01:39:52 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.89 2023/03/23 01:42:32 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.88 2023/03/23 01:39:52 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.89 2023/03/23 01:42:32 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -273,7 +273,9 @@ struct vioif_rxqueue {
 	bool			 rxq_running_handle;
 
 	char			 rxq_evgroup[16];
-	struct evcnt		 rxq_mbuf_add_failed;
+	struct evcnt		 rxq_mbuf_enobufs;
+	struct evcnt		 rxq_mbuf_load_failed;
+	struct evcnt		 rxq_enqueue_reserve_failed;
 };
 
 struct vioif_ctrlqueue {
@@ -370,8 +372,6 @@ static void	vioif_watchdog(struct ifnet 
 static int	vioif_ifflags_cb(struct ethercom *);
 
 /* rx */
-static int	vioif_add_rx_mbuf(struct vioif_rxqueue *, int);
-static void	vioif_free_rx_mbuf(struct vioif_rxqueue *, int);
 static void	vioif_populate_rx_mbufs_locked(struct vioif_softc *,
 		struct vioif_rxqueue *);
 static void	vioif_rx_queue_clear(struct vioif_rxqueue *);
@@ -1519,54 +1519,13 @@ vioif_watchdog(struct ifnet *ifp)
 /*
  * Receive implementation
  */
-/* allocate and initialize a mbuf for receive */
-static int
-vioif_add_rx_mbuf(struct vioif_rxqueue *rxq, int i)
-{
-	struct virtio_softc *vsc = rxq->rxq_vq->vq_owner;
-	struct mbuf *m;
-	int r;
-
-	MGETHDR(m, M_DONTWAIT, MT_DATA);
-	if (m == NULL)
-		return ENOBUFS;
-	MCLGET(m, M_DONTWAIT);
-	if ((m->m_flags & M_EXT) == 0) {
-		m_freem(m);
-		return ENOBUFS;
-	}
-	m->m_len = m->m_pkthdr.len = MCLBYTES;
-	m_adj(m, ETHER_ALIGN);
-
-	rxq->rxq_mbufs[i] = m;
-	r = bus_dmamap_load_mbuf(virtio_dmat(vsc),
-	rxq->rxq_dmamaps[i], m, BUS_DMA_READ | BUS_DMA_NOWAIT);
-	if (r) {
-		m_freem(m);
-		rxq->rxq_mbufs[i] = NULL;
-		return r;
-	}
-
-	return 0;
-}
-
-/* free a mbuf for receive */
-static void
-vioif_free_rx_mbuf(struct vioif_rxqueue *rxq, int i)
-{
-	struct virtio_softc *vsc = rxq->rxq_vq->vq_owner;
-
-	bus_dmamap_unload(virtio_dmat(vsc), rxq->rxq_dmamaps[i]);
-	m_freem(rxq->rxq_mbufs[i]);
-	rxq->rxq_mbufs[i] = NULL;
-}
-
 /* add mbufs for all the empty receive slots */
 static void
 vioif_populate_rx_mbufs_locked(struct vioif_softc *sc, struct vioif_rxqueue *rxq)
 {
 	struct virtqueue *vq = rxq->rxq_vq;
 	struct virtio_softc *vsc = vq->vq_owner;
+	struct mbuf *m;
 	int i, r, ndone = 0;
 
 	KASSERT(mutex_owned(rxq->rxq_lock));
@@ -1581,19 +1540,46 @@ vioif_populate_rx_mbufs_locked(struct vi
 			break;
 		if (r != 0)
 			panic("enqueue_prep for rx buffers");
-		if (rxq->rxq_mbufs[slot] == NULL) {
-			r = vioif_add_rx_mbuf(rxq, slot);
+
+		m = rxq->rxq_mbufs[slot];
+		if (m == NULL) {
+			MGETHDR(m, M_DONTWAIT, MT_DATA);
+			if (m == NULL) {
+rxq->rxq_mbuf_enobufs.ev_count++;
+break;
+			}
+			MCLGET(m, M_DONTWAIT);
+			if ((m->m_flags & M_EXT) == 0) {
+m_freem(m);
+rxq->rxq_mbuf_enobufs.ev_count++;
+break;
+			}
+
+			m->m_len = m->m_pkthdr.len = MCLBYTES;
+			m_adj(m, ETHER_ALIGN);
+
+			r = bus_dmamap_load_mbuf(virtio_dmat(vsc),
+			rxq->rxq_dmamaps[slot], m, BUS_DMA_READ | BUS_DMA_NOWAIT);
+
 			if (r != 0) {
-rxq->rxq_mbuf_add_failed.ev_count++;
+m_freem(m);
+rxq->rxq_mbuf_load_failed.ev_count++;
 break;
 			}
+		} else {
+			rxq->rxq_mbufs[slot] = NULL;
 		}
+
 		r = virtio_enqueue_reserve(vsc, vq, slot,
 		rxq->rxq_dmamaps[slot]->dm_nsegs + 1);
 		if (r != 0) {
-			vioif_free_rx_mbuf(rxq, slot);
+			rxq->rxq_enqueue_reserve_failed.ev_count++;
+			bus_dmamap_unload(virtio_dmat(vsc), rxq->rxq_dmamaps[slot]);
+			m_freem(m);
+			/* slot already freed by virtio_enqueue_reserve */
 			break;
 		}
+		rxq->rxq_mbufs[slot] = m;
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_hdr_dmamaps[slot],
 		0, sc->sc_hdr_size, BUS_DMASYNC_PREREAD);
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_dmamaps[slot],
@@ -1783,12 +1769,17 @@ static void
 vioif_rx_drain(struct vioif_rxqueue *rxq)
 {
 	struct virtqueue *vq = rxq->rxq_vq;
+	struct virtio_softc *vsc = vq->vq_owner;
+	struct mbuf *m;
 	int i;
 
 	for (i = 0; i < vq->vq_num; i++) {
-		if (rxq->rxq_mbufs[i] == NULL)
+		m = rxq->rxq_mbufs[i];
+		if (m == NULL)
 			continue;
-		vioif_free_rx_mbuf(rxq, i);
+		rxq->rxq_mbufs[i] = NULL;
+		

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:42:33 UTC 2023

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

Log Message:
vioif(4): added event counters related to receive processing


To generate a diff of this commit:
cvs rdiff -u -r1.88 -r1.89 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:39:52 UTC 2023

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

Log Message:
vioif(4): adjust receive buffer to ETHER_ALIGN


To generate a diff of this commit:
cvs rdiff -u -r1.87 -r1.88 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.87 src/sys/dev/pci/if_vioif.c:1.88
--- src/sys/dev/pci/if_vioif.c:1.87	Thu Mar 23 01:36:50 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:39:52 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.87 2023/03/23 01:36:50 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.88 2023/03/23 01:39:52 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.87 2023/03/23 01:36:50 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.88 2023/03/23 01:39:52 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -705,7 +705,7 @@ vioif_alloc_mems(struct vioif_softc *sc)
 goto err_reqs;
 
 			r = vioif_dmamap_create(sc, >rxq_dmamaps[i],
-			MCLBYTES, 1, "rx payload");
+			MCLBYTES - ETHER_ALIGN, 1, "rx payload");
 			if (r != 0)
 goto err_reqs;
 		}
@@ -1535,8 +1535,10 @@ vioif_add_rx_mbuf(struct vioif_rxqueue *
 		m_freem(m);
 		return ENOBUFS;
 	}
+	m->m_len = m->m_pkthdr.len = MCLBYTES;
+	m_adj(m, ETHER_ALIGN);
+
 	rxq->rxq_mbufs[i] = m;
-	m->m_len = m->m_pkthdr.len = m->m_ext.ext_size;
 	r = bus_dmamap_load_mbuf(virtio_dmat(vsc),
 	rxq->rxq_dmamaps[i], m, BUS_DMA_READ | BUS_DMA_NOWAIT);
 	if (r) {
@@ -1595,7 +1597,7 @@ vioif_populate_rx_mbufs_locked(struct vi
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_hdr_dmamaps[slot],
 		0, sc->sc_hdr_size, BUS_DMASYNC_PREREAD);
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_dmamaps[slot],
-		0, MCLBYTES, BUS_DMASYNC_PREREAD);
+		0, rxq->rxq_dmamaps[slot]->dm_mapsize, BUS_DMASYNC_PREREAD);
 		virtio_enqueue(vsc, vq, slot, rxq->rxq_hdr_dmamaps[slot],
 		false);
 		virtio_enqueue(vsc, vq, slot, rxq->rxq_dmamaps[slot], false);
@@ -1657,7 +1659,7 @@ vioif_rx_deq_locked(struct vioif_softc *
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_hdr_dmamaps[slot],
 		0, sc->sc_hdr_size, BUS_DMASYNC_POSTREAD);
 		bus_dmamap_sync(virtio_dmat(vsc), rxq->rxq_dmamaps[slot],
-		0, MCLBYTES, BUS_DMASYNC_POSTREAD);
+		0, rxq->rxq_dmamaps[slot]->dm_mapsize, BUS_DMASYNC_POSTREAD);
 		m = rxq->rxq_mbufs[slot];
 		KASSERT(m != NULL);
 		bus_dmamap_unload(virtio_dmat(vsc), rxq->rxq_dmamaps[slot]);



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:39:52 UTC 2023

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

Log Message:
vioif(4): adjust receive buffer to ETHER_ALIGN


To generate a diff of this commit:
cvs rdiff -u -r1.87 -r1.88 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:36:50 UTC 2023

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

Log Message:
vioif(4): stop interrupt before schedule handler


To generate a diff of this commit:
cvs rdiff -u -r1.86 -r1.87 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.86 src/sys/dev/pci/if_vioif.c:1.87
--- src/sys/dev/pci/if_vioif.c:1.86	Thu Mar 23 01:33:20 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:36:50 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.86 2023/03/23 01:33:20 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.87 2023/03/23 01:36:50 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.86 2023/03/23 01:33:20 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.87 2023/03/23 01:36:50 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1685,6 +1685,7 @@ vioif_rx_handle_locked(void *xrxq, u_int
 	struct virtio_softc *vsc = vq->vq_owner;
 	struct vioif_softc *sc = device_private(virtio_child(vsc));
 	bool more;
+	int enqueued;
 
 	KASSERT(mutex_owned(rxq->rxq_lock));
 	KASSERT(!rxq->rxq_stopping);
@@ -1694,8 +1695,10 @@ vioif_rx_handle_locked(void *xrxq, u_int
 		vioif_rx_sched_handle(sc, rxq);
 		return;
 	}
-	more = virtio_start_vq_intr(vsc, rxq->rxq_vq);
-	if (more) {
+
+	enqueued = virtio_start_vq_intr(vsc, rxq->rxq_vq);
+	if (enqueued != 0) {
+		virtio_stop_vq_intr(vsc, rxq->rxq_vq);
 		vioif_rx_sched_handle(sc, rxq);
 		return;
 	}
@@ -1805,6 +1808,7 @@ vioif_tx_handle_locked(struct vioif_txqu
 	struct vioif_softc *sc = device_private(virtio_child(vsc));
 	struct ifnet *ifp = >sc_ethercom.ec_if;
 	bool more;
+	int enqueued;
 
 	KASSERT(mutex_owned(txq->txq_lock));
 	KASSERT(!txq->txq_stopping);
@@ -1815,11 +1819,11 @@ vioif_tx_handle_locked(struct vioif_txqu
 		return;
 	}
 
-	if (virtio_features(vsc) & VIRTIO_F_RING_EVENT_IDX)
-		more = virtio_postpone_intr_smart(vsc, vq);
-	else
-		more = virtio_start_vq_intr(vsc, vq);
-	if (more) {
+	enqueued = (virtio_features(vsc) & VIRTIO_F_RING_EVENT_IDX) ?
+	virtio_postpone_intr_smart(vsc, vq):
+	virtio_start_vq_intr(vsc, vq);
+	if (enqueued != 0) {
+		virtio_stop_vq_intr(vsc, vq);
 		vioif_tx_sched_handle(sc, txq);
 		return;
 	}



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:36:50 UTC 2023

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

Log Message:
vioif(4): stop interrupt before schedule handler


To generate a diff of this commit:
cvs rdiff -u -r1.86 -r1.87 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:33:21 UTC 2023

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

Log Message:
vioif(4): rename {txq,rxq}_active to {txq,rxq}_running_handle


To generate a diff of this commit:
cvs rdiff -u -r1.85 -r1.86 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.85 src/sys/dev/pci/if_vioif.c:1.86
--- src/sys/dev/pci/if_vioif.c:1.85	Thu Mar 23 01:30:26 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:33:20 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.85 2023/03/23 01:30:26 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.86 2023/03/23 01:33:20 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.85 2023/03/23 01:30:26 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.86 2023/03/23 01:33:20 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -247,7 +247,7 @@ struct vioif_txqueue {
 	void			*txq_handle_si;
 	struct vioif_work	 txq_work;
 	bool			 txq_workqueue;
-	bool			 txq_active;
+	bool			 txq_running_handle;
 
 	char			 txq_evgroup[16];
 	struct evcnt		 txq_defrag_failed;
@@ -270,7 +270,7 @@ struct vioif_rxqueue {
 	void			*rxq_handle_si;
 	struct vioif_work	 rxq_work;
 	bool			 rxq_workqueue;
-	bool			 rxq_active;
+	bool			 rxq_running_handle;
 
 	char			 rxq_evgroup[16];
 	struct evcnt		 rxq_mbuf_add_failed;
@@ -961,7 +961,7 @@ vioif_attach(device_t parent, device_t s
 		rxq->rxq_vq->vq_intrhand = vioif_rx_intr;
 		rxq->rxq_vq->vq_intrhand_arg = (void *)rxq;
 		rxq->rxq_stopping = false;
-		rxq->rxq_active = false;
+		rxq->rxq_running_handle = false;
 		vioif_work_set(>rxq_work, vioif_rx_handle, rxq);
 
 		txq->txq_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
@@ -990,7 +990,7 @@ vioif_attach(device_t parent, device_t s
 		txq->txq_vq->vq_intrhand_arg = (void *)txq;
 		txq->txq_link_active = VIOIF_IS_LINK_ACTIVE(sc);
 		txq->txq_stopping = false;
-		txq->txq_active = false;
+		txq->txq_running_handle = false;
 		txq->txq_intrq = pcq_create(txq->txq_vq->vq_num, KM_SLEEP);
 		vioif_work_set(>txq_work, vioif_tx_handle, txq);
 	}
@@ -1275,12 +1275,12 @@ vioif_stop(struct ifnet *ifp, int disabl
 
 		mutex_enter(rxq->rxq_lock);
 		rxq->rxq_stopping = false;
-		KASSERT(!rxq->rxq_active);
+		KASSERT(!rxq->rxq_running_handle);
 		mutex_exit(rxq->rxq_lock);
 
 		mutex_enter(txq->txq_lock);
 		txq->txq_stopping = false;
-		KASSERT(!txq->txq_active);
+		KASSERT(!txq->txq_running_handle);
 		mutex_exit(txq->txq_lock);
 	}
 
@@ -1700,7 +1700,7 @@ vioif_rx_handle_locked(void *xrxq, u_int
 		return;
 	}
 
-	rxq->rxq_active = false;
+	rxq->rxq_running_handle = false;
 }
 
 static int
@@ -1716,13 +1716,13 @@ vioif_rx_intr(void *arg)
 	mutex_enter(rxq->rxq_lock);
 
 	/* rx handler is already running in softint/workqueue */
-	if (rxq->rxq_active)
+	if (rxq->rxq_running_handle)
 		goto done;
 
 	if (rxq->rxq_stopping)
 		goto done;
 
-	rxq->rxq_active = true;
+	rxq->rxq_running_handle = true;
 
 	limit = sc->sc_rx_intr_process_limit;
 	virtio_stop_vq_intr(vsc, vq);
@@ -1744,10 +1744,10 @@ vioif_rx_handle(void *xrxq)
 
 	mutex_enter(rxq->rxq_lock);
 
-	KASSERT(rxq->rxq_active);
+	KASSERT(rxq->rxq_running_handle);
 
 	if (rxq->rxq_stopping) {
-		rxq->rxq_active = false;
+		rxq->rxq_running_handle = false;
 		goto done;
 	}
 
@@ -1824,7 +1824,7 @@ vioif_tx_handle_locked(struct vioif_txqu
 		return;
 	}
 
-	txq->txq_active = false;
+	txq->txq_running_handle = false;
 
 	/* for ALTQ */
 	if (txq == >sc_txq[0]) {
@@ -1849,13 +1849,13 @@ vioif_tx_intr(void *arg)
 	mutex_enter(txq->txq_lock);
 
 	/* tx handler is already running in softint/workqueue */
-	if (txq->txq_active)
+	if (txq->txq_running_handle)
 		goto done;
 
 	if (txq->txq_stopping)
 		goto done;
 
-	txq->txq_active = true;
+	txq->txq_running_handle = true;
 
 	virtio_stop_vq_intr(vsc, vq);
 	txq->txq_workqueue = sc->sc_txrx_workqueue_sysctl;
@@ -1877,10 +1877,10 @@ vioif_tx_handle(void *xtxq)
 
 	mutex_enter(txq->txq_lock);
 
-	KASSERT(txq->txq_active);
+	KASSERT(txq->txq_running_handle);
 
 	if (txq->txq_stopping) {
-		txq->txq_active = false;
+		txq->txq_running_handle = false;
 		goto done;
 	}
 



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:33:21 UTC 2023

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

Log Message:
vioif(4): rename {txq,rxq}_active to {txq,rxq}_running_handle


To generate a diff of this commit:
cvs rdiff -u -r1.85 -r1.86 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:30:26 UTC 2023

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

Log Message:
vioif(4): use device reset to stop interrupt completely


To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.85 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.84 src/sys/dev/pci/if_vioif.c:1.85
--- src/sys/dev/pci/if_vioif.c:1.84	Thu Mar 23 01:26:29 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:30:26 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.84 2023/03/23 01:26:29 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.85 2023/03/23 01:30:26 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.84 2023/03/23 01:26:29 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.85 2023/03/23 01:30:26 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -51,6 +51,7 @@ __KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v
 #include 
 #include 
 #include 
+#include 
 
 #include 
 #include 
@@ -420,6 +421,7 @@ static void	vioif_disable_interrupt_vqpa
 static int	vioif_setup_sysctl(struct vioif_softc *);
 static void	vioif_setup_stats(struct vioif_softc *);
 static int	vioif_ifflags(struct vioif_softc *);
+static void	vioif_intr_barrier(void);
 
 CFATTACH_DECL_NEW(vioif, sizeof(struct vioif_softc),
 		  vioif_match, vioif_attach, NULL, NULL);
@@ -958,7 +960,8 @@ vioif_attach(device_t parent, device_t s
 		nvqs++;
 		rxq->rxq_vq->vq_intrhand = vioif_rx_intr;
 		rxq->rxq_vq->vq_intrhand_arg = (void *)rxq;
-		rxq->rxq_stopping = true;
+		rxq->rxq_stopping = false;
+		rxq->rxq_active = false;
 		vioif_work_set(>rxq_work, vioif_rx_handle, rxq);
 
 		txq->txq_lock = mutex_obj_alloc(MUTEX_DEFAULT, IPL_NET);
@@ -987,6 +990,7 @@ vioif_attach(device_t parent, device_t s
 		txq->txq_vq->vq_intrhand_arg = (void *)txq;
 		txq->txq_link_active = VIOIF_IS_LINK_ACTIVE(sc);
 		txq->txq_stopping = false;
+		txq->txq_active = false;
 		txq->txq_intrq = pcq_create(txq->txq_vq->vq_num, KM_SLEEP);
 		vioif_work_set(>txq_work, vioif_tx_handle, txq);
 	}
@@ -1183,9 +1187,7 @@ vioif_init(struct ifnet *ifp)
 	for (i = 0; i < sc->sc_req_nvq_pairs; i++) {
 		rxq = >sc_rxq[i];
 
-		/* Have to set false before vioif_populate_rx_mbufs */
 		mutex_enter(rxq->rxq_lock);
-		rxq->rxq_stopping = false;
 		vioif_populate_rx_mbufs_locked(sc, rxq);
 		mutex_exit(rxq->rxq_lock);
 
@@ -1202,9 +1204,6 @@ vioif_init(struct ifnet *ifp)
 	else
 		sc->sc_act_nvq_pairs = 1;
 
-	for (i = 0; i < sc->sc_act_nvq_pairs; i++)
-		sc->sc_txq[i].txq_stopping = false;
-
 	vioif_enable_interrupt_vqpairs(sc);
 
 	vioif_update_link_status(sc);
@@ -1225,16 +1224,7 @@ vioif_stop(struct ifnet *ifp, int disabl
 	struct vioif_ctrlqueue *ctrlq = >sc_ctrlq;
 	int i;
 
-	/* disable interrupts */
-	vioif_disable_interrupt_vqpairs(sc);
-	if (sc->sc_has_ctrl)
-		virtio_stop_vq_intr(vsc, ctrlq->ctrlq_vq);
 
-	/*
-	 * stop all packet processing:
-	 * 1. stop interrupt handlers by rxq_stopping and txq_stopping
-	 * 2. wait for stopping workqueue for packet processing
-	 */
 	for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
 		txq = >sc_txq[i];
 		rxq = >sc_rxq[i];
@@ -1242,17 +1232,35 @@ vioif_stop(struct ifnet *ifp, int disabl
 		mutex_enter(rxq->rxq_lock);
 		rxq->rxq_stopping = true;
 		mutex_exit(rxq->rxq_lock);
-		vioif_work_wait(sc->sc_txrx_workqueue, >rxq_work);
 
 		mutex_enter(txq->txq_lock);
 		txq->txq_stopping = true;
 		mutex_exit(txq->txq_lock);
-		vioif_work_wait(sc->sc_txrx_workqueue, >txq_work);
 	}
 
-	/* only way to stop I/O and DMA is resetting... */
+	/* disable interrupts */
+	vioif_disable_interrupt_vqpairs(sc);
+	if (sc->sc_has_ctrl)
+		virtio_stop_vq_intr(vsc, ctrlq->ctrlq_vq);
+
+	/*
+	 * only way to stop interrupt, I/O and DMA is resetting...
+	 *
+	 * NOTE: Devices based on VirtIO draft specification can not
+	 * stop interrupt completely even if virtio_stop_vq_intr() is called.
+	 */
 	virtio_reset(vsc);
 
+	vioif_intr_barrier();
+
+	for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
+		txq = >sc_txq[i];
+		rxq = >sc_rxq[i];
+
+		vioif_work_wait(sc->sc_txrx_workqueue, >rxq_work);
+		vioif_work_wait(sc->sc_txrx_workqueue, >txq_work);
+	}
+
 	for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
 		vioif_rx_queue_clear(>sc_rxq[i]);
 		vioif_tx_queue_clear(>sc_txq[i]);
@@ -1260,6 +1268,22 @@ vioif_stop(struct ifnet *ifp, int disabl
 
 	ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
 
+	/* all packet processing is stopped */
+	for (i = 0; i < sc->sc_act_nvq_pairs; i++) {
+		txq = >sc_txq[i];
+		rxq = >sc_rxq[i];
+
+		mutex_enter(rxq->rxq_lock);
+		rxq->rxq_stopping = false;
+		KASSERT(!rxq->rxq_active);
+		mutex_exit(rxq->rxq_lock);
+
+		mutex_enter(txq->txq_lock);
+		txq->txq_stopping = false;
+		KASSERT(!txq->txq_active);
+		

CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:30:26 UTC 2023

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

Log Message:
vioif(4): use device reset to stop interrupt completely


To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.85 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:26:29 UTC 2023

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

Log Message:
vioif(4): access to txq_active and rxq_active with lock held


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.83 src/sys/dev/pci/if_vioif.c:1.84
--- src/sys/dev/pci/if_vioif.c:1.83	Thu Mar 23 01:23:18 2023
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:26:29 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.83 2023/03/23 01:23:18 yamaguchi Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.84 2023/03/23 01:26:29 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.83 2023/03/23 01:23:18 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.84 2023/03/23 01:26:29 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1662,6 +1662,7 @@ vioif_rx_handle_locked(void *xrxq, u_int
 	struct vioif_softc *sc = device_private(virtio_child(vsc));
 	bool more;
 
+	KASSERT(mutex_owned(rxq->rxq_lock));
 	KASSERT(!rxq->rxq_stopping);
 
 	more = vioif_rx_deq_locked(sc, vsc, rxq, limit);
@@ -1674,7 +1675,8 @@ vioif_rx_handle_locked(void *xrxq, u_int
 		vioif_rx_sched_handle(sc, rxq);
 		return;
 	}
-	atomic_store_relaxed(>rxq_active, false);
+
+	rxq->rxq_active = false;
 }
 
 static int
@@ -1686,22 +1688,23 @@ vioif_rx_intr(void *arg)
 	struct vioif_softc *sc = device_private(virtio_child(vsc));
 	u_int limit;
 
-	limit = sc->sc_rx_intr_process_limit;
-
-	if (atomic_load_relaxed(>rxq_active) == true)
-		return 1;
 
 	mutex_enter(rxq->rxq_lock);
 
-	if (!rxq->rxq_stopping) {
-		rxq->rxq_workqueue = sc->sc_txrx_workqueue_sysctl;
+	/* rx handler is already running in softint/workqueue */
+	if (rxq->rxq_active)
+		goto done;
 
-		virtio_stop_vq_intr(vsc, vq);
-		atomic_store_relaxed(>rxq_active, true);
+	if (rxq->rxq_stopping)
+		goto done;
 
-		vioif_rx_handle_locked(rxq, limit);
-	}
+	rxq->rxq_active = true;
 
+	limit = sc->sc_rx_intr_process_limit;
+	virtio_stop_vq_intr(vsc, vq);
+	vioif_rx_handle_locked(rxq, limit);
+
+done:
 	mutex_exit(rxq->rxq_lock);
 	return 1;
 }
@@ -1773,6 +1776,7 @@ vioif_tx_handle_locked(struct vioif_txqu
 	struct ifnet *ifp = >sc_ethercom.ec_if;
 	bool more;
 
+	KASSERT(mutex_owned(txq->txq_lock));
 	KASSERT(!txq->txq_stopping);
 
 	more = vioif_tx_deq_locked(sc, vsc, txq, limit);
@@ -1790,7 +1794,8 @@ vioif_tx_handle_locked(struct vioif_txqu
 		return;
 	}
 
-	atomic_store_relaxed(>txq_active, false);
+	txq->txq_active = false;
+
 	/* for ALTQ */
 	if (txq == >sc_txq[0]) {
 		if_schedule_deferred_start(ifp);
@@ -1811,22 +1816,23 @@ vioif_tx_intr(void *arg)
 
 	limit = sc->sc_tx_intr_process_limit;
 
-	if (atomic_load_relaxed(>txq_active) == true)
-		return 1;
-
 	mutex_enter(txq->txq_lock);
 
-	if (!txq->txq_stopping) {
-		txq->txq_workqueue = sc->sc_txrx_workqueue_sysctl;
+	/* tx handler is already running in softint/workqueue */
+	if (txq->txq_active)
+		goto done;
+
+	if (txq->txq_stopping)
+		goto done;
 
-		virtio_stop_vq_intr(vsc, vq);
-		atomic_store_relaxed(>txq_active, true);
+	txq->txq_active = true;
 
-		vioif_tx_handle_locked(txq, limit);
-	}
+	virtio_stop_vq_intr(vsc, vq);
+	txq->txq_workqueue = sc->sc_txrx_workqueue_sysctl;
+	vioif_tx_handle_locked(txq, limit);
 
+done:
 	mutex_exit(txq->txq_lock);
-
 	return 1;
 }
 



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:26:29 UTC 2023

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

Log Message:
vioif(4): access to txq_active and rxq_active with lock held


To generate a diff of this commit:
cvs rdiff -u -r1.83 -r1.84 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:23:18 UTC 2023

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

Log Message:
vioif(4): remove unnecessary lock release

if_percpuq_enqueue() can call with rxq->rxq_lock held because of per-cpu.


To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/sys/dev/pci/if_vioif.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_vioif.c
diff -u src/sys/dev/pci/if_vioif.c:1.82 src/sys/dev/pci/if_vioif.c:1.83
--- src/sys/dev/pci/if_vioif.c:1.82	Mon Sep 12 07:26:04 2022
+++ src/sys/dev/pci/if_vioif.c	Thu Mar 23 01:23:18 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vioif.c,v 1.82 2022/09/12 07:26:04 knakahara Exp $	*/
+/*	$NetBSD: if_vioif.c,v 1.83 2023/03/23 01:23:18 yamaguchi Exp $	*/
 
 /*
  * Copyright (c) 2020 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.82 2022/09/12 07:26:04 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.83 2023/03/23 01:23:18 yamaguchi Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_net_mpsafe.h"
@@ -1642,12 +1642,7 @@ vioif_rx_deq_locked(struct vioif_softc *
 		m_set_rcvif(m, ifp);
 		m->m_len = m->m_pkthdr.len = len;
 
-		mutex_exit(rxq->rxq_lock);
 		if_percpuq_enqueue(ifp->if_percpuq, m);
-		mutex_enter(rxq->rxq_lock);
-
-		if (rxq->rxq_stopping)
-			break;
 	}
 
 	if (dequeued)



CVS commit: src/sys/dev/pci

2023-03-22 Thread Shoichi YAMAGUCHI
Module Name:src
Committed By:   yamaguchi
Date:   Thu Mar 23 01:23:18 UTC 2023

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

Log Message:
vioif(4): remove unnecessary lock release

if_percpuq_enqueue() can call with rxq->rxq_lock held because of per-cpu.


To generate a diff of this commit:
cvs rdiff -u -r1.82 -r1.83 src/sys/dev/pci/if_vioif.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

2023-03-22 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Mar 22 21:14:46 UTC 2023

Modified Files:
src/sys/dev: fss.c

Log Message:
Pass B_PHYS when reading from device.  Xbd(4) at least checks
this flag and may trigger an assertion.


To generate a diff of this commit:
cvs rdiff -u -r1.113 -r1.114 src/sys/dev/fss.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/fss.c
diff -u src/sys/dev/fss.c:1.113 src/sys/dev/fss.c:1.114
--- src/sys/dev/fss.c:1.113	Sat Sep 24 23:18:54 2022
+++ src/sys/dev/fss.c	Wed Mar 22 21:14:46 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: fss.c,v 1.113 2022/09/24 23:18:54 thorpej Exp $	*/
+/*	$NetBSD: fss.c,v 1.114 2023/03/22 21:14:46 hannken Exp $	*/
 
 /*-
  * Copyright (c) 2003 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.113 2022/09/24 23:18:54 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fss.c,v 1.114 2023/03/22 21:14:46 hannken Exp $");
 
 #include 
 #include 
@@ -1285,7 +1285,7 @@ fss_bs_thread(void *arg)
 
 			/* Not on backing store, read from device. */
 			nbp = getiobuf(NULL, true);
-			nbp->b_flags = B_READ;
+			nbp->b_flags = B_READ | (bp->b_flags & B_PHYS);
 			nbp->b_resid = nbp->b_bcount = bp->b_bcount;
 			nbp->b_bufsize = bp->b_bcount;
 			nbp->b_data = bp->b_data;



CVS commit: src/sys/dev

2023-03-22 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Wed Mar 22 21:14:46 UTC 2023

Modified Files:
src/sys/dev: fss.c

Log Message:
Pass B_PHYS when reading from device.  Xbd(4) at least checks
this flag and may trigger an assertion.


To generate a diff of this commit:
cvs rdiff -u -r1.113 -r1.114 src/sys/dev/fss.c

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



CVS commit: [netbsd-10] src/doc

2023-03-22 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Wed Mar 22 19:01:57 UTC 2023

Modified Files:
src/doc [netbsd-10]: CHANGES-10.0

Log Message:
Tickets #123 and #124


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.46 -r1.1.2.47 src/doc/CHANGES-10.0

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-10.0
diff -u src/doc/CHANGES-10.0:1.1.2.46 src/doc/CHANGES-10.0:1.1.2.47
--- src/doc/CHANGES-10.0:1.1.2.46	Mon Mar 20 17:25:14 2023
+++ src/doc/CHANGES-10.0	Wed Mar 22 19:01:56 2023
@@ -1,4 +1,4 @@
-# $NetBSD: CHANGES-10.0,v 1.1.2.46 2023/03/20 17:25:14 martin Exp $
+# $NetBSD: CHANGES-10.0,v 1.1.2.47 2023/03/22 19:01:56 martin Exp $
 
 A complete list of changes from the initial NetBSD 10.0 branch on 2022-12-16
 until the 10.0 release:
@@ -1498,3 +1498,16 @@ sys/external/bsd/drm2/radeon/radeon_pci.
 	Fix bogus loop invariant assertions.
 	[mrg, ticket #122]
 
+external/gpl3/gcc.old(remove)
+
+	Remove obsolete directory.
+	[mrg, ticket #123]
+
+sys/arch/sparc/sparc/syscall.c			1.32
+sys/arch/sparc/sparc/vm_machdep.c		1.108
+tests/lib/libc/sys/t_ptrace_syscall_wait.h	1.3
+
+	sparc: PR 52166: adjust pc/npc before syscall allowing
+	EJUSTRETURN to return to the next instruction.
+	[hannken, ticket #124]
+



CVS commit: [netbsd-10] src/doc

2023-03-22 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Wed Mar 22 19:01:57 UTC 2023

Modified Files:
src/doc [netbsd-10]: CHANGES-10.0

Log Message:
Tickets #123 and #124


To generate a diff of this commit:
cvs rdiff -u -r1.1.2.46 -r1.1.2.47 src/doc/CHANGES-10.0

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



CVS commit: [netbsd-10] src

2023-03-22 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Wed Mar 22 19:00:47 UTC 2023

Modified Files:
src/sys/arch/sparc/sparc [netbsd-10]: syscall.c vm_machdep.c
src/tests/lib/libc/sys [netbsd-10]: t_ptrace_syscall_wait.h

Log Message:
Pull up following revision(s) (requested by hannken in ticket #124):

tests/lib/libc/sys/t_ptrace_syscall_wait.h: revision 1.3
sys/arch/sparc/sparc/syscall.c: revision 1.32
sys/arch/sparc/sparc/vm_machdep.c: revision 1.108

Adjust pc/npc before syscall allowing EJUSTRETURN to return
to the next instruction.  Only ERESTART should return to
the same instruction.  Differences to sparc64 reduced.

Test t_ptrace_wait:syscallemu1 now passes on sparc.

Fixes PR kern/52166 "syscallemu does not work on sparc (32-bit)"

Ok: Martin Husemann


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.31.30.1 src/sys/arch/sparc/sparc/syscall.c
cvs rdiff -u -r1.107 -r1.107.70.1 src/sys/arch/sparc/sparc/vm_machdep.c
cvs rdiff -u -r1.2 -r1.2.2.1 src/tests/lib/libc/sys/t_ptrace_syscall_wait.h

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



CVS commit: [netbsd-10] src

2023-03-22 Thread Martin Husemann
Module Name:src
Committed By:   martin
Date:   Wed Mar 22 19:00:47 UTC 2023

Modified Files:
src/sys/arch/sparc/sparc [netbsd-10]: syscall.c vm_machdep.c
src/tests/lib/libc/sys [netbsd-10]: t_ptrace_syscall_wait.h

Log Message:
Pull up following revision(s) (requested by hannken in ticket #124):

tests/lib/libc/sys/t_ptrace_syscall_wait.h: revision 1.3
sys/arch/sparc/sparc/syscall.c: revision 1.32
sys/arch/sparc/sparc/vm_machdep.c: revision 1.108

Adjust pc/npc before syscall allowing EJUSTRETURN to return
to the next instruction.  Only ERESTART should return to
the same instruction.  Differences to sparc64 reduced.

Test t_ptrace_wait:syscallemu1 now passes on sparc.

Fixes PR kern/52166 "syscallemu does not work on sparc (32-bit)"

Ok: Martin Husemann


To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.31.30.1 src/sys/arch/sparc/sparc/syscall.c
cvs rdiff -u -r1.107 -r1.107.70.1 src/sys/arch/sparc/sparc/vm_machdep.c
cvs rdiff -u -r1.2 -r1.2.2.1 src/tests/lib/libc/sys/t_ptrace_syscall_wait.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/arch/sparc/sparc/syscall.c
diff -u src/sys/arch/sparc/sparc/syscall.c:1.31 src/sys/arch/sparc/sparc/syscall.c:1.31.30.1
--- src/sys/arch/sparc/sparc/syscall.c:1.31	Sat Apr  6 11:54:20 2019
+++ src/sys/arch/sparc/sparc/syscall.c	Wed Mar 22 19:00:47 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: syscall.c,v 1.31 2019/04/06 11:54:20 kamil Exp $ */
+/*	$NetBSD: syscall.c,v 1.31.30.1 2023/03/22 19:00:47 martin Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -49,7 +49,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.31 2019/04/06 11:54:20 kamil Exp $");
+__KERNEL_RCSID(0, "$NetBSD: syscall.c,v 1.31.30.1 2023/03/22 19:00:47 martin Exp $");
 
 #include "opt_sparc_arch.h"
 #include "opt_multiprocessor.h"
@@ -106,6 +106,17 @@ handle_new(struct trapframe *tf, registe
 {
 	int new = *code & (SYSCALL_G7RFLAG|SYSCALL_G2RFLAG|SYSCALL_G5RFLAG);
 	*code &= ~(SYSCALL_G7RFLAG|SYSCALL_G2RFLAG|SYSCALL_G5RFLAG);
+	if (new) {
+		/* jmp %g5, (or %g2 or %g7, deprecated) on success */
+		if (__predict_true((new & SYSCALL_G5RFLAG) == SYSCALL_G5RFLAG))
+			tf->tf_pc = tf->tf_global[5];
+		else if (new & SYSCALL_G2RFLAG)
+			tf->tf_pc = tf->tf_global[2];
+		else
+			tf->tf_pc = tf->tf_global[7];
+	} else {
+		tf->tf_pc = tf->tf_npc;
+	}
 	return new;
 }
 
@@ -207,7 +218,7 @@ syscall(register_t code, struct trapfram
 	int error, new;
 	union args args;
 	union rval rval;
-	register_t i;
+	int opc, onpc;
 	u_quad_t sticks;
 
 	curcpu()->ci_data.cpu_nsyscall++;	/* XXXSMP */
@@ -221,8 +232,18 @@ syscall(register_t code, struct trapfram
 #ifdef FPU_DEBUG
 	save_fpu(tf);
 #endif
+
+	/*
+	 * save pc/npc in case of ERESTART
+	 * adjust pc/npc to new values
+	 */
+	opc = tf->tf_pc;
+	onpc = tf->tf_npc;
+
 	new = handle_new(tf, );
 
+	tf->tf_npc = tf->tf_pc + 4;
+
 	if ((error = getargs(p, tf, , , )) != 0)
 		goto bad;
 
@@ -236,29 +257,17 @@ syscall(register_t code, struct trapfram
 		/* Note: fork() does not return here in the child */
 		tf->tf_out[0] = rval.o[0];
 		tf->tf_out[1] = rval.o[1];
-		if (new) {
-			/* jmp %g5, (or %g2 or %g7, deprecated) on success */
-			if (__predict_true((new & SYSCALL_G5RFLAG) ==
-	SYSCALL_G5RFLAG))
-i = tf->tf_global[5];
-			else if (new & SYSCALL_G2RFLAG)
-i = tf->tf_global[2];
-			else
-i = tf->tf_global[7];
-			if (i & 3) {
-error = EINVAL;
-goto bad;
-			}
-		} else {
+		if (!new) {
 			/* old system call convention: clear C on success */
 			tf->tf_psr &= ~PSR_C;	/* success */
-			i = tf->tf_npc;
 		}
-		tf->tf_pc = i;
-		tf->tf_npc = i + 4;
 		break;
 
 	case ERESTART:
+		tf->tf_pc = opc;
+		tf->tf_npc = onpc;
+		break;
+
 	case EJUSTRETURN:
 		/* nothing to do */
 		break;
@@ -269,9 +278,8 @@ syscall(register_t code, struct trapfram
 			error = p->p_emul->e_errno[error];
 		tf->tf_out[0] = error;
 		tf->tf_psr |= PSR_C;	/* fail */
-		i = tf->tf_npc;
-		tf->tf_pc = i;
-		tf->tf_npc = i + 4;
+		tf->tf_pc = onpc;
+		tf->tf_npc = tf->tf_pc + 4;
 		break;
 	}
 

Index: src/sys/arch/sparc/sparc/vm_machdep.c
diff -u src/sys/arch/sparc/sparc/vm_machdep.c:1.107 src/sys/arch/sparc/sparc/vm_machdep.c:1.107.70.1
--- src/sys/arch/sparc/sparc/vm_machdep.c:1.107	Sun Feb 19 21:06:30 2012
+++ src/sys/arch/sparc/sparc/vm_machdep.c	Wed Mar 22 19:00:47 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: vm_machdep.c,v 1.107 2012/02/19 21:06:30 rmind Exp $ */
+/*	$NetBSD: vm_machdep.c,v 1.107.70.1 2023/03/22 19:00:47 martin Exp $ */
 
 /*
  * Copyright (c) 1996
@@ -49,7 +49,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.107 2012/02/19 21:06:30 rmind Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vm_machdep.c,v 1.107.70.1 2023/03/22 19:00:47 martin Exp $");
 
 #include "opt_multiprocessor.h"
 
@@ -268,8 +268,6 @@ cpu_lwp_fork(struct lwp *l1, struct lwp 
 	 * to user mode.
 	 */
 	/*tf2->tf_psr &= ~PSR_C;   -* 

CVS commit: src/sys/dev

2023-03-22 Thread Michael van Elst
Module Name:src
Committed By:   mlelstv
Date:   Wed Mar 22 13:00:54 UTC 2023

Modified Files:
src/sys/dev: ipmi.c

Log Message:
Ignore non-recoverable and critical limits smaller than the warning limits.
These are usually invalid.

Name the limit flags to make code more readable.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/ipmi.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/ipmi.c
diff -u src/sys/dev/ipmi.c:1.9 src/sys/dev/ipmi.c:1.10
--- src/sys/dev/ipmi.c:1.9	Tue Jun 15 00:20:33 2021
+++ src/sys/dev/ipmi.c	Wed Mar 22 13:00:54 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: ipmi.c,v 1.9 2021/06/15 00:20:33 riastradh Exp $ */
+/*	$NetBSD: ipmi.c,v 1.10 2023/03/22 13:00:54 mlelstv Exp $ */
 
 /*
  * Copyright (c) 2019 Michael van Elst
@@ -76,7 +76,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.9 2021/06/15 00:20:33 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipmi.c,v 1.10 2023/03/22 13:00:54 mlelstv Exp $");
 
 #include 
 #include 
@@ -1533,6 +1533,14 @@ ipmi_get_limits(struct sysmon_envsys *sm
 	return;
 }
 
+/* valid bits for (upper,lower) x (non-recoverable, critical, warn) */
+#define UN	0x20
+#define UC	0x10
+#define UW	0x08
+#define LN	0x04
+#define LC	0x02
+#define LW	0x01
+
 static void
 ipmi_get_sensor_limits(struct ipmi_softc *sc, struct ipmi_sensor *psensor,
 		   sysmon_envsys_lim_t *limits, uint32_t *props)
@@ -1540,7 +1548,7 @@ ipmi_get_sensor_limits(struct ipmi_softc
 	struct sdrtype1	*s1 = (struct sdrtype1 *)psensor->i_sdr;
 	bool failure;
 	int	rxlen;
-	uint8_t	data[32];
+	uint8_t	data[32], valid;
 	uint32_t prop_critmax, prop_warnmax, prop_critmin, prop_warnmin;
 	int32_t *pcritmax, *pwarnmax, *pcritmin, *pwarnmin;
 
@@ -1582,27 +1590,43 @@ ipmi_get_sensor_limits(struct ipmi_softc
 		break;
 	}
 
-	if (data[0] & 0x20 && data[6] != 0xff) {
+	valid = data[0];
+
+	/* if upper non-recoverable < warning, ignore it */
+	if ((valid & (UN|UW)) == (UN|UW) && data[6] < data[4])
+		valid ^= UN;
+	/* if upper critical < warning, ignore it */
+	if ((valid & (UC|UW)) == (UC|UW) && data[5] < data[4])
+		valid ^= UC;
+
+	/* if lower non-recoverable > warning, ignore it */
+	if ((data[0] & (LN|LW)) == (LN|LW) && data[3] > data[1])
+		valid ^= LN;
+	/* if lower critical > warning, ignore it */
+	if ((data[0] & (LC|LW)) == (LC|LW) && data[2] > data[1])
+		valid ^= LC;
+
+	if (valid & UN && data[6] != 0xff) {
 		*pcritmax = ipmi_convert_sensor([6], psensor);
 		*props |= prop_critmax;
 	}
-	if (data[0] & 0x10 && data[5] != 0xff) {
+	if (valid & UC && data[5] != 0xff) {
 		*pcritmax = ipmi_convert_sensor([5], psensor);
 		*props |= prop_critmax;
 	}
-	if (data[0] & 0x08 && data[4] != 0xff) {
+	if (valid & UW && data[4] != 0xff) {
 		*pwarnmax = ipmi_convert_sensor([4], psensor);
 		*props |= prop_warnmax;
 	}
-	if (data[0] & 0x04 && data[3] != 0x00) {
+	if (valid & LN && data[3] != 0x00) {
 		*pcritmin = ipmi_convert_sensor([3], psensor);
 		*props |= prop_critmin;
 	}
-	if (data[0] & 0x02 && data[2] != 0x00) {
+	if (valid & LC && data[2] != 0x00) {
 		*pcritmin = ipmi_convert_sensor([2], psensor);
 		*props |= prop_critmin;
 	}
-	if (data[0] & 0x01 && data[1] != 0x00) {
+	if (valid & LW && data[1] != 0x00) {
 		*pwarnmin = ipmi_convert_sensor([1], psensor);
 		*props |= prop_warnmin;
 	}



CVS commit: src/sys/dev

2023-03-22 Thread Michael van Elst
Module Name:src
Committed By:   mlelstv
Date:   Wed Mar 22 13:00:54 UTC 2023

Modified Files:
src/sys/dev: ipmi.c

Log Message:
Ignore non-recoverable and critical limits smaller than the warning limits.
These are usually invalid.

Name the limit flags to make code more readable.


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

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