Revision c16b5a2c dma-helpers.c
b/dma-helpers.c | ||
---|---|---|
10 | 10 |
#include "dma.h" |
11 | 11 |
#include "block_int.h" |
12 | 12 |
|
13 |
static AIOPool dma_aio_pool; |
|
14 |
|
|
15 | 13 |
void qemu_sglist_init(QEMUSGList *qsg, int alloc_hint) |
16 | 14 |
{ |
17 | 15 |
qsg->sg = qemu_malloc(alloc_hint * sizeof(ScatterGatherEntry)); |
... | ... | |
132 | 130 |
} |
133 | 131 |
} |
134 | 132 |
|
133 |
static void dma_aio_cancel(BlockDriverAIOCB *acb) |
|
134 |
{ |
|
135 |
DMAAIOCB *dbs = container_of(acb, DMAAIOCB, common); |
|
136 |
|
|
137 |
if (dbs->acb) { |
|
138 |
bdrv_aio_cancel(dbs->acb); |
|
139 |
} |
|
140 |
} |
|
141 |
|
|
142 |
static AIOPool dma_aio_pool = { |
|
143 |
.aiocb_size = sizeof(DMAAIOCB), |
|
144 |
.cancel = dma_aio_cancel, |
|
145 |
}; |
|
146 |
|
|
135 | 147 |
static BlockDriverAIOCB *dma_bdrv_io( |
136 | 148 |
BlockDriverState *bs, QEMUSGList *sg, uint64_t sector_num, |
137 | 149 |
BlockDriverCompletionFunc *cb, void *opaque, |
138 | 150 |
int is_write) |
139 | 151 |
{ |
140 |
DMAAIOCB *dbs = qemu_aio_get_pool(&dma_aio_pool, bs, cb, opaque);
|
|
152 |
DMAAIOCB *dbs = qemu_aio_get(&dma_aio_pool, bs, cb, opaque); |
|
141 | 153 |
|
142 | 154 |
dbs->acb = NULL; |
143 | 155 |
dbs->bs = bs; |
... | ... | |
170 | 182 |
{ |
171 | 183 |
return dma_bdrv_io(bs, sg, sector, cb, opaque, 1); |
172 | 184 |
} |
173 |
|
|
174 |
static void dma_aio_cancel(BlockDriverAIOCB *acb) |
|
175 |
{ |
|
176 |
DMAAIOCB *dbs = container_of(acb, DMAAIOCB, common); |
|
177 |
|
|
178 |
if (dbs->acb) { |
|
179 |
bdrv_aio_cancel(dbs->acb); |
|
180 |
} |
|
181 |
} |
|
182 |
|
|
183 |
void dma_helper_init(void) |
|
184 |
{ |
|
185 |
aio_pool_init(&dma_aio_pool, sizeof(DMAAIOCB), dma_aio_cancel); |
|
186 |
} |
Also available in: Unified diff