Initial commit. Based on v4.17 master
authorVladimir Sokolovsky <vlad@mellanox.com>
Fri, 8 Jun 2018 21:37:22 +0000 (16:37 -0500)
committerVladimir Sokolovsky <vlad@mellanox.com>
Fri, 10 Aug 2018 19:17:09 +0000 (14:17 -0500)
Signed-off-by: Vladimir Sokolovsky <vlad@mellanox.com>
1256 files changed:
.gitignore [new file with mode: 0644]
block/blk-mq-rdma.c [new file with mode: 0644]
drivers/infiniband/Kconfig [new file with mode: 0644]
drivers/infiniband/Makefile [new file with mode: 0644]
drivers/infiniband/core/Makefile [new file with mode: 0644]
drivers/infiniband/core/addr.c [new file with mode: 0644]
drivers/infiniband/core/agent.c [new file with mode: 0644]
drivers/infiniband/core/agent.h [new file with mode: 0644]
drivers/infiniband/core/cache.c [new file with mode: 0644]
drivers/infiniband/core/cgroup.c [new file with mode: 0644]
drivers/infiniband/core/cm.c [new file with mode: 0644]
drivers/infiniband/core/cm_msgs.h [new file with mode: 0644]
drivers/infiniband/core/cma.c [new file with mode: 0644]
drivers/infiniband/core/cma_configfs.c [new file with mode: 0644]
drivers/infiniband/core/cma_priv.h [new file with mode: 0644]
drivers/infiniband/core/core_priv.h [new file with mode: 0644]
drivers/infiniband/core/cq.c [new file with mode: 0644]
drivers/infiniband/core/device.c [new file with mode: 0644]
drivers/infiniband/core/fmr_pool.c [new file with mode: 0644]
drivers/infiniband/core/iwcm.c [new file with mode: 0644]
drivers/infiniband/core/iwcm.h [new file with mode: 0644]
drivers/infiniband/core/iwpm_msg.c [new file with mode: 0644]
drivers/infiniband/core/iwpm_util.c [new file with mode: 0644]
drivers/infiniband/core/iwpm_util.h [new file with mode: 0644]
drivers/infiniband/core/mad.c [new file with mode: 0644]
drivers/infiniband/core/mad_priv.h [new file with mode: 0644]
drivers/infiniband/core/mad_rmpp.c [new file with mode: 0644]
drivers/infiniband/core/mad_rmpp.h [new file with mode: 0644]
drivers/infiniband/core/mr_pool.c [new file with mode: 0644]
drivers/infiniband/core/multicast.c [new file with mode: 0644]
drivers/infiniband/core/netlink.c [new file with mode: 0644]
drivers/infiniband/core/nldev.c [new file with mode: 0644]
drivers/infiniband/core/opa_smi.h [new file with mode: 0644]
drivers/infiniband/core/packer.c [new file with mode: 0644]
drivers/infiniband/core/rdma_core.c [new file with mode: 0644]
drivers/infiniband/core/rdma_core.h [new file with mode: 0644]
drivers/infiniband/core/restrack.c [new file with mode: 0644]
drivers/infiniband/core/roce_gid_mgmt.c [new file with mode: 0644]
drivers/infiniband/core/rw.c [new file with mode: 0644]
drivers/infiniband/core/sa.h [new file with mode: 0644]
drivers/infiniband/core/sa_query.c [new file with mode: 0644]
drivers/infiniband/core/security.c [new file with mode: 0644]
drivers/infiniband/core/smi.c [new file with mode: 0644]
drivers/infiniband/core/smi.h [new file with mode: 0644]
drivers/infiniband/core/sysfs.c [new file with mode: 0644]
drivers/infiniband/core/ucm.c [new file with mode: 0644]
drivers/infiniband/core/ucma.c [new file with mode: 0644]
drivers/infiniband/core/ud_header.c [new file with mode: 0644]
drivers/infiniband/core/umem.c [new file with mode: 0644]
drivers/infiniband/core/umem_odp.c [new file with mode: 0644]
drivers/infiniband/core/user_mad.c [new file with mode: 0644]
drivers/infiniband/core/uverbs.h [new file with mode: 0644]
drivers/infiniband/core/uverbs_cmd.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_ioctl.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_ioctl_merge.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_main.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_marshall.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_std_types.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_std_types_cq.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_std_types_dm.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_std_types_flow_action.c [new file with mode: 0644]
drivers/infiniband/core/uverbs_std_types_mr.c [new file with mode: 0644]
drivers/infiniband/core/verbs.c [new file with mode: 0644]
drivers/infiniband/hw/Makefile [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/Makefile [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/bnxt_re.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/hw_counters.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/hw_counters.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/ib_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/ib_verbs.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/main.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_fp.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_fp.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_rcfw.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_rcfw.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_res.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_res.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_sp.c [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/qplib_sp.h [new file with mode: 0644]
drivers/infiniband/hw/bnxt_re/roce_hsi.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/Makefile [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/cxio_hal.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/cxio_hal.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/cxio_resource.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/cxio_resource.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/cxio_wr.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_cm.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_cm.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_cq.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_ev.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_mem.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_provider.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_provider.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/iwch_qp.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb3/tcb.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/Makefile [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/cm.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/cq.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/device.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/ev.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/id_table.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/iw_cxgb4.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/mem.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/provider.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/qp.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/resource.c [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/t4.h [new file with mode: 0644]
drivers/infiniband/hw/cxgb4/t4fw_ri_api.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/hfi1/Makefile [new file with mode: 0644]
drivers/infiniband/hw/hfi1/affinity.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/affinity.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/aspm.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/chip.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/chip.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/chip_registers.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/common.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/debugfs.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/debugfs.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/device.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/device.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/driver.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/efivar.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/efivar.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/eprom.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/eprom.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/exp_rcv.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/exp_rcv.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/file_ops.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/firmware.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/hfi.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/init.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/intr.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/iowait.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/mad.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/mad.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/mmu_rb.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/mmu_rb.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/opa_compat.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/pcie.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/pio.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/pio.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/pio_copy.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/platform.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/platform.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/qp.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/qp.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/qsfp.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/qsfp.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/rc.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/ruc.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/sdma.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/sdma.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/sdma_txreq.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/sysfs.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_ctxts.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_dbg.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_ibhdrs.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_misc.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_mmu.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_rc.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_rx.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/trace_tx.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/uc.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/ud.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/user_exp_rcv.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/user_exp_rcv.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/user_pages.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/user_sdma.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/user_sdma.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/verbs.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/verbs.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/verbs_txreq.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/verbs_txreq.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/vnic.h [new file with mode: 0644]
drivers/infiniband/hw/hfi1/vnic_main.c [new file with mode: 0644]
drivers/infiniband/hw/hfi1/vnic_sdma.c [new file with mode: 0644]
drivers/infiniband/hw/hns/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/hns/Makefile [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_ah.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_alloc.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_cmd.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_cmd.h [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_common.h [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_cq.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_db.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_device.h [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_hem.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_hem.h [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_hw_v1.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_hw_v1.h [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_hw_v2.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_hw_v2.h [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_main.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_mr.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_pd.c [new file with mode: 0644]
drivers/infiniband/hw/hns/hns_roce_qp.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/i40iw/Makefile [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_cm.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_cm.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_ctrl.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_d.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_hmc.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_hmc.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_hw.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_main.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_osdep.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_p.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_pble.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_pble.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_puda.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_puda.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_register.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_status.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_type.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_uk.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_user.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_utils.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_verbs.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_vf.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_vf.h [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_virtchnl.c [new file with mode: 0644]
drivers/infiniband/hw/i40iw/i40iw_virtchnl.h [new file with mode: 0644]
drivers/infiniband/hw/mlx4/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/mlx4/Makefile [new file with mode: 0644]
drivers/infiniband/hw/mlx4/ah.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/alias_GUID.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/cm.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/cq.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/doorbell.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/mad.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/main.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/mcg.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/mlx4_ib.h [new file with mode: 0644]
drivers/infiniband/hw/mlx4/mr.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/qp.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/srq.c [new file with mode: 0644]
drivers/infiniband/hw/mlx4/sysfs.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/mlx5/Makefile [new file with mode: 0644]
drivers/infiniband/hw/mlx5/ah.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/cmd.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/cmd.h [new file with mode: 0644]
drivers/infiniband/hw/mlx5/cong.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/cq.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/doorbell.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/gsi.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/ib_rep.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/ib_rep.h [new file with mode: 0644]
drivers/infiniband/hw/mlx5/ib_virt.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/mad.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/main.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/mem.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/mlx5_ib.h [new file with mode: 0644]
drivers/infiniband/hw/mlx5/mr.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/odp.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/qp.c [new file with mode: 0644]
drivers/infiniband/hw/mlx5/srq.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/mthca/Makefile [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_allocator.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_av.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_catas.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_cmd.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_cmd.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_config_reg.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_cq.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_dev.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_doorbell.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_eq.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_mad.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_main.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_mcg.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_memfree.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_memfree.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_mr.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_pd.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_profile.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_profile.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_provider.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_provider.h [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_qp.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_reset.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_srq.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_uar.c [new file with mode: 0644]
drivers/infiniband/hw/mthca/mthca_wqe.h [new file with mode: 0644]
drivers/infiniband/hw/nes/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/nes/Makefile [new file with mode: 0644]
drivers/infiniband/hw/nes/nes.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes.h [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_cm.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_cm.h [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_context.h [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_hw.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_hw.h [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_mgt.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_mgt.h [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_nic.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_utils.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/nes/nes_verbs.h [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/Makefile [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma.h [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_ah.c [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_ah.h [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_hw.c [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_hw.h [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_main.c [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_sli.h [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_stats.c [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_stats.h [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/ocrdma/ocrdma_verbs.h [new file with mode: 0644]
drivers/infiniband/hw/qedr/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/qedr/Makefile [new file with mode: 0644]
drivers/infiniband/hw/qedr/main.c [new file with mode: 0644]
drivers/infiniband/hw/qedr/qedr.h [new file with mode: 0644]
drivers/infiniband/hw/qedr/qedr_hsi_rdma.h [new file with mode: 0644]
drivers/infiniband/hw/qedr/qedr_iw_cm.c [new file with mode: 0644]
drivers/infiniband/hw/qedr/qedr_iw_cm.h [new file with mode: 0644]
drivers/infiniband/hw/qedr/qedr_roce_cm.c [new file with mode: 0644]
drivers/infiniband/hw/qedr/qedr_roce_cm.h [new file with mode: 0644]
drivers/infiniband/hw/qedr/verbs.c [new file with mode: 0644]
drivers/infiniband/hw/qedr/verbs.h [new file with mode: 0644]
drivers/infiniband/hw/qib/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/qib/Makefile [new file with mode: 0644]
drivers/infiniband/hw/qib/qib.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_6120_regs.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_7220.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_7220_regs.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_7322_regs.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_common.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_debugfs.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_debugfs.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_diag.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_driver.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_eeprom.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_file_ops.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_fs.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_iba6120.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_iba7220.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_iba7322.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_init.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_intr.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_mad.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_mad.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_pcie.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_pio_copy.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_qp.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_qsfp.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_qsfp.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_rc.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_ruc.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_sd7220.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_sdma.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_sysfs.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_twsi.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_tx.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_uc.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_ud.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_user_pages.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_user_sdma.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_user_sdma.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_verbs.h [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_wc_ppc64.c [new file with mode: 0644]
drivers/infiniband/hw/qib/qib_wc_x86_64.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/usnic/Makefile [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_abi.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_common_pkt_hdr.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_common_util.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_debugfs.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_debugfs.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_fwd.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_fwd.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_main.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_qp_grp.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_qp_grp.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_sysfs.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_sysfs.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_ib_verbs.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_log.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_transport.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_transport.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_uiom.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_uiom.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_uiom_interval_tree.h [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_vnic.c [new file with mode: 0644]
drivers/infiniband/hw/usnic/usnic_vnic.h [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/Kconfig [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/Makefile [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma.h [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_cmd.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_cq.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_dev_api.h [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_doorbell.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_main.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_misc.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_mr.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_qp.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_ring.h [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_srq.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.c [new file with mode: 0644]
drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h [new file with mode: 0644]
drivers/infiniband/sw/Makefile [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/Kconfig [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/Makefile [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/ah.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/ah.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/cq.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/cq.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mad.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mad.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mcast.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mcast.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mmap.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mmap.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mr.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/mr.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/pd.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/pd.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/qp.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/qp.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/rc.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/srq.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/srq.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace_cq.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace_mr.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace_qp.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace_rc.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace_rvt.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/trace_tx.h [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/vt.c [new file with mode: 0644]
drivers/infiniband/sw/rdmavt/vt.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/Kconfig [new file with mode: 0644]
drivers/infiniband/sw/rxe/Makefile [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_av.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_comp.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_cq.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_hdr.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_hw_counters.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_hw_counters.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_icrc.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_loc.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_mcast.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_mmap.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_mr.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_net.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_net.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_opcode.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_opcode.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_param.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_pool.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_pool.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_qp.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_queue.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_queue.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_recv.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_req.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_resp.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_srq.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_sysfs.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_task.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_task.h [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_verbs.c [new file with mode: 0644]
drivers/infiniband/sw/rxe/rxe_verbs.h [new file with mode: 0644]
drivers/infiniband/ulp/Makefile [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/Kconfig [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/Makefile [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib.h [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_cm.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_ethtool.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_fs.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_ib.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_main.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_multicast.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_netlink.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_verbs.c [new file with mode: 0644]
drivers/infiniband/ulp/ipoib/ipoib_vlan.c [new file with mode: 0644]
drivers/infiniband/ulp/iser/Kconfig [new file with mode: 0644]
drivers/infiniband/ulp/iser/Makefile [new file with mode: 0644]
drivers/infiniband/ulp/iser/iscsi_iser.c [new file with mode: 0644]
drivers/infiniband/ulp/iser/iscsi_iser.h [new file with mode: 0644]
drivers/infiniband/ulp/iser/iser_initiator.c [new file with mode: 0644]
drivers/infiniband/ulp/iser/iser_memory.c [new file with mode: 0644]
drivers/infiniband/ulp/iser/iser_verbs.c [new file with mode: 0644]
drivers/infiniband/ulp/isert/Kconfig [new file with mode: 0644]
drivers/infiniband/ulp/isert/Makefile [new file with mode: 0644]
drivers/infiniband/ulp/isert/ib_isert.c [new file with mode: 0644]
drivers/infiniband/ulp/isert/ib_isert.h [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/Kconfig [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/Makefile [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.c [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_ethtool.c [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_internal.h [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_netdev.c [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_vema.c [new file with mode: 0644]
drivers/infiniband/ulp/opa_vnic/opa_vnic_vema_iface.c [new file with mode: 0644]
drivers/infiniband/ulp/srp/Kbuild [new file with mode: 0644]
drivers/infiniband/ulp/srp/Kconfig [new file with mode: 0644]
drivers/infiniband/ulp/srp/ib_srp.c [new file with mode: 0644]
drivers/infiniband/ulp/srp/ib_srp.h [new file with mode: 0644]
drivers/infiniband/ulp/srpt/Kconfig [new file with mode: 0644]
drivers/infiniband/ulp/srpt/Makefile [new file with mode: 0644]
drivers/infiniband/ulp/srpt/ib_dm_mad.h [new file with mode: 0644]
drivers/infiniband/ulp/srpt/ib_srpt.c [new file with mode: 0644]
drivers/infiniband/ulp/srpt/ib_srpt.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/Kconfig [new file with mode: 0644]
drivers/net/ethernet/broadcom/Makefile [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/Makefile [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_dcb.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_dim.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_fw_hdr.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_hsi.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_nvm_defs.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_sriov.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_tc.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_vfr.h [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c [new file with mode: 0644]
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/Kconfig [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/Makefile [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/adapter.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/ael1002.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/aq100x.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/common.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/cxgb3_ctl_defs.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/cxgb3_ioctl.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/cxgb3_main.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/firmware_exports.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/l2t.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/l2t.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/mc5.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/regs.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/sge.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/sge_defs.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/t3_cpl.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/t3_hw.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/t3cdev.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/version.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/vsc8211.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb3/xgmac.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/Makefile [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/clip_tbl.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_common.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_entity.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_if.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_lib_common.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_zlib.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cudbg_zlib.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_cudbg.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_cudbg.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_dcb.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_fcoe.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_filter.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_ptp.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32_parse.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/cxgb4_uld.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/l2t.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/l2t.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/sched.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/sched.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/sge.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/smt.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/smt.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/srq.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/srq.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_chip_type.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_hw.c [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_hw.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_msg.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_pci_id_tbl.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_regs.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_tcb.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4_values.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4fw_api.h [new file with mode: 0644]
drivers/net/ethernet/chelsio/cxgb4/t4fw_version.h [new file with mode: 0644]
drivers/net/ethernet/emulex/Kconfig [new file with mode: 0644]
drivers/net/ethernet/emulex/Makefile [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/Kconfig [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/Makefile [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be.h [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_cmds.c [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_cmds.h [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_hw.h [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_main.c [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_roce.c [new file with mode: 0644]
drivers/net/ethernet/emulex/benet/be_roce.h [new file with mode: 0644]
drivers/net/ethernet/intel/Kconfig [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/Makefile [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_adminq.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_adminq.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_adminq_cmd.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_alloc.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_client.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_client.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_common.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_dcb.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_dcb.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_dcb_nl.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_debugfs.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_devids.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_diag.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_diag.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_hmc.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_hmc.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_lan_hmc.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_lan_hmc.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_main.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_nvm.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_osdep.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_prototype.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_ptp.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_register.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_status.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_trace.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_txrx.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_txrx.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_type.h [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c [new file with mode: 0644]
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/Kconfig [new file with mode: 0644]
drivers/net/ethernet/mellanox/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/Kconfig [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/alloc.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/catas.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/cmd.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/cq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_clock.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_cq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_dcb_nl.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_main.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_netdev.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_port.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_port.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_resources.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_rx.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_selftest.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/en_tx.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/eq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/fw.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/fw.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/fw_qos.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/fw_qos.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/icm.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/icm.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/intf.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/main.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/mcg.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/mlx4.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/mlx4_stats.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/mr.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/pd.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/port.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/profile.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/qp.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/reset.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/resource_tracker.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/sense.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx4/srq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/Kconfig [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/accel/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/accel/ipsec.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/accel/ipsec.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/alloc.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/cmd.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/cq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/debugfs.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/dev.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/diag/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/diag/fs_tracepoint.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_accel/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_rxtx.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_rxtx.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_stats.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_arfs.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_common.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_dcbnl.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_dim.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_fs.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_main.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_rep.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_selftest.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_stats.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_stats.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_tc.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_tc.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_tx.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/en_txrx.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/eq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/cmd.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/cmd.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/conn.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/core.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/core.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/ipsec.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/ipsec.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/sdk.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fpga/sdk.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fs_cmd.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fs_core.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fs_counters.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/fw.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/health.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/ipoib/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lag.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/gid.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/mlx5.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/lib/mpfs.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/mad.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/main.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/mcg.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/mlx5_core.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/mr.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/pd.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/port.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/qp.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/rl.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/sriov.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/srq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/transobj.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/uar.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/vport.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/vxlan.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/vxlan.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/wq.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlx5/core/wq.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/Kconfig [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_fsm.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2_file.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2_format.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2_tlv.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2_tlv_multi.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxfw/mlxfw_mfa2_tlv_multi.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/Kconfig [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/Makefile [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/cmd.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_actions.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core_acl_flex_keys.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core_hwmon.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/core_thermal.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/emad.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/i2c.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/i2c.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/ib.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/item.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/minimal.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/pci.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/pci.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/pci_hw.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/port.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/reg.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/resources.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_actions.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_actions.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_flex_keys.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_cnt.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_dcb.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_dpipe.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_fid.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_flower.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_ipip.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_kvdl.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_mr_tcam.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_qdisc.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_router.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_span.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_span.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/spectrum_switchdev.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/switchib.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/switchx2.c [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/trap.h [new file with mode: 0644]
drivers/net/ethernet/mellanox/mlxsw/txheader.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/Kconfig [new file with mode: 0644]
drivers/net/ethernet/qlogic/Makefile [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/Makefile [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_ctx.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_hdr.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_hw.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_init.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/Makefile [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_cxt.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_cxt.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_dcbx.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_dcbx.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_debug.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_debug.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_dev.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_dev_api.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_fcoe.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_fcoe.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_hsi.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_hw.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_hw.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_init_fw_funcs.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_init_ops.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_init_ops.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_int.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_int.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_iscsi.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_iscsi.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_iwarp.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_iwarp.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_l2.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_l2.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_ll2.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_ll2.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_main.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_mcp.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_mcp.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_ooo.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_ooo.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_ptp.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_rdma.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_rdma.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_reg_addr.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_roce.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_roce.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_selftest.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_selftest.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_sp.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_sp_commands.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_spq.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_sriov.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_sriov.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_vf.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qed/qed_vf.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/Makefile [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_dcbnl.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_filter.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_fp.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_main.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_ptp.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_ptp.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qede/qede_rdma.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qla3xxx.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qla3xxx.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/Makefile [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_vnic.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ctx.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_dcb.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hdr.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_minidump.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_common.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sriov_pf.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlcnic/qlcnic_sysfs.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlge/Makefile [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlge/qlge.h [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlge/qlge_dbg.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlge/qlge_ethtool.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlge/qlge_main.c [new file with mode: 0644]
drivers/net/ethernet/qlogic/qlge/qlge_mpi.c [new file with mode: 0644]
drivers/nvme/Kconfig [new file with mode: 0644]
drivers/nvme/Makefile [new file with mode: 0644]
drivers/nvme/host/Kconfig [new file with mode: 0644]
drivers/nvme/host/Makefile [new file with mode: 0644]
drivers/nvme/host/core.c [new file with mode: 0644]
drivers/nvme/host/fabrics.c [new file with mode: 0644]
drivers/nvme/host/fabrics.h [new file with mode: 0644]
drivers/nvme/host/fault_inject.c [new file with mode: 0644]
drivers/nvme/host/fc.c [new file with mode: 0644]
drivers/nvme/host/lightnvm.c [new file with mode: 0644]
drivers/nvme/host/multipath.c [new file with mode: 0644]
drivers/nvme/host/nvme.h [new file with mode: 0644]
drivers/nvme/host/pci.c [new file with mode: 0644]
drivers/nvme/host/rdma.c [new file with mode: 0644]
drivers/nvme/host/trace.c [new file with mode: 0644]
drivers/nvme/host/trace.h [new file with mode: 0644]
drivers/nvme/target/Kconfig [new file with mode: 0644]
drivers/nvme/target/Makefile [new file with mode: 0644]
drivers/nvme/target/admin-cmd.c [new file with mode: 0644]
drivers/nvme/target/configfs.c [new file with mode: 0644]
drivers/nvme/target/core.c [new file with mode: 0644]
drivers/nvme/target/discovery.c [new file with mode: 0644]
drivers/nvme/target/fabrics-cmd.c [new file with mode: 0644]
drivers/nvme/target/fc.c [new file with mode: 0644]
drivers/nvme/target/fcloop.c [new file with mode: 0644]
drivers/nvme/target/io-cmd.c [new file with mode: 0644]
drivers/nvme/target/loop.c [new file with mode: 0644]
drivers/nvme/target/nvmet.h [new file with mode: 0644]
drivers/nvme/target/rdma.c [new file with mode: 0644]
drivers/scsi/Kconfig [new file with mode: 0644]
drivers/scsi/Makefile [new file with mode: 0644]
drivers/scsi/cxgbi/Kconfig [new file with mode: 0644]
drivers/scsi/cxgbi/Makefile [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb3i/Kbuild [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb3i/Kconfig [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb3i/cxgb3i.c [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb3i/cxgb3i.h [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb4i/Kbuild [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb4i/Kconfig [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb4i/cxgb4i.c [new file with mode: 0644]
drivers/scsi/cxgbi/cxgb4i/cxgb4i.h [new file with mode: 0644]
drivers/scsi/cxgbi/libcxgbi.c [new file with mode: 0644]
drivers/scsi/cxgbi/libcxgbi.h [new file with mode: 0644]
drivers/scsi/qedf/Kconfig [new file with mode: 0644]
drivers/scsi/qedf/Makefile [new file with mode: 0644]
drivers/scsi/qedf/drv_fcoe_fw_funcs.c [new file with mode: 0644]
drivers/scsi/qedf/drv_fcoe_fw_funcs.h [new file with mode: 0644]
drivers/scsi/qedf/drv_scsi_fw_funcs.c [new file with mode: 0644]
drivers/scsi/qedf/drv_scsi_fw_funcs.h [new file with mode: 0644]
drivers/scsi/qedf/qedf.h [new file with mode: 0644]
drivers/scsi/qedf/qedf_attr.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_dbg.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_dbg.h [new file with mode: 0644]
drivers/scsi/qedf/qedf_debugfs.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_els.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_fip.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_hsi.h [new file with mode: 0644]
drivers/scsi/qedf/qedf_io.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_main.c [new file with mode: 0644]
drivers/scsi/qedf/qedf_version.h [new file with mode: 0644]
drivers/scsi/qedi/Kconfig [new file with mode: 0644]
drivers/scsi/qedi/Makefile [new file with mode: 0644]
drivers/scsi/qedi/qedi.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_dbg.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_dbg.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_debugfs.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_fw.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_fw_api.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_fw_iscsi.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_fw_scsi.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_gbl.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_hsi.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_iscsi.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_iscsi.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_main.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_nvm_iscsi_cfg.h [new file with mode: 0644]
drivers/scsi/qedi/qedi_sysfs.c [new file with mode: 0644]
drivers/scsi/qedi/qedi_version.h [new file with mode: 0644]
drivers/scsi/scsi_priv.h [new file with mode: 0644]
drivers/scsi/scsi_transport_srp.c [new file with mode: 0644]
include/linux/blk-mq-rdma.h [new file with mode: 0644]
include/linux/cgroup_rdma.h [new file with mode: 0644]
include/linux/mlx4/cmd.h [new file with mode: 0644]
include/linux/mlx4/cq.h [new file with mode: 0644]
include/linux/mlx4/device.h [new file with mode: 0644]
include/linux/mlx4/doorbell.h [new file with mode: 0644]
include/linux/mlx4/driver.h [new file with mode: 0644]
include/linux/mlx4/qp.h [new file with mode: 0644]
include/linux/mlx4/srq.h [new file with mode: 0644]
include/linux/mlx5/accel.h [new file with mode: 0644]
include/linux/mlx5/cmd.h [new file with mode: 0644]
include/linux/mlx5/cq.h [new file with mode: 0644]
include/linux/mlx5/device.h [new file with mode: 0644]
include/linux/mlx5/doorbell.h [new file with mode: 0644]
include/linux/mlx5/driver.h [new file with mode: 0644]
include/linux/mlx5/eswitch.h [new file with mode: 0644]
include/linux/mlx5/fs.h [new file with mode: 0644]
include/linux/mlx5/fs_helpers.h [new file with mode: 0644]
include/linux/mlx5/mlx5_ifc.h [new file with mode: 0644]
include/linux/mlx5/mlx5_ifc_fpga.h [new file with mode: 0644]
include/linux/mlx5/port.h [new file with mode: 0644]
include/linux/mlx5/qp.h [new file with mode: 0644]
include/linux/mlx5/srq.h [new file with mode: 0644]
include/linux/mlx5/transobj.h [new file with mode: 0644]
include/linux/mlx5/vport.h [new file with mode: 0644]
include/linux/nvme-rdma.h [new file with mode: 0644]
include/linux/nvme.h [new file with mode: 0644]
include/linux/qed/common_hsi.h [new file with mode: 0644]
include/linux/qed/eth_common.h [new file with mode: 0644]
include/linux/qed/fcoe_common.h [new file with mode: 0644]
include/linux/qed/iscsi_common.h [new file with mode: 0644]
include/linux/qed/iwarp_common.h [new file with mode: 0644]
include/linux/qed/qed_chain.h [new file with mode: 0644]
include/linux/qed/qed_eth_if.h [new file with mode: 0644]
include/linux/qed/qed_fcoe_if.h [new file with mode: 0644]
include/linux/qed/qed_if.h [new file with mode: 0644]
include/linux/qed/qed_iov_if.h [new file with mode: 0644]
include/linux/qed/qed_iscsi_if.h [new file with mode: 0644]
include/linux/qed/qed_ll2_if.h [new file with mode: 0644]
include/linux/qed/qed_rdma_if.h [new file with mode: 0644]
include/linux/qed/qede_rdma.h [new file with mode: 0644]
include/linux/qed/rdma_common.h [new file with mode: 0644]
include/linux/qed/roce_common.h [new file with mode: 0644]
include/linux/qed/storage_common.h [new file with mode: 0644]
include/linux/qed/tcp_common.h [new file with mode: 0644]
include/linux/sunrpc/addr.h [new file with mode: 0644]
include/linux/sunrpc/auth.h [new file with mode: 0644]
include/linux/sunrpc/auth_gss.h [new file with mode: 0644]
include/linux/sunrpc/bc_xprt.h [new file with mode: 0644]
include/linux/sunrpc/cache.h [new file with mode: 0644]
include/linux/sunrpc/clnt.h [new file with mode: 0644]
include/linux/sunrpc/debug.h [new file with mode: 0644]
include/linux/sunrpc/gss_api.h [new file with mode: 0644]
include/linux/sunrpc/gss_asn1.h [new file with mode: 0644]
include/linux/sunrpc/gss_err.h [new file with mode: 0644]
include/linux/sunrpc/gss_krb5.h [new file with mode: 0644]
include/linux/sunrpc/gss_krb5_enctypes.h [new file with mode: 0644]
include/linux/sunrpc/metrics.h [new file with mode: 0644]
include/linux/sunrpc/msg_prot.h [new file with mode: 0644]
include/linux/sunrpc/rpc_pipe_fs.h [new file with mode: 0644]
include/linux/sunrpc/rpc_rdma.h [new file with mode: 0644]
include/linux/sunrpc/sched.h [new file with mode: 0644]
include/linux/sunrpc/stats.h [new file with mode: 0644]
include/linux/sunrpc/svc.h [new file with mode: 0644]
include/linux/sunrpc/svc_rdma.h [new file with mode: 0644]
include/linux/sunrpc/svc_xprt.h [new file with mode: 0644]
include/linux/sunrpc/svcauth.h [new file with mode: 0644]
include/linux/sunrpc/svcauth_gss.h [new file with mode: 0644]
include/linux/sunrpc/svcsock.h [new file with mode: 0644]
include/linux/sunrpc/timer.h [new file with mode: 0644]
include/linux/sunrpc/types.h [new file with mode: 0644]
include/linux/sunrpc/xdr.h [new file with mode: 0644]
include/linux/sunrpc/xprt.h [new file with mode: 0644]
include/linux/sunrpc/xprtmultipath.h [new file with mode: 0644]
include/linux/sunrpc/xprtrdma.h [new file with mode: 0644]
include/linux/sunrpc/xprtsock.h [new file with mode: 0644]
include/rdma/ib.h [new file with mode: 0644]
include/rdma/ib_addr.h [new file with mode: 0644]
include/rdma/ib_cache.h [new file with mode: 0644]
include/rdma/ib_cm.h [new file with mode: 0644]
include/rdma/ib_fmr_pool.h [new file with mode: 0644]
include/rdma/ib_hdrs.h [new file with mode: 0644]
include/rdma/ib_mad.h [new file with mode: 0644]
include/rdma/ib_marshall.h [new file with mode: 0644]
include/rdma/ib_pack.h [new file with mode: 0644]
include/rdma/ib_pma.h [new file with mode: 0644]
include/rdma/ib_sa.h [new file with mode: 0644]
include/rdma/ib_smi.h [new file with mode: 0644]
include/rdma/ib_umem.h [new file with mode: 0644]
include/rdma/ib_umem_odp.h [new file with mode: 0644]
include/rdma/ib_verbs.h [new file with mode: 0644]
include/rdma/iw_cm.h [new file with mode: 0644]
include/rdma/iw_portmap.h [new file with mode: 0644]
include/rdma/mr_pool.h [new file with mode: 0644]
include/rdma/opa_addr.h [new file with mode: 0644]
include/rdma/opa_port_info.h [new file with mode: 0644]
include/rdma/opa_smi.h [new file with mode: 0644]
include/rdma/opa_vnic.h [new file with mode: 0644]
include/rdma/rdma_cm.h [new file with mode: 0644]
include/rdma/rdma_cm_ib.h [new file with mode: 0644]
include/rdma/rdma_netlink.h [new file with mode: 0644]
include/rdma/rdma_vt.h [new file with mode: 0644]
include/rdma/rdmavt_cq.h [new file with mode: 0644]
include/rdma/rdmavt_mr.h [new file with mode: 0644]
include/rdma/rdmavt_qp.h [new file with mode: 0644]
include/rdma/restrack.h [new file with mode: 0644]
include/rdma/rw.h [new file with mode: 0644]
include/rdma/uverbs_ioctl.h [new file with mode: 0644]
include/rdma/uverbs_named_ioctl.h [new file with mode: 0644]
include/rdma/uverbs_std_types.h [new file with mode: 0644]
include/rdma/uverbs_types.h [new file with mode: 0644]
include/scsi/iser.h [new file with mode: 0644]
include/scsi/scsi_transport_srp.h [new file with mode: 0644]
include/scsi/srp.h [new file with mode: 0644]
include/uapi/linux/nvme_ioctl.h [new file with mode: 0644]
include/uapi/linux/rds.h [new file with mode: 0644]
include/uapi/rdma/bnxt_re-abi.h [new file with mode: 0644]
include/uapi/rdma/cxgb3-abi.h [new file with mode: 0644]
include/uapi/rdma/cxgb4-abi.h [new file with mode: 0644]
include/uapi/rdma/hfi/hfi1_ioctl.h [new file with mode: 0644]
include/uapi/rdma/hfi/hfi1_user.h [new file with mode: 0644]
include/uapi/rdma/hns-abi.h [new file with mode: 0644]
include/uapi/rdma/i40iw-abi.h [new file with mode: 0644]
include/uapi/rdma/ib_user_cm.h [new file with mode: 0644]
include/uapi/rdma/ib_user_ioctl_cmds.h [new file with mode: 0644]
include/uapi/rdma/ib_user_ioctl_verbs.h [new file with mode: 0644]
include/uapi/rdma/ib_user_mad.h [new file with mode: 0644]
include/uapi/rdma/ib_user_sa.h [new file with mode: 0644]
include/uapi/rdma/ib_user_verbs.h [new file with mode: 0644]
include/uapi/rdma/mlx4-abi.h [new file with mode: 0644]
include/uapi/rdma/mlx5-abi.h [new file with mode: 0644]
include/uapi/rdma/mlx5_user_ioctl_cmds.h [new file with mode: 0644]
include/uapi/rdma/mlx5_user_ioctl_verbs.h [new file with mode: 0644]
include/uapi/rdma/mthca-abi.h [new file with mode: 0644]
include/uapi/rdma/nes-abi.h [new file with mode: 0644]
include/uapi/rdma/ocrdma-abi.h [new file with mode: 0644]
include/uapi/rdma/qedr-abi.h [new file with mode: 0644]
include/uapi/rdma/rdma_netlink.h [new file with mode: 0644]
include/uapi/rdma/rdma_user_cm.h [new file with mode: 0644]
include/uapi/rdma/rdma_user_ioctl.h [new file with mode: 0644]
include/uapi/rdma/rdma_user_ioctl_cmds.h [new file with mode: 0644]
include/uapi/rdma/rdma_user_rxe.h [new file with mode: 0644]
include/uapi/rdma/vmw_pvrdma-abi.h [new file with mode: 0644]
net/rds/Kconfig [new file with mode: 0644]
net/rds/Makefile [new file with mode: 0644]
net/rds/af_rds.c [new file with mode: 0644]
net/rds/bind.c [new file with mode: 0644]
net/rds/cong.c [new file with mode: 0644]
net/rds/connection.c [new file with mode: 0644]
net/rds/ib.c [new file with mode: 0644]
net/rds/ib.h [new file with mode: 0644]
net/rds/ib_cm.c [new file with mode: 0644]
net/rds/ib_fmr.c [new file with mode: 0644]
net/rds/ib_frmr.c [new file with mode: 0644]
net/rds/ib_mr.h [new file with mode: 0644]
net/rds/ib_rdma.c [new file with mode: 0644]
net/rds/ib_recv.c [new file with mode: 0644]
net/rds/ib_ring.c [new file with mode: 0644]
net/rds/ib_send.c [new file with mode: 0644]
net/rds/ib_stats.c [new file with mode: 0644]
net/rds/ib_sysctl.c [new file with mode: 0644]
net/rds/info.c [new file with mode: 0644]
net/rds/info.h [new file with mode: 0644]
net/rds/loop.c [new file with mode: 0644]
net/rds/loop.h [new file with mode: 0644]
net/rds/message.c [new file with mode: 0644]
net/rds/page.c [new file with mode: 0644]
net/rds/rdma.c [new file with mode: 0644]
net/rds/rdma_transport.c [new file with mode: 0644]
net/rds/rdma_transport.h [new file with mode: 0644]
net/rds/rds.h [new file with mode: 0644]
net/rds/rds_single_path.h [new file with mode: 0644]
net/rds/recv.c [new file with mode: 0644]
net/rds/send.c [new file with mode: 0644]
net/rds/stats.c [new file with mode: 0644]
net/rds/sysctl.c [new file with mode: 0644]
net/rds/tcp.c [new file with mode: 0644]
net/rds/tcp.h [new file with mode: 0644]
net/rds/tcp_connect.c [new file with mode: 0644]
net/rds/tcp_listen.c [new file with mode: 0644]
net/rds/tcp_recv.c [new file with mode: 0644]
net/rds/tcp_send.c [new file with mode: 0644]
net/rds/tcp_stats.c [new file with mode: 0644]
net/rds/threads.c [new file with mode: 0644]
net/rds/transport.c [new file with mode: 0644]
net/sunrpc/Kconfig [new file with mode: 0644]
net/sunrpc/xprtrdma/Makefile [new file with mode: 0644]
net/sunrpc/xprtrdma/backchannel.c [new file with mode: 0644]
net/sunrpc/xprtrdma/fmr_ops.c [new file with mode: 0644]
net/sunrpc/xprtrdma/frwr_ops.c [new file with mode: 0644]
net/sunrpc/xprtrdma/module.c [new file with mode: 0644]
net/sunrpc/xprtrdma/rpc_rdma.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_backchannel.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_recvfrom.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_rw.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_sendto.c [new file with mode: 0644]
net/sunrpc/xprtrdma/svc_rdma_transport.c [new file with mode: 0644]
net/sunrpc/xprtrdma/transport.c [new file with mode: 0644]
net/sunrpc/xprtrdma/verbs.c [new file with mode: 0644]
net/sunrpc/xprtrdma/xprt_rdma.h [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..97ba6b7
--- /dev/null
@@ -0,0 +1,134 @@
+#
+# NOTE! Don't add files that are generated in specific
+# subdirectories here. Add them in the ".gitignore" file
+# in that subdirectory instead.
+#
+# NOTE! Please use 'git ls-files -i --exclude-standard'
+# command after changing this file, to see if there are
+# any tracked files which get ignored after the change.
+#
+# Normal rules (sorted alphabetically)
+#
+.*
+*.a
+*.asn1.[ch]
+*.bin
+*.bz2
+*.c.[012]*.*
+*.dtb
+*.dtb.S
+*.dwo
+*.elf
+*.gcno
+*.gz
+*.i
+*.ko
+*.lex.c
+*.ll
+*.lst
+*.lz4
+*.lzma
+*.lzo
+*.mod.c
+*.o
+*.o.*
+*.order
+*.patch
+*.s
+*.so
+*.so.dbg
+*.su
+*.symtypes
+*.tab.[ch]
+*.tar
+*.xz
+Module.symvers
+modules.builtin
+
+#
+# Top-level generic files
+#
+/tags
+/TAGS
+/linux
+/vmlinux
+/vmlinux.32
+/vmlinux-gdb.py
+/vmlinuz
+/System.map
+/Module.markers
+
+#
+# RPM spec file (make rpm-pkg)
+#
+/*.spec
+
+#
+# Debian directory (make deb-pkg)
+#
+/debian/
+
+#
+# Snap directory (make snap-pkg)
+#
+/snap/
+
+#
+# tar directory (make tar*-pkg)
+#
+/tar-install/
+
+#
+# git files that we don't want to ignore even if they are dot-files
+#
+!.gitignore
+!.mailmap
+!.cocciconfig
+!.clang-format
+
+#
+# Generated include files
+#
+include/config
+include/generated
+include/ksym
+arch/*/include/generated
+
+# stgit generated dirs
+patches-*
+
+# quilt's files
+patches
+series
+
+# cscope files
+cscope.*
+ncscope.*
+
+# gnu global files
+GPATH
+GRTAGS
+GSYMS
+GTAGS
+
+# id-utils files
+ID
+
+*.orig
+*~
+\#*#
+
+#
+# Leavings from module signing
+#
+extra_certificates
+signing_key.pem
+signing_key.priv
+signing_key.x509
+x509.genkey
+
+# Kconfig presets
+all.config
+
+# Kdevelop4
+*.kdev4
diff --git a/block/blk-mq-rdma.c b/block/blk-mq-rdma.c
new file mode 100644 (file)
index 0000000..996167f
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2017 Sagi Grimberg.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ */
+#include <linux/blk-mq.h>
+#include <linux/blk-mq-rdma.h>
+#include <rdma/ib_verbs.h>
+
+/**
+ * blk_mq_rdma_map_queues - provide a default queue mapping for rdma device
+ * @set:       tagset to provide the mapping for
+ * @dev:       rdma device associated with @set.
+ * @first_vec: first interrupt vectors to use for queues (usually 0)
+ *
+ * This function assumes the rdma device @dev has at least as many available
+ * interrupt vetors as @set has queues.  It will then query it's affinity mask
+ * and built queue mapping that maps a queue to the CPUs that have irq affinity
+ * for the corresponding vector.
+ *
+ * In case either the driver passed a @dev with less vectors than
+ * @set->nr_hw_queues, or @dev does not provide an affinity mask for a
+ * vector, we fallback to the naive mapping.
+ */
+int blk_mq_rdma_map_queues(struct blk_mq_tag_set *set,
+               struct ib_device *dev, int first_vec)
+{
+       const struct cpumask *mask;
+       unsigned int queue, cpu;
+
+       for (queue = 0; queue < set->nr_hw_queues; queue++) {
+               mask = ib_get_vector_affinity(dev, first_vec + queue);
+               if (!mask)
+                       goto fallback;
+
+               for_each_cpu(cpu, mask)
+                       set->mq_map[cpu] = queue;
+       }
+
+       return 0;
+
+fallback:
+       return blk_mq_map_queues(set);
+}
+EXPORT_SYMBOL_GPL(blk_mq_rdma_map_queues);
diff --git a/drivers/infiniband/Kconfig b/drivers/infiniband/Kconfig
new file mode 100644 (file)
index 0000000..2a972ed
--- /dev/null
@@ -0,0 +1,111 @@
+menuconfig INFINIBAND
+       tristate "InfiniBand support"
+       depends on HAS_IOMEM && HAS_DMA
+       depends on NET
+       depends on INET
+       depends on m || IPV6 != m
+       depends on !ALPHA
+       select IRQ_POLL
+       ---help---
+         Core support for InfiniBand (IB).  Make sure to also select
+         any protocols you wish to use as well as drivers for your
+         InfiniBand hardware.
+
+if INFINIBAND
+
+config INFINIBAND_USER_MAD
+       tristate "InfiniBand userspace MAD support"
+       depends on INFINIBAND
+       ---help---
+         Userspace InfiniBand Management Datagram (MAD) support.  This
+         is the kernel side of the userspace MAD support, which allows
+         userspace processes to send and receive MADs. You will also
+         need libibumad from rdma-core
+         <https://github.com/linux-rdma/rdma-core>.
+
+config INFINIBAND_USER_ACCESS
+       tristate "InfiniBand userspace access (verbs and CM)"
+       select ANON_INODES
+       ---help---
+         Userspace InfiniBand access support.  This enables the
+         kernel side of userspace verbs and the userspace
+         communication manager (CM).  This allows userspace processes
+         to set up connections and directly access InfiniBand
+         hardware for fast-path operations.  You will also need
+         libibverbs, libibcm and a hardware driver library from
+         rdma-core <https://github.com/linux-rdma/rdma-core>.
+
+config INFINIBAND_EXP_LEGACY_VERBS_NEW_UAPI
+       bool "Allow experimental legacy verbs in new ioctl uAPI  (EXPERIMENTAL)"
+       depends on INFINIBAND_USER_ACCESS
+       ---help---
+         IOCTL based uAPI support for Infiniband is enabled by default for
+         new verbs only. This allows userspace to invoke the IOCTL based uAPI
+         for current legacy verbs too.
+
+config INFINIBAND_USER_MEM
+       bool
+       depends on INFINIBAND_USER_ACCESS != n
+       depends on MMU
+       default y
+
+config INFINIBAND_ON_DEMAND_PAGING
+       bool "InfiniBand on-demand paging support"
+       depends on INFINIBAND_USER_MEM
+       select MMU_NOTIFIER
+       default y
+       ---help---
+         On demand paging support for the InfiniBand subsystem.
+         Together with driver support this allows registration of
+         memory regions without pinning their pages, fetching the
+         pages on demand instead.
+
+config INFINIBAND_ADDR_TRANS
+       bool "RDMA/CM"
+       depends on INFINIBAND
+       default y
+       ---help---
+         Support for RDMA communication manager (CM).
+         This allows for a generic connection abstraction over RDMA.
+
+config INFINIBAND_ADDR_TRANS_CONFIGFS
+       bool
+       depends on INFINIBAND_ADDR_TRANS && CONFIGFS_FS && !(INFINIBAND=y && CONFIGFS_FS=m)
+       default y
+       ---help---
+         ConfigFS support for RDMA communication manager (CM).
+         This allows the user to config the default GID type that the CM
+         uses for each device, when initiaing new connections.
+
+source "drivers/infiniband/hw/mthca/Kconfig"
+source "drivers/infiniband/hw/qib/Kconfig"
+source "drivers/infiniband/hw/cxgb3/Kconfig"
+source "drivers/infiniband/hw/cxgb4/Kconfig"
+source "drivers/infiniband/hw/i40iw/Kconfig"
+source "drivers/infiniband/hw/mlx4/Kconfig"
+source "drivers/infiniband/hw/mlx5/Kconfig"
+source "drivers/infiniband/hw/nes/Kconfig"
+source "drivers/infiniband/hw/ocrdma/Kconfig"
+source "drivers/infiniband/hw/vmw_pvrdma/Kconfig"
+source "drivers/infiniband/hw/usnic/Kconfig"
+source "drivers/infiniband/hw/hns/Kconfig"
+
+source "drivers/infiniband/ulp/ipoib/Kconfig"
+
+source "drivers/infiniband/ulp/srp/Kconfig"
+source "drivers/infiniband/ulp/srpt/Kconfig"
+
+source "drivers/infiniband/ulp/iser/Kconfig"
+source "drivers/infiniband/ulp/isert/Kconfig"
+
+source "drivers/infiniband/ulp/opa_vnic/Kconfig"
+source "drivers/infiniband/sw/rdmavt/Kconfig"
+source "drivers/infiniband/sw/rxe/Kconfig"
+
+source "drivers/infiniband/hw/hfi1/Kconfig"
+
+source "drivers/infiniband/hw/qedr/Kconfig"
+
+source "drivers/infiniband/hw/bnxt_re/Kconfig"
+
+endif # INFINIBAND
diff --git a/drivers/infiniband/Makefile b/drivers/infiniband/Makefile
new file mode 100644 (file)
index 0000000..fad0b44
--- /dev/null
@@ -0,0 +1,4 @@
+obj-$(CONFIG_INFINIBAND)               += core/
+obj-$(CONFIG_INFINIBAND)               += hw/
+obj-$(CONFIG_INFINIBAND)               += ulp/
+obj-$(CONFIG_INFINIBAND)               += sw/
diff --git a/drivers/infiniband/core/Makefile b/drivers/infiniband/core/Makefile
new file mode 100644 (file)
index 0000000..dda9e85
--- /dev/null
@@ -0,0 +1,39 @@
+# SPDX-License-Identifier: GPL-2.0
+infiniband-$(CONFIG_INFINIBAND_ADDR_TRANS)     := rdma_cm.o
+user_access-$(CONFIG_INFINIBAND_ADDR_TRANS)    := rdma_ucm.o
+
+obj-$(CONFIG_INFINIBAND) +=            ib_core.o ib_cm.o iw_cm.o \
+                                       $(infiniband-y)
+obj-$(CONFIG_INFINIBAND_USER_MAD) +=   ib_umad.o
+obj-$(CONFIG_INFINIBAND_USER_ACCESS) +=        ib_uverbs.o ib_ucm.o \
+                                       $(user_access-y)
+
+ib_core-y :=                   packer.o ud_header.o verbs.o cq.o rw.o sysfs.o \
+                               device.o fmr_pool.o cache.o netlink.o \
+                               roce_gid_mgmt.o mr_pool.o addr.o sa_query.o \
+                               multicast.o mad.o smi.o agent.o mad_rmpp.o \
+                               security.o nldev.o restrack.o
+
+ib_core-$(CONFIG_INFINIBAND_USER_MEM) += umem.o
+ib_core-$(CONFIG_INFINIBAND_ON_DEMAND_PAGING) += umem_odp.o
+ib_core-$(CONFIG_CGROUP_RDMA) += cgroup.o
+
+ib_cm-y :=                     cm.o
+
+iw_cm-y :=                     iwcm.o iwpm_util.o iwpm_msg.o
+
+rdma_cm-y :=                   cma.o
+
+rdma_cm-$(CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS) += cma_configfs.o
+
+rdma_ucm-y :=                  ucma.o
+
+ib_umad-y :=                   user_mad.o
+
+ib_ucm-y :=                    ucm.o
+
+ib_uverbs-y :=                 uverbs_main.o uverbs_cmd.o uverbs_marshall.o \
+                               rdma_core.o uverbs_std_types.o uverbs_ioctl.o \
+                               uverbs_ioctl_merge.o uverbs_std_types_cq.o \
+                               uverbs_std_types_flow_action.o uverbs_std_types_dm.o \
+                               uverbs_std_types_mr.o
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
new file mode 100644 (file)
index 0000000..88a7542
--- /dev/null
@@ -0,0 +1,843 @@
+/*
+ * Copyright (c) 2005 Voltaire Inc.  All rights reserved.
+ * Copyright (c) 2002-2005, Network Appliance, Inc. All rights reserved.
+ * Copyright (c) 1999-2005, Mellanox Technologies, Inc. All rights reserved.
+ * Copyright (c) 2005 Intel Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <linux/mutex.h>
+#include <linux/inetdevice.h>
+#include <linux/slab.h>
+#include <linux/workqueue.h>
+#include <linux/module.h>
+#include <net/arp.h>
+#include <net/neighbour.h>
+#include <net/route.h>
+#include <net/netevent.h>
+#include <net/addrconf.h>
+#include <net/ip6_route.h>
+#include <rdma/ib_addr.h>
+#include <rdma/ib.h>
+#include <rdma/rdma_netlink.h>
+#include <net/netlink.h>
+
+#include "core_priv.h"
+
+struct addr_req {
+       struct list_head list;
+       struct sockaddr_storage src_addr;
+       struct sockaddr_storage dst_addr;
+       struct rdma_dev_addr *addr;
+       struct rdma_addr_client *client;
+       void *context;
+       void (*callback)(int status, struct sockaddr *src_addr,
+                        struct rdma_dev_addr *addr, void *context);
+       unsigned long timeout;
+       struct delayed_work work;
+       int status;
+       u32 seq;
+};
+
+static atomic_t ib_nl_addr_request_seq = ATOMIC_INIT(0);
+
+static void process_req(struct work_struct *work);
+
+static DEFINE_MUTEX(lock);
+static LIST_HEAD(req_list);
+static DECLARE_DELAYED_WORK(work, process_req);
+static struct workqueue_struct *addr_wq;
+
+static const struct nla_policy ib_nl_addr_policy[LS_NLA_TYPE_MAX] = {
+       [LS_NLA_TYPE_DGID] = {.type = NLA_BINARY,
+               .len = sizeof(struct rdma_nla_ls_gid)},
+};
+
+static inline bool ib_nl_is_good_ip_resp(const struct nlmsghdr *nlh)
+{
+       struct nlattr *tb[LS_NLA_TYPE_MAX] = {};
+       int ret;
+
+       if (nlh->nlmsg_flags & RDMA_NL_LS_F_ERR)
+               return false;
+
+       ret = nla_parse(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
+                       nlmsg_len(nlh), ib_nl_addr_policy, NULL);
+       if (ret)
+               return false;
+
+       return true;
+}
+
+static void ib_nl_process_good_ip_rsep(const struct nlmsghdr *nlh)
+{
+       const struct nlattr *head, *curr;
+       union ib_gid gid;
+       struct addr_req *req;
+       int len, rem;
+       int found = 0;
+
+       head = (const struct nlattr *)nlmsg_data(nlh);
+       len = nlmsg_len(nlh);
+
+       nla_for_each_attr(curr, head, len, rem) {
+               if (curr->nla_type == LS_NLA_TYPE_DGID)
+                       memcpy(&gid, nla_data(curr), nla_len(curr));
+       }
+
+       mutex_lock(&lock);
+       list_for_each_entry(req, &req_list, list) {
+               if (nlh->nlmsg_seq != req->seq)
+                       continue;
+               /* We set the DGID part, the rest was set earlier */
+               rdma_addr_set_dgid(req->addr, &gid);
+               req->status = 0;
+               found = 1;
+               break;
+       }
+       mutex_unlock(&lock);
+
+       if (!found)
+               pr_info("Couldn't find request waiting for DGID: %pI6\n",
+                       &gid);
+}
+
+int ib_nl_handle_ip_res_resp(struct sk_buff *skb,
+                            struct nlmsghdr *nlh,
+                            struct netlink_ext_ack *extack)
+{
+       if ((nlh->nlmsg_flags & NLM_F_REQUEST) ||
+           !(NETLINK_CB(skb).sk))
+               return -EPERM;
+
+       if (ib_nl_is_good_ip_resp(nlh))
+               ib_nl_process_good_ip_rsep(nlh);
+
+       return skb->len;
+}
+
+static int ib_nl_ip_send_msg(struct rdma_dev_addr *dev_addr,
+                            const void *daddr,
+                            u32 seq, u16 family)
+{
+       struct sk_buff *skb = NULL;
+       struct nlmsghdr *nlh;
+       struct rdma_ls_ip_resolve_header *header;
+       void *data;
+       size_t size;
+       int attrtype;
+       int len;
+
+       if (family == AF_INET) {
+               size = sizeof(struct in_addr);
+               attrtype = RDMA_NLA_F_MANDATORY | LS_NLA_TYPE_IPV4;
+       } else {
+               size = sizeof(struct in6_addr);
+               attrtype = RDMA_NLA_F_MANDATORY | LS_NLA_TYPE_IPV6;
+       }
+
+       len = nla_total_size(sizeof(size));
+       len += NLMSG_ALIGN(sizeof(*header));
+
+       skb = nlmsg_new(len, GFP_KERNEL);
+       if (!skb)
+               return -ENOMEM;
+
+       data = ibnl_put_msg(skb, &nlh, seq, 0, RDMA_NL_LS,
+                           RDMA_NL_LS_OP_IP_RESOLVE, NLM_F_REQUEST);
+       if (!data) {
+               nlmsg_free(skb);
+               return -ENODATA;
+       }
+
+       /* Construct the family header first */
+       header = skb_put(skb, NLMSG_ALIGN(sizeof(*header)));
+       header->ifindex = dev_addr->bound_dev_if;
+       nla_put(skb, attrtype, size, daddr);
+
+       /* Repair the nlmsg header length */
+       nlmsg_end(skb, nlh);
+       rdma_nl_multicast(skb, RDMA_NL_GROUP_LS, GFP_KERNEL);
+
+       /* Make the request retry, so when we get the response from userspace
+        * we will have something.
+        */
+       return -ENODATA;
+}
+
+int rdma_addr_size(struct sockaddr *addr)
+{
+       switch (addr->sa_family) {
+       case AF_INET:
+               return sizeof(struct sockaddr_in);
+       case AF_INET6:
+               return sizeof(struct sockaddr_in6);
+       case AF_IB:
+               return sizeof(struct sockaddr_ib);
+       default:
+               return 0;
+       }
+}
+EXPORT_SYMBOL(rdma_addr_size);
+
+int rdma_addr_size_in6(struct sockaddr_in6 *addr)
+{
+       int ret = rdma_addr_size((struct sockaddr *) addr);
+
+       return ret <= sizeof(*addr) ? ret : 0;
+}
+EXPORT_SYMBOL(rdma_addr_size_in6);
+
+int rdma_addr_size_kss(struct __kernel_sockaddr_storage *addr)
+{
+       int ret = rdma_addr_size((struct sockaddr *) addr);
+
+       return ret <= sizeof(*addr) ? ret : 0;
+}
+EXPORT_SYMBOL(rdma_addr_size_kss);
+
+static struct rdma_addr_client self;
+
+void rdma_addr_register_client(struct rdma_addr_client *client)
+{
+       atomic_set(&client->refcount, 1);
+       init_completion(&client->comp);
+}
+EXPORT_SYMBOL(rdma_addr_register_client);
+
+static inline void put_client(struct rdma_addr_client *client)
+{
+       if (atomic_dec_and_test(&client->refcount))
+               complete(&client->comp);
+}
+
+void rdma_addr_unregister_client(struct rdma_addr_client *client)
+{
+       put_client(client);
+       wait_for_completion(&client->comp);
+}
+EXPORT_SYMBOL(rdma_addr_unregister_client);
+
+void rdma_copy_addr(struct rdma_dev_addr *dev_addr,
+                   const struct net_device *dev,
+                   const unsigned char *dst_dev_addr)
+{
+       dev_addr->dev_type = dev->type;
+       memcpy(dev_addr->src_dev_addr, dev->dev_addr, MAX_ADDR_LEN);
+       memcpy(dev_addr->broadcast, dev->broadcast, MAX_ADDR_LEN);
+       if (dst_dev_addr)
+               memcpy(dev_addr->dst_dev_addr, dst_dev_addr, MAX_ADDR_LEN);
+       dev_addr->bound_dev_if = dev->ifindex;
+}
+EXPORT_SYMBOL(rdma_copy_addr);
+
+int rdma_translate_ip(const struct sockaddr *addr,
+                     struct rdma_dev_addr *dev_addr)
+{
+       struct net_device *dev;
+
+       if (dev_addr->bound_dev_if) {
+               dev = dev_get_by_index(dev_addr->net, dev_addr->bound_dev_if);
+               if (!dev)
+                       return -ENODEV;
+               rdma_copy_addr(dev_addr, dev, NULL);
+               dev_put(dev);
+               return 0;
+       }
+
+       switch (addr->sa_family) {
+       case AF_INET:
+               dev = ip_dev_find(dev_addr->net,
+                       ((const struct sockaddr_in *)addr)->sin_addr.s_addr);
+
+               if (!dev)
+                       return -EADDRNOTAVAIL;
+
+               rdma_copy_addr(dev_addr, dev, NULL);
+               dev_put(dev);
+               break;
+#if IS_ENABLED(CONFIG_IPV6)
+       case AF_INET6:
+               rcu_read_lock();
+               for_each_netdev_rcu(dev_addr->net, dev) {
+                       if (ipv6_chk_addr(dev_addr->net,
+                                         &((const struct sockaddr_in6 *)addr)->sin6_addr,
+                                         dev, 1)) {
+                               rdma_copy_addr(dev_addr, dev, NULL);
+                               break;
+                       }
+               }
+               rcu_read_unlock();
+               break;
+#endif
+       }
+       return 0;
+}
+EXPORT_SYMBOL(rdma_translate_ip);
+
+static void set_timeout(struct delayed_work *delayed_work, unsigned long time)
+{
+       unsigned long delay;
+
+       delay = time - jiffies;
+       if ((long)delay < 0)
+               delay = 0;
+
+       mod_delayed_work(addr_wq, delayed_work, delay);
+}
+
+static void queue_req(struct addr_req *req)
+{
+       struct addr_req *temp_req;
+
+       mutex_lock(&lock);
+       list_for_each_entry_reverse(temp_req, &req_list, list) {
+               if (time_after_eq(req->timeout, temp_req->timeout))
+                       break;
+       }
+
+       list_add(&req->list, &temp_req->list);
+
+       set_timeout(&req->work, req->timeout);
+       mutex_unlock(&lock);
+}
+
+static int ib_nl_fetch_ha(const struct dst_entry *dst,
+                         struct rdma_dev_addr *dev_addr,
+                         const void *daddr, u32 seq, u16 family)
+{
+       if (rdma_nl_chk_listeners(RDMA_NL_GROUP_LS))
+               return -EADDRNOTAVAIL;
+
+       /* We fill in what we can, the response will fill the rest */
+       rdma_copy_addr(dev_addr, dst->dev, NULL);
+       return ib_nl_ip_send_msg(dev_addr, daddr, seq, family);
+}
+
+static int dst_fetch_ha(const struct dst_entry *dst,
+                       struct rdma_dev_addr *dev_addr,
+                       const void *daddr)
+{
+       struct neighbour *n;
+       int ret = 0;
+
+       n = dst_neigh_lookup(dst, daddr);
+
+       rcu_read_lock();
+       if (!n || !(n->nud_state & NUD_VALID)) {
+               if (n)
+                       neigh_event_send(n, NULL);
+               ret = -ENODATA;
+       } else {
+               rdma_copy_addr(dev_addr, dst->dev, n->ha);
+       }
+       rcu_read_unlock();
+
+       if (n)
+               neigh_release(n);
+
+       return ret;
+}
+
+static bool has_gateway(const struct dst_entry *dst, sa_family_t family)
+{
+       struct rtable *rt;
+       struct rt6_info *rt6;
+
+       if (family == AF_INET) {
+               rt = container_of(dst, struct rtable, dst);
+               return rt->rt_uses_gateway;
+       }
+
+       rt6 = container_of(dst, struct rt6_info, dst);
+       return rt6->rt6i_flags & RTF_GATEWAY;
+}
+
+static int fetch_ha(const struct dst_entry *dst, struct rdma_dev_addr *dev_addr,
+                   const struct sockaddr *dst_in, u32 seq)
+{
+       const struct sockaddr_in *dst_in4 =
+               (const struct sockaddr_in *)dst_in;
+       const struct sockaddr_in6 *dst_in6 =
+               (const struct sockaddr_in6 *)dst_in;
+       const void *daddr = (dst_in->sa_family == AF_INET) ?
+               (const void *)&dst_in4->sin_addr.s_addr :
+               (const void *)&dst_in6->sin6_addr;
+       sa_family_t family = dst_in->sa_family;
+
+       /* Gateway + ARPHRD_INFINIBAND -> IB router */
+       if (has_gateway(dst, family) && dst->dev->type == ARPHRD_INFINIBAND)
+               return ib_nl_fetch_ha(dst, dev_addr, daddr, seq, family);
+       else
+               return dst_fetch_ha(dst, dev_addr, daddr);
+}
+
+static int addr4_resolve(struct sockaddr_in *src_in,
+                        const struct sockaddr_in *dst_in,
+                        struct rdma_dev_addr *addr,
+                        struct rtable **prt)
+{
+       __be32 src_ip = src_in->sin_addr.s_addr;
+       __be32 dst_ip = dst_in->sin_addr.s_addr;
+       struct rtable *rt;
+       struct flowi4 fl4;
+       int ret;
+
+       memset(&fl4, 0, sizeof(fl4));
+       fl4.daddr = dst_ip;
+       fl4.saddr = src_ip;
+       fl4.flowi4_oif = addr->bound_dev_if;
+       rt = ip_route_output_key(addr->net, &fl4);
+       ret = PTR_ERR_OR_ZERO(rt);
+       if (ret)
+               return ret;
+
+       src_in->sin_family = AF_INET;
+       src_in->sin_addr.s_addr = fl4.saddr;
+
+       /* If there's a gateway and type of device not ARPHRD_INFINIBAND, we're
+        * definitely in RoCE v2 (as RoCE v1 isn't routable) set the network
+        * type accordingly.
+        */
+       if (rt->rt_uses_gateway && rt->dst.dev->type != ARPHRD_INFINIBAND)
+               addr->network = RDMA_NETWORK_IPV4;
+
+       addr->hoplimit = ip4_dst_hoplimit(&rt->dst);
+
+       *prt = rt;
+       return 0;
+}
+
+#if IS_ENABLED(CONFIG_IPV6)
+static int addr6_resolve(struct sockaddr_in6 *src_in,
+                        const struct sockaddr_in6 *dst_in,
+                        struct rdma_dev_addr *addr,
+                        struct dst_entry **pdst)
+{
+       struct flowi6 fl6;
+       struct dst_entry *dst;
+       struct rt6_info *rt;
+       int ret;
+
+       memset(&fl6, 0, sizeof fl6);
+       fl6.daddr = dst_in->sin6_addr;
+       fl6.saddr = src_in->sin6_addr;
+       fl6.flowi6_oif = addr->bound_dev_if;
+
+       ret = ipv6_stub->ipv6_dst_lookup(addr->net, NULL, &dst, &fl6);
+       if (ret < 0)
+               return ret;
+
+       rt = (struct rt6_info *)dst;
+       if (ipv6_addr_any(&src_in->sin6_addr)) {
+               src_in->sin6_family = AF_INET6;
+               src_in->sin6_addr = fl6.saddr;
+       }
+
+       /* If there's a gateway and type of device not ARPHRD_INFINIBAND, we're
+        * definitely in RoCE v2 (as RoCE v1 isn't routable) set the network
+        * type accordingly.
+        */
+       if (rt->rt6i_flags & RTF_GATEWAY &&
+           ip6_dst_idev(dst)->dev->type != ARPHRD_INFINIBAND)
+               addr->network = RDMA_NETWORK_IPV6;
+
+       addr->hoplimit = ip6_dst_hoplimit(dst);
+
+       *pdst = dst;
+       return 0;
+}
+#else
+static int addr6_resolve(struct sockaddr_in6 *src_in,
+                        const struct sockaddr_in6 *dst_in,
+                        struct rdma_dev_addr *addr,
+                        struct dst_entry **pdst)
+{
+       return -EADDRNOTAVAIL;
+}
+#endif
+
+static int addr_resolve_neigh(const struct dst_entry *dst,
+                             const struct sockaddr *dst_in,
+                             struct rdma_dev_addr *addr,
+                             u32 seq)
+{
+       if (dst->dev->flags & IFF_LOOPBACK) {
+               int ret;
+
+               ret = rdma_translate_ip(dst_in, addr);
+               if (!ret)
+                       memcpy(addr->dst_dev_addr, addr->src_dev_addr,
+                              MAX_ADDR_LEN);
+
+               return ret;
+       }
+
+       /* If the device doesn't do ARP internally */
+       if (!(dst->dev->flags & IFF_NOARP))
+               return fetch_ha(dst, addr, dst_in, seq);
+
+       rdma_copy_addr(addr, dst->dev, NULL);
+
+       return 0;
+}
+
+static int addr_resolve(struct sockaddr *src_in,
+                       const struct sockaddr *dst_in,
+                       struct rdma_dev_addr *addr,
+                       bool resolve_neigh,
+                       u32 seq)
+{
+       struct net_device *ndev;
+       struct dst_entry *dst;
+       int ret;
+
+       if (!addr->net) {
+               pr_warn_ratelimited("%s: missing namespace\n", __func__);
+               return -EINVAL;
+       }
+
+       if (src_in->sa_family == AF_INET) {
+               struct rtable *rt = NULL;
+               const struct sockaddr_in *dst_in4 =
+                       (const struct sockaddr_in *)dst_in;
+
+               ret = addr4_resolve((struct sockaddr_in *)src_in,
+                                   dst_in4, addr, &rt);
+               if (ret)
+                       return ret;
+
+               if (resolve_neigh)
+                       ret = addr_resolve_neigh(&rt->dst, dst_in, addr, seq);
+
+               if (addr->bound_dev_if) {
+                       ndev = dev_get_by_index(addr->net, addr->bound_dev_if);
+               } else {
+                       ndev = rt->dst.dev;
+                       dev_hold(ndev);
+               }
+
+               ip_rt_put(rt);
+       } else {
+               const struct sockaddr_in6 *dst_in6 =
+                       (const struct sockaddr_in6 *)dst_in;
+
+               ret = addr6_resolve((struct sockaddr_in6 *)src_in,
+                                   dst_in6, addr,
+                                   &dst);
+               if (ret)
+                       return ret;
+
+               if (resolve_neigh)
+                       ret = addr_resolve_neigh(dst, dst_in, addr, seq);
+
+               if (addr->bound_dev_if) {
+                       ndev = dev_get_by_index(addr->net, addr->bound_dev_if);
+               } else {
+                       ndev = dst->dev;
+                       dev_hold(ndev);
+               }
+
+               dst_release(dst);
+       }
+
+       if (ndev) {
+               if (ndev->flags & IFF_LOOPBACK)
+                       ret = rdma_translate_ip(dst_in, addr);
+               else
+                       addr->bound_dev_if = ndev->ifindex;
+               dev_put(ndev);
+       }
+
+       return ret;
+}
+
+static void process_one_req(struct work_struct *_work)
+{
+       struct addr_req *req;
+       struct sockaddr *src_in, *dst_in;
+
+       mutex_lock(&lock);
+       req = container_of(_work, struct addr_req, work.work);
+
+       if (req->status == -ENODATA) {
+               src_in = (struct sockaddr *)&req->src_addr;
+               dst_in = (struct sockaddr *)&req->dst_addr;
+               req->status = addr_resolve(src_in, dst_in, req->addr,
+                                          true, req->seq);
+               if (req->status && time_after_eq(jiffies, req->timeout)) {
+                       req->status = -ETIMEDOUT;
+               } else if (req->status == -ENODATA) {
+                       /* requeue the work for retrying again */
+                       set_timeout(&req->work, req->timeout);
+                       mutex_unlock(&lock);
+                       return;
+               }
+       }
+       list_del(&req->list);
+       mutex_unlock(&lock);
+
+       /*
+        * Although the work will normally have been canceled by the
+        * workqueue, it can still be requeued as long as it is on the
+        * req_list, so it could have been requeued before we grabbed &lock.
+        * We need to cancel it after it is removed from req_list to really be
+        * sure it is safe to free.
+        */
+       cancel_delayed_work(&req->work);
+
+       req->callback(req->status, (struct sockaddr *)&req->src_addr,
+               req->addr, req->context);
+       put_client(req->client);
+       kfree(req);
+}
+
+static void process_req(struct work_struct *work)
+{
+       struct addr_req *req, *temp_req;
+       struct sockaddr *src_in, *dst_in;
+       struct list_head done_list;
+
+       INIT_LIST_HEAD(&done_list);
+
+       mutex_lock(&lock);
+       list_for_each_entry_safe(req, temp_req, &req_list, list) {
+               if (req->status == -ENODATA) {
+                       src_in = (struct sockaddr *) &req->src_addr;
+                       dst_in = (struct sockaddr *) &req->dst_addr;
+                       req->status = addr_resolve(src_in, dst_in, req->addr,
+                                                  true, req->seq);
+                       if (req->status && time_after_eq(jiffies, req->timeout))
+                               req->status = -ETIMEDOUT;
+                       else if (req->status == -ENODATA) {
+                               set_timeout(&req->work, req->timeout);
+                               continue;
+                       }
+               }
+               list_move_tail(&req->list, &done_list);
+       }
+
+       mutex_unlock(&lock);
+
+       list_for_each_entry_safe(req, temp_req, &done_list, list) {
+               list_del(&req->list);
+               /* It is safe to cancel other work items from this work item
+                * because at a time there can be only one work item running
+                * with this single threaded work queue.
+                */
+               cancel_delayed_work(&req->work);
+               req->callback(req->status, (struct sockaddr *) &req->src_addr,
+                       req->addr, req->context);
+               put_client(req->client);
+               kfree(req);
+       }
+}
+
+int rdma_resolve_ip(struct rdma_addr_client *client,
+                   struct sockaddr *src_addr, struct sockaddr *dst_addr,
+                   struct rdma_dev_addr *addr, int timeout_ms,
+                   void (*callback)(int status, struct sockaddr *src_addr,
+                                    struct rdma_dev_addr *addr, void *context),
+                   void *context)
+{
+       struct sockaddr *src_in, *dst_in;
+       struct addr_req *req;
+       int ret = 0;
+
+       req = kzalloc(sizeof *req, GFP_KERNEL);
+       if (!req)
+               return -ENOMEM;
+
+       src_in = (struct sockaddr *) &req->src_addr;
+       dst_in = (struct sockaddr *) &req->dst_addr;
+
+       if (src_addr) {
+               if (src_addr->sa_family != dst_addr->sa_family) {
+                       ret = -EINVAL;
+                       goto err;
+               }
+
+               memcpy(src_in, src_addr, rdma_addr_size(src_addr));
+       } else {
+               src_in->sa_family = dst_addr->sa_family;
+       }
+
+       memcpy(dst_in, dst_addr, rdma_addr_size(dst_addr));
+       req->addr = addr;
+       req->callback = callback;
+       req->context = context;
+       req->client = client;
+       atomic_inc(&client->refcount);
+       INIT_DELAYED_WORK(&req->work, process_one_req);
+       req->seq = (u32)atomic_inc_return(&ib_nl_addr_request_seq);
+
+       req->status = addr_resolve(src_in, dst_in, addr, true, req->seq);
+       switch (req->status) {
+       case 0:
+               req->timeout = jiffies;
+               queue_req(req);
+               break;
+       case -ENODATA:
+               req->timeout = msecs_to_jiffies(timeout_ms) + jiffies;
+               queue_req(req);
+               break;
+       default:
+               ret = req->status;
+               atomic_dec(&client->refcount);
+               goto err;
+       }
+       return ret;
+err:
+       kfree(req);
+       return ret;
+}
+EXPORT_SYMBOL(rdma_resolve_ip);
+
+int rdma_resolve_ip_route(struct sockaddr *src_addr,
+                         const struct sockaddr *dst_addr,
+                         struct rdma_dev_addr *addr)
+{
+       struct sockaddr_storage ssrc_addr = {};
+       struct sockaddr *src_in = (struct sockaddr *)&ssrc_addr;
+
+       if (src_addr) {
+               if (src_addr->sa_family != dst_addr->sa_family)
+                       return -EINVAL;
+
+               memcpy(src_in, src_addr, rdma_addr_size(src_addr));
+       } else {
+               src_in->sa_family = dst_addr->sa_family;
+       }
+
+       return addr_resolve(src_in, dst_addr, addr, false, 0);
+}
+
+void rdma_addr_cancel(struct rdma_dev_addr *addr)
+{
+       struct addr_req *req, *temp_req;
+
+       mutex_lock(&lock);
+       list_for_each_entry_safe(req, temp_req, &req_list, list) {
+               if (req->addr == addr) {
+                       req->status = -ECANCELED;
+                       req->timeout = jiffies;
+                       list_move(&req->list, &req_list);
+                       set_timeout(&req->work, req->timeout);
+                       break;
+               }
+       }
+       mutex_unlock(&lock);
+}
+EXPORT_SYMBOL(rdma_addr_cancel);
+
+struct resolve_cb_context {
+       struct completion comp;
+       int status;
+};
+
+static void resolve_cb(int status, struct sockaddr *src_addr,
+            struct rdma_dev_addr *addr, void *context)
+{
+       ((struct resolve_cb_context *)context)->status = status;
+       complete(&((struct resolve_cb_context *)context)->comp);
+}
+
+int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
+                                const union ib_gid *dgid,
+                                u8 *dmac, const struct net_device *ndev,
+                                int *hoplimit)
+{
+       struct rdma_dev_addr dev_addr;
+       struct resolve_cb_context ctx;
+       union {
+               struct sockaddr     _sockaddr;
+               struct sockaddr_in  _sockaddr_in;
+               struct sockaddr_in6 _sockaddr_in6;
+       } sgid_addr, dgid_addr;
+       int ret;
+
+       rdma_gid2ip(&sgid_addr._sockaddr, sgid);
+       rdma_gid2ip(&dgid_addr._sockaddr, dgid);
+
+       memset(&dev_addr, 0, sizeof(dev_addr));
+       dev_addr.bound_dev_if = ndev->ifindex;
+       dev_addr.net = &init_net;
+
+       init_completion(&ctx.comp);
+       ret = rdma_resolve_ip(&self, &sgid_addr._sockaddr, &dgid_addr._sockaddr,
+                       &dev_addr, 1000, resolve_cb, &ctx);
+       if (ret)
+               return ret;
+
+       wait_for_completion(&ctx.comp);
+
+       ret = ctx.status;
+       if (ret)
+               return ret;
+
+       memcpy(dmac, dev_addr.dst_dev_addr, ETH_ALEN);
+       *hoplimit = dev_addr.hoplimit;
+       return 0;
+}
+
+static int netevent_callback(struct notifier_block *self, unsigned long event,
+       void *ctx)
+{
+       if (event == NETEVENT_NEIGH_UPDATE) {
+               struct neighbour *neigh = ctx;
+
+               if (neigh->nud_state & NUD_VALID)
+                       set_timeout(&work, jiffies);
+       }
+       return 0;
+}
+
+static struct notifier_block nb = {
+       .notifier_call = netevent_callback
+};
+
+int addr_init(void)
+{
+       addr_wq = alloc_ordered_workqueue("ib_addr", 0);
+       if (!addr_wq)
+               return -ENOMEM;
+
+       register_netevent_notifier(&nb);
+       rdma_addr_register_client(&self);
+
+       return 0;
+}
+
+void addr_cleanup(void)
+{
+       rdma_addr_unregister_client(&self);
+       unregister_netevent_notifier(&nb);
+       destroy_workqueue(addr_wq);
+}
diff --git a/drivers/infiniband/core/agent.c b/drivers/infiniband/core/agent.c
new file mode 100644 (file)
index 0000000..324ef85
--- /dev/null
@@ -0,0 +1,221 @@
+/*
+ * Copyright (c) 2004, 2005 Mellanox Technologies Ltd.  All rights reserved.
+ * Copyright (c) 2004, 2005 Infinicon Corporation.  All rights reserved.
+ * Copyright (c) 2004, 2005 Intel Corporation.  All rights reserved.
+ * Copyright (c) 2004, 2005 Topspin Corporation.  All rights reserved.
+ * Copyright (c) 2004-2007 Voltaire Corporation.  All rights reserved.
+ * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+#include <linux/slab.h>
+#include <linux/string.h>
+
+#include "agent.h"
+#include "smi.h"
+#include "mad_priv.h"
+
+#define SPFX "ib_agent: "
+
+struct ib_agent_port_private {
+       struct list_head port_list;
+       struct ib_mad_agent *agent[2];
+};
+
+static DEFINE_SPINLOCK(ib_agent_port_list_lock);
+static LIST_HEAD(ib_agent_port_list);
+
+static struct ib_agent_port_private *
+__ib_get_agent_port(const struct ib_device *device, int port_num)
+{
+       struct ib_agent_port_private *entry;
+
+       list_for_each_entry(entry, &ib_agent_port_list, port_list) {
+               if (entry->agent[1]->device == device &&
+                   entry->agent[1]->port_num == port_num)
+                       return entry;
+       }
+       return NULL;
+}
+
+static struct ib_agent_port_private *
+ib_get_agent_port(const struct ib_device *device, int port_num)
+{
+       struct ib_agent_port_private *entry;
+       unsigned long flags;
+
+       spin_lock_irqsave(&ib_agent_port_list_lock, flags);
+       entry = __ib_get_agent_port(device, port_num);
+       spin_unlock_irqrestore(&ib_agent_port_list_lock, flags);
+       return entry;
+}
+
+void agent_send_response(const struct ib_mad_hdr *mad_hdr, const struct ib_grh *grh,
+                        const struct ib_wc *wc, const struct ib_device *device,
+                        int port_num, int qpn, size_t resp_mad_len, bool opa)
+{
+       struct ib_agent_port_private *port_priv;
+       struct ib_mad_agent *agent;
+       struct ib_mad_send_buf *send_buf;
+       struct ib_ah *ah;
+       struct ib_mad_send_wr_private *mad_send_wr;
+
+       if (rdma_cap_ib_switch(device))
+               port_priv = ib_get_agent_port(device, 0);
+       else
+               port_priv = ib_get_agent_port(device, port_num);
+
+       if (!port_priv) {
+               dev_err(&device->dev, "Unable to find port agent\n");
+               return;
+       }
+
+       agent = port_priv->agent[qpn];
+       ah = ib_create_ah_from_wc(agent->qp->pd, wc, grh, port_num);
+       if (IS_ERR(ah)) {
+               dev_err(&device->dev, "ib_create_ah_from_wc error %ld\n",
+                       PTR_ERR(ah));
+               return;
+       }
+
+       if (opa && mad_hdr->base_version != OPA_MGMT_BASE_VERSION)
+               resp_mad_len = IB_MGMT_MAD_SIZE;
+
+       send_buf = ib_create_send_mad(agent, wc->src_qp, wc->pkey_index, 0,
+                                     IB_MGMT_MAD_HDR,
+                                     resp_mad_len - IB_MGMT_MAD_HDR,
+                                     GFP_KERNEL,
+                                     mad_hdr->base_version);
+       if (IS_ERR(send_buf)) {
+               dev_err(&device->dev, "ib_create_send_mad error\n");
+               goto err1;
+       }
+
+       memcpy(send_buf->mad, mad_hdr, resp_mad_len);
+       send_buf->ah = ah;
+
+       if (rdma_cap_ib_switch(device)) {
+               mad_send_wr = container_of(send_buf,
+                                          struct ib_mad_send_wr_private,
+                                          send_buf);
+               mad_send_wr->send_wr.port_num = port_num;
+       }
+
+       if (ib_post_send_mad(send_buf, NULL)) {
+               dev_err(&device->dev, "ib_post_send_mad error\n");
+               goto err2;
+       }
+       return;
+err2:
+       ib_free_send_mad(send_buf);
+err1:
+       rdma_destroy_ah(ah);
+}
+
+static void agent_send_handler(struct ib_mad_agent *mad_agent,
+                              struct ib_mad_send_wc *mad_send_wc)
+{
+       rdma_destroy_ah(mad_send_wc->send_buf->ah);
+       ib_free_send_mad(mad_send_wc->send_buf);
+}
+
+int ib_agent_port_open(struct ib_device *device, int port_num)
+{
+       struct ib_agent_port_private *port_priv;
+       unsigned long flags;
+       int ret;
+
+       /* Create new device info */
+       port_priv = kzalloc(sizeof *port_priv, GFP_KERNEL);
+       if (!port_priv) {
+               ret = -ENOMEM;
+               goto error1;
+       }
+
+       if (rdma_cap_ib_smi(device, port_num)) {
+               /* Obtain send only MAD agent for SMI QP */
+               port_priv->agent[0] = ib_register_mad_agent(device, port_num,
+                                                           IB_QPT_SMI, NULL, 0,
+                                                           &agent_send_handler,
+                                                           NULL, NULL, 0);
+               if (IS_ERR(port_priv->agent[0])) {
+                       ret = PTR_ERR(port_priv->agent[0]);
+                       goto error2;
+               }
+       }
+
+       /* Obtain send only MAD agent for GSI QP */
+       port_priv->agent[1] = ib_register_mad_agent(device, port_num,
+                                                   IB_QPT_GSI, NULL, 0,
+                                                   &agent_send_handler,
+                                                   NULL, NULL, 0);
+       if (IS_ERR(port_priv->agent[1])) {
+               ret = PTR_ERR(port_priv->agent[1]);
+               goto error3;
+       }
+
+       spin_lock_irqsave(&ib_agent_port_list_lock, flags);
+       list_add_tail(&port_priv->port_list, &ib_agent_port_list);
+       spin_unlock_irqrestore(&ib_agent_port_list_lock, flags);
+
+       return 0;
+
+error3:
+       if (port_priv->agent[0])
+               ib_unregister_mad_agent(port_priv->agent[0]);
+error2:
+       kfree(port_priv);
+error1:
+       return ret;
+}
+
+int ib_agent_port_close(struct ib_device *device, int port_num)
+{
+       struct ib_agent_port_private *port_priv;
+       unsigned long flags;
+
+       spin_lock_irqsave(&ib_agent_port_list_lock, flags);
+       port_priv = __ib_get_agent_port(device, port_num);
+       if (port_priv == NULL) {
+               spin_unlock_irqrestore(&ib_agent_port_list_lock, flags);
+               dev_err(&device->dev, "Port %d not found\n", port_num);
+               return -ENODEV;
+       }
+       list_del(&port_priv->port_list);
+       spin_unlock_irqrestore(&ib_agent_port_list_lock, flags);
+
+       ib_unregister_mad_agent(port_priv->agent[1]);
+       if (port_priv->agent[0])
+               ib_unregister_mad_agent(port_priv->agent[0]);
+
+       kfree(port_priv);
+       return 0;
+}
diff --git a/drivers/infiniband/core/agent.h b/drivers/infiniband/core/agent.h
new file mode 100644 (file)
index 0000000..65f92be
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright (c) 2004 Mellanox Technologies Ltd.  All rights reserved.
+ * Copyright (c) 2004 Infinicon Corporation.  All rights reserved.
+ * Copyright (c) 2004 Intel Corporation.  All rights reserved.
+ * Copyright (c) 2004 Topspin Corporation.  All rights reserved.
+ * Copyright (c) 2004 Voltaire Corporation.  All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef __AGENT_H_
+#define __AGENT_H_
+
+#include <linux/err.h>
+#include <rdma/ib_mad.h>
+
+extern int ib_agent_port_open(struct ib_device *device, int port_num);
+
+extern int ib_agent_port_close(struct ib_device *device, int port_num);
+
+extern void agent_send_response(const struct ib_mad_hdr *mad_hdr, const struct ib_grh *grh,
+                               const struct ib_wc *wc, const struct ib_device *device,
+                               int port_num, int qpn, size_t resp_mad_len, bool opa);
+
+#endif /* __AGENT_H_ */
diff --git a/drivers/infiniband/core/cache.c b/drivers/infiniband/core/cache.c
new file mode 100644 (file)
index 0000000..ecc55e9
--- /dev/null
@@ -0,0 +1,1311 @@
+/*
+ * Copyright (c) 2004 Topspin Communications.  All rights reserved.
+ * Copyright (c) 2005 Intel Corporation. All rights reserved.
+ * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
+ * Copyright (c) 2005 Voltaire, Inc. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/slab.h>
+#include <linux/workqueue.h>
+#include <linux/netdevice.h>
+#include <net/addrconf.h>
+
+#include <rdma/ib_cache.h>
+
+#include "core_priv.h"
+
+struct ib_pkey_cache {
+       int             table_len;
+       u16             table[0];
+};
+
+struct ib_update_work {
+       struct work_struct work;
+       struct ib_device  *device;
+       u8                 port_num;
+       bool               enforce_security;
+};
+
+union ib_gid zgid;
+EXPORT_SYMBOL(zgid);
+
+enum gid_attr_find_mask {
+       GID_ATTR_FIND_MASK_GID          = 1UL << 0,
+       GID_ATTR_FIND_MASK_NETDEV       = 1UL << 1,
+       GID_ATTR_FIND_MASK_DEFAULT      = 1UL << 2,
+       GID_ATTR_FIND_MASK_GID_TYPE     = 1UL << 3,
+};
+
+enum gid_table_entry_props {
+       GID_TABLE_ENTRY_INVALID         = 1UL << 0,
+       GID_TABLE_ENTRY_DEFAULT         = 1UL << 1,
+};
+
+struct ib_gid_table_entry {
+       unsigned long       props;
+       union ib_gid        gid;
+       struct ib_gid_attr  attr;
+       void               *context;
+};
+
+struct ib_gid_table {
+       int                  sz;
+       /* In RoCE, adding a GID to the table requires:
+        * (a) Find if this GID is already exists.
+        * (b) Find a free space.
+        * (c) Write the new GID
+        *
+        * Delete requires different set of operations:
+        * (a) Find the GID
+        * (b) Delete it.
+        *
+        **/
+       /* Any writer to data_vec must hold this lock and the write side of
+        * rwlock. readers must hold only rwlock. All writers must be in a
+        * sleepable context.
+        */
+       struct mutex         lock;
+       /* rwlock protects data_vec[ix]->props. */
+       rwlock_t             rwlock;
+       struct ib_gid_table_entry *data_vec;
+};
+
+static void dispatch_gid_change_event(struct ib_device *ib_dev, u8 port)
+{
+       struct ib_event event;
+
+       event.device            = ib_dev;
+       event.element.port_num  = port;
+       event.event             = IB_EVENT_GID_CHANGE;
+
+       ib_dispatch_event(&event);
+}
+
+static const char * const gid_type_str[] = {
+       [IB_GID_TYPE_IB]        = "IB/RoCE v1",
+       [IB_GID_TYPE_ROCE_UDP_ENCAP]    = "RoCE v2",
+};
+
+const char *ib_cache_gid_type_str(enum ib_gid_type gid_type)
+{
+       if (gid_type < ARRAY_SIZE(gid_type_str) && gid_type_str[gid_type])
+               return gid_type_str[gid_type];
+
+       return "Invalid GID type";
+}
+EXPORT_SYMBOL(ib_cache_gid_type_str);
+
+int ib_cache_gid_parse_type_str(const char *buf)
+{
+       unsigned int i;
+       size_t len;
+       int err = -EINVAL;
+
+       len = strlen(buf);
+       if (len == 0)
+               return -EINVAL;
+
+       if (buf[len - 1] == '\n')
+               len--;
+
+       for (i = 0; i < ARRAY_SIZE(gid_type_str); ++i)
+               if (gid_type_str[i] && !strncmp(buf, gid_type_str[i], len) &&
+                   len == strlen(gid_type_str[i])) {
+                       err = i;
+                       break;
+               }
+
+       return err;
+}
+EXPORT_SYMBOL(ib_cache_gid_parse_type_str);
+
+static void del_roce_gid(struct ib_device *device, u8 port_num,
+                        struct ib_gid_table *table, int ix)
+{
+       pr_debug("%s device=%s port=%d index=%d gid %pI6\n", __func__,
+                device->name, port_num, ix,
+                table->data_vec[ix].gid.raw);
+
+       if (rdma_cap_roce_gid_table(device, port_num))
+               device->del_gid(&table->data_vec[ix].attr,
+                               &table->data_vec[ix].context);
+       dev_put(table->data_vec[ix].attr.ndev);
+}
+
+static int add_roce_gid(struct ib_gid_table *table,
+                       const union ib_gid *gid,
+                       const struct ib_gid_attr *attr)
+{
+       struct ib_gid_table_entry *entry;
+       int ix = attr->index;
+       int ret = 0;
+
+       if (!attr->ndev) {
+               pr_err("%s NULL netdev device=%s port=%d index=%d\n",
+                      __func__, attr->device->name, attr->port_num,
+                      attr->index);
+               return -EINVAL;
+       }
+
+       entry = &table->data_vec[ix];
+       if ((entry->props & GID_TABLE_ENTRY_INVALID) == 0) {
+               WARN(1, "GID table corruption device=%s port=%d index=%d\n",
+                    attr->device->name, attr->port_num,
+                    attr->index);
+               return -EINVAL;
+       }
+
+       if (rdma_cap_roce_gid_table(attr->device, attr->port_num)) {
+               ret = attr->device->add_gid(gid, attr, &entry->context);
+               if (ret) {
+                       pr_err("%s GID add failed device=%s port=%d index=%d\n",
+                              __func__, attr->device->name, attr->port_num,
+                              attr->index);
+                       goto add_err;
+               }
+       }
+       dev_hold(attr->ndev);
+
+add_err:
+       if (!ret)
+               pr_debug("%s device=%s port=%d index=%d gid %pI6\n", __func__,
+                        attr->device->name, attr->port_num, ix, gid->raw);
+       return ret;
+}
+
+/**
+ * add_modify_gid - Add or modify GID table entry
+ *
+ * @table:     GID table in which GID to be added or modified
+ * @gid:       GID content
+ * @attr:      Attributes of the GID
+ *
+ * Returns 0 on success or appropriate error code. It accepts zero
+ * GID addition for non RoCE ports for HCA's who report them as valid
+ * GID. However such zero GIDs are not added to the cache.
+ */
+static int add_modify_gid(struct ib_gid_table *table,
+                         const union ib_gid *gid,
+                         const struct ib_gid_attr *attr)
+{
+       int ret;
+
+       if (rdma_protocol_roce(attr->device, attr->port_num)) {
+               ret = add_roce_gid(table, gid, attr);
+               if (ret)
+                       return ret;
+       } else {
+               /*
+                * Some HCA's report multiple GID entries with only one
+                * valid GID, but remaining as zero GID.
+                * So ignore such behavior for IB link layer and don't
+                * fail the call, but don't add such entry to GID cache.
+                */
+               if (!memcmp(gid, &zgid, sizeof(*gid)))
+                       return 0;
+       }
+
+       lockdep_assert_held(&table->lock);
+       memcpy(&table->data_vec[attr->index].gid, gid, sizeof(*gid));
+       memcpy(&table->data_vec[attr->index].attr, attr, sizeof(*attr));
+
+       write_lock_irq(&table->rwlock);
+       table->data_vec[attr->index].props &= ~GID_TABLE_ENTRY_INVALID;
+       write_unlock_irq(&table->rwlock);
+       return 0;
+}
+
+/**
+ * del_gid - Delete GID table entry
+ *
+ * @ib_dev:    IB device whose GID entry to be deleted
+ * @port:      Port number of the IB device
+ * @table:     GID table of the IB device for a port
+ * @ix:                GID entry index to delete
+ *
+ */
+static void del_gid(struct ib_device *ib_dev, u8 port,
+                   struct ib_gid_table *table, int ix)
+{
+       lockdep_assert_held(&table->lock);
+       write_lock_irq(&table->rwlock);
+       table->data_vec[ix].props |= GID_TABLE_ENTRY_INVALID;
+       write_unlock_irq(&table->rwlock);
+
+       if (rdma_protocol_roce(ib_dev, port))
+               del_roce_gid(ib_dev, port, table, ix);
+       memcpy(&table->data_vec[ix].gid, &zgid, sizeof(zgid));
+       memset(&table->data_vec[ix].attr, 0, sizeof(table->data_vec[ix].attr));
+       table->data_vec[ix].context = NULL;
+}
+
+/* rwlock should be read locked, or lock should be held */
+static int find_gid(struct ib_gid_table *table, const union ib_gid *gid,
+                   const struct ib_gid_attr *val, bool default_gid,
+                   unsigned long mask, int *pempty)
+{
+       int i = 0;
+       int found = -1;
+       int empty = pempty ? -1 : 0;
+
+       while (i < table->sz && (found < 0 || empty < 0)) {
+               struct ib_gid_table_entry *data = &table->data_vec[i];
+               struct ib_gid_attr *attr = &data->attr;
+               int curr_index = i;
+
+               i++;
+
+               /* find_gid() is used during GID addition where it is expected
+                * to return a free entry slot which is not duplicate.
+                * Free entry slot is requested and returned if pempty is set,
+                * so lookup free slot only if requested.
+                */
+               if (pempty && empty < 0) {
+                       if (data->props & GID_TABLE_ENTRY_INVALID &&
+                           (default_gid ==
+                            !!(data->props & GID_TABLE_ENTRY_DEFAULT))) {
+                               /*
+                                * Found an invalid (free) entry; allocate it.
+                                * If default GID is requested, then our
+                                * found slot must be one of the DEFAULT
+                                * reserved slots or we fail.
+                                * This ensures that only DEFAULT reserved
+                                * slots are used for default property GIDs.
+                                */
+                               empty = curr_index;
+                       }
+               }
+
+               /*
+                * Additionally find_gid() is used to find valid entry during
+                * lookup operation, where validity needs to be checked. So
+                * find the empty entry first to continue to search for a free
+                * slot and ignore its INVALID flag.
+                */
+               if (data->props & GID_TABLE_ENTRY_INVALID)
+                       continue;
+
+               if (found >= 0)
+                       continue;
+
+               if (mask & GID_ATTR_FIND_MASK_GID_TYPE &&
+                   attr->gid_type != val->gid_type)
+                       continue;
+
+               if (mask & GID_ATTR_FIND_MASK_GID &&
+                   memcmp(gid, &data->gid, sizeof(*gid)))
+                       continue;
+
+               if (mask & GID_ATTR_FIND_MASK_NETDEV &&
+                   attr->ndev != val->ndev)
+                       continue;
+
+               if (mask & GID_ATTR_FIND_MASK_DEFAULT &&
+                   !!(data->props & GID_TABLE_ENTRY_DEFAULT) !=
+                   default_gid)
+                       continue;
+
+               found = curr_index;
+       }
+
+       if (pempty)
+               *pempty = empty;
+
+       return found;
+}
+
+static void make_default_gid(struct  net_device *dev, union ib_gid *gid)
+{
+       gid->global.subnet_prefix = cpu_to_be64(0xfe80000000000000LL);
+       addrconf_ifid_eui48(&gid->raw[8], dev);
+}
+
+static int __ib_cache_gid_add(struct ib_device *ib_dev, u8 port,
+                             union ib_gid *gid, struct ib_gid_attr *attr,
+                             unsigned long mask, bool default_gid)
+{
+       struct ib_gid_table *table;
+       int ret = 0;
+       int empty;
+       int ix;
+
+   &nb