mirror of
https://git.proxmox.com/git/qemu
synced 2025-06-15 03:49:07 +00:00
use qemu_blockalign consistently
Use qemu_blockalign for all allocations in the block layer. This allows increasing the required alignment, which is need to support O_DIRECT on devices with large block sizes. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
a655211ac6
commit
72aef7318f
@ -70,14 +70,15 @@ struct SCSIDiskState
|
|||||||
char *serial;
|
char *serial;
|
||||||
};
|
};
|
||||||
|
|
||||||
static SCSIDiskReq *scsi_new_request(SCSIDevice *d, uint32_t tag, uint32_t lun)
|
static SCSIDiskReq *scsi_new_request(SCSIDiskState *s, uint32_t tag,
|
||||||
|
uint32_t lun)
|
||||||
{
|
{
|
||||||
SCSIRequest *req;
|
SCSIRequest *req;
|
||||||
SCSIDiskReq *r;
|
SCSIDiskReq *r;
|
||||||
|
|
||||||
req = scsi_req_alloc(sizeof(SCSIDiskReq), d, tag, lun);
|
req = scsi_req_alloc(sizeof(SCSIDiskReq), &s->qdev, tag, lun);
|
||||||
r = DO_UPCAST(SCSIDiskReq, req, req);
|
r = DO_UPCAST(SCSIDiskReq, req, req);
|
||||||
r->iov.iov_base = qemu_memalign(512, SCSI_DMA_BUF_SIZE);
|
r->iov.iov_base = qemu_blockalign(s->bs, SCSI_DMA_BUF_SIZE);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -939,7 +940,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
|
|||||||
}
|
}
|
||||||
/* ??? Tags are not unique for different luns. We only implement a
|
/* ??? Tags are not unique for different luns. We only implement a
|
||||||
single lun, so this should not matter. */
|
single lun, so this should not matter. */
|
||||||
r = scsi_new_request(d, tag, lun);
|
r = scsi_new_request(s, tag, lun);
|
||||||
outbuf = (uint8_t *)r->iov.iov_base;
|
outbuf = (uint8_t *)r->iov.iov_base;
|
||||||
is_write = 0;
|
is_write = 0;
|
||||||
DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0]);
|
DPRINTF("Command: lun=%d tag=0x%x data=0x%02x", lun, tag, buf[0]);
|
||||||
|
2
hw/sd.c
2
hw/sd.c
@ -440,7 +440,7 @@ SDState *sd_init(BlockDriverState *bs, int is_spi)
|
|||||||
SDState *sd;
|
SDState *sd;
|
||||||
|
|
||||||
sd = (SDState *) qemu_mallocz(sizeof(SDState));
|
sd = (SDState *) qemu_mallocz(sizeof(SDState));
|
||||||
sd->buf = qemu_memalign(512, 512);
|
sd->buf = qemu_blockalign(bs, 512);
|
||||||
sd->spi = is_spi;
|
sd->spi = is_spi;
|
||||||
sd->enable = 1;
|
sd->enable = 1;
|
||||||
sd_reset(sd, bs);
|
sd_reset(sd, bs);
|
||||||
|
@ -270,7 +270,7 @@ static ssize_t handle_aiocb_rw(struct qemu_paiocb *aiocb)
|
|||||||
* Ok, we have to do it the hard way, copy all segments into
|
* Ok, we have to do it the hard way, copy all segments into
|
||||||
* a single aligned buffer.
|
* a single aligned buffer.
|
||||||
*/
|
*/
|
||||||
buf = qemu_memalign(512, aiocb->aio_nbytes);
|
buf = qemu_blockalign(aiocb->common.bs, aiocb->aio_nbytes);
|
||||||
if (aiocb->aio_type & QEMU_AIO_WRITE) {
|
if (aiocb->aio_type & QEMU_AIO_WRITE) {
|
||||||
char *p = buf;
|
char *p = buf;
|
||||||
int i;
|
int i;
|
||||||
|
@ -61,7 +61,7 @@ static void *qemu_io_alloc(size_t len, int pattern)
|
|||||||
|
|
||||||
if (misalign)
|
if (misalign)
|
||||||
len += MISALIGN_OFFSET;
|
len += MISALIGN_OFFSET;
|
||||||
buf = qemu_memalign(512, len);
|
buf = qemu_blockalign(bs, len);
|
||||||
memset(buf, pattern, len);
|
memset(buf, pattern, len);
|
||||||
if (misalign)
|
if (misalign)
|
||||||
buf += MISALIGN_OFFSET;
|
buf += MISALIGN_OFFSET;
|
||||||
|
@ -446,7 +446,7 @@ int main(int argc, char **argv)
|
|||||||
max_fd = sharing_fds[0];
|
max_fd = sharing_fds[0];
|
||||||
nb_fds++;
|
nb_fds++;
|
||||||
|
|
||||||
data = qemu_memalign(512, NBD_BUFFER_SIZE);
|
data = qemu_blockalign(bs, NBD_BUFFER_SIZE);
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
errx(EXIT_FAILURE, "Cannot allocate data buffer");
|
errx(EXIT_FAILURE, "Cannot allocate data buffer");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user