On 20.06.2024 17:36, Matthew Barnes wrote: > There exists bitshifts in the IOAPIC code where signed integers are > shifted to the left by up to 31 bits, which is undefined behaviour. > > This patch fixes this by changing the integers from signed to unsigned. > > Signed-off-by: Matthew Barnes <matthew.bar...@cloud.com> > Reviewed-by: Jan Beulich <jbeul...@suse.com>
Only almost, ... > --- > Changes in v2: > - Correct signed shifting in mask_and_ack_level_ioapic_irq() > - Adjust bracket spacing to uphold Xen style ... as that was only half of what I had asked for. The other half was ... > --- a/xen/arch/x86/io_apic.c > +++ b/xen/arch/x86/io_apic.c > @@ -1692,7 +1692,7 @@ static void cf_check > mask_and_ack_level_ioapic_irq(struct irq_desc *desc) > !io_apic_level_ack_pending(desc->irq)) > move_masked_irq(desc); > > - if ( !(v & (1 << (i & 0x1f))) ) { > + if ( !(v & (1U << (i & 0x1f))) ) { > spin_lock(&ioapic_lock); > __edge_IO_APIC_irq(desc->irq); > __level_IO_APIC_irq(desc->irq); > @@ -1756,7 +1756,7 @@ static void cf_check end_level_ioapic_irq_new(struct > irq_desc *desc, u8 vector) > !io_apic_level_ack_pending(desc->irq) ) > move_native_irq(desc); > > - if (!(v & (1 << (i & 0x1f)))) { > + if ( !(v & (1U << (i & 0x1f))) ) { > spin_lock(&ioapic_lock); > __mask_IO_APIC_irq(desc->irq); > __edge_IO_APIC_irq(desc->irq); ... to put each opening figure brace on their own line. I guess Andrew or I will do that while committing then. Jan