Re: [PATCH v3 4/6] gpiolib: acpi: Export acpi_get_gpiod()
by Andy Shevchenko
On Mon, Feb 22, 2021 at 3:13 PM Daniel Scally <djrscally(a)gmail.com> wrote:
>
> I need to be able to translate GPIO resources in an ACPI device's _CRS
I -> we
> into GPIO descriptor array. Those are represented in _CRS as a pathname
> to a GPIO device plus the pin's index number: this function is perfect
Which one? "the acpi_...() function"
> for that purpose.
>
> As it's currently only used internally within the GPIO layer, provide and
> export a wrapper function that additionally holds a reference to the GPIO
> device.
Reviewed-by: Andy Shevchenko <andy.shevchenko(a)gmail.com>
after addressing above and beyond :-)
>
> Signed-off-by: Daniel Scally <djrscally(a)gmail.com>
> ---
> Changes in v3:
>
> - Having realised that it wasn't taking a reference to the GPIO device,
> I decided the best thing to do was leave the existing function as-is
> (apart from renaming) and provide a wrapper that simply passes
> through to the original and takes a reference before returning the
> struct gpio_desc
>
> Because of the change to that functionality, I dropped the R-b's from
> the last version.
>
> drivers/gpio/gpiolib-acpi.c | 36 +++++++++++++++++++++++++++++++----
> include/linux/gpio/consumer.h | 7 +++++++
> 2 files changed, 39 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
> index e4d728fda982..0cc7cc327757 100644
> --- a/drivers/gpio/gpiolib-acpi.c
> +++ b/drivers/gpio/gpiolib-acpi.c
> @@ -102,7 +102,8 @@ static int acpi_gpiochip_find(struct gpio_chip *gc, void *data)
> }
>
> /**
> - * acpi_get_gpiod() - Translate ACPI GPIO pin to GPIO descriptor usable with GPIO API
> + * __acpi_get_gpiod() - Translate ACPI GPIO pin to GPIO descriptor usable with
Can we rename it better, i.e. w/o __, like "acpi_gpio_pin_to_gpiod()" or so?
> + * GPIO API
> * @path: ACPI GPIO controller full path name, (e.g. "\\_SB.GPO1")
> * @pin: ACPI GPIO pin number (0-based, controller-relative)
> *
> @@ -111,7 +112,7 @@ static int acpi_gpiochip_find(struct gpio_chip *gc, void *data)
> * controller does not have GPIO chip registered at the moment. This is to
> * support probe deferral.
> */
> -static struct gpio_desc *acpi_get_gpiod(char *path, int pin)
> +static struct gpio_desc *__acpi_get_gpiod(char *path, int pin)
> {
> struct gpio_chip *chip;
> acpi_handle handle;
> @@ -128,6 +129,33 @@ static struct gpio_desc *acpi_get_gpiod(char *path, int pin)
> return gpiochip_get_desc(chip, pin);
> }
>
> +/**
> + * acpi_get_gpiod() - Translate ACPI GPIO pin to GPIO descriptor usable with
> + * GPIO API, and hold a refcount to the GPIO device.
> + * @path: ACPI GPIO controller full path name, (e.g. "\\_SB.GPO1")
> + * @pin: ACPI GPIO pin number (0-based, controller-relative)
> + * @label: Label to pass to gpiod_request()
> + *
> + * This function is a simple pass-through to __acpi_get_gpiod(), except that as
> + * it is intended for use outside of the GPIO layer (in a similar fashion to
> + * gpiod_get_index() for example) it also holds a reference to the GPIO device.
> + */
> +struct gpio_desc *acpi_get_gpiod(char *path, int pin, char *label)
Name better to reflect the action, perhaps
"acpi_gpio_get_and_request_desc()" or so.
> +{
> + struct gpio_desc *gpio = __acpi_get_gpiod(path, pin);
Please, split it, so the assignment goes...
> + int ret;
...here.
> + if (IS_ERR(gpio))
> + return gpio;
> +
> + ret = gpiod_request(gpio, label);
> + if (ret)
> + return ERR_PTR(ret);
> +
> + return gpio;
> +}
> +EXPORT_SYMBOL_GPL(acpi_get_gpiod);
> +
> static irqreturn_t acpi_gpio_irq_handler(int irq, void *data)
> {
> struct acpi_gpio_event *event = data;
> @@ -689,8 +717,8 @@ static int acpi_populate_gpio_lookup(struct acpi_resource *ares, void *data)
> if (pin_index >= agpio->pin_table_length)
> return 1;
>
> - lookup->desc = acpi_get_gpiod(agpio->resource_source.string_ptr,
> - agpio->pin_table[pin_index]);
> + lookup->desc = __acpi_get_gpiod(agpio->resource_source.string_ptr,
> + agpio->pin_table[pin_index]);
> lookup->info.pin_config = agpio->pin_config;
> lookup->info.debounce = agpio->debounce_timeout;
> lookup->info.gpioint = gpioint;
> diff --git a/include/linux/gpio/consumer.h b/include/linux/gpio/consumer.h
> index ef49307611d2..6eee751f44dd 100644
> --- a/include/linux/gpio/consumer.h
> +++ b/include/linux/gpio/consumer.h
> @@ -690,6 +690,8 @@ int devm_acpi_dev_add_driver_gpios(struct device *dev,
> const struct acpi_gpio_mapping *gpios);
> void devm_acpi_dev_remove_driver_gpios(struct device *dev);
>
> +struct gpio_desc *acpi_get_gpiod(char *path, int pin, char *label);
> +
> #else /* CONFIG_GPIOLIB && CONFIG_ACPI */
>
> struct acpi_device;
> @@ -708,6 +710,11 @@ static inline int devm_acpi_dev_add_driver_gpios(struct device *dev,
> }
> static inline void devm_acpi_dev_remove_driver_gpios(struct device *dev) {}
>
> +struct gpio_desc *acpi_get_gpiod(char *path, int pin, char *label)
> +{
> + return NULL;
> +}
> +
> #endif /* CONFIG_GPIOLIB && CONFIG_ACPI */
>
>
> --
> 2.25.1
>
--
With Best Regards,
Andy Shevchenko
1 year, 5 months
Re: [PATCH v3 2/6] ACPI: scan: Add function to fetch dependent of acpi device
by Andy Shevchenko
On Mon, Feb 22, 2021 at 3:11 PM Daniel Scally <djrscally(a)gmail.com> wrote:
>
> In some ACPI tables we encounter, devices use the _DEP method to assert
> a dependence on other ACPI devices as opposed to the OpRegions that the
> specification intends. We need to be able to find those devices "from"
> the dependee, so add a callback and a wrapper to walk over the
> acpi_dep_list and return the dependent ACPI device.
>
Reviewed-by: Andy Shevchenko <andy.shevchenko(a)gmail.com>
Nit-picks below as usual :-)
> Signed-off-by: Daniel Scally <djrscally(a)gmail.com>
> ---
> Changes in v3:
> - Switched from a standalone function to a callback passed to
> acpi_walk_dep_device_list().
>
> drivers/acpi/scan.c | 34 ++++++++++++++++++++++++++++++++++
> include/acpi/acpi_bus.h | 1 +
> 2 files changed, 35 insertions(+)
>
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index c9e4190316ef..55626925261c 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -2093,6 +2093,21 @@ static void acpi_bus_attach(struct acpi_device *device, bool first_pass)
> device->handler->hotplug.notify_online(device);
> }
>
> +static int __acpi_dev_get_dependent_dev(struct acpi_dep_data *dep, void *data)
> +{
> + struct acpi_device *adev;
> + int ret;
> +
> + ret = acpi_bus_get_device(dep->consumer, &adev);
> + if (ret)
> + /* If we don't find an adev then we want to continue parsing */
> + return 0;
> +
> + *(struct acpi_device **)data = adev;
Hmm... I'm wondering if
*(void **data) = adev;
will compile and work.
But on second thought the current code is more specific and explicit,
which is good.
> +
> + return 1;
> +}
> +
> static int __acpi_dev_flag_dependency_met(struct acpi_dep_data *dep,
> void *data)
> {
> @@ -2145,6 +2160,25 @@ void acpi_dev_flag_dependency_met(acpi_handle handle)
> }
> EXPORT_SYMBOL_GPL(acpi_dev_flag_dependency_met);
>
> +/**
> + * acpi_dev_get_dependent_dev - Return ACPI device dependent on @adev
> + * @adev: Pointer to the dependee device
> + *
> + * Returns the first &struct acpi_device which declares itself dependent on
> + * @adev via the _DEP buffer, parsed from the acpi_dep_list.
> + */
> +struct acpi_device *
> +acpi_dev_get_dependent_dev(struct acpi_device *supplier)
I believe it will be okay to have it on one line
> +{
> + struct acpi_device *adev = NULL;
> + acpi_walk_dep_device_list(supplier->handle,
> + __acpi_dev_get_dependent_dev, &adev);
Ditto.
> + return adev;
> +}
> +EXPORT_SYMBOL_GPL(acpi_dev_get_dependent_dev);
> +
> /**
> * acpi_bus_scan - Add ACPI device node objects in a given namespace scope.
> * @handle: Root of the namespace scope to scan.
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index 91172af3a04d..5b14a9ae4ed5 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -690,6 +690,7 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev)
> bool acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *uid2);
>
> void acpi_dev_flag_dependency_met(acpi_handle handle);
> +struct acpi_device *acpi_dev_get_dependent_dev(struct acpi_device *supplier);
> struct acpi_device *
> acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv);
> struct acpi_device *
> --
> 2.25.1
>
--
With Best Regards,
Andy Shevchenko
1 year, 5 months
Re: [PATCH v3 1/6] ACPI: scan: Extend acpi_walk_dep_device_list()
by Andy Shevchenko
On Mon, Feb 22, 2021 at 3:12 PM Daniel Scally <djrscally(a)gmail.com> wrote:
>
> The acpi_walk_dep_device_list() is not as generalisable as its name
> implies, serving only to decrement the dependency count for each
> dependent device of the input. Extend the function to instead accept
> a callback which can be applied to all the dependencies in acpi_dep_list.
> Replace all existing calls to the function with calls to a wrapper, passing
> a callback that applies the same dependency reduction.
The code looks okay to me, if it was the initial idea, feel free to add
Reviewed-by: Andy Shevchenko <andy.shevchenko(a)gmail.com>
See a few nit-picks below.
> Suggested-by: Rafael J. Wysocki <rafael(a)kernel.org>
> Signed-off-by: Daniel Scally <djrscally(a)gmail.com>
> ---
> Changes in v3:
> - patch introduced
>
> drivers/acpi/ec.c | 2 +-
> drivers/acpi/pmic/intel_pmic_chtdc_ti.c | 2 +-
> drivers/acpi/scan.c | 58 ++++++++++++++++-------
> drivers/gpio/gpiolib-acpi.c | 2 +-
> drivers/i2c/i2c-core-acpi.c | 2 +-
> drivers/platform/surface/surface3_power.c | 2 +-
> include/acpi/acpi_bus.h | 7 +++
> include/linux/acpi.h | 4 +-
> 8 files changed, 55 insertions(+), 24 deletions(-)
>
> diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
> index 13565629ce0a..a258db713bd2 100644
> --- a/drivers/acpi/ec.c
> +++ b/drivers/acpi/ec.c
> @@ -1627,7 +1627,7 @@ static int acpi_ec_add(struct acpi_device *device)
> WARN(!ret, "Could not request EC cmd io port 0x%lx", ec->command_addr);
>
> /* Reprobe devices depending on the EC */
> - acpi_walk_dep_device_list(ec->handle);
> + acpi_dev_flag_dependency_met(ec->handle);
>
> acpi_handle_debug(ec->handle, "enumerated.\n");
> return 0;
> diff --git a/drivers/acpi/pmic/intel_pmic_chtdc_ti.c b/drivers/acpi/pmic/intel_pmic_chtdc_ti.c
> index a5101b07611a..59cca504325e 100644
> --- a/drivers/acpi/pmic/intel_pmic_chtdc_ti.c
> +++ b/drivers/acpi/pmic/intel_pmic_chtdc_ti.c
> @@ -117,7 +117,7 @@ static int chtdc_ti_pmic_opregion_probe(struct platform_device *pdev)
> return err;
>
> /* Re-enumerate devices depending on PMIC */
> - acpi_walk_dep_device_list(ACPI_HANDLE(pdev->dev.parent));
> + acpi_dev_flag_dependency_met(ACPI_HANDLE(pdev->dev.parent));
> return 0;
> }
>
> diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
> index 80b668c80073..c9e4190316ef 100644
> --- a/drivers/acpi/scan.c
> +++ b/drivers/acpi/scan.c
> @@ -49,12 +49,6 @@ static DEFINE_MUTEX(acpi_hp_context_lock);
> */
> static u64 spcr_uart_addr;
>
> -struct acpi_dep_data {
> - struct list_head node;
> - acpi_handle supplier;
> - acpi_handle consumer;
> -};
> -
> void acpi_scan_lock_acquire(void)
> {
> mutex_lock(&acpi_scan_lock);
> @@ -2099,30 +2093,58 @@ static void acpi_bus_attach(struct acpi_device *device, bool first_pass)
> device->handler->hotplug.notify_online(device);
> }
>
> -void acpi_walk_dep_device_list(acpi_handle handle)
> +static int __acpi_dev_flag_dependency_met(struct acpi_dep_data *dep,
> + void *data)
> {
> - struct acpi_dep_data *dep, *tmp;
> struct acpi_device *adev;
>
> + acpi_bus_get_device(dep->consumer, &adev);
> + if (!adev)
> + return 0;
> +
> + adev->dep_unmet--;
> + if (!adev->dep_unmet)
> + acpi_bus_attach(adev, true);
> +
> + list_del(&dep->node);
> + kfree(dep);
> + return 0;
> +}
> +
> +void acpi_walk_dep_device_list(acpi_handle handle,
> + int (*callback)(struct acpi_dep_data *, void *),
> + void *data)
> +{
> + struct acpi_dep_data *dep, *tmp;
> + int ret;
> +
> mutex_lock(&acpi_dep_list_lock);
> list_for_each_entry_safe(dep, tmp, &acpi_dep_list, node) {
> if (dep->supplier == handle) {
> - acpi_bus_get_device(dep->consumer, &adev);
> - if (!adev)
> - continue;
> -
> - adev->dep_unmet--;
> - if (!adev->dep_unmet)
> - acpi_bus_attach(adev, true);
> -
> - list_del(&dep->node);
> - kfree(dep);
> + ret = callback(dep, data);
> + if (ret)
> + break;
> }
> }
> mutex_unlock(&acpi_dep_list_lock);
> }
> EXPORT_SYMBOL_GPL(acpi_walk_dep_device_list);
>
> +/**
> + * acpi_dev_flag_dependency_met() - Inform consumers of @handle that the device
> + * is now active
... - Inform consumers that the device is now active
(and it will be on one line)
> + * @handle: acpi_handle for the supplier device
ACPI handle
> + *
> + * This function walks through the dependencies list and informs each consumer
> + * of @handle that their dependency upon it is now met. Devices with no more
> + * unmet dependencies will be attached to the acpi bus.
acpi -> ACPI ?
> + */
> +void acpi_dev_flag_dependency_met(acpi_handle handle)
> +{
Since it's acpi_dev_* namespace, perhaps it should take struct acpi_device here?
> + acpi_walk_dep_device_list(handle, __acpi_dev_flag_dependency_met, NULL);
> +}
> +EXPORT_SYMBOL_GPL(acpi_dev_flag_dependency_met);
> +
> /**
> * acpi_bus_scan - Add ACPI device node objects in a given namespace scope.
> * @handle: Root of the namespace scope to scan.
> diff --git a/drivers/gpio/gpiolib-acpi.c b/drivers/gpio/gpiolib-acpi.c
> index e37a57d0a2f0..e4d728fda982 100644
> --- a/drivers/gpio/gpiolib-acpi.c
> +++ b/drivers/gpio/gpiolib-acpi.c
> @@ -1254,7 +1254,7 @@ void acpi_gpiochip_add(struct gpio_chip *chip)
>
> acpi_gpiochip_request_regions(acpi_gpio);
> acpi_gpiochip_scan_gpios(acpi_gpio);
> - acpi_walk_dep_device_list(handle);
> + acpi_dev_flag_dependency_met(handle);
> }
>
> void acpi_gpiochip_remove(struct gpio_chip *chip)
> diff --git a/drivers/i2c/i2c-core-acpi.c b/drivers/i2c/i2c-core-acpi.c
> index 37c510d9347a..38647cf34bde 100644
> --- a/drivers/i2c/i2c-core-acpi.c
> +++ b/drivers/i2c/i2c-core-acpi.c
> @@ -283,7 +283,7 @@ void i2c_acpi_register_devices(struct i2c_adapter *adap)
> if (!handle)
> return;
>
> - acpi_walk_dep_device_list(handle);
> + acpi_dev_flag_dependency_met(handle);
> }
>
> static const struct acpi_device_id i2c_acpi_force_400khz_device_ids[] = {
> diff --git a/drivers/platform/surface/surface3_power.c b/drivers/platform/surface/surface3_power.c
> index cc4f9cba6856..ad895285d3e9 100644
> --- a/drivers/platform/surface/surface3_power.c
> +++ b/drivers/platform/surface/surface3_power.c
> @@ -478,7 +478,7 @@ static int mshw0011_install_space_handler(struct i2c_client *client)
> return -ENOMEM;
> }
>
> - acpi_walk_dep_device_list(handle);
> + acpi_dev_flag_dependency_met(handle);
> return 0;
> }
>
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index 02a716a0af5d..91172af3a04d 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -278,6 +278,12 @@ struct acpi_device_power {
> struct acpi_device_power_state states[ACPI_D_STATE_COUNT]; /* Power states (D0-D3Cold) */
> };
>
> +struct acpi_dep_data {
> + struct list_head node;
> + acpi_handle supplier;
> + acpi_handle consumer;
> +};
> +
> /* Performance Management */
>
> struct acpi_device_perf_flags {
> @@ -683,6 +689,7 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev)
>
> bool acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *uid2);
>
> +void acpi_dev_flag_dependency_met(acpi_handle handle);
> struct acpi_device *
> acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv);
> struct acpi_device *
> diff --git a/include/linux/acpi.h b/include/linux/acpi.h
> index 2630c2e953f7..2d5e6e88e8a0 100644
> --- a/include/linux/acpi.h
> +++ b/include/linux/acpi.h
> @@ -655,7 +655,9 @@ extern bool acpi_driver_match_device(struct device *dev,
> const struct device_driver *drv);
> int acpi_device_uevent_modalias(struct device *, struct kobj_uevent_env *);
> int acpi_device_modalias(struct device *, char *, int);
> -void acpi_walk_dep_device_list(acpi_handle handle);
> +void acpi_walk_dep_device_list(acpi_handle handle,
> + int (*callback)(struct acpi_dep_data *, void *),
> + void *data);
>
> struct platform_device *acpi_create_platform_device(struct acpi_device *,
> struct property_entry *);
> --
> 2.25.1
>
--
With Best Regards,
Andy Shevchenko
1 year, 5 months
[pm:bleeding-edge] BUILD SUCCESS fa7998ffaad0ed13479fe7026ef814b8a5bd8925
by kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge
branch HEAD: fa7998ffaad0ed13479fe7026ef814b8a5bd8925 Merge branch 'pm-cpufreq-fixes' into bleeding-edge
elapsed time: 721m
configs tested: 98
configs skipped: 2
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
sh landisk_defconfig
powerpc tqm5200_defconfig
xtensa common_defconfig
h8300 defconfig
sh se7619_defconfig
powerpc mpc834x_mds_defconfig
sh se7206_defconfig
arm imx_v6_v7_defconfig
sh microdev_defconfig
powerpc rainier_defconfig
arc nsim_700_defconfig
sh rts7751r2dplus_defconfig
arc axs103_smp_defconfig
powerpc klondike_defconfig
sh se7712_defconfig
arm h5000_defconfig
xtensa nommu_kc705_defconfig
sh se7705_defconfig
mips cu1830-neo_defconfig
arm mvebu_v5_defconfig
powerpc pseries_defconfig
arm multi_v7_defconfig
ia64 allmodconfig
ia64 defconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nios2 defconfig
arc allyesconfig
nds32 allnoconfig
c6x allyesconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha defconfig
alpha allyesconfig
xtensa allyesconfig
h8300 allyesconfig
arc defconfig
sh allmodconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
sparc defconfig
i386 tinyconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
i386 randconfig-a005-20210219
i386 randconfig-a003-20210219
i386 randconfig-a002-20210219
i386 randconfig-a004-20210219
i386 randconfig-a001-20210219
i386 randconfig-a006-20210219
x86_64 randconfig-a012-20210219
x86_64 randconfig-a016-20210219
x86_64 randconfig-a013-20210219
x86_64 randconfig-a015-20210219
x86_64 randconfig-a011-20210219
x86_64 randconfig-a014-20210219
i386 randconfig-a016-20210219
i386 randconfig-a012-20210219
i386 randconfig-a014-20210219
i386 randconfig-a013-20210219
i386 randconfig-a011-20210219
i386 randconfig-a015-20210219
riscv nommu_k210_defconfig
riscv allyesconfig
riscv nommu_virt_defconfig
riscv allnoconfig
riscv defconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 allyesconfig
x86_64 rhel-7.6-kselftests
x86_64 defconfig
x86_64 rhel-8.3
x86_64 rhel-8.3-kbuiltin
x86_64 kexec
clang tested configs:
x86_64 randconfig-a003-20210219
x86_64 randconfig-a001-20210219
x86_64 randconfig-a004-20210219
x86_64 randconfig-a002-20210219
x86_64 randconfig-a005-20210219
x86_64 randconfig-a006-20210219
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
1 year, 5 months
[pm:bleeding-edge] BUILD SUCCESS 8b72d3aa065ce33df4f042840078542b1e5d2c45
by kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge
branch HEAD: 8b72d3aa065ce33df4f042840078542b1e5d2c45 Merge branches 'pm-cpufreq-fixes' and 'pm-opp-fixes' into linux-next
elapsed time: 723m
configs tested: 130
configs skipped: 4
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
powerpc cm5200_defconfig
mips rbtx49xx_defconfig
powerpc stx_gp3_defconfig
sh se7780_defconfig
arm mvebu_v5_defconfig
powerpc sequoia_defconfig
ia64 alldefconfig
sh espt_defconfig
arm pcm027_defconfig
mips pistachio_defconfig
arm colibri_pxa270_defconfig
sh migor_defconfig
arm pxa910_defconfig
arc vdk_hs38_smp_defconfig
powerpc storcenter_defconfig
mips bmips_be_defconfig
arm u300_defconfig
powerpc iss476-smp_defconfig
arm spear3xx_defconfig
powerpc motionpro_defconfig
arm pxa_defconfig
sh polaris_defconfig
arm at91_dt_defconfig
sh edosk7760_defconfig
powerpc mpc834x_mds_defconfig
arm bcm2835_defconfig
arm s5pv210_defconfig
powerpc canyonlands_defconfig
sh sh7710voipgw_defconfig
powerpc ppc44x_defconfig
mips rt305x_defconfig
arm omap2plus_defconfig
powerpc amigaone_defconfig
sparc64 alldefconfig
mips rb532_defconfig
mips jazz_defconfig
powerpc mpc832x_mds_defconfig
powerpc sbc8548_defconfig
arm hackkit_defconfig
powerpc adder875_defconfig
sh se7724_defconfig
arm stm32_defconfig
arm imote2_defconfig
xtensa virt_defconfig
arm corgi_defconfig
m68k mvme16x_defconfig
sh sh7770_generic_defconfig
arm hisi_defconfig
ia64 zx1_defconfig
sh defconfig
mips cu1830-neo_defconfig
sparc defconfig
arc haps_hs_defconfig
powerpc ppc64_defconfig
sh rsk7201_defconfig
ia64 allmodconfig
ia64 defconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nios2 defconfig
arc allyesconfig
nds32 allnoconfig
c6x allyesconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha defconfig
alpha allyesconfig
xtensa allyesconfig
h8300 allyesconfig
arc defconfig
sh allmodconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
i386 tinyconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
i386 randconfig-a005-20210219
i386 randconfig-a003-20210219
i386 randconfig-a002-20210219
i386 randconfig-a004-20210219
i386 randconfig-a001-20210219
i386 randconfig-a006-20210219
x86_64 randconfig-a012-20210219
x86_64 randconfig-a016-20210219
x86_64 randconfig-a013-20210219
x86_64 randconfig-a015-20210219
x86_64 randconfig-a011-20210219
x86_64 randconfig-a014-20210219
i386 randconfig-a016-20210219
i386 randconfig-a012-20210219
i386 randconfig-a014-20210219
i386 randconfig-a013-20210219
i386 randconfig-a011-20210219
i386 randconfig-a015-20210219
riscv nommu_k210_defconfig
riscv allyesconfig
riscv nommu_virt_defconfig
riscv allnoconfig
riscv defconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 allyesconfig
x86_64 rhel-7.6-kselftests
x86_64 defconfig
x86_64 rhel-8.3
x86_64 rhel-8.3-kbuiltin
x86_64 kexec
clang tested configs:
x86_64 randconfig-a003-20210219
x86_64 randconfig-a001-20210219
x86_64 randconfig-a004-20210219
x86_64 randconfig-a002-20210219
x86_64 randconfig-a005-20210219
x86_64 randconfig-a006-20210219
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
1 year, 5 months
[pm:bleeding-edge] BUILD SUCCESS c9756fcd3979ee48382b8e442bb0375bfa05291f
by kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge
branch HEAD: c9756fcd3979ee48382b8e442bb0375bfa05291f Merge branch 'pm-cpufreq-fixes' into linux-next
elapsed time: 725m
configs tested: 121
configs skipped: 2
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
arm multi_v5_defconfig
arm u300_defconfig
powerpc icon_defconfig
sh polaris_defconfig
arm lart_defconfig
powerpc rainier_defconfig
arm cerfcube_defconfig
arm lpc32xx_defconfig
arm s3c2410_defconfig
arm pxa3xx_defconfig
m68k m5208evb_defconfig
mips pic32mzda_defconfig
sparc sparc64_defconfig
powerpc katmai_defconfig
powerpc acadia_defconfig
xtensa xip_kc705_defconfig
m68k m5307c3_defconfig
m68k m5407c3_defconfig
arm rpc_defconfig
sh sh2007_defconfig
mips ip27_defconfig
powerpc xes_mpc85xx_defconfig
arc haps_hs_defconfig
xtensa alldefconfig
sh sh7710voipgw_defconfig
powerpc mpc8315_rdb_defconfig
ia64 allmodconfig
ia64 defconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nios2 defconfig
arc allyesconfig
nds32 allnoconfig
c6x allyesconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha defconfig
alpha allyesconfig
xtensa allyesconfig
h8300 allyesconfig
arc defconfig
sh allmodconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
sparc defconfig
i386 tinyconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
i386 randconfig-a003-20210216
i386 randconfig-a005-20210216
i386 randconfig-a002-20210216
i386 randconfig-a006-20210216
i386 randconfig-a001-20210216
i386 randconfig-a004-20210216
x86_64 randconfig-a013-20210217
x86_64 randconfig-a016-20210217
x86_64 randconfig-a012-20210217
x86_64 randconfig-a015-20210217
x86_64 randconfig-a014-20210217
x86_64 randconfig-a011-20210217
i386 randconfig-a016-20210216
i386 randconfig-a014-20210216
i386 randconfig-a012-20210216
i386 randconfig-a013-20210216
i386 randconfig-a011-20210216
i386 randconfig-a015-20210216
i386 randconfig-a016-20210217
i386 randconfig-a014-20210217
i386 randconfig-a012-20210217
i386 randconfig-a013-20210217
i386 randconfig-a011-20210217
i386 randconfig-a015-20210217
x86_64 randconfig-a003-20210216
x86_64 randconfig-a002-20210216
x86_64 randconfig-a004-20210216
x86_64 randconfig-a001-20210216
x86_64 randconfig-a005-20210216
x86_64 randconfig-a006-20210216
riscv nommu_k210_defconfig
riscv allyesconfig
riscv nommu_virt_defconfig
riscv allnoconfig
riscv defconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 rhel
x86_64 allyesconfig
x86_64 rhel-7.6-kselftests
x86_64 defconfig
x86_64 rhel-8.3
x86_64 rhel-8.3-kbuiltin
x86_64 kexec
clang tested configs:
x86_64 randconfig-a013-20210216
x86_64 randconfig-a016-20210216
x86_64 randconfig-a012-20210216
x86_64 randconfig-a015-20210216
x86_64 randconfig-a014-20210216
x86_64 randconfig-a011-20210216
x86_64 randconfig-a003-20210215
x86_64 randconfig-a002-20210215
x86_64 randconfig-a001-20210215
x86_64 randconfig-a004-20210215
x86_64 randconfig-a005-20210215
x86_64 randconfig-a006-20210215
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
1 year, 5 months
[pm:bleeding-edge] BUILD SUCCESS 606a1948458764ff9a1ffa47a3d68749b9b93041
by kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge
branch HEAD: 606a1948458764ff9a1ffa47a3d68749b9b93041 Merge branches 'pm-misc', 'pm-cpuidle', 'pm-sleep' and 'powercap' into linux-next
elapsed time: 725m
configs tested: 169
configs skipped: 2
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
mips jazz_defconfig
powerpc fsp2_defconfig
csky alldefconfig
arc tb10x_defconfig
alpha defconfig
sh se7343_defconfig
xtensa generic_kc705_defconfig
powerpc redwood_defconfig
arm shmobile_defconfig
c6x evmc6678_defconfig
powerpc walnut_defconfig
ia64 zx1_defconfig
powerpc klondike_defconfig
arm stm32_defconfig
m68k m5272c3_defconfig
arm imx_v4_v5_defconfig
ia64 tiger_defconfig
xtensa smp_lx200_defconfig
arm pxa255-idp_defconfig
arm exynos_defconfig
arm pxa168_defconfig
powerpc mpc866_ads_defconfig
arm axm55xx_defconfig
powerpc mpc8272_ads_defconfig
powerpc mvme5100_defconfig
arm footbridge_defconfig
powerpc mpc885_ads_defconfig
powerpc mpc7448_hpc2_defconfig
h8300 h8300h-sim_defconfig
arm colibri_pxa270_defconfig
arc haps_hs_smp_defconfig
sh edosk7760_defconfig
sh rsk7264_defconfig
nds32 allnoconfig
powerpc lite5200b_defconfig
powerpc mpc83xx_defconfig
arm alldefconfig
riscv defconfig
c6x allyesconfig
sh rts7751r2dplus_defconfig
mips sb1250_swarm_defconfig
xtensa allyesconfig
mips tb0287_defconfig
arm eseries_pxa_defconfig
arm rpc_defconfig
powerpc sbc8548_defconfig
sh apsh4ad0a_defconfig
arm jornada720_defconfig
arm hackkit_defconfig
sh ecovec24-romimage_defconfig
arm cns3420vb_defconfig
arm mini2440_defconfig
arm multi_v4t_defconfig
xtensa defconfig
powerpc sam440ep_defconfig
arm s3c6400_defconfig
sh apsh4a3a_defconfig
powerpc storcenter_defconfig
ia64 bigsur_defconfig
sh dreamcast_defconfig
m68k hp300_defconfig
ia64 defconfig
powerpc ppc64e_defconfig
sh shmin_defconfig
mips cobalt_defconfig
xtensa cadence_csp_defconfig
mips malta_qemu_32r6_defconfig
powerpc mpc832x_mds_defconfig
um kunit_defconfig
mips ci20_defconfig
mips maltaaprp_defconfig
powerpc mpc8560_ads_defconfig
arm oxnas_v6_defconfig
mips cavium_octeon_defconfig
mips fuloong2e_defconfig
arc alldefconfig
arm mps2_defconfig
arm davinci_all_defconfig
mips rs90_defconfig
mips lemote2f_defconfig
ia64 allmodconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nios2 defconfig
arc allyesconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha allyesconfig
h8300 allyesconfig
arc defconfig
sh allmodconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
sparc defconfig
i386 tinyconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
x86_64 randconfig-a003-20210216
x86_64 randconfig-a002-20210216
x86_64 randconfig-a004-20210216
x86_64 randconfig-a001-20210216
x86_64 randconfig-a005-20210216
x86_64 randconfig-a006-20210216
i386 randconfig-a003-20210216
i386 randconfig-a005-20210216
i386 randconfig-a002-20210216
i386 randconfig-a006-20210216
i386 randconfig-a001-20210216
i386 randconfig-a004-20210216
x86_64 randconfig-a016-20210215
x86_64 randconfig-a013-20210215
x86_64 randconfig-a012-20210215
x86_64 randconfig-a015-20210215
x86_64 randconfig-a014-20210215
x86_64 randconfig-a011-20210215
i386 randconfig-a016-20210216
i386 randconfig-a014-20210216
i386 randconfig-a012-20210216
i386 randconfig-a013-20210216
i386 randconfig-a011-20210216
i386 randconfig-a015-20210216
i386 randconfig-a016-20210215
i386 randconfig-a014-20210215
i386 randconfig-a012-20210215
i386 randconfig-a013-20210215
i386 randconfig-a011-20210215
i386 randconfig-a015-20210215
riscv nommu_k210_defconfig
riscv allyesconfig
riscv nommu_virt_defconfig
riscv allnoconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 rhel
x86_64 allyesconfig
x86_64 rhel-7.6-kselftests
x86_64 defconfig
x86_64 rhel-8.3
x86_64 rhel-8.3-kbuiltin
x86_64 kexec
clang tested configs:
x86_64 randconfig-a003-20210215
x86_64 randconfig-a002-20210215
x86_64 randconfig-a001-20210215
x86_64 randconfig-a004-20210215
x86_64 randconfig-a005-20210215
x86_64 randconfig-a006-20210215
x86_64 randconfig-a013-20210216
x86_64 randconfig-a016-20210216
x86_64 randconfig-a012-20210216
x86_64 randconfig-a015-20210216
x86_64 randconfig-a014-20210216
x86_64 randconfig-a011-20210216
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
1 year, 5 months
Re: [PATCH 0/2] ACPICA: Fix a race in GenericSerialBus (I2C) and GPIO handling
by Rafael J. Wysocki
On Mon, Feb 15, 2021 at 6:52 PM Hans de Goede <hdegoede(a)redhat.com> wrote:
>
> Hi,
>
> On 12/26/20 3:28 PM, Hans de Goede wrote:
> > Hi All,
> >
> > On one of my machines I noticed the following errors being logged:
> >
> > [ 52.892807] i2c i2c-0: adapter quirk: no zero length (addr 0x0078, size 0, read)
> > [ 52.893037] i2c i2c-0: i2c read 0 bytes from [email protected] starting at reg 0x0 failed, error: -95
> >
> > The second line is coming from the Linux I2C ACPI OpRegion handling and
> > after a bunch of debugging I've found out that there is a rather obvious
> > (once you see it) and nasty race condition in the handling of I2C and GPIO
> > opregions in acpi_ev_address_space_dispatch(). See the first patch in this
> > series (the second patch is a follow-up cleanup patch removing some code
> > duplication).
> >
> > TBH I'm surprised that this issue has gone unnoticed as long as it has,
> > but I guess that it mostly leads to unreproducable sporadic problems
> > making it hard to debug and I got lucky that I had a machine where the
> > race seems to trigger about once every 20 seconds.
> >
> > I know that ACPICA patches are normally merged through the ACPICA upstream
> > but given that this is a serious bug, I believe that in this case it might
> > be best to add the fix directly to Linux and then port it to ACPICA from
> > there.
>
> ping ?
>
> This was submitted 2 full months ago; and despite this:
>
> 1. Fixing a serious bug in ACPICA
> 2. The fix being pretty simple (and AFAICT obviously correct)
>
> This is still awaiting review upstream:
> https://github.com/acpica/acpica/pull/658
>
> I must say that it feels to me that the upstream ACPICA process is broken here.
>
> I submitted a pull-req for this, as requested and after that there has
> been zero progress.
>
> The pull-req even has a 26 day old "this looks good to me" comment from Erik,
> followed by silence... ?
>
> Rafael, can you please consider just directly picking these 2 fixes into
> your acpi branch, so that we can get this nasty race condition fixed ?
I will do that later this week, thanks!
1 year, 5 months
[pm:bleeding-edge] BUILD SUCCESS 95abaaccf8453a965f85402a03848cd82489e7a6
by kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge
branch HEAD: 95abaaccf8453a965f85402a03848cd82489e7a6 Merge branch 'pm-cpuidle' into bleeding-edge
elapsed time: 723m
configs tested: 97
configs skipped: 2
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
arm axm55xx_defconfig
arm clps711x_defconfig
sh landisk_defconfig
sh edosk7760_defconfig
arm realview_defconfig
arm integrator_defconfig
powerpc64 defconfig
arc alldefconfig
microblaze mmu_defconfig
powerpc mpc834x_mds_defconfig
mips nlm_xlp_defconfig
mips jazz_defconfig
arm rpc_defconfig
arm lpc32xx_defconfig
arm badge4_defconfig
mips maltaaprp_defconfig
openrisc defconfig
powerpc ppc6xx_defconfig
powerpc mpc83xx_defconfig
h8300 defconfig
ia64 allmodconfig
ia64 defconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nios2 defconfig
arc allyesconfig
nds32 allnoconfig
c6x allyesconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha defconfig
alpha allyesconfig
xtensa allyesconfig
h8300 allyesconfig
arc defconfig
sh allmodconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
sparc defconfig
i386 tinyconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
x86_64 randconfig-a006-20210209
x86_64 randconfig-a001-20210209
x86_64 randconfig-a005-20210209
x86_64 randconfig-a004-20210209
x86_64 randconfig-a002-20210209
x86_64 randconfig-a003-20210209
i386 randconfig-a003-20210212
i386 randconfig-a005-20210212
i386 randconfig-a002-20210212
i386 randconfig-a001-20210212
i386 randconfig-a004-20210212
i386 randconfig-a006-20210212
i386 randconfig-a016-20210209
i386 randconfig-a013-20210209
i386 randconfig-a012-20210209
i386 randconfig-a014-20210209
i386 randconfig-a011-20210209
i386 randconfig-a015-20210209
riscv nommu_k210_defconfig
riscv allyesconfig
riscv nommu_virt_defconfig
riscv allnoconfig
riscv defconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 rhel
x86_64 allyesconfig
x86_64 rhel-7.6-kselftests
x86_64 defconfig
x86_64 rhel-8.3
x86_64 rhel-8.3-kbuiltin
x86_64 kexec
clang tested configs:
x86_64 randconfig-a013-20210209
x86_64 randconfig-a014-20210209
x86_64 randconfig-a015-20210209
x86_64 randconfig-a012-20210209
x86_64 randconfig-a016-20210209
x86_64 randconfig-a011-20210209
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
1 year, 5 months
[pm:bleeding-edge] BUILD SUCCESS a252d5aadd29535c832752b6815b4a890b4ef44c
by kernel test robot
tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge
branch HEAD: a252d5aadd29535c832752b6815b4a890b4ef44c Merge branch 'pm-devfreq' into bleeding-edge
elapsed time: 728m
configs tested: 96
configs skipped: 2
The following configs have been built successfully.
More configs may be tested in the coming days.
gcc tested configs:
arm defconfig
arm64 allyesconfig
arm64 defconfig
arm allyesconfig
arm allmodconfig
sh r7785rp_defconfig
sparc64 defconfig
sh shmin_defconfig
powerpc tqm8540_defconfig
mips ci20_defconfig
xtensa virt_defconfig
sh kfr2r09-romimage_defconfig
powerpc mpc8560_ads_defconfig
mips rs90_defconfig
arm s5pv210_defconfig
arc allyesconfig
m68k m5475evb_defconfig
arm stm32_defconfig
mips malta_defconfig
m68k mvme147_defconfig
arm imx_v4_v5_defconfig
arm am200epdkit_defconfig
powerpc cell_defconfig
microblaze mmu_defconfig
sh sh7785lcr_32bit_defconfig
ia64 allmodconfig
ia64 defconfig
ia64 allyesconfig
m68k allmodconfig
m68k defconfig
m68k allyesconfig
nds32 defconfig
nios2 allyesconfig
csky defconfig
alpha defconfig
alpha allyesconfig
xtensa allyesconfig
h8300 allyesconfig
arc defconfig
sh allmodconfig
nios2 defconfig
nds32 allnoconfig
c6x allyesconfig
parisc defconfig
s390 allyesconfig
s390 allmodconfig
parisc allyesconfig
s390 defconfig
i386 allyesconfig
sparc allyesconfig
sparc defconfig
i386 tinyconfig
i386 defconfig
mips allyesconfig
mips allmodconfig
powerpc allyesconfig
powerpc allmodconfig
powerpc allnoconfig
x86_64 randconfig-a006-20210209
x86_64 randconfig-a001-20210209
x86_64 randconfig-a005-20210209
x86_64 randconfig-a004-20210209
x86_64 randconfig-a002-20210209
x86_64 randconfig-a003-20210209
i386 randconfig-a001-20210209
i386 randconfig-a005-20210209
i386 randconfig-a003-20210209
i386 randconfig-a002-20210209
i386 randconfig-a006-20210209
i386 randconfig-a004-20210209
i386 randconfig-a016-20210209
i386 randconfig-a013-20210209
i386 randconfig-a012-20210209
i386 randconfig-a014-20210209
i386 randconfig-a011-20210209
i386 randconfig-a015-20210209
riscv nommu_k210_defconfig
riscv allyesconfig
riscv nommu_virt_defconfig
riscv allnoconfig
riscv defconfig
riscv rv32_defconfig
riscv allmodconfig
x86_64 rhel
x86_64 allyesconfig
x86_64 rhel-7.6-kselftests
x86_64 defconfig
x86_64 rhel-8.3
x86_64 rhel-8.3-kbuiltin
x86_64 kexec
clang tested configs:
x86_64 randconfig-a013-20210209
x86_64 randconfig-a014-20210209
x86_64 randconfig-a015-20210209
x86_64 randconfig-a012-20210209
x86_64 randconfig-a016-20210209
x86_64 randconfig-a011-20210209
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
1 year, 5 months