Am 17.09.26 um 14:15 schrieb Eric Farman:
On 9/17/26 3:45 AM, Christian Borntraeger wrote:
Am 16.09.26 um 22:32 schrieb Eric Farman:
The ioctl to determine whether KVM_DEV_FLIC_CLEAR_IO_IRQ is present
receives the contents of the attribute struct as its payload,
rather than a pointer to the payload itself as is convention.
This may result in erroneous errors from the ioctl, which would
result in clear_io_supported being false when it otherwise could
be used (which is helpful in device recovery).
Cc: [email protected]
Fixes: 9eccb8622c ("s390x/kvm: add interface for clearing IO irqs")
Signed-off-by: Eric Farman <[email protected]>
---
hw/intc/s390_flic_kvm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/intc/s390_flic_kvm.c b/hw/intc/s390_flic_kvm.c
index f833a3996a..5e6d422fba 100644
--- a/hw/intc/s390_flic_kvm.c
+++ b/hw/intc/s390_flic_kvm.c
@@ -633,7 +633,7 @@ static void kvm_s390_flic_realize(DeviceState *dev, Error
**errp)
/* Check clear_io_irq support */
test_attr.group = KVM_DEV_FLIC_CLEAR_IO_IRQ;
flic_state->clear_io_supported = !ioctl(flic_state->fd,
- KVM_HAS_DEVICE_ATTR, test_attr);
+ KVM_HAS_DEVICE_ATTR, &test_attr);
}
static void kvm_s390_flic_reset(DeviceState *dev)
Certainly a correct fix but maybe its not as bad. Aggregates > 8 byte are
passed as
reference. Looks like the third argument is a pointer to a stack copy when
testing, so
the old code might have worked by accident.
Ah, thanks for the assembler, I should have looked at that.
As I was testing this, I became worried that this whole part of error recovery
was broken, but I was finding that clear_io_supported was already true even
without this patch. I presumed ioctl magic, and that seems to be the case.
Maybe drop the stable tags from this one then, since it's working "by design"
working by accident, not by design. Yes we can drop cc stable.
f8c: d2 0f f0 a8 f0 d8 mvc 168(16,%r15),216(%r15) <---
stack copy
f92: b9 14 00 20 lgfr %r2,%r0
f96: 41 40 f0 a8 la %r4,168(%r15) <-- pointer
f9a: c0 31 40 18 ae e3 lgfi %r3,1075359459
fa0: d2 07 f0 b8 f0 e8 mvc 184(8,%r15),232(%r15)
fa6: c0 e5 00 00 00 00 brasl %r14,fa6
<kvm_s390_flic_realize+0x136>
fa8: R_390_PLT32DBL ioctl+0x2
KVM_HAS_DEVICE_ATTR, test_attr);