Linux 5.10 fails to boot on my IceLake laptop, where 5.9 worked fine.
I'm not sure whether it's a bug in ACPI or Soundwire subsystem, so I'm
sending this to both
lists. The W taint flag is because of an unrelated nouveau failure (It
was busted on 5.9, and is
still on 5.10). Full kernel log down below.
It's from a distro kernel, but I can build my own kernel with patches if needed.
Please try to add a check for handle against NULL to
snd_intel_dsp_check_soundwire() after
handle = ACPI_HANDLE(&pci->dev);
and see if this makes any difference.
This should check handle against NULL anyway, even if it didn't crash later on.
Is there a way you can share the DSDT?
The only thing we do in that sdw_intel_acpi_scan() function is check for an
_ADR and read two _DSD properties. I think it's been 2 years since we wrote
it and never had an issue, never say never I guess...
If you want to bypass this problem for the time being, you can add a kernel
option in /etc/modprobe.d/alsa-base.conf
options snd-intel-dspcfg dsp_driver=1
that will force the use of the HDaudio legacy driver and bypass the driver
autodetection.
A user in Debian, Kubo Hiroshi reported what seems to be the same
issue in https://bugs.debian.org/981003 .
Thanks for connecting the dots.
I can only suggest the following patch, similar to what Rafael suggested
but this time done inside of the sdw_intel_acpi_scan() function which
has multiple users.
I still don't see what happens though, the code in drivers/acpi seems to
already check for bad pointers?
diff --git a/drivers/soundwire/intel_init.c b/drivers/soundwire/intel_init.c
index cabdadb09a1b..91f57f75a9e2 100644
--- a/drivers/soundwire/intel_init.c
+++ b/drivers/soundwire/intel_init.c
@@ -405,6 +405,9 @@ int sdw_intel_acpi_scan(acpi_handle *parent_handle,
{
acpi_status status;
+ if (!parent_handle)
+ return -ENODEV;
+
status = acpi_walk_namespace(ACPI_TYPE_DEVICE,
parent_handle, 1,
sdw_intel_acpi_cb,