Date: Sun, 9 May 2010 02:05:20 +0000 (UTC) From: Jeff Roberson <jeff@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r207808 - in projects/ofed/base/sys/ofed: . drivers drivers/infiniband drivers/infiniband/core drivers/infiniband/debug drivers/infiniband/hw drivers/infiniband/hw/amso1100 drivers/infi... Message-ID: <201005090205.o4925KlM094534@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: jeff Date: Sun May 9 02:05:20 2010 New Revision: 207808 URL: http://svn.freebsd.org/changeset/base/207808 Log: - Import ofed kernel sources from: git://git.openfabrics.org/ofed_1_5/linux-2.6 revision c559c00f2fabd28ef9014422c3fb1866b9981a7b Sponsored by: Isilon Systems, iX Systems, and Panasas. Added: projects/ofed/base/sys/ofed/ projects/ofed/base/sys/ofed/drivers/ projects/ofed/base/sys/ofed/drivers/infiniband/ projects/ofed/base/sys/ofed/drivers/infiniband/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/core/ projects/ofed/base/sys/ofed/drivers/infiniband/core/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/core/addr.c projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.h projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c projects/ofed/base/sys/ofed/drivers/infiniband/core/cm.c projects/ofed/base/sys/ofed/drivers/infiniband/core/cm_msgs.h projects/ofed/base/sys/ofed/drivers/infiniband/core/cma.c projects/ofed/base/sys/ofed/drivers/infiniband/core/core_priv.h projects/ofed/base/sys/ofed/drivers/infiniband/core/device.c projects/ofed/base/sys/ofed/drivers/infiniband/core/fmr_pool.c projects/ofed/base/sys/ofed/drivers/infiniband/core/iwcm.c projects/ofed/base/sys/ofed/drivers/infiniband/core/iwcm.h projects/ofed/base/sys/ofed/drivers/infiniband/core/local_sa.c projects/ofed/base/sys/ofed/drivers/infiniband/core/mad.c projects/ofed/base/sys/ofed/drivers/infiniband/core/mad_priv.h projects/ofed/base/sys/ofed/drivers/infiniband/core/mad_rmpp.c projects/ofed/base/sys/ofed/drivers/infiniband/core/mad_rmpp.h projects/ofed/base/sys/ofed/drivers/infiniband/core/multicast.c projects/ofed/base/sys/ofed/drivers/infiniband/core/notice.c projects/ofed/base/sys/ofed/drivers/infiniband/core/packer.c projects/ofed/base/sys/ofed/drivers/infiniband/core/sa.h projects/ofed/base/sys/ofed/drivers/infiniband/core/sa_query.c projects/ofed/base/sys/ofed/drivers/infiniband/core/smi.c projects/ofed/base/sys/ofed/drivers/infiniband/core/smi.h projects/ofed/base/sys/ofed/drivers/infiniband/core/sysfs.c projects/ofed/base/sys/ofed/drivers/infiniband/core/ucm.c projects/ofed/base/sys/ofed/drivers/infiniband/core/ucma.c projects/ofed/base/sys/ofed/drivers/infiniband/core/ud_header.c projects/ofed/base/sys/ofed/drivers/infiniband/core/umem.c projects/ofed/base/sys/ofed/drivers/infiniband/core/user_mad.c projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs.h projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_cmd.c projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_main.c projects/ofed/base/sys/ofed/drivers/infiniband/core/uverbs_marshall.c projects/ofed/base/sys/ofed/drivers/infiniband/core/verbs.c projects/ofed/base/sys/ofed/drivers/infiniband/debug/ projects/ofed/base/sys/ofed/drivers/infiniband/debug/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/debug/memtrack.c projects/ofed/base/sys/ofed/drivers/infiniband/debug/memtrack.h projects/ofed/base/sys/ofed/drivers/infiniband/debug/mtrack.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/Kbuild projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_ae.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_ae.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_alloc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_cm.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_intr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_mm.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_mq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_mq.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_pd.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_provider.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_provider.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_rnic.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_status.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_user.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_vq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_vq.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/amso1100/c2_wr.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_dbg.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_hal.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_resource.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/cxio_wr.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cm.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cm.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_ev.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_mem.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_provider.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_provider.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/iwch_user.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/cxgb3/tcb.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_av.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_classes.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_classes_pSeries.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_eq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_hca.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_irq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_irq.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_iverbs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_main.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_mcast.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_mrmw.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_mrmw.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_pd.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_qes.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_reqs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_sqp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_tools.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ehca_uverbs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hcp_if.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hcp_if.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hcp_phyp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hcp_phyp.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hipz_fns.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hipz_fns_core.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/hipz_hw.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ipz_pt_fn.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ehca/ipz_pt_fn.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_7220.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_common.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_debug.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_diag.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_dma.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_driver.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_eeprom.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_file_ops.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_fs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_iba6110.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_iba6120.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_iba7220.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_init_chip.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_intr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_kernel.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_keys.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_mad.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_mmap.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_mr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_rc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_registers.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_ruc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_sd7220.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_sd7220_img.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_sdma.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_srq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_stats.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_sysfs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_uc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_ud.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_user_pages.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_user_sdma.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_user_sdma.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_verbs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_verbs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_verbs_mcast.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_wc_ppc64.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/ipath/ipath_wc_x86_64.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/ah.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/doorbell.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mad.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/main.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mlx4_ib.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/mr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/srq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/user.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/wc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mlx4/wc.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_allocator.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_av.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_catas.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_cmd.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_config_reg.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_dev.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_doorbell.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_eq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_mad.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_mcg.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_memfree.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_memfree.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_mr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_pd.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_profile.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_profile.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_provider.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_reset.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_srq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_uar.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_user.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/mthca/mthca_wqe.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_cm.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_cm.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_context.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_hw.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_hw.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_nic.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_user.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_utils.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_verbs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/nes/nes_verbs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/ projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_6120_regs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_7220.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_7220_regs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_7322_regs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_common.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_cq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_debug.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_diag.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_dma.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_driver.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_eeprom.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_file_ops.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_fs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_iba6120.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_iba7220.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_iba7322.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_init.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_intr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_keys.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_mad.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_mad.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_mmap.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_mr.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_pcie.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_pio_copy.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_qp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_qsfp.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_qsfp.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_rc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_ruc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_sd7220.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_sd7220_img.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_sdma.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_srq.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_sysfs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_trace.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_trace.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_twsi.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_tx.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_uc.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_ud.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_user_pages.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_user_sdma.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_user_sdma.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_verbs.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_verbs.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_verbs_mcast.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_wc_pat.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_wc_pat.h projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_wc_ppc64.c projects/ofed/base/sys/ofed/drivers/infiniband/hw/qib/qib_wc_x86_64.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_cm.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ethtool.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_fs.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_ib.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_multicast.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_verbs.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_vlan.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/iscsi_iser.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/iscsi_iser.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/iser_initiator.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/iser_memory.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/iser/iser_verbs.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_config.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_config.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_control.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_control.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_control_pkt.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_data.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_data.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_ib.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_ib.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_main.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_main.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_multicast.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_multicast.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_netpath.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_netpath.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_stats.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_stats.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_sys.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_sys.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_trailer.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_util.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_viport.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/qlgc_vnic/vnic_viport.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_bcopy.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_cma.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_main.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_proc.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_rx.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_tx.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/sdp/sdp_zcopy.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srp/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srp/Kbuild projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srp/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srp/ib_srp.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srp/ib_srp.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/ projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/ib_dm_mad.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/ib_srpt.c projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/ib_srpt.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/scst.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/scst_const.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/scst_debug.h projects/ofed/base/sys/ofed/drivers/infiniband/ulp/srpt/scst_sgv.h projects/ofed/base/sys/ofed/drivers/infiniband/util/ projects/ofed/base/sys/ofed/drivers/infiniband/util/Kconfig projects/ofed/base/sys/ofed/drivers/infiniband/util/Makefile projects/ofed/base/sys/ofed/drivers/infiniband/util/madeye.c projects/ofed/base/sys/ofed/drivers/net/ projects/ofed/base/sys/ofed/drivers/net/mlx4/ projects/ofed/base/sys/ofed/drivers/net/mlx4/Makefile projects/ofed/base/sys/ofed/drivers/net/mlx4/alloc.c projects/ofed/base/sys/ofed/drivers/net/mlx4/catas.c projects/ofed/base/sys/ofed/drivers/net/mlx4/cmd.c projects/ofed/base/sys/ofed/drivers/net/mlx4/cq.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_cq.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_ethtool.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_frag.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_main.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_netdev.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_params.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_port.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_port.h projects/ofed/base/sys/ofed/drivers/net/mlx4/en_resources.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_rx.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_selftest.c projects/ofed/base/sys/ofed/drivers/net/mlx4/en_tx.c projects/ofed/base/sys/ofed/drivers/net/mlx4/eq.c projects/ofed/base/sys/ofed/drivers/net/mlx4/fw.c projects/ofed/base/sys/ofed/drivers/net/mlx4/fw.h projects/ofed/base/sys/ofed/drivers/net/mlx4/icm.c projects/ofed/base/sys/ofed/drivers/net/mlx4/icm.h projects/ofed/base/sys/ofed/drivers/net/mlx4/intf.c projects/ofed/base/sys/ofed/drivers/net/mlx4/main.c projects/ofed/base/sys/ofed/drivers/net/mlx4/mcg.c projects/ofed/base/sys/ofed/drivers/net/mlx4/mlx4.h projects/ofed/base/sys/ofed/drivers/net/mlx4/mlx4_en.h projects/ofed/base/sys/ofed/drivers/net/mlx4/mr.c projects/ofed/base/sys/ofed/drivers/net/mlx4/pd.c projects/ofed/base/sys/ofed/drivers/net/mlx4/port.c projects/ofed/base/sys/ofed/drivers/net/mlx4/profile.c projects/ofed/base/sys/ofed/drivers/net/mlx4/qp.c projects/ofed/base/sys/ofed/drivers/net/mlx4/reset.c projects/ofed/base/sys/ofed/drivers/net/mlx4/sense.c projects/ofed/base/sys/ofed/drivers/net/mlx4/srq.c projects/ofed/base/sys/ofed/drivers/net/mlx4/xrcd.c projects/ofed/base/sys/ofed/include/ projects/ofed/base/sys/ofed/include/linux/ projects/ofed/base/sys/ofed/include/linux/mlx4/ projects/ofed/base/sys/ofed/include/linux/mlx4/cmd.h projects/ofed/base/sys/ofed/include/linux/mlx4/cq.h projects/ofed/base/sys/ofed/include/linux/mlx4/device.h projects/ofed/base/sys/ofed/include/linux/mlx4/doorbell.h projects/ofed/base/sys/ofed/include/linux/mlx4/driver.h projects/ofed/base/sys/ofed/include/linux/mlx4/qp.h projects/ofed/base/sys/ofed/include/linux/mlx4/srq.h projects/ofed/base/sys/ofed/include/rdma/ projects/ofed/base/sys/ofed/include/rdma/Kbuild projects/ofed/base/sys/ofed/include/rdma/ib_addr.h projects/ofed/base/sys/ofed/include/rdma/ib_cache.h projects/ofed/base/sys/ofed/include/rdma/ib_cm.h projects/ofed/base/sys/ofed/include/rdma/ib_fmr_pool.h projects/ofed/base/sys/ofed/include/rdma/ib_mad.h projects/ofed/base/sys/ofed/include/rdma/ib_marshall.h projects/ofed/base/sys/ofed/include/rdma/ib_pack.h projects/ofed/base/sys/ofed/include/rdma/ib_sa.h projects/ofed/base/sys/ofed/include/rdma/ib_smi.h projects/ofed/base/sys/ofed/include/rdma/ib_umem.h projects/ofed/base/sys/ofed/include/rdma/ib_user_cm.h projects/ofed/base/sys/ofed/include/rdma/ib_user_mad.h projects/ofed/base/sys/ofed/include/rdma/ib_user_sa.h projects/ofed/base/sys/ofed/include/rdma/ib_user_verbs.h projects/ofed/base/sys/ofed/include/rdma/ib_verbs.h projects/ofed/base/sys/ofed/include/rdma/iw_cm.h projects/ofed/base/sys/ofed/include/rdma/rdma_cm.h projects/ofed/base/sys/ofed/include/rdma/rdma_cm_ib.h projects/ofed/base/sys/ofed/include/rdma/rdma_user_cm.h projects/ofed/base/sys/ofed/include/rdma/sdp_socket.h Added: projects/ofed/base/sys/ofed/drivers/infiniband/Kconfig ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/Kconfig Sun May 9 02:05:20 2010 (r207808) @@ -0,0 +1,66 @@ +menuconfig INFINIBAND + tristate "InfiniBand support" + depends on PCI || BROKEN + depends on HAS_IOMEM + ---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 <http://www.openib.org>. + +config INFINIBAND_USER_ACCESS + tristate "InfiniBand userspace access (verbs and CM)" + ---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 + <http://www.openib.org>. + +config INFINIBAND_USER_MEM + bool + depends on INFINIBAND_USER_ACCESS != n + default y + +config INFINIBAND_ADDR_TRANS + bool + depends on INET + depends on !(INFINIBAND = y && IPV6 = m) + default y + +source "drivers/infiniband/hw/mthca/Kconfig" +source "drivers/infiniband/hw/ipath/Kconfig" +source "drivers/infiniband/hw/qib/Kconfig" +source "drivers/infiniband/hw/ehca/Kconfig" +source "drivers/infiniband/hw/amso1100/Kconfig" +source "drivers/infiniband/hw/cxgb3/Kconfig" +source "drivers/infiniband/hw/mlx4/Kconfig" +source "drivers/infiniband/hw/nes/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/sdp/Kconfig" + +source "drivers/infiniband/ulp/qlgc_vnic/Kconfig" + +source "drivers/infiniband/util/Kconfig" + +endif # INFINIBAND Added: projects/ofed/base/sys/ofed/drivers/infiniband/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/Makefile Sun May 9 02:05:20 2010 (r207808) @@ -0,0 +1,17 @@ +obj-$(CONFIG_INFINIBAND) += core/ +obj-$(CONFIG_INFINIBAND_MTHCA) += hw/mthca/ +obj-$(CONFIG_INFINIBAND_IPATH) += hw/ipath/ +obj-$(CONFIG_INFINIBAND_QIB) += hw/qib/ +obj-$(CONFIG_INFINIBAND_EHCA) += hw/ehca/ +obj-$(CONFIG_INFINIBAND_AMSO1100) += hw/amso1100/ +obj-$(CONFIG_INFINIBAND_CXGB3) += hw/cxgb3/ +obj-$(CONFIG_INFINIBAND_NES) += hw/nes/ +obj-$(CONFIG_MLX4_INFINIBAND) += hw/mlx4/ +obj-$(CONFIG_INFINIBAND_NES) += hw/nes/ +obj-$(CONFIG_INFINIBAND_IPOIB) += ulp/ipoib/ +obj-$(CONFIG_INFINIBAND_SRP) += ulp/srp/ +obj-$(CONFIG_INFINIBAND_SRPT) += ulp/srpt/ +obj-$(CONFIG_INFINIBAND_ISER) += ulp/iser/ +obj-$(CONFIG_INFINIBAND_SDP) += ulp/sdp/ +obj-$(CONFIG_INFINIBAND_QLGC_VNIC) += ulp/qlgc_vnic/ +obj-$(CONFIG_INFINIBAND_MADEYE) += util/ Added: projects/ofed/base/sys/ofed/drivers/infiniband/core/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/core/Makefile Sun May 9 02:05:20 2010 (r207808) @@ -0,0 +1,32 @@ +infiniband-$(CONFIG_INFINIBAND_ADDR_TRANS) := ib_addr.o rdma_cm.o +user_access-$(CONFIG_INFINIBAND_ADDR_TRANS) := rdma_ucm.o + +obj-$(CONFIG_INFINIBAND) += ib_core.o ib_mad.o ib_sa.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 sysfs.o \ + device.o fmr_pool.o cache.o +ib_core-$(CONFIG_INFINIBAND_USER_MEM) += umem.o + +ib_mad-y := mad.o smi.o agent.o mad_rmpp.o + +ib_sa-y := sa_query.o multicast.o notice.o local_sa.o + +ib_cm-y := cm.o + +iw_cm-y := iwcm.o + +rdma_cm-y := cma.o + +rdma_ucm-y := ucma.o + +ib_addr-y := addr.o + +ib_umad-y := user_mad.o + +ib_ucm-y := ucm.o + +ib_uverbs-y := uverbs_main.o uverbs_cmd.o uverbs_marshall.o Added: projects/ofed/base/sys/ofed/drivers/infiniband/core/addr.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/core/addr.c Sun May 9 02:05:20 2010 (r207808) @@ -0,0 +1,455 @@ +/* + * 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/workqueue.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> + +MODULE_AUTHOR("Sean Hefty"); +MODULE_DESCRIPTION("IB Address Translation"); +MODULE_LICENSE("Dual BSD/GPL"); + +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; + int status; +}; + +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; + +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); + +int rdma_copy_addr(struct rdma_dev_addr *dev_addr, 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; + return 0; +} +EXPORT_SYMBOL(rdma_copy_addr); + +int rdma_translate_ip(struct sockaddr *addr, struct rdma_dev_addr *dev_addr) +{ + struct net_device *dev; + int ret = -EADDRNOTAVAIL; + + if (dev_addr->bound_dev_if) { + dev = dev_get_by_index(&init_net, dev_addr->bound_dev_if); + if (!dev) + return -ENODEV; + ret = rdma_copy_addr(dev_addr, dev, NULL); + dev_put(dev); + return ret; + } + + switch (addr->sa_family) { + case AF_INET: + dev = ip_dev_find(&init_net, + ((struct sockaddr_in *) addr)->sin_addr.s_addr); + + if (!dev) + return ret; + + ret = rdma_copy_addr(dev_addr, dev, NULL); + dev_put(dev); + break; + +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) + case AF_INET6: + read_lock(&dev_base_lock); + for_each_netdev(&init_net, dev) { + if (ipv6_chk_addr(&init_net, + &((struct sockaddr_in6 *) addr)->sin6_addr, + dev, 1)) { + ret = rdma_copy_addr(dev_addr, dev, NULL); + break; + } + } + read_unlock(&dev_base_lock); + break; +#endif + } + return ret; +} +EXPORT_SYMBOL(rdma_translate_ip); + +static void set_timeout(unsigned long time) +{ + unsigned long delay; + + cancel_delayed_work(&work); + + delay = time - jiffies; + if ((long)delay <= 0) + delay = 1; + + queue_delayed_work(addr_wq, &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); + + if (req_list.next == &req->list) + set_timeout(req->timeout); + mutex_unlock(&lock); +} + +static int addr4_resolve(struct sockaddr_in *src_in, + struct sockaddr_in *dst_in, + struct rdma_dev_addr *addr) +{ + __be32 src_ip = src_in->sin_addr.s_addr; + __be32 dst_ip = dst_in->sin_addr.s_addr; + struct flowi fl; + struct rtable *rt; + struct neighbour *neigh; + int ret; + + memset(&fl, 0, sizeof fl); + fl.nl_u.ip4_u.daddr = dst_ip; + fl.nl_u.ip4_u.saddr = src_ip; + fl.oif = addr->bound_dev_if; + + ret = ip_route_output_key(&init_net, &rt, &fl); + if (ret) + goto out; + + src_in->sin_family = AF_INET; + src_in->sin_addr.s_addr = rt->rt_src; + + if (rt->idev->dev->flags & IFF_LOOPBACK) { + ret = rdma_translate_ip((struct sockaddr *) dst_in, addr); + if (!ret) + memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN); + goto put; + } + + /* If the device does ARP internally, return 'done' */ + if (rt->idev->dev->flags & IFF_NOARP) { + rdma_copy_addr(addr, rt->idev->dev, NULL); + goto put; + } + + neigh = neigh_lookup(&arp_tbl, &rt->rt_gateway, rt->idev->dev); + if (!neigh || !(neigh->nud_state & NUD_VALID)) { + neigh_event_send(rt->u.dst.neighbour, NULL); + ret = -ENODATA; + if (neigh) + goto release; + goto put; + } + + ret = rdma_copy_addr(addr, neigh->dev, neigh->ha); +release: + neigh_release(neigh); +put: + ip_rt_put(rt); +out: + return ret; +} + +#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE) +static int addr6_resolve(struct sockaddr_in6 *src_in, + struct sockaddr_in6 *dst_in, + struct rdma_dev_addr *addr) +{ + struct flowi fl; + struct neighbour *neigh; + struct dst_entry *dst; + int ret; + + memset(&fl, 0, sizeof fl); + ipv6_addr_copy(&fl.fl6_dst, &dst_in->sin6_addr); + ipv6_addr_copy(&fl.fl6_src, &src_in->sin6_addr); + fl.oif = addr->bound_dev_if; + + dst = ip6_route_output(&init_net, NULL, &fl); + if ((ret = dst->error)) + goto put; + + if (ipv6_addr_any(&fl.fl6_src)) { + ret = ipv6_dev_get_saddr(&init_net, ip6_dst_idev(dst)->dev, + &fl.fl6_dst, 0, &fl.fl6_src); + if (ret) + goto put; + + src_in->sin6_family = AF_INET6; + ipv6_addr_copy(&src_in->sin6_addr, &fl.fl6_src); + } + + if (dst->dev->flags & IFF_LOOPBACK) { + ret = rdma_translate_ip((struct sockaddr *) dst_in, addr); + if (!ret) + memcpy(addr->dst_dev_addr, addr->src_dev_addr, MAX_ADDR_LEN); + goto put; + } + + /* If the device does ARP internally, return 'done' */ + if (dst->dev->flags & IFF_NOARP) { + ret = rdma_copy_addr(addr, dst->dev, NULL); + goto put; + } + + neigh = dst->neighbour; + if (!neigh || !(neigh->nud_state & NUD_VALID)) { + neigh_event_send(dst->neighbour, NULL); + ret = -ENODATA; + goto put; + } + + ret = rdma_copy_addr(addr, dst->dev, neigh->ha); +put: + dst_release(dst); + return ret; +} +#else +static int addr6_resolve(struct sockaddr_in6 *src_in, + struct sockaddr_in6 *dst_in, + struct rdma_dev_addr *addr) +{ + return -EADDRNOTAVAIL; +} +#endif + +static int addr_resolve(struct sockaddr *src_in, + struct sockaddr *dst_in, + struct rdma_dev_addr *addr) +{ + if (src_in->sa_family == AF_INET) { + return addr4_resolve((struct sockaddr_in *) src_in, + (struct sockaddr_in *) dst_in, addr); + } else + return addr6_resolve((struct sockaddr_in6 *) src_in, + (struct sockaddr_in6 *) dst_in, addr); +} + +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); + if (req->status && time_after_eq(jiffies, req->timeout)) + req->status = -ETIMEDOUT; + else if (req->status == -ENODATA) + continue; + } + list_move_tail(&req->list, &done_list); + } + + if (!list_empty(&req_list)) { + req = list_entry(req_list.next, struct addr_req, list); + set_timeout(req->timeout); + } + mutex_unlock(&lock); + + list_for_each_entry_safe(req, temp_req, &done_list, list) { + list_del(&req->list); + 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, ip_addr_size(src_addr)); + } else { + src_in->sa_family = dst_addr->sa_family; + } + + memcpy(dst_in, dst_addr, ip_addr_size(dst_addr)); + req->addr = addr; + req->callback = callback; + req->context = context; + req->client = client; + atomic_inc(&client->refcount); + + req->status = addr_resolve(src_in, dst_in, addr); + 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); + +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->timeout); + break; + } + } + mutex_unlock(&lock); +} +EXPORT_SYMBOL(rdma_addr_cancel); + +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(jiffies); + } + } + return 0; +} + +static struct notifier_block nb = { + .notifier_call = netevent_callback +}; + +static int addr_init(void) +{ + addr_wq = create_singlethread_workqueue("ib_addr"); + if (!addr_wq) + return -ENOMEM; + + register_netevent_notifier(&nb); + return 0; +} + +static void addr_cleanup(void) +{ + unregister_netevent_notifier(&nb); + destroy_workqueue(addr_wq); +} + +module_init(addr_init); +module_exit(addr_cleanup); Added: projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.c Sun May 9 02:05:20 2010 (r207808) @@ -0,0 +1,220 @@ +/* + * 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]; + struct ib_device *device; + u8 port_num; +}; + +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(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->device == device && entry->port_num == port_num) + return entry; + + return NULL; +} + +static struct ib_agent_port_private * +ib_get_agent_port(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(struct ib_mad *mad, struct ib_grh *grh, + struct ib_wc *wc, struct ib_device *device, + int port_num, int qpn) +{ + 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 (device->node_type == RDMA_NODE_IB_SWITCH) + port_priv = ib_get_agent_port(device, 0); + else + port_priv = ib_get_agent_port(device, port_num); + + if (!port_priv) { + printk(KERN_ERR SPFX "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)) { + printk(KERN_ERR SPFX "ib_create_ah_from_wc error\n"); + return; + } + + send_buf = ib_create_send_mad(agent, wc->src_qp, wc->pkey_index, 0, + IB_MGMT_MAD_HDR, IB_MGMT_MAD_DATA, + GFP_KERNEL); + if (IS_ERR(send_buf)) { + printk(KERN_ERR SPFX "ib_create_send_mad error\n"); + goto err1; + } + + memcpy(send_buf->mad, mad, sizeof *mad); + send_buf->ah = ah; + + if (device->node_type == RDMA_NODE_IB_SWITCH) { + mad_send_wr = container_of(send_buf, + struct ib_mad_send_wr_private, + send_buf); + mad_send_wr->send_wr.wr.ud.port_num = port_num; + } + + if (ib_post_send_mad(send_buf, NULL)) { + printk(KERN_ERR SPFX "ib_post_send_mad error\n"); + goto err2; + } + return; +err2: + ib_free_send_mad(send_buf); +err1: + ib_destroy_ah(ah); +} + +static void agent_send_handler(struct ib_mad_agent *mad_agent, + struct ib_mad_send_wc *mad_send_wc) +{ + ib_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) { + printk(KERN_ERR SPFX "No memory for ib_agent_port_private\n"); + ret = -ENOMEM; + goto error1; + } + + if (rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND) { + /* 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); + 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); + if (IS_ERR(port_priv->agent[1])) { + ret = PTR_ERR(port_priv->agent[1]); + goto error3; + } + + port_priv->device = device; + port_priv->port_num = port_num; + + 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 (rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND) + 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); + printk(KERN_ERR SPFX "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 (rdma_port_link_layer(device, port_num) == IB_LINK_LAYER_INFINIBAND) + ib_unregister_mad_agent(port_priv->agent[0]); + + kfree(port_priv); + return 0; +} Added: projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/core/agent.h Sun May 9 02:05:20 2010 (r207808) @@ -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(struct ib_mad *mad, struct ib_grh *grh, + struct ib_wc *wc, struct ib_device *device, + int port_num, int qpn); + +#endif /* __AGENT_H_ */ Added: projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/ofed/base/sys/ofed/drivers/infiniband/core/cache.c Sun May 9 02:05:20 2010 (r207808) @@ -0,0 +1,397 @@ +/* + * 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 <rdma/ib_cache.h> + +#include "core_priv.h" + +struct ib_pkey_cache { + int table_len; + u16 table[0]; +}; + +struct ib_gid_cache { + int table_len; + union ib_gid table[0]; +}; + +struct ib_update_work { + struct work_struct work; + struct ib_device *device; + u8 port_num; +}; + +static inline int start_port(struct ib_device *device) +{ + return (device->node_type == RDMA_NODE_IB_SWITCH) ? 0 : 1; +} + +static inline int end_port(struct ib_device *device) +{ + return (device->node_type == RDMA_NODE_IB_SWITCH) ? + 0 : device->phys_port_cnt; +} + +int ib_get_cached_gid(struct ib_device *device, + u8 port_num, + int index, + union ib_gid *gid) +{ + struct ib_gid_cache *cache; + unsigned long flags; + int ret = 0; + + if (port_num < start_port(device) || port_num > end_port(device)) + return -EINVAL; + + read_lock_irqsave(&device->cache.lock, flags); + + cache = device->cache.gid_cache[port_num - start_port(device)]; + + if (index < 0 || index >= cache->table_len) + ret = -EINVAL; + else + *gid = cache->table[index]; + + read_unlock_irqrestore(&device->cache.lock, flags); + + return ret; +} +EXPORT_SYMBOL(ib_get_cached_gid); + +int ib_find_cached_gid(struct ib_device *device, + union ib_gid *gid, + u8 *port_num, + u16 *index) +{ + struct ib_gid_cache *cache; + unsigned long flags; + int p, i; + int ret = -ENOENT; + + *port_num = -1; + if (index) + *index = -1; + + read_lock_irqsave(&device->cache.lock, flags); + + for (p = 0; p <= end_port(device) - start_port(device); ++p) { + cache = device->cache.gid_cache[p]; + for (i = 0; i < cache->table_len; ++i) { + if (!memcmp(gid, &cache->table[i], sizeof *gid)) { + *port_num = p + start_port(device); + if (index) + *index = i; + ret = 0; + goto found; + } + } + } +found: + read_unlock_irqrestore(&device->cache.lock, flags); + + return ret; +} +EXPORT_SYMBOL(ib_find_cached_gid); + +int ib_get_cached_pkey(struct ib_device *device, + u8 port_num, + int index, + u16 *pkey) +{ *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005090205.o4925KlM094534>