Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma
Pull rdma updates from Jason Gunthorpe: "This has been a smaller cycle than normal. One new driver was accepted, which is unusual, and at least one more driver remains in review on the list. Summary: - Driver fixes for hns, hfi1, nes, rxe, i40iw, mlx5, cxgb4, vmw_pvrdma - Many patches from MatthewW converting radix tree and IDR users to use xarray - Introduction of tracepoints to the MAD layer - Build large SGLs at the start for DMA mapping and get the driver to split them - Generally clean SGL handling code throughout the subsystem - Support for restricting RDMA devices to net namespaces for containers - Progress to remove object allocation boilerplate code from drivers - Change in how the mlx5 driver shows representor ports linked to VFs - mlx5 uapi feature to access the on chip SW ICM memory - Add a new driver for 'EFA'. This is HW that supports user space packet processing through QPs in Amazon's cloud" * tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/rdma/rdma: (186 commits) RDMA/ipoib: Allow user space differentiate between valid dev_port IB/core, ipoib: Do not overreact to SM LID change event RDMA/device: Don't fire uevent before device is fully initialized lib/scatterlist: Remove leftover from sg_page_iter comment RDMA/efa: Add driver to Kconfig/Makefile RDMA/efa: Add the efa module RDMA/efa: Add EFA verbs implementation RDMA/efa: Add common command handlers RDMA/efa: Implement functions that submit and complete admin commands RDMA/efa: Add the ABI definitions RDMA/efa: Add the com service API definitions RDMA/efa: Add the efa_com.h file RDMA/efa: Add the efa.h header file RDMA/efa: Add EFA device definitions RDMA: Add EFA related definitions RDMA/umem: Remove hugetlb flag RDMA/bnxt_re: Use core helpers to get aligned DMA address RDMA/i40iw: Use core helpers to get aligned DMA address within a supported page size RDMA/verbs: Add a DMA iterator to return aligned contiguous memory blocks RDMA/umem: Add API to find best driver supported page size in an MR ...
此提交包含在:
@@ -162,12 +162,12 @@ static void deallocate_vnic_ctxt(struct hfi1_devdata *dd,
|
||||
|
||||
void hfi1_vnic_setup(struct hfi1_devdata *dd)
|
||||
{
|
||||
idr_init(&dd->vnic.vesw_idr);
|
||||
xa_init(&dd->vnic.vesws);
|
||||
}
|
||||
|
||||
void hfi1_vnic_cleanup(struct hfi1_devdata *dd)
|
||||
{
|
||||
idr_destroy(&dd->vnic.vesw_idr);
|
||||
WARN_ON(!xa_empty(&dd->vnic.vesws));
|
||||
}
|
||||
|
||||
#define SUM_GRP_COUNTERS(stats, qstats, x_grp) do { \
|
||||
@@ -533,7 +533,7 @@ void hfi1_vnic_bypass_rcv(struct hfi1_packet *packet)
|
||||
l4_type = hfi1_16B_get_l4(packet->ebuf);
|
||||
if (likely(l4_type == OPA_16B_L4_ETHR)) {
|
||||
vesw_id = HFI1_VNIC_GET_VESWID(packet->ebuf);
|
||||
vinfo = idr_find(&dd->vnic.vesw_idr, vesw_id);
|
||||
vinfo = xa_load(&dd->vnic.vesws, vesw_id);
|
||||
|
||||
/*
|
||||
* In case of invalid vesw id, count the error on
|
||||
@@ -541,9 +541,10 @@ void hfi1_vnic_bypass_rcv(struct hfi1_packet *packet)
|
||||
*/
|
||||
if (unlikely(!vinfo)) {
|
||||
struct hfi1_vnic_vport_info *vinfo_tmp;
|
||||
int id_tmp = 0;
|
||||
unsigned long index = 0;
|
||||
|
||||
vinfo_tmp = idr_get_next(&dd->vnic.vesw_idr, &id_tmp);
|
||||
vinfo_tmp = xa_find(&dd->vnic.vesws, &index, ULONG_MAX,
|
||||
XA_PRESENT);
|
||||
if (vinfo_tmp) {
|
||||
spin_lock(&vport_cntr_lock);
|
||||
vinfo_tmp->stats[0].netstats.rx_nohandler++;
|
||||
@@ -597,8 +598,7 @@ static int hfi1_vnic_up(struct hfi1_vnic_vport_info *vinfo)
|
||||
if (!vinfo->vesw_id)
|
||||
return -EINVAL;
|
||||
|
||||
rc = idr_alloc(&dd->vnic.vesw_idr, vinfo, vinfo->vesw_id,
|
||||
vinfo->vesw_id + 1, GFP_NOWAIT);
|
||||
rc = xa_insert(&dd->vnic.vesws, vinfo->vesw_id, vinfo, GFP_KERNEL);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
@@ -624,7 +624,7 @@ static void hfi1_vnic_down(struct hfi1_vnic_vport_info *vinfo)
|
||||
clear_bit(HFI1_VNIC_UP, &vinfo->flags);
|
||||
netif_carrier_off(vinfo->netdev);
|
||||
netif_tx_disable(vinfo->netdev);
|
||||
idr_remove(&dd->vnic.vesw_idr, vinfo->vesw_id);
|
||||
xa_erase(&dd->vnic.vesws, vinfo->vesw_id);
|
||||
|
||||
/* ensure irqs see the change */
|
||||
msix_vnic_synchronize_irq(dd);
|
||||
|
新增問題並參考
封鎖使用者