* [PATCH v3 03/21] xen/blkfront: switch blkfront 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-09 8:20 ` Roger Pau Monné
2022-05-05 8:16 ` [PATCH v3 13/21] xen/blkfront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
` (2 subsequent siblings)
3 siblings, 1 reply; 7+ messages in thread
From: Juergen Gross @ 2022-05-05 8:16 UTC (permalink / raw)
To: xen-devel, linux-block, linux-kernel
Cc: Juergen Gross, Roger Pau Monné, Boris Ostrovsky,
Stefano Stabellini, Jens Axboe
Instead of using a private macro for an invalid grant reference use
the common one.
Signed-off-by: Juergen Gross <jgross@suse.com>
---
drivers/block/xen-blkfront.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 003056d4f7f5..7f35e30e626a 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -229,8 +229,6 @@ static unsigned int nr_minors;
static unsigned long *minors;
static DEFINE_SPINLOCK(minor_lock);
-#define GRANT_INVALID_REF 0
-
#define PARTS_PER_DISK 16
#define PARTS_PER_EXT_DISK 256
@@ -321,7 +319,7 @@ static int fill_grant_buffer(struct blkfront_ring_info *rinfo, int num)
gnt_list_entry->page = granted_page;
}
- gnt_list_entry->gref = GRANT_INVALID_REF;
+ gnt_list_entry->gref = INVALID_GRANT_REF;
list_add(&gnt_list_entry->node, &rinfo->grants);
i++;
}
@@ -350,7 +348,7 @@ static struct grant *get_free_grant(struct blkfront_ring_info *rinfo)
node);
list_del(&gnt_list_entry->node);
- if (gnt_list_entry->gref != GRANT_INVALID_REF)
+ if (gnt_list_entry->gref != INVALID_GRANT_REF)
rinfo->persistent_gnts_c--;
return gnt_list_entry;
@@ -372,7 +370,7 @@ static struct grant *get_grant(grant_ref_t *gref_head,
struct grant *gnt_list_entry = get_free_grant(rinfo);
struct blkfront_info *info = rinfo->dev_info;
- if (gnt_list_entry->gref != GRANT_INVALID_REF)
+ if (gnt_list_entry->gref != INVALID_GRANT_REF)
return gnt_list_entry;
/* Assign a gref to this page */
@@ -396,7 +394,7 @@ static struct grant *get_indirect_grant(grant_ref_t *gref_head,
struct grant *gnt_list_entry = get_free_grant(rinfo);
struct blkfront_info *info = rinfo->dev_info;
- if (gnt_list_entry->gref != GRANT_INVALID_REF)
+ if (gnt_list_entry->gref != INVALID_GRANT_REF)
return gnt_list_entry;
/* Assign a gref to this page */
@@ -1221,7 +1219,7 @@ static void blkif_free_ring(struct blkfront_ring_info *rinfo)
list_for_each_entry_safe(persistent_gnt, n,
&rinfo->grants, node) {
list_del(&persistent_gnt->node);
- if (persistent_gnt->gref != GRANT_INVALID_REF) {
+ if (persistent_gnt->gref != INVALID_GRANT_REF) {
gnttab_end_foreign_access(persistent_gnt->gref,
0UL);
rinfo->persistent_gnts_c--;
@@ -1283,9 +1281,9 @@ static void blkif_free_ring(struct blkfront_ring_info *rinfo)
/* Free resources associated with old device channel. */
for (i = 0; i < info->nr_ring_pages; i++) {
- if (rinfo->ring_ref[i] != GRANT_INVALID_REF) {
+ if (rinfo->ring_ref[i] != INVALID_GRANT_REF) {
gnttab_end_foreign_access(rinfo->ring_ref[i], 0);
- rinfo->ring_ref[i] = GRANT_INVALID_REF;
+ rinfo->ring_ref[i] = INVALID_GRANT_REF;
}
}
free_pages_exact(rinfo->ring.sring,
@@ -1475,7 +1473,7 @@ static int blkif_completion(unsigned long *id,
* to the tail of the list, so it will not be picked
* again unless we run out of persistent grants.
*/
- s->grants_used[i]->gref = GRANT_INVALID_REF;
+ s->grants_used[i]->gref = INVALID_GRANT_REF;
list_add_tail(&s->grants_used[i]->node, &rinfo->grants);
}
}
@@ -1500,7 +1498,7 @@ static int blkif_completion(unsigned long *id,
indirect_page = s->indirect_grants[i]->page;
list_add(&indirect_page->lru, &rinfo->indirect_pages);
}
- s->indirect_grants[i]->gref = GRANT_INVALID_REF;
+ s->indirect_grants[i]->gref = INVALID_GRANT_REF;
list_add_tail(&s->indirect_grants[i]->node, &rinfo->grants);
}
}
@@ -1687,7 +1685,7 @@ static int setup_blkring(struct xenbus_device *dev,
grant_ref_t gref[XENBUS_MAX_RING_GRANTS];
for (i = 0; i < info->nr_ring_pages; i++)
- rinfo->ring_ref[i] = GRANT_INVALID_REF;
+ rinfo->ring_ref[i] = INVALID_GRANT_REF;
sring = alloc_pages_exact(ring_size, GFP_NOIO);
if (!sring) {
@@ -2544,13 +2542,13 @@ static void purge_persistent_grants(struct blkfront_info *info)
list_for_each_entry_safe(gnt_list_entry, tmp, &rinfo->grants,
node) {
- if (gnt_list_entry->gref == GRANT_INVALID_REF ||
+ if (gnt_list_entry->gref == INVALID_GRANT_REF ||
!gnttab_try_end_foreign_access(gnt_list_entry->gref))
continue;
list_del(&gnt_list_entry->node);
rinfo->persistent_gnts_c--;
- gnt_list_entry->gref = GRANT_INVALID_REF;
+ gnt_list_entry->gref = INVALID_GRANT_REF;
list_add_tail(&gnt_list_entry->node, &grants);
}
--
2.35.3
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v3 03/21] xen/blkfront: switch blkfront to use INVALID_GRANT_REF
2022-05-05 8:16 ` [PATCH v3 03/21] xen/blkfront: switch blkfront to use INVALID_GRANT_REF Juergen Gross
@ 2022-05-09 8:20 ` Roger Pau Monné
0 siblings, 0 replies; 7+ messages in thread
From: Roger Pau Monné @ 2022-05-09 8:20 UTC (permalink / raw)
To: Juergen Gross
Cc: xen-devel, linux-block, linux-kernel, Boris Ostrovsky,
Stefano Stabellini, Jens Axboe
On Thu, May 05, 2022 at 10:16:22AM +0200, Juergen Gross wrote:
> Instead of using a private macro for an invalid grant reference use
> the common one.
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Thanks, Roger.
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v3 13/21] xen/blkfront: 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 03/21] xen/blkfront: switch blkfront to use INVALID_GRANT_REF Juergen Gross
@ 2022-05-05 8:16 ` Juergen Gross
2022-05-09 8:42 ` Roger Pau Monné
2022-05-06 0:12 ` [PATCH v3 00/21] xen: simplify frontend side ring setup Boris Ostrovsky
2022-05-09 13:23 ` Oleksandr
3 siblings, 1 reply; 7+ messages in thread
From: Juergen Gross @ 2022-05-05 8:16 UTC (permalink / raw)
To: xen-devel, linux-block, linux-kernel
Cc: Juergen Gross, Roger Pau Monné, Boris Ostrovsky,
Stefano Stabellini, Jens Axboe
Simplify blkfront's ring creation and removal via xenbus_setup_ring()
and xenbus_teardown_ring().
Signed-off-by: Juergen Gross <jgross@suse.com>
---
drivers/block/xen-blkfront.c | 37 ++++++++----------------------------
1 file changed, 8 insertions(+), 29 deletions(-)
diff --git a/drivers/block/xen-blkfront.c b/drivers/block/xen-blkfront.c
index 7f35e30e626a..bd7b34f29193 100644
--- a/drivers/block/xen-blkfront.c
+++ b/drivers/block/xen-blkfront.c
@@ -1280,15 +1280,8 @@ static void blkif_free_ring(struct blkfront_ring_info *rinfo)
flush_work(&rinfo->work);
/* Free resources associated with old device channel. */
- for (i = 0; i < info->nr_ring_pages; i++) {
- if (rinfo->ring_ref[i] != INVALID_GRANT_REF) {
- gnttab_end_foreign_access(rinfo->ring_ref[i], 0);
- rinfo->ring_ref[i] = INVALID_GRANT_REF;
- }
- }
- free_pages_exact(rinfo->ring.sring,
- info->nr_ring_pages * XEN_PAGE_SIZE);
- rinfo->ring.sring = NULL;
+ xenbus_teardown_ring((void **)&rinfo->ring.sring, info->nr_ring_pages,
+ rinfo->ring_ref);
if (rinfo->irq)
unbind_from_irqhandler(rinfo->irq, rinfo);
@@ -1679,30 +1672,16 @@ static int setup_blkring(struct xenbus_device *dev,
struct blkfront_ring_info *rinfo)
{
struct blkif_sring *sring;
- int err, i;
+ int err;
struct blkfront_info *info = rinfo->dev_info;
unsigned long ring_size = info->nr_ring_pages * XEN_PAGE_SIZE;
- grant_ref_t gref[XENBUS_MAX_RING_GRANTS];
-
- for (i = 0; i < info->nr_ring_pages; i++)
- rinfo->ring_ref[i] = INVALID_GRANT_REF;
- sring = alloc_pages_exact(ring_size, GFP_NOIO);
- if (!sring) {
- xenbus_dev_fatal(dev, -ENOMEM, "allocating shared ring");
- return -ENOMEM;
- }
- SHARED_RING_INIT(sring);
- FRONT_RING_INIT(&rinfo->ring, sring, ring_size);
-
- err = xenbus_grant_ring(dev, rinfo->ring.sring, info->nr_ring_pages, gref);
- if (err < 0) {
- free_pages_exact(sring, ring_size);
- rinfo->ring.sring = NULL;
+ err = xenbus_setup_ring(dev, GFP_NOIO, (void **)&sring,
+ info->nr_ring_pages, rinfo->ring_ref);
+ if (err)
goto fail;
- }
- for (i = 0; i < info->nr_ring_pages; i++)
- rinfo->ring_ref[i] = gref[i];
+
+ XEN_FRONT_RING_INIT(&rinfo->ring, sring, ring_size);
err = xenbus_alloc_evtchn(dev, &rinfo->evtchn);
if (err)
--
2.35.3
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v3 13/21] xen/blkfront: use xenbus_setup_ring() and xenbus_teardown_ring()
2022-05-05 8:16 ` [PATCH v3 13/21] xen/blkfront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
@ 2022-05-09 8:42 ` Roger Pau Monné
0 siblings, 0 replies; 7+ messages in thread
From: Roger Pau Monné @ 2022-05-09 8:42 UTC (permalink / raw)
To: Juergen Gross
Cc: xen-devel, linux-block, linux-kernel, Boris Ostrovsky,
Stefano Stabellini, Jens Axboe
On Thu, May 05, 2022 at 10:16:32AM +0200, Juergen Gross wrote:
> Simplify blkfront's ring creation and removal via xenbus_setup_ring()
> and xenbus_teardown_ring().
>
> Signed-off-by: Juergen Gross <jgross@suse.com>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Thanks, Roger.
^ permalink raw reply [flat|nested] 7+ 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
2022-05-05 8:16 ` [PATCH v3 03/21] xen/blkfront: switch blkfront to use INVALID_GRANT_REF Juergen Gross
2022-05-05 8:16 ` [PATCH v3 13/21] xen/blkfront: use xenbus_setup_ring() and xenbus_teardown_ring() Juergen Gross
@ 2022-05-06 0:12 ` Boris Ostrovsky
2022-05-09 13:23 ` Oleksandr
3 siblings, 0 replies; 7+ 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] 7+ 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-06 0:12 ` [PATCH v3 00/21] xen: simplify frontend side ring setup Boris Ostrovsky
@ 2022-05-09 13:23 ` Oleksandr
3 siblings, 0 replies; 7+ 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] 7+ messages in thread