From: Michal Orzel <michal.orzel@amd.com>
To: Vikram Garhwal <vikram.garhwal@amd.com>,
<xen-devel@lists.xenproject.org>
Cc: <sstabellini@kernel.org>, <jbeulich@suse.com>,
Julien Grall <julien@xen.org>,
Andrew Cooper <andrew.cooper3@citrix.com>,
George Dunlap <george.dunlap@citrix.com>, Wei Liu <wl@xen.org>
Subject: Re: [XEN][PATCH v7 09/19] xen/iommu: Move spin_lock from iommu_dt_device_is_assigned to caller
Date: Fri, 2 Jun 2023 09:45:17 +0200 [thread overview]
Message-ID: <a818b17e-c471-7920-d650-fa9736b514f3@amd.com> (raw)
In-Reply-To: <20230602004824.20731-10-vikram.garhwal@amd.com>
On 02/06/2023 02:48, Vikram Garhwal wrote:
> Rename iommu_dt_device_is_assigned() to iommu_dt_device_is_assigned_locked().
> Remove static type so this can also be used by SMMU drivers to check if the
> device is being used before removing.
>
> Moving spin_lock to caller was done to prevent the concurrent access to
> iommu_dt_device_is_assigned while doing add/remove/assign/deassign.
Would be nice to explain the need of putting a prototype into a private header.
>
> Signed-off-by: Vikram Garhwal <vikram.garhwal@amd.com>
>
> ---
> Changes from v6:
> Created a private header and moved iommu_dt_device_is_assigned() to header.
> ---
> xen/drivers/passthrough/device_tree.c | 20 ++++++++++++++++----
> xen/include/xen/iommu-private.h | 27 +++++++++++++++++++++++++++
> 2 files changed, 43 insertions(+), 4 deletions(-)
> create mode 100644 xen/include/xen/iommu-private.h
>
> diff --git a/xen/drivers/passthrough/device_tree.c b/xen/drivers/passthrough/device_tree.c
> index 1c32d7b50c..52e370db01 100644
> --- a/xen/drivers/passthrough/device_tree.c
> +++ b/xen/drivers/passthrough/device_tree.c
> @@ -18,6 +18,7 @@
> #include <xen/device_tree.h>
> #include <xen/guest_access.h>
> #include <xen/iommu.h>
> +#include <xen/iommu-private.h>
> #include <xen/lib.h>
> #include <xen/sched.h>
> #include <xsm/xsm.h>
> @@ -83,16 +84,14 @@ fail:
> return rc;
> }
>
> -static bool_t iommu_dt_device_is_assigned(const struct dt_device_node *dev)
I would write a comment that this function expects to be called with dtdevs_lock locked.
> +bool_t iommu_dt_device_is_assigned_locked(const struct dt_device_node *dev)
> {
> bool_t assigned = 0;
>
> if ( !dt_device_is_protected(dev) )
> return 0;
>
> - spin_lock(&dtdevs_lock);
> assigned = !list_empty(&dev->domain_list);
> - spin_unlock(&dtdevs_lock);
>
> return assigned;
> }
> @@ -213,27 +212,40 @@ int iommu_do_dt_domctl(struct xen_domctl *domctl, struct domain *d,
> if ( (d && d->is_dying) || domctl->u.assign_device.flags )
> break;
>
> + spin_lock(&dtdevs_lock);
> +
> ret = dt_find_node_by_gpath(domctl->u.assign_device.u.dt.path,
> domctl->u.assign_device.u.dt.size,
> &dev);
> if ( ret )
> + {
> + spin_unlock(&dtdevs_lock);
> break;
> + }
>
> ret = xsm_assign_dtdevice(XSM_HOOK, d, dt_node_full_name(dev));
> if ( ret )
> + {
> + spin_unlock(&dtdevs_lock);
> break;
> + }
>
> if ( domctl->cmd == XEN_DOMCTL_test_assign_device )
> {
> - if ( iommu_dt_device_is_assigned(dev) )
> +
> + if ( iommu_dt_device_is_assigned_locked(dev) )
> {
> printk(XENLOG_G_ERR "%s already assigned.\n",
> dt_node_full_name(dev));
> ret = -EINVAL;
> }
> +
> + spin_unlock(&dtdevs_lock);
> break;
> }
>
> + spin_unlock(&dtdevs_lock);
> +
> if ( d == dom_io )
> return -EINVAL;
>
> diff --git a/xen/include/xen/iommu-private.h b/xen/include/xen/iommu-private.h
> new file mode 100644
> index 0000000000..5615decaff
> --- /dev/null
> +++ b/xen/include/xen/iommu-private.h
> @@ -0,0 +1,27 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> + /*
incorrect indentation (<< 1)
> + * xen/iommu-private.h
> + *
> + *
> + * Copyright (C) 2023, Advanced Micro Devices, Inc. All Rights Reserved.
> + * Written by Vikram Garhwal <vikram.garhwal@amd.com>
I'm not sure if placing the copyright is appropriate, given a single prototype for a function
not really implemented by you with just spinlocks removed. But I might be wrong.
> + *
> + */
> +#ifndef __XEN_IOMMU_PRIVATE_H__
> +#define __XEN_IOMMU_PRIVATE_H__
> +
> +#ifdef CONFIG_HAS_DEVICE_TREE
> +#include <xen/device_tree.h>
> +bool_t iommu_dt_device_is_assigned_locked(const struct dt_device_node *dev);
> +#endif
> +
> +#endif /* __XEN_IOMMU_PRIVATE_H__ */
empty line here please
> +/*
> + * Local variables:
> + * mode: C
> + * c-file-style: "BSD"
> + * c-basic-offset: 4
> + * tab-width: 4
> + * indent-tabs-mode: nil
> + * End:
> + */
~Michal
next prev parent reply other threads:[~2023-06-02 7:45 UTC|newest]
Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-02 0:48 [XEN][PATCH v7 00/19] dynamic node programming using overlay dtbo Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 01/19] common/device_tree: handle memory allocation failure in __unflatten_device_tree() Vikram Garhwal
2023-06-02 7:09 ` Michal Orzel
2023-06-05 18:54 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 02/19] common/device_tree.c: unflatten_device_tree() propagate errors Vikram Garhwal
2023-06-02 7:14 ` Michal Orzel
2023-06-06 19:08 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 03/19] xen/arm/device: Remove __init from function type Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 04/19] common/device_tree: change __unflatten_device_tree() type Vikram Garhwal
2023-06-02 7:15 ` Michal Orzel
2023-06-05 19:04 ` Julien Grall
2023-06-06 19:09 ` Vikram Garhwal
2023-08-16 23:49 ` Vikram Garhwal
2023-08-17 7:59 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 05/19] xen/arm: Add CONFIG_OVERLAY_DTB Vikram Garhwal
2023-06-02 1:43 ` Henry Wang
2023-06-02 7:16 ` Michal Orzel
2023-06-02 9:06 ` Jan Beulich
2023-06-02 9:22 ` Henry Wang
2023-06-06 19:11 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 06/19] libfdt: Keep fdt functions after init for CONFIG_OVERLAY_DTB Vikram Garhwal
2023-06-02 9:09 ` Jan Beulich
2023-06-02 0:48 ` [XEN][PATCH v7 07/19] libfdt: overlay: change overlay_get_target() Vikram Garhwal
2023-06-05 19:05 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 08/19] xen/device-tree: Add device_tree_find_node_by_path() to find nodes in device tree Vikram Garhwal
2023-06-02 1:52 ` Henry Wang
2023-06-02 7:24 ` Michal Orzel
2023-06-05 19:12 ` Julien Grall
2023-06-06 20:29 ` Vikram Garhwal
2023-06-07 6:22 ` Michal Orzel
2023-06-07 6:27 ` Henry Wang
2023-06-07 8:30 ` Luca Fancellu
2023-06-02 0:48 ` [XEN][PATCH v7 09/19] xen/iommu: Move spin_lock from iommu_dt_device_is_assigned to caller Vikram Garhwal
2023-06-02 7:45 ` Michal Orzel [this message]
2023-06-05 19:22 ` Julien Grall
2023-06-06 20:33 ` Vikram Garhwal
2023-06-02 9:19 ` Jan Beulich
2023-06-02 9:26 ` Jan Beulich
2023-06-05 19:19 ` Julien Grall
2023-08-16 23:55 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 10/19] xen/iommu: protect iommu_add_dt_device() with dtdevs_lock Vikram Garhwal
2023-06-02 9:21 ` Jan Beulich
2023-06-05 19:25 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 11/19] xen/iommu: Introduce iommu_remove_dt_device() Vikram Garhwal
2023-06-02 9:22 ` Jan Beulich
2023-06-05 19:37 ` Julien Grall
2023-08-16 23:58 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 12/19] xen/smmu: Add remove_device callback for smmu_iommu ops Vikram Garhwal
2023-06-02 7:47 ` Michal Orzel
2023-06-02 0:48 ` [XEN][PATCH v7 13/19] asm/smp.h: Fix circular dependency for device_tree.h and rwlock.h Vikram Garhwal
2023-06-05 19:46 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 14/19] common/device_tree: Add rwlock for dt_host Vikram Garhwal
2023-06-02 1:58 ` Henry Wang
2023-06-05 7:10 ` Michal Orzel
2023-06-05 19:52 ` Julien Grall
2023-08-16 23:59 ` Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 15/19] xen/arm: Implement device tree node removal functionalities Vikram Garhwal
2023-06-02 9:31 ` Jan Beulich
2023-06-05 7:52 ` Michal Orzel
2023-06-05 21:07 ` Julien Grall
2023-08-17 0:31 ` Vikram Garhwal
2023-08-17 8:14 ` Julien Grall
2023-06-02 0:48 ` [XEN][PATCH v7 16/19] xen/arm: Implement device tree node addition functionalities Vikram Garhwal
2023-06-05 8:35 ` Michal Orzel
2023-06-02 0:48 ` [XEN][PATCH v7 17/19] tools/libs/ctrl: Implement new xc interfaces for dt overlay Vikram Garhwal
2023-06-12 11:17 ` Anthony PERARD
2023-06-02 0:48 ` [XEN][PATCH v7 18/19] tools/libs/light: Implement new libxl functions for device tree overlay ops Vikram Garhwal
2023-06-02 0:48 ` [XEN][PATCH v7 19/19] tools/xl: Add new xl command overlay for device tree overlay support Vikram Garhwal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a818b17e-c471-7920-d650-fa9736b514f3@amd.com \
--to=michal.orzel@amd.com \
--cc=andrew.cooper3@citrix.com \
--cc=george.dunlap@citrix.com \
--cc=jbeulich@suse.com \
--cc=julien@xen.org \
--cc=sstabellini@kernel.org \
--cc=vikram.garhwal@amd.com \
--cc=wl@xen.org \
--cc=xen-devel@lists.xenproject.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).