Thread (25 messages) flat view 25 messages, 4 authors, 2021-03-03

Re: [RFC 13/13] scsi: megaraid: Make use of dev_64bit_mmio_supported()

From: Arnd Bergmann <arnd@kernel.org>
Date: 2021-02-26 14:31:56
Also in: linux-arm-kernel, lkml

On Fri, Feb 26, 2021 at 3:03 PM Nicolas Saenz Julienne
[off-list ref] wrote:
        unsigned long flags;
-       spin_lock_irqsave(&instance->hba_lock, flags);
-       writel(le32_to_cpu(req_desc->u.low),
-               &instance->reg_set->inbound_low_queue_port);
-       writel(le32_to_cpu(req_desc->u.high),
-               &instance->reg_set->inbound_high_queue_port);
-       spin_unlock_irqrestore(&instance->hba_lock, flags);
+
+       if (dev_64bit_mmio_supported(&instance->pdev->dev)) {
+               writeq(req_data, &instance->reg_set->inbound_low_queue_port);
+       } else {
+               spin_lock_irqsave(&instance->hba_lock, flags);
+               lo_hi_writeq(req_data, &instance->reg_set->inbound_low_queue_port);
+               spin_unlock_irqrestore(&instance->hba_lock, flags);
+       }
I see your patch changes the code to the lo_hi_writeq() accessor,
and it also fixes the endianness bug (double byteswap on big-endian),
but it does not fix the spinlock bug (writel on pci leaks out of the lock
unless it's followed by a read).

I'd suggest splitting the bugfix from the cleanup here, and fixing both
of the bugs while you're at it.

      Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help