Deleted Added
full compact
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 ---