CVS commit: src/sys/dev/hyperv

2021-06-10 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Thu Jun 10 07:48:01 UTC 2021

Modified Files:
src/sys/dev/hyperv: hvs.c

Log Message:
hvs(4): Pass correct pointer of scsibus device to scsi_probe_bus().


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/hyperv/hvs.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/hyperv/hvs.c
diff -u src/sys/dev/hyperv/hvs.c:1.5 src/sys/dev/hyperv/hvs.c:1.6
--- src/sys/dev/hyperv/hvs.c:1.5	Sat Apr 24 23:36:54 2021
+++ src/sys/dev/hyperv/hvs.c	Thu Jun 10 07:48:00 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: hvs.c,v 1.5 2021/04/24 23:36:54 thorpej Exp $	*/
+/*	$NetBSD: hvs.c,v 1.6 2021/06/10 07:48:00 nonaka Exp $	*/
 /*	$OpenBSD: hvs.c,v 1.17 2017/08/10 17:22:48 mikeb Exp $	*/
 
 /*-
@@ -37,7 +37,7 @@
 /* #define HVS_DEBUG_IO */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: hvs.c,v 1.5 2021/04/24 23:36:54 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hvs.c,v 1.6 2021/06/10 07:48:00 nonaka Exp $");
 
 #include 
 #include 
@@ -833,7 +833,7 @@ hvs_scsi_probe(void *arg)
 	struct hvs_softc *sc = arg;
 
 	if (sc->sc_scsibus != NULL)
-		scsi_probe_bus((void *)sc->sc_scsibus, -1, -1);
+		scsi_probe_bus(device_private(sc->sc_scsibus), -1, -1);
 }
 
 static void



CVS commit: src/sys/dev/hyperv

2021-01-28 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Jan 29 04:38:49 UTC 2021

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
hvn(4): Don't wait forever.


To generate a diff of this commit:
cvs rdiff -u -r1.19 -r1.20 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.19 src/sys/dev/hyperv/if_hvn.c:1.20
--- src/sys/dev/hyperv/if_hvn.c:1.19	Fri Dec 11 08:13:08 2020
+++ src/sys/dev/hyperv/if_hvn.c	Fri Jan 29 04:38:49 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.19 2020/12/11 08:13:08 nonaka Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.20 2021/01/29 04:38:49 nonaka Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.19 2020/12/11 08:13:08 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.20 2021/01/29 04:38:49 nonaka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1070,7 +1070,8 @@ hvn_nvs_cmd(struct hvn_softc *sc, void *
 			if (cold)
 delay(1000);
 			else
-tsleep(cmd, PRIBIO, "nvsout", mstohz(1));
+tsleep(cmd, PRIBIO, "nvsout",
+uimax(1, mstohz(1)));
 		} else if (rv) {
 			DPRINTF("%s: NVSP operation %u send error %d\n",
 			device_xname(sc->sc_dev), hdr->nvs_type, rv);
@@ -1095,7 +1096,7 @@ hvn_nvs_cmd(struct hvn_softc *sc, void *
 			splx(s);
 		} else
 			tsleep(sc->sc_nvsrsp, PRIBIO | PCATCH, "nvscmd",
-			mstohz(1));
+			uimax(1, mstohz(1)));
 	} while (--timo > 0 && sc->sc_nvsdone != 1);
 
 	if (timo == 0 && sc->sc_nvsdone != 1) {
@@ -1393,7 +1394,8 @@ hvn_rndis_cmd(struct hvn_softc *sc, stru
 			if (cold)
 delay(1000);
 			else
-tsleep(rc, PRIBIO, "rndisout", mstohz(1));
+tsleep(rc, PRIBIO, "rndisout",
+uimax(1, mstohz(1)));
 		} else if (rv) {
 			DPRINTF("%s: RNDIS operation %u send error %d\n",
 			device_xname(sc->sc_dev), hdr->rm_type, rv);
@@ -1422,7 +1424,8 @@ hvn_rndis_cmd(struct hvn_softc *sc, stru
 			hvn_nvs_intr(sc);
 			splx(s);
 		} else
-			tsleep(rc, PRIBIO | PCATCH, "rndiscmd", mstohz(1));
+			tsleep(rc, PRIBIO | PCATCH, "rndiscmd",
+			uimax(1, mstohz(1)));
 	} while (--timo > 0 && rc->rc_done != 1);
 
 	bus_dmamap_sync(sc->sc_dmat, rc->rc_dmap, 0, PAGE_SIZE,



CVS commit: src/sys/dev/hyperv

2021-01-28 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Jan 29 04:38:34 UTC 2021

Modified Files:
src/sys/dev/hyperv: vmbus.c

Log Message:
vmbus(4): Don't wait forever.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/hyperv/vmbus.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/hyperv/vmbus.c
diff -u src/sys/dev/hyperv/vmbus.c:1.11 src/sys/dev/hyperv/vmbus.c:1.12
--- src/sys/dev/hyperv/vmbus.c:1.11	Tue May 26 16:08:55 2020
+++ src/sys/dev/hyperv/vmbus.c	Fri Jan 29 04:38:34 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbus.c,v 1.11 2020/05/26 16:08:55 nonaka Exp $	*/
+/*	$NetBSD: vmbus.c,v 1.12 2021/01/29 04:38:34 nonaka Exp $	*/
 /*	$OpenBSD: hyperv.c,v 1.43 2017/06/27 13:56:15 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.11 2020/05/26 16:08:55 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.12 2021/01/29 04:38:34 nonaka Exp $");
 
 #include 
 #include 
@@ -608,7 +608,8 @@ vmbus_start(struct vmbus_softc *sc, stru
 			hyperv_intr();
 			splx(s);
 		} else
-			tsleep(wchan, PRIBIO, wchan, mstohz(delays[i]));
+			tsleep(wchan, PRIBIO, wchan,
+			uimax(1, mstohz(delays[i] / 1000)));
 	}
 	if (status != HYPERCALL_STATUS_SUCCESS) {
 		device_printf(sc->sc_dev,



CVS commit: src/sys/dev/hyperv

2021-01-28 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Jan 29 04:38:18 UTC 2021

Modified Files:
src/sys/dev/hyperv: hvkbd.c

Log Message:
hvkbd(4): Don't wait forever.


To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/hyperv/hvkbd.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/hyperv/hvkbd.c
diff -u src/sys/dev/hyperv/hvkbd.c:1.6 src/sys/dev/hyperv/hvkbd.c:1.7
--- src/sys/dev/hyperv/hvkbd.c:1.6	Fri Nov 22 12:40:07 2019
+++ src/sys/dev/hyperv/hvkbd.c	Fri Jan 29 04:38:18 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: hvkbd.c,v 1.6 2019/11/22 12:40:07 nonaka Exp $	*/
+/*	$NetBSD: hvkbd.c,v 1.7 2021/01/29 04:38:18 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2017 Microsoft Corp.
@@ -36,7 +36,7 @@
 #endif /* _KERNEL_OPT */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: hvkbd.c,v 1.6 2019/11/22 12:40:07 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hvkbd.c,v 1.7 2021/01/29 04:38:18 nonaka Exp $");
 
 #include 
 #include 
@@ -350,7 +350,8 @@ hvkbd_connect(struct hvkbd_softc *sc)
 			hvkbd_intr(sc);
 			splx(s);
 		} else
-			tsleep(sc, PRIBIO | PCATCH, "hvkbdcon", mstohz(1));
+			tsleep(sc, PRIBIO | PCATCH, "hvkbdcon",
+			uimax(1, mstohz(1)));
 	} while (--timo > 0 && sc->sc_connected == 0);
 
 	if (timo == 0 && sc->sc_connected == 0) {



CVS commit: src/sys/dev/hyperv

2020-12-11 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Dec 11 08:13:08 UTC 2020

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
hvn(4): fix unable to ifconfig up/down.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.18 src/sys/dev/hyperv/if_hvn.c:1.19
--- src/sys/dev/hyperv/if_hvn.c:1.18	Sun May 24 10:31:59 2020
+++ src/sys/dev/hyperv/if_hvn.c	Fri Dec 11 08:13:08 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.18 2020/05/24 10:31:59 nonaka Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.19 2020/12/11 08:13:08 nonaka Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.18 2020/05/24 10:31:59 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.19 2020/12/11 08:13:08 nonaka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -387,26 +387,7 @@ hvn_ioctl(struct ifnet *ifp, u_long comm
 
 	s = splnet();
 
-	switch (command) {
-	case SIOCSIFFLAGS:
-		if (ifp->if_flags & IFF_UP) {
-			if (ifp->if_flags & IFF_RUNNING)
-error = ENETRESET;
-			else {
-error = hvn_init(ifp);
-if (error)
-	ifp->if_flags &= ~IFF_UP;
-			}
-		} else {
-			if (ifp->if_flags & IFF_RUNNING)
-hvn_stop(ifp, 1);
-		}
-		break;
-	default:
-		error = ether_ioctl(ifp, command, data);
-		break;
-	}
-
+	error = ether_ioctl(ifp, command, data);
 	if (error == ENETRESET) {
 		if (ifp->if_flags & IFF_RUNNING)
 			hvn_iff(sc);



CVS commit: src/sys/dev/hyperv

2020-05-26 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Tue May 26 16:08:55 UTC 2020

Modified Files:
src/sys/dev/hyperv: vmbus.c vmbusvar.h

Log Message:
vmbus(4): Do not call hyperv_dma_alloc() in interrupt context.

The channel offer and rescind process is performed on another context.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/hyperv/vmbus.c
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/hyperv/vmbusvar.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/dev/hyperv/vmbus.c
diff -u src/sys/dev/hyperv/vmbus.c:1.10 src/sys/dev/hyperv/vmbus.c:1.11
--- src/sys/dev/hyperv/vmbus.c:1.10	Tue May 26 16:00:06 2020
+++ src/sys/dev/hyperv/vmbus.c	Tue May 26 16:08:55 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbus.c,v 1.10 2020/05/26 16:00:06 nonaka Exp $	*/
+/*	$NetBSD: vmbus.c,v 1.11 2020/05/26 16:08:55 nonaka Exp $	*/
 /*	$OpenBSD: hyperv.c,v 1.43 2017/06/27 13:56:15 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.10 2020/05/26 16:00:06 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.11 2020/05/26 16:08:55 nonaka Exp $");
 
 #include 
 #include 
@@ -103,10 +103,14 @@ static void	vmbus_channel_detach(struct 
 static void	vmbus_channel_pause(struct vmbus_channel *);
 static uint32_t	vmbus_channel_unpause(struct vmbus_channel *);
 static uint32_t	vmbus_channel_ready(struct vmbus_channel *);
+static void	vmbus_chevq_enqueue(struct vmbus_softc *, int, void *);
+static void	vmbus_process_chevq(void *);
+static void	vmbus_chevq_thread(void *);
 static void	vmbus_devq_enqueue(struct vmbus_softc *, int,
 		struct vmbus_channel *);
 static void	vmbus_process_devq(void *);
 static void	vmbus_devq_thread(void *);
+static void	vmbus_subchannel_devq_thread(void *);
 
 static struct vmbus_softc *vmbus_sc;
 
@@ -841,15 +845,33 @@ vmbus_channel_response(struct vmbus_soft
 static void
 vmbus_channel_offer(struct vmbus_softc *sc, struct vmbus_chanmsg_hdr *hdr)
 {
+	struct vmbus_chanmsg_choffer *co;
 
-	vmbus_process_offer(sc, (struct vmbus_chanmsg_choffer *)hdr);
+	co = kmem_intr_alloc(sizeof(*co), KM_NOSLEEP);
+	if (co == NULL) {
+		device_printf(sc->sc_dev,
+		"failed to allocate an offer object\n");
+		return;
+	}
+
+	memcpy(co, hdr, sizeof(*co));
+	vmbus_chevq_enqueue(sc, VMBUS_CHEV_TYPE_OFFER, co);
 }
 
 static void
 vmbus_channel_rescind(struct vmbus_softc *sc, struct vmbus_chanmsg_hdr *hdr)
 {
+	struct vmbus_chanmsg_chrescind *cr;
+ 
+	cr = kmem_intr_alloc(sizeof(*cr), KM_NOSLEEP);
+	if (cr == NULL) {
+		device_printf(sc->sc_dev,
+		"failed to allocate an rescind object\n");
+		return;
+	}
 
-	vmbus_process_rescind(sc, (struct vmbus_chanmsg_chrescind *)hdr);
+	memcpy(cr, hdr, sizeof(*cr));
+	vmbus_chevq_enqueue(sc, VMBUS_CHEV_TYPE_RESCIND, cr);
 }
 
 static void
@@ -906,16 +928,48 @@ vmbus_channel_scan(struct vmbus_softc *s
 	struct vmbus_chanmsg_hdr hdr;
 	struct vmbus_chanmsg_choffer rsp;
 
+	TAILQ_INIT(>sc_prichans);
+	mutex_init(>sc_prichan_lock, MUTEX_DEFAULT, IPL_NET);
 	TAILQ_INIT(>sc_channels);
 	mutex_init(>sc_channel_lock, MUTEX_DEFAULT, IPL_NET);
 
+	/*
+	 * This queue serializes vmbus channel offer and rescind messages.
+	 */
+	SIMPLEQ_INIT(>sc_chevq);
+	mutex_init(>sc_chevq_lock, MUTEX_DEFAULT, IPL_NET);
+	cv_init(>sc_chevq_cv, "hvchevcv");
+	if (kthread_create(PRI_NONE, KTHREAD_MPSAFE, NULL,
+	vmbus_chevq_thread, sc, NULL, "hvchevq") != 0) {
+		DPRINTF("%s: failed to create prich chevq thread\n",
+		device_xname(sc->sc_dev));
+		return -1;
+	}
+
+	/*
+	 * This queue serializes vmbus devices' attach and detach
+	 * for channel offer and rescind messages.
+	 */
 	SIMPLEQ_INIT(>sc_devq);
 	mutex_init(>sc_devq_lock, MUTEX_DEFAULT, IPL_NET);
 	cv_init(>sc_devq_cv, "hvdevqcv");
+	if (kthread_create(PRI_NONE, KTHREAD_MPSAFE, NULL,
+	vmbus_devq_thread, sc, NULL, "hvdevq") != 0) {
+		DPRINTF("%s: failed to create prich devq thread\n",
+		device_xname(sc->sc_dev));
+		return -1;
+	}
 
+	/*
+	 * This queue handles sub-channel detach, so that vmbus
+	 * device's detach running in sc_devq can drain its sub-channels.
+	 */
+	SIMPLEQ_INIT(>sc_subch_devq);
+	mutex_init(>sc_subch_devq_lock, MUTEX_DEFAULT, IPL_NET);
+	cv_init(>sc_subch_devq_cv, "hvsdvqcv");
 	if (kthread_create(PRI_NONE, KTHREAD_MPSAFE, NULL,
-	vmbus_devq_thread, sc, NULL, "hvoffer") != 0) {
-		DPRINTF("%s: failed to create offer thread\n",
+	vmbus_subchannel_devq_thread, sc, NULL, "hvsdevq") != 0) {
+		DPRINTF("%s: failed to create subch devq thread\n",
 		device_xname(sc->sc_dev));
 		return -1;
 	}
@@ -932,6 +986,9 @@ vmbus_channel_scan(struct vmbus_softc *s
 	while (!ISSET(sc->sc_flags, VMBUS_SCFLAG_OFFERS_DELIVERED))
 		tsleep(>sc_devq, PRIBIO, "hvscan", 1);
 
+	mutex_enter(>sc_chevq_lock);
+	vmbus_process_chevq(sc);
+	mutex_exit(>sc_chevq_lock);
 	mutex_enter(>sc_devq_lock);
 	vmbus_process_devq(sc);
 	mutex_exit(>sc_devq_lock);
@@ 

CVS commit: src/sys/dev/hyperv

2020-05-26 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Tue May 26 16:00:06 UTC 2020

Modified Files:
src/sys/dev/hyperv: vmbus.c

Log Message:
vmbus(4): Fixed incorrect use of vmbus_wait() in vmbus_channel_scan().

Found by kUBSan.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/dev/hyperv/vmbus.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/hyperv/vmbus.c
diff -u src/sys/dev/hyperv/vmbus.c:1.9 src/sys/dev/hyperv/vmbus.c:1.10
--- src/sys/dev/hyperv/vmbus.c:1.9	Mon May 25 10:14:58 2020
+++ src/sys/dev/hyperv/vmbus.c	Tue May 26 16:00:06 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbus.c,v 1.9 2020/05/25 10:14:58 nonaka Exp $	*/
+/*	$NetBSD: vmbus.c,v 1.10 2020/05/26 16:00:06 nonaka Exp $	*/
 /*	$OpenBSD: hyperv.c,v 1.43 2017/06/27 13:56:15 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.9 2020/05/25 10:14:58 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.10 2020/05/26 16:00:06 nonaka Exp $");
 
 #include 
 #include 
@@ -76,9 +76,6 @@ static int	vmbus_cmd(struct vmbus_softc 
 		int);
 static int	vmbus_start(struct vmbus_softc *, struct vmbus_msg *, paddr_t);
 static int	vmbus_reply(struct vmbus_softc *, struct vmbus_msg *);
-static void	vmbus_wait(struct vmbus_softc *,
-		int (*done)(struct vmbus_softc *, struct vmbus_msg *),
-		struct vmbus_msg *, void *, const char *);
 static uint16_t vmbus_intr_signal(struct vmbus_softc *, paddr_t);
 static void	vmbus_event_proc(void *, struct cpu_info *);
 static void	vmbus_event_proc_compat(void *, struct cpu_info *);
@@ -642,36 +639,26 @@ vmbus_reply_done(struct vmbus_softc *sc,
 static int
 vmbus_reply(struct vmbus_softc *sc, struct vmbus_msg *msg)
 {
+	int s;
 
 	if (msg->msg_flags & MSGF_NOQUEUE)
 		return 0;
 
-	vmbus_wait(sc, vmbus_reply_done, msg, msg, "hvreply");
-
-	mutex_enter(>sc_rsp_lock);
-	TAILQ_REMOVE(>sc_rsps, msg, msg_entry);
-	mutex_exit(>sc_rsp_lock);
-
-	return 0;
-}
-
-static void
-vmbus_wait(struct vmbus_softc *sc,
-int (*cond)(struct vmbus_softc *, struct vmbus_msg *),
-struct vmbus_msg *msg, void *wchan, const char *wmsg)
-{
-	int s;
-
-	while (!cond(sc, msg)) {
+	while (!vmbus_reply_done(sc, msg)) {
 		if (msg->msg_flags & MSGF_NOSLEEP) {
 			delay(1000);
 			s = splnet();
 			hyperv_intr();
 			splx(s);
 		} else
-			tsleep(wchan, PRIBIO, wmsg ? wmsg : "hvwait",
-			mstohz(1));
+			tsleep(msg, PRIBIO, "hvreply", 1);
 	}
+
+	mutex_enter(>sc_rsp_lock);
+	TAILQ_REMOVE(>sc_rsps, msg, msg_entry);
+	mutex_exit(>sc_rsp_lock);
+
+	return 0;
 }
 
 static uint16_t
@@ -914,13 +901,6 @@ hyperv_guid_sprint(struct hyperv_guid *g
 }
 
 static int
-vmbus_channel_scan_done(struct vmbus_softc *sc, struct vmbus_msg *msg __unused)
-{
-
-	return ISSET(sc->sc_flags, VMBUS_SCFLAG_OFFERS_DELIVERED);
-}
-
-static int
 vmbus_channel_scan(struct vmbus_softc *sc)
 {
 	struct vmbus_chanmsg_hdr hdr;
@@ -949,8 +929,8 @@ vmbus_channel_scan(struct vmbus_softc *s
 		return -1;
 	}
 
-	vmbus_wait(sc, vmbus_channel_scan_done, (struct vmbus_msg *),
-	>sc_devq, "hvscan");
+	while (!ISSET(sc->sc_flags, VMBUS_SCFLAG_OFFERS_DELIVERED))
+		tsleep(>sc_devq, PRIBIO, "hvscan", 1);
 
 	mutex_enter(>sc_devq_lock);
 	vmbus_process_devq(sc);



CVS commit: src/sys/dev/hyperv

2020-05-25 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Mon May 25 10:14:58 UTC 2020

Modified Files:
src/sys/dev/hyperv: hvs.c vmbus.c

Log Message:
Use howmany() macro.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/hyperv/hvs.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/hyperv/vmbus.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/hyperv/hvs.c
diff -u src/sys/dev/hyperv/hvs.c:1.3 src/sys/dev/hyperv/hvs.c:1.4
--- src/sys/dev/hyperv/hvs.c:1.3	Mon Nov 25 08:53:39 2019
+++ src/sys/dev/hyperv/hvs.c	Mon May 25 10:14:58 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: hvs.c,v 1.3 2019/11/25 08:53:39 nonaka Exp $	*/
+/*	$NetBSD: hvs.c,v 1.4 2020/05/25 10:14:58 nonaka Exp $	*/
 /*	$OpenBSD: hvs.c,v 1.17 2017/08/10 17:22:48 mikeb Exp $	*/
 
 /*-
@@ -37,7 +37,7 @@
 /* #define HVS_DEBUG_IO */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: hvs.c,v 1.3 2019/11/25 08:53:39 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hvs.c,v 1.4 2020/05/25 10:14:58 nonaka Exp $");
 
 #include 
 #include 
@@ -180,7 +180,7 @@ union hvs_cmd {
 
 #define HVS_RING_SIZE			(20 * PAGE_SIZE)
 #define HVS_MAX_CCB			128
-#define HVS_MAX_SGE			(MAXPHYS / PAGE_SIZE + 1)
+#define HVS_MAX_SGE			(howmany(MAXPHYS, PAGE_SIZE) + 1)
 
 struct hvs_softc;
 

Index: src/sys/dev/hyperv/vmbus.c
diff -u src/sys/dev/hyperv/vmbus.c:1.8 src/sys/dev/hyperv/vmbus.c:1.9
--- src/sys/dev/hyperv/vmbus.c:1.8	Tue Dec 10 12:20:20 2019
+++ src/sys/dev/hyperv/vmbus.c	Mon May 25 10:14:58 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbus.c,v 1.8 2019/12/10 12:20:20 nonaka Exp $	*/
+/*	$NetBSD: vmbus.c,v 1.9 2020/05/25 10:14:58 nonaka Exp $	*/
 /*	$OpenBSD: hyperv.c,v 1.43 2017/06/27 13:56:15 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.8 2019/12/10 12:20:20 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.9 2020/05/25 10:14:58 nonaka Exp $");
 
 #include 
 #include 
@@ -1911,7 +1911,7 @@ vmbus_handle_alloc(struct vmbus_channel 
 
 	/* Allocate additional gpadl_body structures if required */
 	if (left > 0) {
-		ncmds = MAX(1, left / VMBUS_NPFNBODY + left % VMBUS_NPFNBODY);
+		ncmds = howmany(left, VMBUS_NPFNBODY);
 		bodylen = ncmds * VMBUS_MSG_DSIZE_MAX;
 		body = kmem_zalloc(bodylen, kmemflags);
 		if (body == NULL) {



CVS commit: src/sys/dev/hyperv

2020-05-24 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Sun May 24 10:32:00 UTC 2020

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
hvn(4): Prevent from occur panic when acquiring the media status.

hvn(4) sleeps during hvn_media_status(), and thus requires an adaptive mutex
for the media lock.  Taken from recent iwm(4) change.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.17 src/sys/dev/hyperv/if_hvn.c:1.18
--- src/sys/dev/hyperv/if_hvn.c:1.17	Tue Feb  4 05:25:38 2020
+++ src/sys/dev/hyperv/if_hvn.c	Sun May 24 10:31:59 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.17 2020/02/04 05:25:38 thorpej Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.18 2020/05/24 10:31:59 nonaka Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.17 2020/02/04 05:25:38 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.18 2020/05/24 10:31:59 nonaka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -133,6 +133,7 @@ struct hvn_softc {
 
 	struct ethercom			sc_ec;
 	struct ifmedia			sc_media;
+	kmutex_t			sc_media_lock;	/* XXX */
 	struct if_percpuq		*sc_ipq;
 	intsc_link_state;
 	intsc_promisc;
@@ -294,8 +295,10 @@ hvn_attach(device_t parent, device_t sel
 
 	/* Initialize ifmedia structures. */
 	sc->sc_ec.ec_ifmedia = >sc_media;
-	ifmedia_init(>sc_media, IFM_IMASK, hvn_media_change,
-	hvn_media_status);
+	/* XXX media locking needs revisiting */
+	mutex_init(>sc_media_lock, MUTEX_DEFAULT, IPL_SOFTNET);
+	ifmedia_init_with_lock(>sc_media, IFM_IMASK,
+	hvn_media_change, hvn_media_status, >sc_media_lock);
 	ifmedia_add(>sc_media, IFM_ETHER | IFM_MANUAL, 0, NULL);
 	ifmedia_set(>sc_media, IFM_ETHER | IFM_MANUAL);
 
@@ -341,7 +344,9 @@ hvn_attach(device_t parent, device_t sel
 
 fail4:	hvn_rndis_detach(sc);
 	if_percpuq_destroy(sc->sc_ipq);
-fail3:	hvn_tx_ring_destroy(sc);
+fail3:	ifmedia_fini(>sc_media);
+	mutex_destroy(>sc_media_lock);
+	hvn_tx_ring_destroy(sc);
 fail2:	hvn_rx_ring_destroy(sc);
 fail1:	hvn_nvs_detach(sc);
 }
@@ -363,6 +368,7 @@ hvn_detach(device_t self, int flags)
 	ether_ifdetach(ifp);
 	if_detach(ifp);
 	ifmedia_fini(>sc_media);
+	mutex_destroy(>sc_media_lock);
 	if_percpuq_destroy(sc->sc_ipq);
 
 	hvn_rndis_detach(sc);



CVS commit: src/sys/dev/hyperv

2020-01-28 Thread Jason R Thorpe
Module Name:src
Committed By:   thorpej
Date:   Wed Jan 29 05:55:16 UTC 2020

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
Adopt .


To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.15 src/sys/dev/hyperv/if_hvn.c:1.16
--- src/sys/dev/hyperv/if_hvn.c:1.15	Fri Dec 27 05:59:53 2019
+++ src/sys/dev/hyperv/if_hvn.c	Wed Jan 29 05:55:16 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.15 2019/12/27 05:59:53 nonaka Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.16 2020/01/29 05:55:16 thorpej Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.15 2019/12/27 05:59:53 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.16 2020/01/29 05:55:16 thorpej Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -498,7 +498,7 @@ hvn_start(struct ifnet *ifp)
 
 		if (hvn_encap(sc, m, )) {
 			/* the chain is too large */
-			ifp->if_oerrors++;
+			if_statinc(ifp, if_oerrors);
 			m_freem(m);
 			continue;
 		}
@@ -507,7 +507,7 @@ hvn_start(struct ifnet *ifp)
 
 		if (hvn_rndis_output(sc, txd)) {
 			hvn_decap(sc, txd);
-			ifp->if_oerrors++;
+			if_statinc(ifp, if_oerrors);
 			m_freem(m);
 			continue;
 		}
@@ -678,7 +678,7 @@ hvn_txeof(struct hvn_softc *sc, uint64_t
 	BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE);
 	bus_dmamap_unload(sc->sc_dmat, txd->txd_dmap);
 	m_freem(m);
-	ifp->if_opackets++;
+	if_statinc(ifp, if_opackets);
 
 	txd->txd_ready = 1;
 
@@ -1560,7 +1560,7 @@ hvn_rxeof(struct hvn_softc *sc, uint8_t 
 
 	if ((m = hvn_devget(sc, buf + RNDIS_HEADER_OFFSET + pkt->rm_dataoffset,
 	pkt->rm_datalen)) == NULL) {
-		ifp->if_ierrors++;
+		if_statinc(ifp, if_ierrors);
 		return;
 	}
 



CVS commit: src/sys/dev/hyperv

2019-12-26 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Dec 27 05:59:53 UTC 2019

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
hvn(4): Handle CFI field of VLAN.


To generate a diff of this commit:
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.14 src/sys/dev/hyperv/if_hvn.c:1.15
--- src/sys/dev/hyperv/if_hvn.c:1.14	Fri Dec 27 05:56:42 2019
+++ src/sys/dev/hyperv/if_hvn.c	Fri Dec 27 05:59:53 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.14 2019/12/27 05:56:42 nonaka Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.15 2019/12/27 05:59:53 nonaka Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.14 2019/12/27 05:56:42 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.15 2019/12/27 05:59:53 nonaka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -67,6 +67,9 @@ __KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1
 #ifndef EVL_PRIO_BITS
 #define EVL_PRIO_BITS	13
 #endif
+#ifndef EVL_CFI_BITS
+#define EVL_CFI_BITS	12
+#endif
 
 #define HVN_NVS_MSGSIZE			32
 #define HVN_NVS_BUFSIZE			PAGE_SIZE
@@ -584,7 +587,7 @@ hvn_encap(struct hvn_softc *sc, struct m
 
 		tag = vlan_get_tag(m);
 		vlan = NDIS_VLAN_INFO_MAKE(EVL_VLANOFTAG(tag),
-		EVL_PRIOFTAG(tag), 0);
+		EVL_PRIOFTAG(tag), EVL_CFIOFTAG(tag));
 		cp = hvn_rndis_pktinfo_append(pkt, HVN_RNDIS_PKT_LEN,
 		NDIS_VLAN_INFO_SIZE, NDIS_PKTINFO_TYPE_VLAN);
 		memcpy(cp, , NDIS_VLAN_INFO_SIZE);
@@ -1593,6 +1596,7 @@ hvn_rxeof(struct hvn_softc *sc, uint8_t 
 			if (vlan != 0x) {
 uint16_t t = NDIS_VLAN_INFO_ID(vlan);
 t |= NDIS_VLAN_INFO_PRI(vlan) << EVL_PRIO_BITS;
+t |= NDIS_VLAN_INFO_CFI(vlan) << EVL_CFI_BITS;
 vlan_set_tag(m, t);
 			}
 			break;



CVS commit: src/sys/dev/hyperv

2019-12-26 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Dec 27 05:56:42 UTC 2019

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
hvn(4): Use vlan_{get,set,has}_tag().


To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.13 src/sys/dev/hyperv/if_hvn.c:1.14
--- src/sys/dev/hyperv/if_hvn.c:1.13	Tue Dec 10 12:20:20 2019
+++ src/sys/dev/hyperv/if_hvn.c	Fri Dec 27 05:56:42 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.13 2019/12/10 12:20:20 nonaka Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.14 2019/12/27 05:56:42 nonaka Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.13 2019/12/10 12:20:20 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.14 2019/12/27 05:56:42 nonaka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -577,13 +577,14 @@ hvn_encap(struct hvn_softc *sc, struct m
 	}
 	txd->txd_buf = m;
 
-	if (m->m_flags & M_VLANTAG) {
+	if (vlan_has_tag(m)) {
 		uint32_t vlan;
 		char *cp;
+		uint16_t tag;
 
-		vlan = NDIS_VLAN_INFO_MAKE(
-		EVL_VLANOFTAG(m->m_pkthdr.ether_vtag),
-		EVL_PRIOFTAG(m->m_pkthdr.ether_vtag), 0);
+		tag = vlan_get_tag(m);
+		vlan = NDIS_VLAN_INFO_MAKE(EVL_VLANOFTAG(tag),
+		EVL_PRIOFTAG(tag), 0);
 		cp = hvn_rndis_pktinfo_append(pkt, HVN_RNDIS_PKT_LEN,
 		NDIS_VLAN_INFO_SIZE, NDIS_PKTINFO_TYPE_VLAN);
 		memcpy(cp, , NDIS_VLAN_INFO_SIZE);
@@ -1590,10 +1591,9 @@ hvn_rxeof(struct hvn_softc *sc, uint8_t 
 		case NDIS_PKTINFO_TYPE_VLAN:
 			memcpy(, pi->rm_data, sizeof(vlan));
 			if (vlan != 0x) {
-m->m_pkthdr.ether_vtag =
-NDIS_VLAN_INFO_ID(vlan) |
-(NDIS_VLAN_INFO_PRI(vlan) << EVL_PRIO_BITS);
-m->m_flags |= M_VLANTAG;
+uint16_t t = NDIS_VLAN_INFO_ID(vlan);
+t |= NDIS_VLAN_INFO_PRI(vlan) << EVL_PRIO_BITS;
+vlan_set_tag(m, t);
 			}
 			break;
 		default:



CVS commit: src/sys/dev/hyperv

2019-12-10 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Tue Dec 10 12:20:20 UTC 2019

Modified Files:
src/sys/dev/hyperv: hyperv_common.c hypervvar.h if_hvn.c vmbus.c
vmbusvar.h

Log Message:
hvn(4) can be added and deleted dynamically.


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/sys/dev/hyperv/hyperv_common.c
cvs rdiff -u -r1.3 -r1.4 src/sys/dev/hyperv/hypervvar.h \
src/sys/dev/hyperv/vmbusvar.h
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/hyperv/if_hvn.c
cvs rdiff -u -r1.7 -r1.8 src/sys/dev/hyperv/vmbus.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/hyperv/hyperv_common.c
diff -u src/sys/dev/hyperv/hyperv_common.c:1.4 src/sys/dev/hyperv/hyperv_common.c:1.5
--- src/sys/dev/hyperv/hyperv_common.c:1.4	Sat Dec  7 11:45:45 2019
+++ src/sys/dev/hyperv/hyperv_common.c	Tue Dec 10 12:20:20 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: hyperv_common.c,v 1.4 2019/12/07 11:45:45 nonaka Exp $	*/
+/*	$NetBSD: hyperv_common.c,v 1.5 2019/12/10 12:20:20 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2009-2012,2016-2017 Microsoft Corp.
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: hyperv_common.c,v 1.4 2019/12/07 11:45:45 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hyperv_common.c,v 1.5 2019/12/10 12:20:20 nonaka Exp $");
 
 #include "hyperv.h"
 
@@ -111,17 +111,18 @@ hyperv_guid2str(const struct hyperv_guid
  */
 void *
 hyperv_dma_alloc(bus_dma_tag_t dmat, struct hyperv_dma *dma, bus_size_t size,
-bus_size_t alignment, bus_size_t boundary, int nsegs)
+bus_size_t alignment, bus_size_t boundary, int nsegs, int flags)
 {
-	const int kmemflags = cold ? KM_NOSLEEP : KM_SLEEP;
-	const int dmaflags = cold ? BUS_DMA_NOWAIT : BUS_DMA_WAITOK;
+	const int waitok = (flags & HYPERV_DMA_NOSLEEP) != HYPERV_DMA_NOSLEEP;
+	const int kmemflags = waitok ? KM_SLEEP: KM_NOSLEEP;
+	const int dmaflags = waitok ? BUS_DMA_WAITOK : BUS_DMA_NOWAIT;
 	int rseg, error;
 
 	KASSERT(dma != NULL);
 	KASSERT(dma->segs == NULL);
 	KASSERT(nsegs > 0);
 
-	dma->segs = kmem_zalloc(sizeof(*dma->segs) * nsegs, kmemflags);
+	dma->segs = kmem_intr_zalloc(sizeof(*dma->segs) * nsegs, kmemflags);
 	if (dma->segs == NULL)
 		return NULL;
 

Index: src/sys/dev/hyperv/hypervvar.h
diff -u src/sys/dev/hyperv/hypervvar.h:1.3 src/sys/dev/hyperv/hypervvar.h:1.4
--- src/sys/dev/hyperv/hypervvar.h:1.3	Sat Dec  7 11:45:45 2019
+++ src/sys/dev/hyperv/hypervvar.h	Tue Dec 10 12:20:20 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: hypervvar.h,v 1.3 2019/12/07 11:45:45 nonaka Exp $	*/
+/*	$NetBSD: hypervvar.h,v 1.4 2019/12/10 12:20:20 nonaka Exp $	*/
 
 /*-
  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
@@ -108,8 +108,10 @@ hyperv_dma_get_paddr(struct hyperv_dma *
 	return dma->map->dm_segs[0].ds_addr;
 }
 
+#define HYPERV_DMA_SLEEPOK	0
+#define HYPERV_DMA_NOSLEEP	__BIT(0)
 void *hyperv_dma_alloc(bus_dma_tag_t, struct hyperv_dma *, bus_size_t,
-bus_size_t, bus_size_t, int);
+bus_size_t, bus_size_t, int, int);
 void hyperv_dma_free(bus_dma_tag_t, struct hyperv_dma *);
 
 #endif	/* _KERNEL */
Index: src/sys/dev/hyperv/vmbusvar.h
diff -u src/sys/dev/hyperv/vmbusvar.h:1.3 src/sys/dev/hyperv/vmbusvar.h:1.4
--- src/sys/dev/hyperv/vmbusvar.h:1.3	Sat Dec  7 11:45:45 2019
+++ src/sys/dev/hyperv/vmbusvar.h	Tue Dec 10 12:20:20 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbusvar.h,v 1.3 2019/12/07 11:45:45 nonaka Exp $	*/
+/*	$NetBSD: vmbusvar.h,v 1.4 2019/12/10 12:20:20 nonaka Exp $	*/
 /*	$OpenBSD: hypervvar.h,v 1.13 2017/06/23 19:05:42 mikeb Exp $	*/
 
 /*
@@ -24,6 +24,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -43,6 +44,7 @@
 typedef void (*vmbus_channel_callback_t)(void *);
 
 struct vmbus_softc;
+struct vmbus_channel;
 
 struct vmbus_msg {
 	uint64_t			msg_flags;
@@ -57,11 +59,14 @@ struct vmbus_msg {
 __CTASSERT((offsetof(struct vmbus_msg, msg_req) % 8) == 0);
 TAILQ_HEAD(vmbus_queue, vmbus_msg);
 
-struct vmbus_offer {
-	struct vmbus_chanmsg_choffer	co_chan;
-	SIMPLEQ_ENTRY(vmbus_offer)	co_entry;
+struct vmbus_dev {
+	int	vd_type;
+#define VMBUS_DEV_TYPE_ATTACH			0
+#define VMBUS_DEV_TYPE_DETACH			1
+	struct vmbus_channel			*vd_chan;
+	SIMPLEQ_ENTRY(vmbus_dev)		vd_entry;
 };
-SIMPLEQ_HEAD(vmbus_offers, vmbus_offer);
+SIMPLEQ_HEAD(vmbus_devq, vmbus_dev);
 
 struct vmbus_ring_data {
 	struct vmbus_bufring		*rd_ring;
@@ -72,7 +77,6 @@ struct vmbus_ring_data {
 	uint32_t			rd_dsize;
 };
 
-struct vmbus_channel;
 TAILQ_HEAD(vmbus_channels, vmbus_channel);
 
 struct vmbus_channel {
@@ -111,6 +115,7 @@ struct vmbus_channel {
 	uint32_t			ch_flags;
 #define  CHF_BATCHED			__BIT(0)
 #define  CHF_MONITOR			__BIT(1)
+#define  CHF_REVOKED			__BIT(2)
 
 	uint8_tch_mgroup;
 	uint8_tch_mindex;
@@ -137,12 +142,6 @@ struct vmbus_attach_args {
 	bus_space_tag_t			aa_memt;
 };
 
-struct vmbus_dev {
-	struct vmbus_attach_args	dv_aa;
-	SLIST_ENTRY(vmbus_dev)		dv_entry;
-};
-SLIST_HEAD(vmbus_devices, 

CVS commit: src/sys/dev/hyperv

2019-12-10 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Tue Dec 10 11:19:25 UTC 2019

Modified Files:
src/sys/dev/hyperv: if_hvn.c

Log Message:
hvn(4): Handle VMBUS_CHANPKT_TYPE_INBAND packet type.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/hyperv/if_hvn.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/hyperv/if_hvn.c
diff -u src/sys/dev/hyperv/if_hvn.c:1.11 src/sys/dev/hyperv/if_hvn.c:1.12
--- src/sys/dev/hyperv/if_hvn.c:1.11	Tue Nov 26 01:46:31 2019
+++ src/sys/dev/hyperv/if_hvn.c	Tue Dec 10 11:19:25 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_hvn.c,v 1.11 2019/11/26 01:46:31 nonaka Exp $	*/
+/*	$NetBSD: if_hvn.c,v 1.12 2019/12/10 11:19:25 nonaka Exp $	*/
 /*	$OpenBSD: if_hvn.c,v 1.39 2018/03/11 14:31:34 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.11 2019/11/26 01:46:31 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_hvn.c,v 1.12 2019/12/10 11:19:25 nonaka Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_inet.h"
@@ -1040,6 +1040,16 @@ hvn_nvs_intr(void *arg)
 "on receive\n", nvs->nvs_type);
 break;
 			}
+		} else if (cph->cph_type == VMBUS_CHANPKT_TYPE_INBAND) {
+			switch (nvs->nvs_type) {
+			case HVN_NVS_TYPE_TXTBL_NOTE:
+/* Useless; ignore */
+break;
+			default:
+device_printf(sc->sc_dev,
+"got notify, nvs type %u\n", nvs->nvs_type);
+break;
+			}
 		} else
 			device_printf(sc->sc_dev,
 			"unknown NVSP packet type %u\n", cph->cph_type);



CVS commit: src/sys/dev/hyperv

2019-12-06 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Dec  6 12:46:06 UTC 2019

Modified Files:
src/sys/dev/hyperv: hyperv_common.c vmbus.c

Log Message:
Clear the allocated memory in hyperv_dma_alloc().


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/sys/dev/hyperv/hyperv_common.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/hyperv/vmbus.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/hyperv/hyperv_common.c
diff -u src/sys/dev/hyperv/hyperv_common.c:1.2 src/sys/dev/hyperv/hyperv_common.c:1.3
--- src/sys/dev/hyperv/hyperv_common.c:1.2	Fri May 31 04:23:19 2019
+++ src/sys/dev/hyperv/hyperv_common.c	Fri Dec  6 12:46:06 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: hyperv_common.c,v 1.2 2019/05/31 04:23:19 nonaka Exp $	*/
+/*	$NetBSD: hyperv_common.c,v 1.3 2019/12/06 12:46:06 nonaka Exp $	*/
 
 /*-
  * Copyright (c) 2009-2012,2016-2017 Microsoft Corp.
@@ -29,7 +29,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: hyperv_common.c,v 1.2 2019/05/31 04:23:19 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hyperv_common.c,v 1.3 2019/12/06 12:46:06 nonaka Exp $");
 
 #include "hyperv.h"
 
@@ -155,6 +155,10 @@ hyperv_dma_alloc(bus_dma_tag_t dmat, str
 		goto fail4;
 	}
 
+	memset(dma->addr, 0, dma->map->dm_mapsize);
+	bus_dmamap_sync(dmat, dma->map, 0, dma->map->dm_mapsize,
+	BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+
 	return dma->addr;
 
 fail4:	bus_dmamap_destroy(dmat, dma->map);

Index: src/sys/dev/hyperv/vmbus.c
diff -u src/sys/dev/hyperv/vmbus.c:1.5 src/sys/dev/hyperv/vmbus.c:1.6
--- src/sys/dev/hyperv/vmbus.c:1.5	Fri Nov 22 12:30:32 2019
+++ src/sys/dev/hyperv/vmbus.c	Fri Dec  6 12:46:06 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbus.c,v 1.5 2019/11/22 12:30:32 nonaka Exp $	*/
+/*	$NetBSD: vmbus.c,v 1.6 2019/12/06 12:46:06 nonaka Exp $	*/
 /*	$OpenBSD: hyperv.c,v 1.43 2017/06/27 13:56:15 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.5 2019/11/22 12:30:32 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.6 2019/12/06 12:46:06 nonaka Exp $");
 
 #include 
 #include 
@@ -985,7 +985,6 @@ vmbus_channel_alloc(struct vmbus_softc *
 		kmem_free(ch, sizeof(*ch));
 		return NULL;
 	}
-	memset(ch->ch_monprm, 0, sizeof(*ch->ch_monprm));
 
 	ch->ch_refs = 1;
 	ch->ch_sc = sc;
@@ -1264,7 +1263,6 @@ vmbus_channel_ring_create(struct vmbus_c
 		"failed to allocate channel ring\n");
 		return ENOMEM;
 	}
-	memset(ch->ch_ring, 0, ch->ch_ring_size);
 
 	memset(>ch_wrd, 0, sizeof(ch->ch_wrd));
 	ch->ch_wrd.rd_ring = (struct vmbus_bufring *)ch->ch_ring;



CVS commit: src/sys/dev/hyperv

2019-03-01 Thread NONAKA Kimihiro
Module Name:src
Committed By:   nonaka
Date:   Fri Mar  1 10:02:33 UTC 2019

Modified Files:
src/sys/dev/hyperv: vmbusicreg.h

Log Message:
Remove unused definition.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/hyperv/vmbusicreg.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/dev/hyperv/vmbusicreg.h
diff -u src/sys/dev/hyperv/vmbusicreg.h:1.1 src/sys/dev/hyperv/vmbusicreg.h:1.2
--- src/sys/dev/hyperv/vmbusicreg.h:1.1	Fri Feb 15 08:54:02 2019
+++ src/sys/dev/hyperv/vmbusicreg.h	Fri Mar  1 10:02:33 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbusicreg.h,v 1.1 2019/02/15 08:54:02 nonaka Exp $	*/
+/*	$NetBSD: vmbusicreg.h,v 1.2 2019/03/01 10:02:33 nonaka Exp $	*/
 /*	$OpenBSD: hypervicreg.h,v 1.6 2017/11/07 16:49:42 mikeb Exp $	*/
 
 /*-
@@ -32,8 +32,6 @@
 #ifndef _VMBUSICREG_H_
 #define _VMBUSICREG_H_
 
-#define VMBUS_IC_BUFRINGSIZE		(4 * PAGE_SIZE)
-
 #define VMBUS_ICMSG_TYPE_NEGOTIATE	0
 #define VMBUS_ICMSG_TYPE_HEARTBEAT	1
 #define VMBUS_ICMSG_TYPE_KVP		2



CVS commit: src/sys/dev/hyperv

2019-02-15 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Fri Feb 15 16:37:54 UTC 2019

Modified Files:
src/sys/dev/hyperv: vmbus.c

Log Message:
Add __diagused.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/sys/dev/hyperv/vmbus.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/hyperv/vmbus.c
diff -u src/sys/dev/hyperv/vmbus.c:1.1 src/sys/dev/hyperv/vmbus.c:1.2
--- src/sys/dev/hyperv/vmbus.c:1.1	Fri Feb 15 08:54:01 2019
+++ src/sys/dev/hyperv/vmbus.c	Fri Feb 15 16:37:54 2019
@@ -1,4 +1,4 @@
-/*	$NetBSD: vmbus.c,v 1.1 2019/02/15 08:54:01 nonaka Exp $	*/
+/*	$NetBSD: vmbus.c,v 1.2 2019/02/15 16:37:54 hannken Exp $	*/
 /*	$OpenBSD: hyperv.c,v 1.43 2017/06/27 13:56:15 mikeb Exp $	*/
 
 /*-
@@ -35,7 +35,7 @@
  */
 
 #include 
-__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.1 2019/02/15 08:54:01 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vmbus.c,v 1.2 2019/02/15 16:37:54 hannken Exp $");
 
 #include 
 #include 
@@ -1020,7 +1020,7 @@ vmbus_channel_add(struct vmbus_channel *
 {
 	struct vmbus_softc *sc = nch->ch_sc;
 	struct vmbus_channel *ch;
-	u_int refs;
+	u_int refs __diagused;
 
 	if (nch->ch_id == 0) {
 		device_printf(sc->sc_dev, "got channel 0 offer, discard\n");