Module Name: src
Committed By: yamaguchi
Date: Mon May 25 07:37:47 UTC 2020
Modified Files:
src/sys/dev/pci: virtio.c virtio_pci.c virtiovar.h
Log Message:
Register an interrupt handler for virtqueue to that for pci
to reduce function call
To generate a diff of this commit:
cvs rdiff -u -r1.39 -r1.40 src/sys/dev/pci/virtio.c
cvs rdiff -u -r1.8 -r1.9 src/sys/dev/pci/virtio_pci.c
cvs rdiff -u -r1.14 -r1.15 src/sys/dev/pci/virtiovar.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/pci/virtio.c
diff -u src/sys/dev/pci/virtio.c:1.39 src/sys/dev/pci/virtio.c:1.40
--- src/sys/dev/pci/virtio.c:1.39 Mon May 25 07:29:52 2020
+++ src/sys/dev/pci/virtio.c Mon May 25 07:37:47 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: virtio.c,v 1.39 2020/05/25 07:29:52 yamaguchi Exp $ */
+/* $NetBSD: virtio.c,v 1.40 2020/05/25 07:37:47 yamaguchi Exp $ */
/*
* Copyright (c) 2010 Minoura Makoto.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio.c,v 1.39 2020/05/25 07:29:52 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio.c,v 1.40 2020/05/25 07:37:47 yamaguchi Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -277,8 +277,9 @@ virtio_vq_intr(struct virtio_softc *sc)
}
static int
-virtio_vq_mq_intr(struct virtqueue *vq)
+virtio_vq_mq_intr(void *arg)
{
+ struct virtqueue *vq = arg;
return virtio_vq_intr_common(vq);
}
Index: src/sys/dev/pci/virtio_pci.c
diff -u src/sys/dev/pci/virtio_pci.c:1.8 src/sys/dev/pci/virtio_pci.c:1.9
--- src/sys/dev/pci/virtio_pci.c:1.8 Mon May 25 07:29:52 2020
+++ src/sys/dev/pci/virtio_pci.c Mon May 25 07:37:47 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: virtio_pci.c,v 1.8 2020/05/25 07:29:52 yamaguchi Exp $ */
+/* $NetBSD: virtio_pci.c,v 1.9 2020/05/25 07:37:47 yamaguchi Exp $ */
/*
* Copyright (c) 2010 Minoura Makoto.
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: virtio_pci.c,v 1.8 2020/05/25 07:29:52 yamaguchi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: virtio_pci.c,v 1.9 2020/05/25 07:37:47 yamaguchi Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -80,7 +80,6 @@ static void virtio_pci_free_interrupts(s
static int virtio_pci_intr(void *arg);
static int virtio_pci_msix_queue_intr(void *);
-static int virtio_pci_msix_vq_intr(void *);
static int virtio_pci_msix_config_intr(void *);
static int virtio_pci_setup_msix_vectors(struct virtio_softc *);
static int virtio_pci_setup_msix_interrupts(struct virtio_softc *,
@@ -511,6 +510,7 @@ virtio_pci_setup_msix_interrupts(struct
struct virtio_pci_softc * const psc = (struct virtio_pci_softc *)sc;
device_t self = sc->sc_dev;
pci_chipset_tag_t pc = pa->pa_pc;
+ struct virtqueue *vq;
char intrbuf[PCI_INTRSTR_LEN];
char intr_xname[INTRDEVNAMEBUF];
char const *intrstr;
@@ -534,6 +534,7 @@ virtio_pci_setup_msix_interrupts(struct
if (sc->sc_child_mq) {
for (qid = 0; qid < sc->sc_nvqs; qid++) {
n = idx + qid;
+ vq = &sc->sc_vqs[qid];
snprintf(intr_xname, sizeof(intr_xname), "%s vq#%d",
device_xname(sc->sc_dev), qid);
@@ -544,8 +545,7 @@ virtio_pci_setup_msix_interrupts(struct
}
psc->sc_ihs[n] = pci_intr_establish_xname(pc, psc->sc_ihp[n],
- sc->sc_ipl, virtio_pci_msix_vq_intr, &sc->sc_vqs[qid],
- intr_xname);
+ sc->sc_ipl, vq->vq_intrhand, vq, intr_xname);
if (psc->sc_ihs[n] == NULL) {
aprint_error_dev(self, "couldn't establish MSI-X for a vq\n");
goto error;
@@ -798,15 +798,6 @@ virtio_pci_msix_queue_intr(void *arg)
}
static int
-virtio_pci_msix_vq_intr(void *arg)
-{
- struct virtqueue *vq = arg;
-
- KASSERT(vq->vq_intrhand != NULL);
- return vq->vq_intrhand(vq);
-}
-
-static int
virtio_pci_msix_config_intr(void *arg)
{
struct virtio_softc *sc = arg;
Index: src/sys/dev/pci/virtiovar.h
diff -u src/sys/dev/pci/virtiovar.h:1.14 src/sys/dev/pci/virtiovar.h:1.15
--- src/sys/dev/pci/virtiovar.h:1.14 Mon May 25 07:29:52 2020
+++ src/sys/dev/pci/virtiovar.h Mon May 25 07:37:47 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: virtiovar.h,v 1.14 2020/05/25 07:29:52 yamaguchi Exp $ */
+/* $NetBSD: virtiovar.h,v 1.15 2020/05/25 07:37:47 yamaguchi Exp $ */
/*
* Copyright (c) 2010 Minoura Makoto.
@@ -117,7 +117,7 @@ struct virtqueue {
/* interrupt handler */
int (*vq_done)(struct virtqueue*);
void *vq_done_ctx;
- int (*vq_intrhand)(struct virtqueue*);
+ int (*vq_intrhand)(void *);
};
struct virtio_attach_args {