Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/xen add and pass dma tag to PV drivers attached to ...



details:   https://anonhg.NetBSD.org/src/rev/345b34815910
branches:  trunk
changeset: 970994:345b34815910
user:      jdolecek <jdolecek%NetBSD.org@localhost>
date:      Fri Apr 10 14:54:33 2020 +0000

description:
add and pass dma tag to PV drivers attached to xenbus, so thay can
use bus_dmamap_load_mbuf() et.al.

due to XENPV override, _BUS_BUS_TO_PHYS() dmamap segment ds_addr
gets filled with ma, so value can be directly used for e.g. grant calls

diffstat:

 sys/arch/xen/include/xenbus.h      |   5 ++++-
 sys/arch/xen/x86/xen_bus_dma.c     |  13 +++++++++++--
 sys/arch/xen/xen/hypervisor.c      |   8 +++++---
 sys/arch/xen/xenbus/xenbus_probe.c |   8 ++++++--
 4 files changed, 26 insertions(+), 8 deletions(-)

diffs (152 lines):

diff -r 8ebbc1a2972c -r 345b34815910 sys/arch/xen/include/xenbus.h
--- a/sys/arch/xen/include/xenbus.h     Fri Apr 10 14:35:26 2020 +0000
+++ b/sys/arch/xen/include/xenbus.h     Fri Apr 10 14:54:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus.h,v 1.22 2020/04/07 16:10:48 jdolecek Exp $ */
+/* $NetBSD: xenbus.h,v 1.23 2020/04/10 14:54:34 jdolecek Exp $ */
 /******************************************************************************
  * xenbus.h
  *
@@ -33,6 +33,7 @@
 #define _ASM_XEN_XENBUS_H
 
 #include <sys/device.h>
+#include <sys/bus.h>
 #include <sys/queue.h>
 #include <xen/include/public/xen.h>
 #include <xen/include/public/io/xenbus.h>
@@ -43,6 +44,7 @@
 struct xenbus_attach_args {
        const char              *xa_device;
        int                     xa_handle;
+       bus_dma_tag_t           xa_dmat;
 };
 
 /* devices to xenbus attach */
@@ -50,6 +52,7 @@
        const char              *xa_type;
        int                     xa_id;
        struct xenbus_device    *xa_xbusd;
+       bus_dma_tag_t           xa_dmat;
 };
 
 /* Register callback to watch this node. */
diff -r 8ebbc1a2972c -r 345b34815910 sys/arch/xen/x86/xen_bus_dma.c
--- a/sys/arch/xen/x86/xen_bus_dma.c    Fri Apr 10 14:35:26 2020 +0000
+++ b/sys/arch/xen/x86/xen_bus_dma.c    Fri Apr 10 14:54:33 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: xen_bus_dma.c,v 1.29 2020/04/09 19:26:37 jdolecek Exp $        */
+/*     $NetBSD: xen_bus_dma.c,v 1.30 2020/04/10 14:54:33 jdolecek Exp $        */
 /*     NetBSD bus_dma.c,v 1.21 2005/04/16 07:53:35 yamt Exp */
 
 /*-
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xen_bus_dma.c,v 1.29 2020/04/09 19:26:37 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xen_bus_dma.c,v 1.30 2020/04/10 14:54:33 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -47,6 +47,15 @@
 
 extern paddr_t avail_end;
 
+/* No special needs */
+struct x86_bus_dma_tag xenbus_bus_dma_tag = {
+       ._tag_needs_free        = 0,
+       ._bounce_thresh         = 0,
+       ._bounce_alloc_lo       = 0,
+       ._bounce_alloc_hi       = 0,
+       ._may_bounce            = NULL,
+};
+
 /* Pure 2^n version of get_order */
 static inline int get_order(unsigned long size)
 {
diff -r 8ebbc1a2972c -r 345b34815910 sys/arch/xen/xen/hypervisor.c
--- a/sys/arch/xen/xen/hypervisor.c     Fri Apr 10 14:35:26 2020 +0000
+++ b/sys/arch/xen/xen/hypervisor.c     Fri Apr 10 14:54:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: hypervisor.c,v 1.73 2020/04/07 08:14:42 jdolecek Exp $ */
+/* $NetBSD: hypervisor.c,v 1.74 2020/04/10 14:54:33 jdolecek Exp $ */
 
 /*
  * Copyright (c) 2005 Manuel Bouyer.
@@ -53,7 +53,7 @@
 
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hypervisor.c,v 1.73 2020/04/07 08:14:42 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hypervisor.c,v 1.74 2020/04/10 14:54:33 jdolecek Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -415,7 +415,7 @@
        bi.common.len = sizeof(struct btinfo_rootdevice);
 
        /* From i386/multiboot.c */
-       /*      $NetBSD: hypervisor.c,v 1.73 2020/04/07 08:14:42 jdolecek Exp $ */
+       /*      $NetBSD: hypervisor.c,v 1.74 2020/04/10 14:54:33 jdolecek Exp $ */
        int i, len;
        vaddr_t data;
        extern struct bootinfo  bootinfo;
@@ -545,8 +545,10 @@
 #endif /* MULTIPROCESSOR */
 
 #if NXENBUS > 0
+       extern struct x86_bus_dma_tag xenbus_bus_dma_tag;
        memset(&hac, 0, sizeof(hac));
        hac.hac_xenbus.xa_device = "xenbus";
+       hac.hac_xenbus.xa_dmat = &xenbus_bus_dma_tag;
        config_found_ia(self, "xendevbus", &hac.hac_xenbus, hypervisor_print);
 #endif
 #if NXENCONS > 0
diff -r 8ebbc1a2972c -r 345b34815910 sys/arch/xen/xenbus/xenbus_probe.c
--- a/sys/arch/xen/xenbus/xenbus_probe.c        Fri Apr 10 14:35:26 2020 +0000
+++ b/sys/arch/xen/xenbus/xenbus_probe.c        Fri Apr 10 14:54:33 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: xenbus_probe.c,v 1.47 2020/04/10 12:38:40 jdolecek Exp $ */
+/* $NetBSD: xenbus_probe.c,v 1.48 2020/04/10 14:54:33 jdolecek Exp $ */
 /******************************************************************************
  * Talks to Xen Store to figure out what devices we have.
  *
@@ -29,7 +29,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: xenbus_probe.c,v 1.47 2020/04/10 12:38:40 jdolecek Exp $");
+__KERNEL_RCSID(0, "$NetBSD: xenbus_probe.c,v 1.48 2020/04/10 14:54:33 jdolecek Exp $");
 
 #if 0
 #define DPRINTK(fmt, args...) \
@@ -81,6 +81,7 @@
     NULL, NULL);
 
 device_t xenbus_dev;
+bus_dma_tag_t xenbus_dmat;
 
 SLIST_HEAD(, xenbus_device) xenbus_device_list;
 SLIST_HEAD(, xenbus_backend_driver) xenbus_backend_driver_list =
@@ -99,10 +100,12 @@
 static void
 xenbus_attach(device_t parent, device_t self, void *aux)
 {
+       struct xenbus_attach_args *xa = (struct xenbus_attach_args *)aux;
        int err;
 
        aprint_normal(": Xen Virtual Bus Interface\n");
        xenbus_dev = self;
+       xenbus_dmat = xa->xa_dmat;
        config_pending_incr(self);
 
        err = kthread_create(PRI_NONE, 0, NULL, xenbus_probe_init, NULL,
@@ -424,6 +427,7 @@
                        }
                } else {
                        xbusd->xbusd_type = XENBUS_FRONTEND_DEVICE;
+                       xa.xa_dmat = xenbus_dmat;
                        xa.xa_xbusd = xbusd;
                        xa.xa_type = type;
                        xa.xa_id = strtoul(dir[i], &ep, 0);



Home | Main Index | Thread Index | Old Index