[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 |