AR_BUFFERS
BUILD_BUG_ON(AR_BUFFERS * sizeof(struct descriptor) > PAGE_SIZE/4);
for (int i = 0; i < AR_BUFFERS; ++i) {
release_pages(ctx->pages, AR_BUFFERS);
return (index + 1) % AR_BUFFERS;
void *buffer_end = ctx->buffer + AR_BUFFERS * PAGE_SIZE;
p -= AR_BUFFERS * PAGE_SIZE;
struct page *pages[AR_BUFFERS + AR_WRAPAROUND_PAGES] = { NULL };
dma_addr_t dma_addrs[AR_BUFFERS];
unsigned long nr_populated = alloc_pages_bulk(GFP_KERNEL | GFP_DMA32, AR_BUFFERS, pages);
if (nr_populated != AR_BUFFERS) {
pages[AR_BUFFERS + i] = pages[i];
for (i = 0; i < AR_BUFFERS; i++) {
if (i < AR_BUFFERS) {
for (i = 0; i < AR_BUFFERS; i++) {
for (i = 0; i < AR_BUFFERS; i++)
struct page *pages[AR_BUFFERS];
dma_addr_t dma_addrs[AR_BUFFERS];