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.


Reply via email to