staticint dmapool_test_alloc(struct dma_pool_pair *p, int blocks)
{ int i;
for (i = 0; i < blocks; i++) {
p[i].v = dma_pool_alloc(pool, GFP_KERNEL,
&p[i].dma); if (!p[i].v) goto pool_fail;
}
for (i = 0; i < blocks; i++)
dma_pool_free(pool, p[i].v, p[i].dma);
return 0;
pool_fail: for (--i; i >= 0; i--)
dma_pool_free(pool, p[i].v, p[i].dma); return -ENOMEM;
}
staticint dmapool_test_block(conststruct dmapool_parms *parms)
{ int blocks = nr_blocks(parms->size);
ktime_t start_time, end_time; struct dma_pool_pair *p; int i, ret;
p = kcalloc(blocks, sizeof(*p), GFP_KERNEL); if (!p) return -ENOMEM;
pool = dma_pool_create("test pool", &test_dev, parms->size,
parms->align, parms->boundary); if (!pool) {
ret = -ENOMEM; goto free_pairs;
}
start_time = ktime_get(); for (i = 0; i < NR_TESTS; i++) {
ret = dmapool_test_alloc(p, blocks); if (ret) goto free_pool; if (need_resched())
cond_resched();
}
end_time = ktime_get();
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.