|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v1 3/3] xen/common: move device initialization code to common code
On Thu, 2024-09-12 at 17:28 +0200, Jan Beulich wrote:
> On 11.09.2024 12:04, Oleksii Kurochko wrote:
> > --- a/xen/common/Makefile
> > +++ b/xen/common/Makefile
> > @@ -6,6 +6,7 @@ obj-$(CONFIG_HYPFS_CONFIG) += config_data.o
> > obj-$(CONFIG_CORE_PARKING) += core_parking.o
> > obj-y += cpu.o
> > obj-$(CONFIG_DEBUG_TRACE) += debugtrace.o
> > +obj-$(call or,$(CONFIG_HAS_DEVICE_TREE),$(CONFIG_HAS_ACPI)) +=
> > device.o
>
> I can't spot any HAS_ACPI in the tree. And if this was switched to
> CONFIG_ACPI
> I'd further ask why the file needs building on x86.
Oh, there is no need for building this on x86. With what you suggested
here ...
>
> Also I think I'd prefer to avoid the of the "or" macro here:
>
> obj-$(CONFIG_ACPI) += device.o
> obj-$(CONFIG_HAS_DEVICE_TREE) += device.o
... IIUC it will fix the issue with building this file for x86 as
CONFIG_ACPI depends on (ARM_64 && ARM_EFI).
>
> ought to be quite fine. There's de-duplication somewhere for what
> $(obj-y) lists.
>
> > --- /dev/null
> > +++ b/xen/common/device.c
> > @@ -0,0 +1,82 @@
> > +/* SPDX-License-Identifier: GPL-2.0-or-later */
> > +/*
> > + * Based on the code from:
> > + * xen/arch/arm/device.c
> > + */
> > +
> > +#include <xen/bug.h>
> > +#include <xen/device_tree.h>
> > +#include <xen/errno.h>
> > +#include <xen/init.h>
> > +
> > +#include <asm-generic/device.h>
> > +
> > +#ifdef CONFIG_ACPI
> > +extern const struct acpi_device_desc _asdevice[], _aedevice[];
>
> Why does this live separately here, rather than ...
>
> > +#endif
> > +
> > +#ifdef CONFIG_HAS_DEVICE_TREE
> > +
> > +extern const struct device_desc _sdevice[], _edevice[];
>
> ... like this ...
>
> > +int __init device_init(struct dt_device_node *dev, enum
> > device_class class,
> > + const void *data)
> > +{
> > + const struct device_desc *desc;
> > +
> > + ASSERT(dev != NULL);
> > +
> > + if ( !dt_device_is_available(dev) ||
> > dt_device_for_passthrough(dev) )
> > + return -ENODEV;
> > +
> > + for ( desc = _sdevice; desc != _edevice; desc++ )
> > + {
> > + if ( desc->class != class )
> > + continue;
> > +
> > + if ( dt_match_node(desc->dt_match, dev) )
> > + {
> > + ASSERT(desc->init != NULL);
> > +
> > + return desc->init(dev, data);
> > + }
> > + }
> > +
> > + return -EBADF;
> > +}
> > +
> > +enum device_class device_get_class(const struct dt_device_node
> > *dev)
> > +{
> > + const struct device_desc *desc;
> > +
> > + ASSERT(dev != NULL);
> > +
> > + for ( desc = _sdevice; desc != _edevice; desc++ )
> > + {
> > + if ( dt_match_node(desc->dt_match, dev) )
> > + return desc->class;
> > + }
> > +
> > + return DEVICE_UNKNOWN;
> > +}
> > +
> > +#endif
> > +
> > +#ifdef CONFIG_ACPI
>
> ... in the section where it's needed? Leaving just one #ifdef for
> ACPI.
Just tried to follow the approach that first is going variables
declaration/definitions and then functions. But I am okay to move it to
CONFIG_ACPI #ifdef CONFIG_ACPI ... #endif.
Thanks.
~ Oleksii
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |