mem.c (256694) | mem.c (278886) |
---|---|
1/* 2 * Copyright (c) 2009-2013 Chelsio, Inc. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: --- 16 unchanged lines hidden (view full) --- 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32#include <sys/cdefs.h> | 1/* 2 * Copyright (c) 2009-2013 Chelsio, Inc. All rights reserved. 3 * 4 * This software is available to you under a choice of one of two 5 * licenses. You may choose to be licensed under the terms of the GNU 6 * General Public License (GPL) Version 2, available from the file 7 * COPYING in the main directory of this source tree, or the 8 * OpenIB.org BSD license below: --- 16 unchanged lines hidden (view full) --- 25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 * SOFTWARE. 31 */ 32#include <sys/cdefs.h> |
33__FBSDID("$FreeBSD: head/sys/dev/cxgbe/iw_cxgbe/mem.c 256694 2013-10-17 18:37:25Z np $"); | 33__FBSDID("$FreeBSD: head/sys/dev/cxgbe/iw_cxgbe/mem.c 278886 2015-02-17 08:40:27Z hselasky $"); |
34 35#include "opt_inet.h" 36 37#ifdef TCP_OFFLOAD 38#include <linux/types.h> 39#include <linux/kref.h> 40#include <rdma/ib_umem.h> 41#include <asm/atomic.h> --- 516 unchanged lines hidden (view full) --- 558 return ERR_PTR(ret); 559} 560 561struct ib_mr *c4iw_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, 562 u64 virt, int acc, struct ib_udata *udata, int mr_id) 563{ 564 __be64 *pages; 565 int shift, n, len; | 34 35#include "opt_inet.h" 36 37#ifdef TCP_OFFLOAD 38#include <linux/types.h> 39#include <linux/kref.h> 40#include <rdma/ib_umem.h> 41#include <asm/atomic.h> --- 516 unchanged lines hidden (view full) --- 558 return ERR_PTR(ret); 559} 560 561struct ib_mr *c4iw_reg_user_mr(struct ib_pd *pd, u64 start, u64 length, 562 u64 virt, int acc, struct ib_udata *udata, int mr_id) 563{ 564 __be64 *pages; 565 int shift, n, len; |
566 int i, j, k; | 566 int i, k, entry; |
567 int err = 0; | 567 int err = 0; |
568 struct ib_umem_chunk *chunk; | 568 struct scatterlist *sg; |
569 struct c4iw_dev *rhp; 570 struct c4iw_pd *php; 571 struct c4iw_mr *mhp; 572 573 CTR2(KTR_IW_CXGBE, "%s ib_pd %p", __func__, pd); 574 575 if (length == ~0ULL) 576 return ERR_PTR(-EINVAL); --- 12 unchanged lines hidden (view full) --- 589 mhp->umem = ib_umem_get(pd->uobject->context, start, length, acc, 0); 590 if (IS_ERR(mhp->umem)) { 591 err = PTR_ERR(mhp->umem); 592 kfree(mhp); 593 return ERR_PTR(err); 594 } 595 596 shift = ffs(mhp->umem->page_size) - 1; | 569 struct c4iw_dev *rhp; 570 struct c4iw_pd *php; 571 struct c4iw_mr *mhp; 572 573 CTR2(KTR_IW_CXGBE, "%s ib_pd %p", __func__, pd); 574 575 if (length == ~0ULL) 576 return ERR_PTR(-EINVAL); --- 12 unchanged lines hidden (view full) --- 589 mhp->umem = ib_umem_get(pd->uobject->context, start, length, acc, 0); 590 if (IS_ERR(mhp->umem)) { 591 err = PTR_ERR(mhp->umem); 592 kfree(mhp); 593 return ERR_PTR(err); 594 } 595 596 shift = ffs(mhp->umem->page_size) - 1; |
597 598 n = 0; 599 list_for_each_entry(chunk, &mhp->umem->chunk_list, list) 600 n += chunk->nents; 601 | 597 598 n = mhp->umem->nmap; |
602 err = alloc_pbl(mhp, n); 603 if (err) 604 goto err; 605 606 pages = (__be64 *) __get_free_page(GFP_KERNEL); 607 if (!pages) { 608 err = -ENOMEM; 609 goto err_pbl; 610 } 611 612 i = n = 0; | 599 err = alloc_pbl(mhp, n); 600 if (err) 601 goto err; 602 603 pages = (__be64 *) __get_free_page(GFP_KERNEL); 604 if (!pages) { 605 err = -ENOMEM; 606 goto err_pbl; 607 } 608 609 i = n = 0; |
613 614 list_for_each_entry(chunk, &mhp->umem->chunk_list, list) 615 for (j = 0; j < chunk->nmap; ++j) { 616 len = sg_dma_len(&chunk->page_list[j]) >> shift; 617 for (k = 0; k < len; ++k) { 618 pages[i++] = cpu_to_be64(sg_dma_address( 619 &chunk->page_list[j]) + | 610 for_each_sg(mhp->umem->sg_head.sgl, sg, mhp->umem->nmap, entry) { 611 len = sg_dma_len(sg) >> shift; 612 for (k = 0; k < len; ++k) { 613 pages[i++] = cpu_to_be64(sg_dma_address(sg) + |
620 mhp->umem->page_size * k); | 614 mhp->umem->page_size * k); |
621 if (i == PAGE_SIZE / sizeof *pages) { 622 err = write_pbl(&mhp->rhp->rdev, 623 pages, 624 mhp->attr.pbl_addr + (n << 3), i); 625 if (err) 626 goto pbl_done; 627 n += i; 628 i = 0; 629 } | 615 if (i == PAGE_SIZE / sizeof *pages) { 616 err = write_pbl(&mhp->rhp->rdev, 617 pages, 618 mhp->attr.pbl_addr + (n << 3), i); 619 if (err) 620 goto pbl_done; 621 n += i; 622 i = 0; 623 |
630 } 631 } | 624 } 625 } |
626 } |
|
632 633 if (i) 634 err = write_pbl(&mhp->rhp->rdev, pages, 635 mhp->attr.pbl_addr + (n << 3), i); 636 637pbl_done: 638 free_page((unsigned long) pages); 639 if (err) --- 17 unchanged lines hidden (view full) --- 657 mhp->attr.pbl_size << 3); 658 659err: 660 ib_umem_release(mhp->umem); 661 kfree(mhp); 662 return ERR_PTR(err); 663} 664 | 627 628 if (i) 629 err = write_pbl(&mhp->rhp->rdev, pages, 630 mhp->attr.pbl_addr + (n << 3), i); 631 632pbl_done: 633 free_page((unsigned long) pages); 634 if (err) --- 17 unchanged lines hidden (view full) --- 652 mhp->attr.pbl_size << 3); 653 654err: 655 ib_umem_release(mhp->umem); 656 kfree(mhp); 657 return ERR_PTR(err); 658} 659 |
665struct ib_mw *c4iw_alloc_mw(struct ib_pd *pd) | 660struct ib_mw *c4iw_alloc_mw(struct ib_pd *pd, enum ib_mw_type type) |
666{ 667 struct c4iw_dev *rhp; 668 struct c4iw_pd *php; 669 struct c4iw_mw *mhp; 670 u32 mmid; 671 u32 stag = 0; 672 int ret; 673 --- 155 unchanged lines hidden --- | 661{ 662 struct c4iw_dev *rhp; 663 struct c4iw_pd *php; 664 struct c4iw_mw *mhp; 665 u32 mmid; 666 u32 stag = 0; 667 int ret; 668 --- 155 unchanged lines hidden --- |