On 30 Nov 2018, at 21:20, Kevin O'Connor firstname.lastname@example.org wrote:
On Wed, Nov 28, 2018 at 05:50:01PM +0200, Liran Alon wrote:
From: Nikita Leshchenko email@example.com
When mpt-scsi receives a SCSI message, it wraps it in a MPT request message and writes it's address to an IO port to be added to the request queue.
This MPT request is allocated on the stack. Previous to this commit, the request is aligned to 4 bytes. However, VirtualBox LSI53c1030 device emulation aligns the request address to 8 bytes. Therefore, this commit change alignment of request to 8 bytes.
VirtualBox source code which handles this is at Devices/Storage/DevLsiLogicSCSI.cpp. lsilogicRegisterWrite() LSILOGIC_REG_REQUEST_QUEUE handler adds the request to the queue (pRequestQueueBase). lsilogicR3Worker() reads request from pRequestQueueBase and aligns it to 8 bytes (u32RequestMessageFrameDesc & ~0x07).
Thanks. Is this change done to match virtualbox, or because it fixes some type of problem?
It can be seen from QEMU’s mptsas_mmio_write() MPI_REQUEST_POST_FIFO_OFFSET handler that QEMU aligns this value to 4 bytes which matches current SeaBIOS code.
However QEMU only emulates LSISAS1068 and not LSILOGIC53C1030. This mpt-scsi.c SeaBIOS driver is suppose to handle both devices.
Therefore, we thought that maybe LSILOGIC53C1030 does requires value to be aligned to 8 bytes. In contrast to LSISAS1068. Deduced from VirtualBox device emulation.