|
[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 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.
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
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.
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |