Index: drivers/sound/via82cxxx_audio.c =================================================================== RCS file: /cvsroot/gkernel/linux_2_4/drivers/sound/via82cxxx_audio.c,v retrieving revision 1.1.1.6.4.1 diff -u -r1.1.1.6.4.1 via82cxxx_audio.c --- drivers/sound/via82cxxx_audio.c 2000/10/27 08:21:41 1.1.1.6.4.1 +++ drivers/sound/via82cxxx_audio.c 2000/10/30 19:57:21 @@ -226,6 +226,7 @@ struct via_sgd_data { dma_addr_t handle; void *cpuaddr; + struct page *page; }; @@ -626,6 +627,7 @@ if (!chan->sgbuf[i].cpuaddr) goto err_out_nomem; + chan->sgbuf[i].page = virt_to_page (chan->sgbuf[i].cpuaddr); if (i < (VIA_DMA_BUFFERS - 1)) chan->sgtable[i].count = cpu_to_le32 (VIA_DMA_BUF_SIZE | VIA_FLAG); @@ -722,6 +724,7 @@ chan->sgbuf[i].handle); chan->sgbuf[i].cpuaddr = NULL; chan->sgbuf[i].handle = 0; + chan->sgbuf[i].page = NULL; } if (chan->sgtable) { @@ -1717,9 +1720,11 @@ } else if (!wr) chan = &card->ch_in; + assert (chan->sgbuf[pgoff].cpuaddr != NULL); + assert (chan->sgbuf[pgoff].page != NULL); assert ((((unsigned long)chan->sgbuf[pgoff].cpuaddr) % PAGE_SIZE) == 0); - dmapage = virt_to_page (chan->sgbuf[pgoff].cpuaddr); + dmapage = chan->sgbuf[pgoff].page; DPRINTK ("EXIT, returning page %p for cpuaddr %lXh\n", dmapage, (unsigned long) chan->sgbuf[pgoff].cpuaddr); get_page (dmapage);