.. | .. |
---|
58 | 58 | u64 uvirt; |
---|
59 | 59 | struct scatterlist mem; |
---|
60 | 60 | int refcount; |
---|
61 | | - } page[0]; |
---|
| 61 | + } page[]; |
---|
62 | 62 | }; |
---|
63 | 63 | |
---|
64 | 64 | static void mthca_free_icm_pages(struct mthca_dev *dev, struct mthca_icm_chunk *chunk) |
---|
.. | .. |
---|
472 | 472 | goto out; |
---|
473 | 473 | } |
---|
474 | 474 | |
---|
475 | | - ret = get_user_pages_fast(uaddr & PAGE_MASK, 1, FOLL_WRITE, pages); |
---|
| 475 | + ret = pin_user_pages_fast(uaddr & PAGE_MASK, 1, |
---|
| 476 | + FOLL_WRITE | FOLL_LONGTERM, pages); |
---|
476 | 477 | if (ret < 0) |
---|
477 | 478 | goto out; |
---|
478 | 479 | |
---|
.. | .. |
---|
481 | 482 | |
---|
482 | 483 | ret = pci_map_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); |
---|
483 | 484 | if (ret < 0) { |
---|
484 | | - put_page(pages[0]); |
---|
| 485 | + unpin_user_page(pages[0]); |
---|
485 | 486 | goto out; |
---|
486 | 487 | } |
---|
487 | 488 | |
---|
.. | .. |
---|
489 | 490 | mthca_uarc_virt(dev, uar, i)); |
---|
490 | 491 | if (ret) { |
---|
491 | 492 | pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); |
---|
492 | | - put_page(sg_page(&db_tab->page[i].mem)); |
---|
| 493 | + unpin_user_page(sg_page(&db_tab->page[i].mem)); |
---|
493 | 494 | goto out; |
---|
494 | 495 | } |
---|
495 | 496 | |
---|
.. | .. |
---|
555 | 556 | if (db_tab->page[i].uvirt) { |
---|
556 | 557 | mthca_UNMAP_ICM(dev, mthca_uarc_virt(dev, uar, i), 1); |
---|
557 | 558 | pci_unmap_sg(dev->pdev, &db_tab->page[i].mem, 1, PCI_DMA_TODEVICE); |
---|
558 | | - put_page(sg_page(&db_tab->page[i].mem)); |
---|
| 559 | + unpin_user_page(sg_page(&db_tab->page[i].mem)); |
---|
559 | 560 | } |
---|
560 | 561 | } |
---|
561 | 562 | |
---|
.. | .. |
---|
623 | 624 | page = dev->db_tab->page + end; |
---|
624 | 625 | |
---|
625 | 626 | alloc: |
---|
626 | | - page->db_rec = dma_zalloc_coherent(&dev->pdev->dev, MTHCA_ICM_PAGE_SIZE, |
---|
627 | | - &page->mapping, GFP_KERNEL); |
---|
| 627 | + page->db_rec = dma_alloc_coherent(&dev->pdev->dev, |
---|
| 628 | + MTHCA_ICM_PAGE_SIZE, &page->mapping, |
---|
| 629 | + GFP_KERNEL); |
---|
628 | 630 | if (!page->db_rec) { |
---|
629 | 631 | ret = -ENOMEM; |
---|
630 | 632 | goto out; |
---|