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