|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT PATCH 7/9] plat/xen/drivers/9p: Add connection callbacks
Reviewed-by: Costin Lupu <costin.lupu@xxxxxxxxx>
On 9/7/19 1:21 PM, Vlad-Andrei BĂDOIU (78692) wrote:
> 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. */
>
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |