[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 7/9] plat/xen/drivers/9p: Add connection callbacks
From: Cristian Banu <cristb@xxxxxxxxx> This patch adds connection and disconnection callbacks to the xen 9P transport driver. Signed-off-by: Cristian Banu <cristb@xxxxxxxxx> --- plat/xen/drivers/9p/9pfront.c | 51 ++++++++++++++++++++++++++++++----- plat/xen/drivers/9p/9pfront.h | 3 ++- 2 files changed, 47 insertions(+), 7 deletions(-) diff --git a/plat/xen/drivers/9p/9pfront.c b/plat/xen/drivers/9p/9pfront.c index 12591d07..1a8b49c5 100644 --- a/plat/xen/drivers/9p/9pfront.c +++ b/plat/xen/drivers/9p/9pfront.c @@ -190,15 +190,55 @@ out: return rc; } -static int p9front_connect(struct uk_9pdev *p9dev __unused, - const char *device_identifier __unused, +static int p9front_connect(struct uk_9pdev *p9dev, + const char *device_identifier, const char *mount_args __unused) { - return 0; + struct p9front_dev *p9fdev = NULL; + int rc = 0; + int found = 0; + + ukarch_spin_lock(&p9front_device_list_lock); + uk_list_for_each_entry(p9fdev, &p9front_device_list, _list) { + if (!strcmp(p9fdev->tag, device_identifier)) { + if (p9fdev->p9dev != NULL) { + rc = -EBUSY; + goto out; + } + found = 1; + break; + } + } + + if (!found) { + rc = -ENODEV; + goto out; + } + + /* The msize is given by the size of the flex ring. */ + p9dev->max_msize = XEN_FLEX_RING_SIZE(p9fdev->ring_order); + + p9fdev->p9dev = p9dev; + p9dev->priv = p9fdev; + rc = 0; + found = 1; + +out: + ukarch_spin_unlock(&p9front_device_list_lock); + return rc; } static int p9front_disconnect(struct uk_9pdev *p9dev __unused) { + struct p9front_dev *p9fdev; + + UK_ASSERT(p9dev); + p9fdev = p9dev->priv; + + ukarch_spin_lock(&p9front_device_list_lock); + p9fdev->p9dev = NULL; + ukarch_spin_unlock(&p9front_device_list_lock); + return 0; } @@ -236,7 +276,6 @@ static int p9front_add_dev(struct xenbus_device *xendev) { struct p9front_dev *p9fdev; int rc; - unsigned long flags; p9fdev = uk_calloc(a, 1, sizeof(*p9fdev)); if (!p9fdev) { @@ -271,9 +310,9 @@ static int p9front_add_dev(struct xenbus_device *xendev) } rc = 0; - ukplat_spin_lock_irqsave(&p9front_device_list_lock, flags); + ukarch_spin_lock(&p9front_device_list_lock); uk_list_add(&p9fdev->_list, &p9front_device_list); - ukplat_spin_unlock_irqrestore(&p9front_device_list_lock, flags); + ukarch_spin_unlock(&p9front_device_list_lock); uk_pr_info(DRIVER_NAME": Connected 9pfront dev: tag=%s,rings=%d,order=%d\n", p9fdev->tag, p9fdev->nb_rings, p9fdev->ring_order); diff --git a/plat/xen/drivers/9p/9pfront.h b/plat/xen/drivers/9p/9pfront.h index 97c986d8..7cea61c5 100644 --- a/plat/xen/drivers/9p/9pfront.h +++ b/plat/xen/drivers/9p/9pfront.h @@ -64,6 +64,8 @@ struct p9front_dev_ring { struct p9front_dev { /* Xenbus device. */ struct xenbus_device *xendev; + /* 9P API device. */ + struct uk_9pdev *p9dev; /* Entry within the 9pfront device list. */ struct uk_list_head _list; /* Number of maximum rings, read from xenstore. */ @@ -72,7 +74,6 @@ struct p9front_dev { int max_ring_page_order; /* Mount tag for this device, read from xenstore. */ char *tag; - /* Number of rings to use. */ int nb_rings; /* Ring page order. */ -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |