* [PATCHv2] 9p/xen: Use array for data rings
@ 2026-09-13 19:27 Rosen Penev
0 siblings, 0 replies; only message in thread
From: Rosen Penev @ 2026-09-13 19:27 UTC (permalink / raw)
To: v9fs
Cc: Eric Van Hensbergen, Latchesar Ionkov, Dominique Martinet,
Christian Schoenebeck, open list
Store the fixed set of Xen 9p data rings in the frontend private
allocation instead of allocating a separate rings array.
This keeps the data ring storage tied to the frontend lifetime and
simplifies the allocation and cleanup paths.
Assisted-by: Codex:GPT-5.5
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v2: switch to normal array.
net/9p/trans_xen.c | 66 ++++++++++++++++++++--------------------------
1 file changed, 29 insertions(+), 37 deletions(-)
diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c
index f9fb2db7a066..1e87a55e6042 100644
--- a/net/9p/trans_xen.c
+++ b/net/9p/trans_xen.c
@@ -55,7 +55,7 @@ struct xen_9pfs_front_priv {
char *tag;
struct p9_client *client;
- struct xen_9pfs_dataring *rings;
+ struct xen_9pfs_dataring rings[XEN_9PFS_NUM_RINGS];
};
static LIST_HEAD(xen_9pfs_devs);
@@ -277,41 +277,38 @@ static void xen_9pfs_front_free(struct xen_9pfs_front_priv *priv)
{
int i, j;
- if (priv->rings) {
- for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
- struct xen_9pfs_dataring *ring = &priv->rings[i];
+ for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
+ struct xen_9pfs_dataring *ring = &priv->rings[i];
- cancel_work_sync(&ring->work);
+ cancel_work_sync(&ring->work);
- if (!ring->intf)
- break;
- if (ring->irq >= 0) {
- unbind_from_irqhandler(ring->irq, ring);
- ring->irq = -1;
- }
- if (ring->data.in) {
- for (j = 0; j < (1 << ring->intf->ring_order);
- j++) {
- grant_ref_t ref;
-
- ref = ring->intf->ref[j];
- gnttab_end_foreign_access(ref, NULL);
- ring->intf->ref[j] = INVALID_GRANT_REF;
- }
- free_pages_exact(ring->data.in,
- 1UL << (ring->intf->ring_order +
- XEN_PAGE_SHIFT));
- ring->data.in = NULL;
- ring->data.out = NULL;
- }
- if (ring->ref != INVALID_GRANT_REF) {
- gnttab_end_foreign_access(ring->ref, NULL);
- ring->ref = INVALID_GRANT_REF;
+ if (!ring->intf)
+ break;
+ if (ring->irq >= 0) {
+ unbind_from_irqhandler(ring->irq, ring);
+ ring->irq = -1;
+ }
+ if (ring->data.in) {
+ for (j = 0; j < (1 << ring->intf->ring_order);
+ j++) {
+ grant_ref_t ref;
+
+ ref = ring->intf->ref[j];
+ gnttab_end_foreign_access(ref, NULL);
+ ring->intf->ref[j] = INVALID_GRANT_REF;
}
- free_page((unsigned long)ring->intf);
- ring->intf = NULL;
+ free_pages_exact(ring->data.in,
+ 1UL << (ring->intf->ring_order +
+ XEN_PAGE_SHIFT));
+ ring->data.in = NULL;
+ ring->data.out = NULL;
}
- kfree(priv->rings);
+ if (ring->ref != INVALID_GRANT_REF) {
+ gnttab_end_foreign_access(ring->ref, NULL);
+ ring->ref = INVALID_GRANT_REF;
+ }
+ free_page((unsigned long)ring->intf);
+ ring->intf = NULL;
}
kfree(priv->tag);
kfree(priv);
@@ -450,11 +447,6 @@ static int xen_9pfs_front_init(struct xenbus_device *dev)
if (!priv)
return -ENOMEM;
priv->dev = dev;
- priv->rings = kzalloc_objs(*priv->rings, XEN_9PFS_NUM_RINGS);
- if (!priv->rings) {
- kfree(priv);
- return -ENOMEM;
- }
for (i = 0; i < XEN_9PFS_NUM_RINGS; i++) {
priv->rings[i].priv = priv;
--
2.55.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-13 19:27 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-13 19:27 [PATCHv2] 9p/xen: Use array for data rings Rosen Penev
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.