Re: next: x86_64: ahci 0000:00:1f.2: probe with driver ahci failed with error -12

From: Dan Carpenter
Date: Wed Aug 21 2024 - 08:07:46 EST


On Wed, Aug 14, 2024 at 03:56:56PM +0530, Naresh Kamboju wrote:
> On Wed, 14 Aug 2024 at 15:15, Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> wrote:
> >
> > The qemu-x86_64 boot failed with today's Linux next-20240814 tag due to
> > following crash.
> >
> > The catch here is the crash seen on both x86_64 device and qemu-x86_64
> > but x86_64 device is able to boot successfully.
> >
> > Reported-by: Linux Kernel Functional Testing <lkft@xxxxxxxxxx>
> >
> > Boot log:
> > ---
> > [ 0.000000] Linux version 6.11.0-rc3-next-20240814
> > (tuxmake@tuxmake) (x86_64-linux-gnu-gcc (Debian 13.3.0-1) 13.3.0, GNU
> > ld (GNU Binutils for Debian) 2.42.50.20240625) #1 SMP PREEMPT_DYNAMIC
> > @1723614704
> > ...
> > <6>[ 2.479915] scsi host0: ahci
> > <4>[ 2.484371] sysfs: cannot create duplicate filename
> > '/devices/virtual/workqueue/scsi_tmf_-1073661392'
^^^^^^^^^^^
Negative number. This comes from:

shost->tmf_work_q = alloc_workqueue("scsi_tmf_%d",
WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS,
1, shost->host_no);

shost->host_no comes from ida_alloc() and we have checked to ensure it's not
negative. The problem is the va_args changes in workqueue.c as Anders's bisect
shows.

kernel/workqueue.c
5627 static struct workqueue_struct *__alloc_workqueue(const char *fmt,
5628 unsigned int flags,
5629 int max_active, ...)
^^^
This should be a "va_list args" now.

5750 struct workqueue_struct *alloc_workqueue(const char *fmt,
5751 unsigned int flags,
5752 int max_active, ...)
5753 {
5754 struct workqueue_struct *wq;
5755 va_list args;
5756
5757 va_start(args, max_active);
5758 wq = __alloc_workqueue(fmt, flags, max_active, args);
^^^^
We're passing a va_list.

5759 va_end(args);

Any workqueue that has a format string is going to be broken now.

regards,
dan carpenter