On 12/10/2025 05:07, Damien Zammit wrote:
Mike, I hope you don't mind me refactoring your patches and mailing them
in. This provides corrected IRQ selection by matching _PRT to the INTx
pins of each pci device that is requested. I changed the logic from
your original patch such that it now fails if the pci_pin == 0 since
it's supposed to be a non-zero value. In this case it will fall back to
using the other method of selection.
Also, I made the acpi code hard fail if it can't configure the pic mode,
since it is a hard requirement for acpi server to work correctly.
I don't mind you altering my proposal at all; you certainly have a
vastly superior understanding of the whole system than I do. Can I check
with you though that the changes do still work in your test environment
? It doesn't behave correctly in mine and fails to set the PIC mode
with a kernel supporting IRQGETPICMODE.
I hope this is just a failing at my end, but I noticed that you also
removed the 2nd call to device_get_status() that I added. I added a
printf to your revised patch to illustrate what I receive from that
single call:
printf("PIC mode returned: %s: %d: %d: %d\n", strerror(err), err, cnt,
*pic_mode);
Old kernel:
PIC mode returned: Function not implemented: 1073741902: 0: -1
Cannot determine PIC mode: Function not implemented
New Kernel:
PIC mode returned: (ipc/mig) array not large enough: -307: 1: -1
Cannot determine PIC mode: (ipc/mig) array not large enough
Note that the call to device_get_status() does indeed return 1 but it
does not populate the 'pic_mode' into the return status array because
the input array length is set to 0. That case was why I thought it was
necessary for the 2nd call to device_get_status().
All the best,
Mike.