--- zzzz-none-000/linux-2.6.19.2/drivers/infiniband/hw/amso1100/c2_cq.c 2007-01-10 19:10:37.000000000 +0000 +++ davinci-8020-5505/linux-2.6.19.2/drivers/infiniband/hw/amso1100/c2_cq.c 2007-01-11 07:38:19.000000000 +0000 @@ -246,17 +246,20 @@ static void c2_free_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq) { - dma_free_coherent(&c2dev->pcidev->dev, mq->q_size * mq->msg_size, - mq->msg_pool.host, pci_unmap_addr(mq, mapping)); + + dma_unmap_single(c2dev->ibdev.dma_device, pci_unmap_addr(mq, mapping), + mq->q_size * mq->msg_size, DMA_FROM_DEVICE); + free_pages((unsigned long) mq->msg_pool.host, + get_order(mq->q_size * mq->msg_size)); } static int c2_alloc_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq, int q_size, int msg_size) { - u8 *pool_start; + unsigned long pool_start; - pool_start = dma_alloc_coherent(&c2dev->pcidev->dev, q_size * msg_size, - &mq->host_dma, GFP_KERNEL); + pool_start = __get_free_pages(GFP_KERNEL, + get_order(q_size * msg_size)); if (!pool_start) return -ENOMEM; @@ -264,10 +267,13 @@ 0, /* index (currently unknown) */ q_size, msg_size, - pool_start, + (u8 *) pool_start, NULL, /* peer (currently unknown) */ C2_MQ_HOST_TARGET); + mq->host_dma = dma_map_single(c2dev->ibdev.dma_device, + (void *)pool_start, + q_size * msg_size, DMA_FROM_DEVICE); pci_unmap_addr_set(mq, mapping, mq->host_dma); return 0;