|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 9/9] xen/asm-generic: introduce generic device.h
Hi Julien,
On Thu, 2023-12-21 at 19:38 +0000, Julien Grall wrote:
> Hi,
>
> On 20/12/2023 14:08, Oleksii Kurochko wrote:
> > Arm, PPC and RISC-V use the same device.h thereby device.h
> > was moved to asm-generic. Arm's device.h was taken as a base with
> > the following changes:
> > - #ifdef PCI related things.
> > - #ifdef ACPI related things.
> > - Rename #ifdef guards.
> > - Add SPDX tag.
> > - #ifdef CONFIG_HAS_DEVICE_TREE related things.
> > - #ifdef-ing iommu related things with CONFIG_HAS_PASSTHROUGH.
> >
> > Also Arm and PPC are switched to asm-generic version of device.h
> >
> > Signed-off-by: Oleksii Kurochko <oleksii.kurochko@xxxxxxxxx>
> > ---
> >
> > Jan wrote the following:
> > Overall I think there are too many changes done all in one
> > go here.
> > But it's mostly Arm which is affected, so I'll leave
> > judging about that
> > to the Arm maintainers.
> >
> > Arm maintainers, will it be fine for you to not split the
> > patch?
>
> So in general I agree with Jan, patches should be kept small so they
> are
> easy to review.
>
> Given the discussion has been on-going for a while (we are at v6), I
> will give an attempt to review the patch as-is. But in the future,
> please try to split. The smaller it is, the easier to review. For
> code
> movement and refactoring, I tend to first have a few refactoring
> patches
> and then move the code in a separate patch. So it is easier to spot
> the
> differences.
Thanks, I'll separate the patch.
>
> > ---
> > Changes in V6:
> > - Rebase only.
> > ---
> > Changes in V5:
> > - Removed generated file: xen/include/headers++.chk.new
> > - Removed pointless #ifdef CONFIG_HAS_DEVICE_TREE ... #endif for
> > PPC as
> > CONFIG_HAS_DEVICE_TREE will be always used for PPC.
> > ---
> > Changes in V4:
> > - Updated the commit message
> > - Switched Arm and PPC to asm-generic version of device.h
> > - Replaced HAS_PCI with CONFIG_HAS_PCI
> > - ifdef-ing iommu filed of dev_archdata struct with
> > CONFIG_HAS_PASSTHROUGH
> > - ifdef-ing iommu_fwspec of device struct with
> > CONFIG_HAS_PASSTHROUGH
> > - ifdef-ing DT related things with CONFIG_HAS_DEVICE_TREE
> > - Updated the commit message ( remove a note with question about
> > if device.h should be in asm-generic or not )
> > - Replaced DEVICE_IC with DEVICE_INTERRUPT_CONTROLLER
> > - Rationalized usage of CONFIG_HAS_* in device.h
> > - Fixed indents for ACPI_DEVICE_START and ACPI_DEVICE_END
> > ---
> > Changes in V3:
> > - ifdef device tree related things.
> > - update the commit message
> > ---
> > Changes in V2:
> > - take ( as common ) device.h from Arm as PPC and RISC-V
> > use it as a base.
> > - #ifdef PCI related things.
> > - #ifdef ACPI related things.
> > - rename DEVICE_GIC to DEVIC_IC.
> > - rename #ifdef guards.
> > - switch Arm and PPC to generic device.h
> > - add SPDX tag
> > - update the commit message
> >
> > ---
> > xen/arch/arm/device.c | 15 ++-
> > xen/arch/arm/domain_build.c | 2 +-
> > xen/arch/arm/gic-v2.c | 4 +-
> > xen/arch/arm/gic-v3.c | 6 +-
> > xen/arch/arm/gic.c | 4 +-
> > xen/arch/arm/include/asm/Makefile | 1 +
> > xen/arch/ppc/include/asm/Makefile | 1 +
> > xen/arch/ppc/include/asm/device.h | 53 --------
> > .../asm => include/asm-generic}/device.h | 125 +++++++++++--
> > -----
> > 9 files changed, 102 insertions(+), 109 deletions(-)
> > delete mode 100644 xen/arch/ppc/include/asm/device.h
> > rename xen/{arch/arm/include/asm => include/asm-generic}/device.h
> > (79%)
> >
> > diff --git a/xen/arch/arm/device.c b/xen/arch/arm/device.c
> > index 1f631d3274..affbe79f9a 100644
> > --- a/xen/arch/arm/device.c
> > +++ b/xen/arch/arm/device.c
> > @@ -16,7 +16,10 @@
> > #include <xen/lib.h>
> >
> > extern const struct device_desc _sdevice[], _edevice[];
> > +
> > +#ifdef CONFIG_ACPI
> > extern const struct acpi_device_desc _asdevice[], _aedevice[];
> > +#endif
> >
> > int __init device_init(struct dt_device_node *dev, enum
> > device_class class,
> > const void *data)
> > @@ -45,6 +48,7 @@ int __init device_init(struct dt_device_node
> > *dev, enum device_class class,
> > return -EBADF;
> > }
> >
> > +#ifdef CONFIG_ACPI
> > int __init acpi_device_init(enum device_class class, const void
> > *data, int class_type)
> > {
> > const struct acpi_device_desc *desc;
> > @@ -61,6 +65,7 @@ int __init acpi_device_init(enum device_class
> > class, const void *data, int class
> >
> > return -EBADF;
> > }
> > +#endif
> >
> > enum device_class device_get_class(const struct dt_device_node
> > *dev)
> > {
> > @@ -329,9 +334,13 @@ int handle_device(struct domain *d, struct
> > dt_device_node *dev, p2m_type_t p2mt,
> > struct map_range_data mr_data = {
> > .d = d,
> > .p2mt = p2mt,
> > - .skip_mapping = !own_device ||
> > - (is_pci_passthrough_enabled() &&
> > - (device_get_class(dev) ==
> > DEVICE_PCI_HOSTBRIDGE)),
> > + .skip_mapping =
> > + !own_device
> > +#ifdef CONFIG_HAS_PCI
> > + || (is_pci_passthrough_enabled() &&
> > + (device_get_class(dev) ==
> > DEVICE_PCI_HOSTBRIDGE))
> > +#endif
>
> So the #ifdef is only here because DEVICE_PCI_HOSTBRIDGE is not
> defined.
> It is not clear what's the actual problem of keeping
> DEVICE_PCI_HOSTBRIDGE available for every build.
The only reason for that is that it seems to be used only in thecase when
CONFIG_HAS_PCI is enabled ( probably not all archs will
have PCI support ). Generally,
I think it's okay not to use #ifdef DEVICE_PCI_HOSTBRIDGE to keep
the Arm code cleaner.
Does it make sense?
>
> In fact, we have tried to get away from #ifdef in order to make
> ensure
> we can catch any build failure without a randconfig (see use of
> IS_ENABLED() which would not apply work here).
It would be nice to use IS_ENABLED but in this case still need to
something with definition of DEVICE_PCI_HOSTBRIDGE.
>
> [...]
>
> > diff --git a/xen/arch/ppc/include/asm/device.h
> > b/xen/arch/ppc/include/asm/device.h
> > deleted file mode 100644
> > index 8253e61d51..0000000000
> > --- a/xen/arch/ppc/include/asm/device.h
> > +++ /dev/null
> > @@ -1,53 +0,0 @@
> > -/* SPDX-License-Identifier: GPL-2.0-only */
> > -#ifndef __ASM_PPC_DEVICE_H__
> > -#define __ASM_PPC_DEVICE_H__
> > -
> > -enum device_type
> > -{
> > - DEV_DT,
> > - DEV_PCI,
> > -};
> > -
> > -struct device {
> > - enum device_type type;
> > -#ifdef CONFIG_HAS_DEVICE_TREE
> > - struct dt_device_node *of_node; /* Used by drivers imported
> > from Linux */
> > -#endif
> > -};
> > -
> > -enum device_class
> > -{
> > - DEVICE_SERIAL,
> > - DEVICE_IOMMU,
> > - DEVICE_PCI_HOSTBRIDGE,
> > - /* Use for error */
> > - DEVICE_UNKNOWN,
> > -};
> > -
> > -struct device_desc {
> > - /* Device name */
> > - const char *name;
> > - /* Device class */
> > - enum device_class class;
> > - /* List of devices supported by this driver */
> > - const struct dt_device_match *dt_match;
> > - /*
> > - * Device initialization.
> > - *
> > - * -EAGAIN is used to indicate that device probing is
> > deferred.
> > - */
> > - int (*init)(struct dt_device_node *dev, const void *data);
> > -};
> > -
> > -typedef struct device device_t;
> > -
> > -#define DT_DEVICE_START(name_, namestr_,
> > class_) \
> > -static const struct device_desc __dev_desc_##name_
> > __used \
> > -__section(".dev.info") =
> > { \
> > - .name =
> > namestr_, \
> > - .class =
> > class_, \
> > -
> > -#define
> > DT_DEVICE_END \
> > -};
> > -
> > -#endif /* __ASM_PPC_DEVICE_H__ */
> > diff --git a/xen/arch/arm/include/asm/device.h b/xen/include/asm-
> > generic/device.h
> > similarity index 79%
> > rename from xen/arch/arm/include/asm/device.h
> > rename to xen/include/asm-generic/device.h
> > index b5d451e087..063c448c4e 100644
> > --- a/xen/arch/arm/include/asm/device.h
> > +++ b/xen/include/asm-generic/device.h
> > @@ -1,14 +1,37 @@
> > -#ifndef __ASM_ARM_DEVICE_H
> > -#define __ASM_ARM_DEVICE_H
> > +/* SPDX-License-Identifier: GPL-2.0-only */
> > +#ifndef __ASM_GENERIC_DEVICE_H__
> > +#define __ASM_GENERIC_DEVICE_H__
> > +
> > +#include <xen/stdbool.h>
> >
> > enum device_type
> > {
> > +#ifdef CONFIG_HAS_DEVICE_TREE
> > DEV_DT,
> > +#endif
> > +
> > +#ifdef CONFIG_HAS_PCI
> > DEV_PCI,
> > +#endif
> > + DEV_TYPE_MAX,
> Nobody is using it. AFAICT, this was introduced because enum may be
> empty if !HAS_DEVICE_TREE and !HAS_PCI. If so, can you add a comment
> explaining it on top?
Sure, thanks. I'll add the comment.
>
> The rest LGTM.
>
> Cheers,
>
~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |