* [PATCH v3 04/21] xen/netfront: switch netfront to use INVALID_GRANT_REF
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
@ 2022-05-05 8:16 ` Juergen Gross
2022-05-05 8:16 ` [PATCH v3 11/21] xen: update ring.h Juergen Gross
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Juergen Gross @ 2022-05-05 8:16 UTC (permalink / raw)
To: xen-devel, netdev, linux-kernel
Cc: Juergen Gross, Boris Ostrovsky, Stefano Stabellini,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Instead of using a private macro for an invalid grant reference use
the common one.
Signed-off-by: Juergen Gross <jgross@suse.com>
---
drivers/net/xen-netfront.c | 36 +++++++++++++++++-------------------
1 file changed, 17 insertions(+), 19 deletions(-)
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index e2b4a1893a13..af3d3de7d9fa 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -78,8 +78,6 @@ struct netfront_cb {
#define RX_COPY_THRESHOLD 256
-#define GRANT_INVALID_REF 0
-
#define NET_TX_RING_SIZE __CONST_RING_SIZE(xen_netif_tx, XEN_PAGE_SIZE)
#define NET_RX_RING_SIZE __CONST_RING_SIZE(xen_netif_rx, XEN_PAGE_SIZE)
@@ -224,7 +222,7 @@ static grant_ref_t xennet_get_rx_ref(struct netfront_queue *queue,
{
int i = xennet_rxidx(ri);
grant_ref_t ref = queue->grant_rx_ref[i];
- queue->grant_rx_ref[i] = GRANT_INVALID_REF;
+ queue->grant_rx_ref[i] = INVALID_GRANT_REF;
return ref;
}
@@ -432,7 +430,7 @@ static bool xennet_tx_buf_gc(struct netfront_queue *queue)
}
gnttab_release_grant_reference(
&queue->gref_tx_head, queue->grant_tx_ref[id]);
- queue->grant_tx_ref[id] = GRANT_INVALID_REF;
+ queue->grant_tx_ref[id] = INVALID_GRANT_REF;
queue->grant_tx_page[id] = NULL;
add_id_to_list(&queue->tx_skb_freelist, queue->tx_link, id);
dev_kfree_skb_irq(skb);
@@ -1021,7 +1019,7 @@ static int xennet_get_responses(struct netfront_queue *queue,
* the backend driver. In future this should flag the bad
* situation to the system controller to reboot the backend.
*/
- if (ref == GRANT_INVALID_REF) {
+ if (ref == INVALID_GRANT_REF) {
if (net_ratelimit())
dev_warn(dev, "Bad rx response id %d.\n",
rx->id);
@@ -1390,7 +1388,7 @@ static void xennet_release_tx_bufs(struct netfront_queue *queue)
gnttab_end_foreign_access(queue->grant_tx_ref[i],
(unsigned long)page_address(queue->grant_tx_page[i]));
queue->grant_tx_page[i] = NULL;
- queue->grant_tx_ref[i] = GRANT_INVALID_REF;
+ queue->grant_tx_ref[i] = INVALID_GRANT_REF;
add_id_to_list(&queue->tx_skb_freelist, queue->tx_link, i);
dev_kfree_skb_irq(skb);
}
@@ -1411,7 +1409,7 @@ static void xennet_release_rx_bufs(struct netfront_queue *queue)
continue;
ref = queue->grant_rx_ref[id];
- if (ref == GRANT_INVALID_REF)
+ if (ref == INVALID_GRANT_REF)
continue;
page = skb_frag_page(&skb_shinfo(skb)->frags[0]);
@@ -1422,7 +1420,7 @@ static void xennet_release_rx_bufs(struct netfront_queue *queue)
get_page(page);
gnttab_end_foreign_access(ref,
(unsigned long)page_address(page));
- queue->grant_rx_ref[id] = GRANT_INVALID_REF;
+ queue->grant_rx_ref[id] = INVALID_GRANT_REF;
kfree_skb(skb);
}
@@ -1761,7 +1759,7 @@ static int netfront_probe(struct xenbus_device *dev,
static void xennet_end_access(int ref, void *page)
{
/* This frees the page as a side-effect */
- if (ref != GRANT_INVALID_REF)
+ if (ref != INVALID_GRANT_REF)
gnttab_end_foreign_access(ref, (unsigned long)page);
}
@@ -1798,8 +1796,8 @@ static void xennet_disconnect_backend(struct netfront_info *info)
xennet_end_access(queue->tx_ring_ref, queue->tx.sring);
xennet_end_access(queue->rx_ring_ref, queue->rx.sring);
- queue->tx_ring_ref = GRANT_INVALID_REF;
- queue->rx_ring_ref = GRANT_INVALID_REF;
+ queue->tx_ring_ref = INVALID_GRANT_REF;
+ queue->rx_ring_ref = INVALID_GRANT_REF;
queue->tx.sring = NULL;
queue->rx.sring = NULL;
@@ -1927,8 +1925,8 @@ static int setup_netfront(struct xenbus_device *dev,
grant_ref_t gref;
int err;
- queue->tx_ring_ref = GRANT_INVALID_REF;
- queue->rx_ring_ref = GRANT_INVALID_REF;
+ queue->tx_ring_ref = INVALID_GRANT_REF;
+ queue->rx_ring_ref = INVALID_GRANT_REF;
queue->rx.sring = NULL;
queue->tx.sring = NULL;
@@ -1978,17 +1976,17 @@ static int setup_netfront(struct xenbus_device *dev,
* granted pages because backend is not accessing it at this point.
*/
fail:
- if (queue->rx_ring_ref != GRANT_INVALID_REF) {
+ if (queue->rx_ring_ref != INVALID_GRANT_REF) {
gnttab_end_foreign_access(queue->rx_ring_ref,
(unsigned long)rxs);
- queue->rx_ring_ref = GRANT_INVALID_REF;
+ queue->rx_ring_ref = INVALID_GRANT_REF;
} else {
free_page((unsigned long)rxs);
}
- if (queue->tx_ring_ref != GRANT_INVALID_REF) {
+ if (queue->tx_ring_ref != INVALID_GRANT_REF) {
gnttab_end_foreign_access(queue->tx_ring_ref,
(unsigned long)txs);
- queue->tx_ring_ref = GRANT_INVALID_REF;
+ queue->tx_ring_ref = INVALID_GRANT_REF;
} else {
free_page((unsigned long)txs);
}
@@ -2020,7 +2018,7 @@ static int xennet_init_queue(struct netfront_queue *queue)
queue->tx_pend_queue = TX_LINK_NONE;
for (i = 0; i < NET_TX_RING_SIZE; i++) {
queue->tx_link[i] = i + 1;
- queue->grant_tx_ref[i] = GRANT_INVALID_REF;
+ queue->grant_tx_ref[i] = INVALID_GRANT_REF;
queue->grant_tx_page[i] = NULL;
}
queue->tx_link[NET_TX_RING_SIZE - 1] = TX_LINK_NONE;
@@ -2028,7 +2026,7 @@ static int xennet_init_queue(struct netfront_queue *queue)
/* Clear out rx_skbs */
for (i = 0; i < NET_RX_RING_SIZE; i++) {
queue->rx_skbs[i] = NULL;
- queue->grant_rx_ref[i] = GRANT_INVALID_REF;
+ queue->grant_rx_ref[i] = INVALID_GRANT_REF;
}
/* A grant for every tx ring slot */
--
2.35.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v3 11/21] xen: update ring.h
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
2022-05-05 8:16 ` [PATCH v3 04/21] xen/netfront: switch netfront to use INVALID_GRANT_REF Juergen Gross
@ 2022-05-05 8:16 ` Juergen Gross
2022-05-05 8:16 ` [PATCH v3 14/21] xen/netfront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Juergen Gross @ 2022-05-05 8:16 UTC (permalink / raw)
To: xen-devel, netdev, linux-kernel
Cc: Juergen Gross, Boris Ostrovsky, Stefano Stabellini,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Update include/xen/interface/io/ring.h to its newest version.
Switch the two improper use cases of RING_HAS_UNCONSUMED_RESPONSES() to
XEN_RING_NR_UNCONSUMED_RESPONSES() in order to avoid the nasty
XEN_RING_HAS_UNCONSUMED_IS_BOOL #define.
Signed-off-by: Juergen Gross <jgross@suse.com>
---
V2:
- new patch
---
drivers/net/xen-netfront.c | 4 ++--
include/xen/interface/io/ring.h | 19 ++++++++++++++-----
2 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index af3d3de7d9fa..966bee2a6902 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -866,7 +866,7 @@ static void xennet_set_rx_rsp_cons(struct netfront_queue *queue, RING_IDX val)
spin_lock_irqsave(&queue->rx_cons_lock, flags);
queue->rx.rsp_cons = val;
- queue->rx_rsp_unconsumed = RING_HAS_UNCONSUMED_RESPONSES(&queue->rx);
+ queue->rx_rsp_unconsumed = XEN_RING_NR_UNCONSUMED_RESPONSES(&queue->rx);
spin_unlock_irqrestore(&queue->rx_cons_lock, flags);
}
@@ -1498,7 +1498,7 @@ static bool xennet_handle_rx(struct netfront_queue *queue, unsigned int *eoi)
return false;
spin_lock_irqsave(&queue->rx_cons_lock, flags);
- work_queued = RING_HAS_UNCONSUMED_RESPONSES(&queue->rx);
+ work_queued = XEN_RING_NR_UNCONSUMED_RESPONSES(&queue->rx);
if (work_queued > queue->rx_rsp_unconsumed) {
queue->rx_rsp_unconsumed = work_queued;
*eoi = 0;
diff --git a/include/xen/interface/io/ring.h b/include/xen/interface/io/ring.h
index 2470ec45ebb2..ba4c4274b714 100644
--- a/include/xen/interface/io/ring.h
+++ b/include/xen/interface/io/ring.h
@@ -72,9 +72,8 @@ typedef unsigned int RING_IDX;
* of the shared memory area (PAGE_SIZE, for instance). To initialise
* the front half:
*
- * mytag_front_ring_t front_ring;
- * SHARED_RING_INIT((mytag_sring_t *)shared_page);
- * FRONT_RING_INIT(&front_ring, (mytag_sring_t *)shared_page, PAGE_SIZE);
+ * mytag_front_ring_t ring;
+ * XEN_FRONT_RING_INIT(&ring, (mytag_sring_t *)shared_page, PAGE_SIZE);
*
* Initializing the back follows similarly (note that only the front
* initializes the shared ring):
@@ -146,6 +145,11 @@ struct __name##_back_ring { \
#define FRONT_RING_INIT(_r, _s, __size) FRONT_RING_ATTACH(_r, _s, 0, __size)
+#define XEN_FRONT_RING_INIT(r, s, size) do { \
+ SHARED_RING_INIT(s); \
+ FRONT_RING_INIT(r, s, size); \
+} while (0)
+
#define BACK_RING_ATTACH(_r, _s, _i, __size) do { \
(_r)->rsp_prod_pvt = (_i); \
(_r)->req_cons = (_i); \
@@ -170,16 +174,21 @@ struct __name##_back_ring { \
(RING_FREE_REQUESTS(_r) == 0)
/* Test if there are outstanding messages to be processed on a ring. */
-#define RING_HAS_UNCONSUMED_RESPONSES(_r) \
+#define XEN_RING_NR_UNCONSUMED_RESPONSES(_r) \
((_r)->sring->rsp_prod - (_r)->rsp_cons)
-#define RING_HAS_UNCONSUMED_REQUESTS(_r) ({ \
+#define XEN_RING_NR_UNCONSUMED_REQUESTS(_r) ({ \
unsigned int req = (_r)->sring->req_prod - (_r)->req_cons; \
unsigned int rsp = RING_SIZE(_r) - \
((_r)->req_cons - (_r)->rsp_prod_pvt); \
req < rsp ? req : rsp; \
})
+#define RING_HAS_UNCONSUMED_RESPONSES(_r) \
+ (!!XEN_RING_NR_UNCONSUMED_RESPONSES(_r))
+#define RING_HAS_UNCONSUMED_REQUESTS(_r) \
+ (!!XEN_RING_NR_UNCONSUMED_REQUESTS(_r))
+
/* Direct access to individual ring elements, by index. */
#define RING_GET_REQUEST(_r, _idx) \
(&((_r)->sring->ring[((_idx) & (RING_SIZE(_r) - 1))].req))
--
2.35.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v3 14/21] xen/netfront: use xenbus_setup_ring() and xenbus_teardown_ring()
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
2022-05-05 8:16 ` [PATCH v3 04/21] xen/netfront: switch netfront to use INVALID_GRANT_REF Juergen Gross
2022-05-05 8:16 ` [PATCH v3 11/21] xen: update ring.h Juergen Gross
@ 2022-05-05 8:16 ` Juergen Gross
2022-05-06 0:12 ` [PATCH v3 00/21] xen: simplify frontend side ring setup Boris Ostrovsky
2022-05-09 13:23 ` Oleksandr
4 siblings, 0 replies; 6+ messages in thread
From: Juergen Gross @ 2022-05-05 8:16 UTC (permalink / raw)
To: xen-devel, netdev, linux-kernel
Cc: Juergen Gross, Boris Ostrovsky, Stefano Stabellini,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni
Simplify netfront's ring creation and removal via xenbus_setup_ring()
and xenbus_teardown_ring().
Signed-off-by: Juergen Gross <jgross@suse.com>
---
drivers/net/xen-netfront.c | 53 +++++++++-----------------------------
1 file changed, 12 insertions(+), 41 deletions(-)
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
index 966bee2a6902..65ab907aca5a 100644
--- a/drivers/net/xen-netfront.c
+++ b/drivers/net/xen-netfront.c
@@ -1921,8 +1921,7 @@ static int setup_netfront(struct xenbus_device *dev,
struct netfront_queue *queue, unsigned int feature_split_evtchn)
{
struct xen_netif_tx_sring *txs;
- struct xen_netif_rx_sring *rxs = NULL;
- grant_ref_t gref;
+ struct xen_netif_rx_sring *rxs;
int err;
queue->tx_ring_ref = INVALID_GRANT_REF;
@@ -1930,33 +1929,19 @@ static int setup_netfront(struct xenbus_device *dev,
queue->rx.sring = NULL;
queue->tx.sring = NULL;
- txs = (struct xen_netif_tx_sring *)get_zeroed_page(GFP_NOIO | __GFP_HIGH);
- if (!txs) {
- err = -ENOMEM;
- xenbus_dev_fatal(dev, err, "allocating tx ring page");
+ err = xenbus_setup_ring(dev, GFP_NOIO | __GFP_HIGH, (void **)&txs,
+ 1, &queue->tx_ring_ref);
+ if (err)
goto fail;
- }
- SHARED_RING_INIT(txs);
- FRONT_RING_INIT(&queue->tx, txs, XEN_PAGE_SIZE);
- err = xenbus_grant_ring(dev, txs, 1, &gref);
- if (err < 0)
- goto fail;
- queue->tx_ring_ref = gref;
+ XEN_FRONT_RING_INIT(&queue->tx, txs, XEN_PAGE_SIZE);
- rxs = (struct xen_netif_rx_sring *)get_zeroed_page(GFP_NOIO | __GFP_HIGH);
- if (!rxs) {
- err = -ENOMEM;
- xenbus_dev_fatal(dev, err, "allocating rx ring page");
+ err = xenbus_setup_ring(dev, GFP_NOIO | __GFP_HIGH, (void **)&rxs,
+ 1, &queue->rx_ring_ref);
+ if (err)
goto fail;
- }
- SHARED_RING_INIT(rxs);
- FRONT_RING_INIT(&queue->rx, rxs, XEN_PAGE_SIZE);
- err = xenbus_grant_ring(dev, rxs, 1, &gref);
- if (err < 0)
- goto fail;
- queue->rx_ring_ref = gref;
+ XEN_FRONT_RING_INIT(&queue->rx, rxs, XEN_PAGE_SIZE);
if (feature_split_evtchn)
err = setup_netfront_split(queue);
@@ -1972,24 +1957,10 @@ static int setup_netfront(struct xenbus_device *dev,
return 0;
- /* If we fail to setup netfront, it is safe to just revoke access to
- * granted pages because backend is not accessing it at this point.
- */
fail:
- if (queue->rx_ring_ref != INVALID_GRANT_REF) {
- gnttab_end_foreign_access(queue->rx_ring_ref,
- (unsigned long)rxs);
- queue->rx_ring_ref = INVALID_GRANT_REF;
- } else {
- free_page((unsigned long)rxs);
- }
- if (queue->tx_ring_ref != INVALID_GRANT_REF) {
- gnttab_end_foreign_access(queue->tx_ring_ref,
- (unsigned long)txs);
- queue->tx_ring_ref = INVALID_GRANT_REF;
- } else {
- free_page((unsigned long)txs);
- }
+ xenbus_teardown_ring((void **)&queue->rx.sring, 1, &queue->rx_ring_ref);
+ xenbus_teardown_ring((void **)&queue->tx.sring, 1, &queue->tx_ring_ref);
+
return err;
}
--
2.35.3
^ permalink raw reply related [flat|nested] 6+ messages in thread* Re: [PATCH v3 00/21] xen: simplify frontend side ring setup
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
` (2 preceding siblings ...)
2022-05-05 8:16 ` [PATCH v3 14/21] xen/netfront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
@ 2022-05-06 0:12 ` Boris Ostrovsky
2022-05-09 13:23 ` Oleksandr
4 siblings, 0 replies; 6+ messages in thread
From: Boris Ostrovsky @ 2022-05-06 0:12 UTC (permalink / raw)
To: Juergen Gross, xen-devel, linux-kernel, linux-block, netdev,
linux-scsi, linux-usb, dri-devel, linux-integrity, linux-pci
Cc: Stefano Stabellini, Roger Pau Monné, Jens Axboe,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
James E.J. Bottomley, Martin K. Petersen, Greg Kroah-Hartman,
Oleksandr Andrushchenko, David Airlie, Daniel Vetter,
Jaroslav Kysela, Takashi Iwai, alsa-devel, Peter Huewe,
Jarkko Sakkinen, Jason Gunthorpe, Bjorn Helgaas
On 5/5/22 4:16 AM, Juergen Gross wrote:
> Many Xen PV frontends share similar code for setting up a ring page
> (allocating and granting access for the backend) and for tearing it
> down.
>
> Create new service functions doing all needed steps in one go.
>
> This requires all frontends to use a common value for an invalid
> grant reference in order to make the functions idempotent.
>
> Changes in V3:
> - new patches 1 and 2, comments addressed
>
> Changes in V2:
> - new patch 9 and related changes in patches 10-18
For the patches that I was explicitly copied on:
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
^ permalink raw reply [flat|nested] 6+ messages in thread* Re: [PATCH v3 00/21] xen: simplify frontend side ring setup
2022-05-05 8:16 [PATCH v3 00/21] xen: simplify frontend side ring setup Juergen Gross
` (3 preceding siblings ...)
2022-05-06 0:12 ` [PATCH v3 00/21] xen: simplify frontend side ring setup Boris Ostrovsky
@ 2022-05-09 13:23 ` Oleksandr
4 siblings, 0 replies; 6+ messages in thread
From: Oleksandr @ 2022-05-09 13:23 UTC (permalink / raw)
To: Juergen Gross, xen-devel, linux-kernel, linux-block, netdev,
linux-scsi, linux-usb, dri-devel, linux-integrity, linux-pci
Cc: Boris Ostrovsky, Stefano Stabellini, Roger Pau Monné,
Jens Axboe, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, James E.J. Bottomley, Martin K. Petersen,
Greg Kroah-Hartman, Oleksandr Andrushchenko, David Airlie,
Daniel Vetter, Jaroslav Kysela, Takashi Iwai, alsa-devel,
Peter Huewe, Jarkko Sakkinen, Jason Gunthorpe, Bjorn Helgaas
On 05.05.22 11:16, Juergen Gross wrote:
Hello Juergen.
> Many Xen PV frontends share similar code for setting up a ring page
> (allocating and granting access for the backend) and for tearing it
> down.
>
> Create new service functions doing all needed steps in one go.
>
> This requires all frontends to use a common value for an invalid
> grant reference in order to make the functions idempotent.
>
> Changes in V3:
> - new patches 1 and 2, comments addressed
>
> Changes in V2:
> - new patch 9 and related changes in patches 10-18
>
> Juergen Gross (21):
> xen: update grant_table.h
> xen/grant-table: never put a reserved grant on the free list
> xen/blkfront: switch blkfront to use INVALID_GRANT_REF
> xen/netfront: switch netfront to use INVALID_GRANT_REF
> xen/scsifront: remove unused GRANT_INVALID_REF definition
> xen/usb: switch xen-hcd to use INVALID_GRANT_REF
> xen/drm: switch xen_drm_front to use INVALID_GRANT_REF
> xen/sound: switch xen_snd_front to use INVALID_GRANT_REF
> xen/dmabuf: switch gntdev-dmabuf to use INVALID_GRANT_REF
> xen/shbuf: switch xen-front-pgdir-shbuf to use INVALID_GRANT_REF
> xen: update ring.h
> xen/xenbus: add xenbus_setup_ring() service function
> xen/blkfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/netfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/tpmfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/drmfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/pcifront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/scsifront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/usbfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/sndfront: use xenbus_setup_ring() and xenbus_teardown_ring()
> xen/xenbus: eliminate xenbus_grant_ring()
For the patches that touch PV display (#07, #16), PV sound (#08, #20)
and shared buffer framework used by both frontends (#10):
Reviewed-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Also I didn't see any issues with these frontends while testing on Arm64
based board.
So, you can also add:
[Arm64 only]
Tested-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Thanks!
>
> drivers/block/xen-blkfront.c | 57 +++----
> drivers/char/tpm/xen-tpmfront.c | 18 +--
> drivers/gpu/drm/xen/xen_drm_front.h | 9 --
> drivers/gpu/drm/xen/xen_drm_front_evtchnl.c | 43 ++----
> drivers/net/xen-netfront.c | 85 ++++-------
> drivers/pci/xen-pcifront.c | 19 +--
> drivers/scsi/xen-scsifront.c | 31 +---
> drivers/usb/host/xen-hcd.c | 65 ++------
> drivers/xen/gntdev-dmabuf.c | 13 +-
> drivers/xen/grant-table.c | 12 +-
> drivers/xen/xen-front-pgdir-shbuf.c | 18 +--
> drivers/xen/xenbus/xenbus_client.c | 82 +++++++---
> include/xen/grant_table.h | 2 -
> include/xen/interface/grant_table.h | 161 ++++++++++++--------
> include/xen/interface/io/ring.h | 19 ++-
> include/xen/xenbus.h | 4 +-
> sound/xen/xen_snd_front_evtchnl.c | 44 ++----
> sound/xen/xen_snd_front_evtchnl.h | 9 --
> 18 files changed, 287 insertions(+), 404 deletions(-)
>
--
Regards,
Oleksandr Tyshchenko
^ permalink raw reply [flat|nested] 6+ messages in thread