diff options
| -rw-r--r-- | drivers/infiniband/core/roce_gid_mgmt.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/chip.c | 3 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/hfi.h | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/qp.c | 7 | ||||
| -rw-r--r-- | drivers/infiniband/hw/hfi1/verbs.c | 2 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx5/devx.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx5/odp.c | 9 |
7 files changed, 22 insertions, 8 deletions
diff --git a/drivers/infiniband/core/roce_gid_mgmt.c b/drivers/infiniband/core/roce_gid_mgmt.c index 25d43c8f1c2a..558de0b9895c 100644 --- a/drivers/infiniband/core/roce_gid_mgmt.c +++ b/drivers/infiniband/core/roce_gid_mgmt.c | |||
| @@ -267,6 +267,9 @@ is_upper_ndev_bond_master_filter(struct ib_device *ib_dev, u8 port, | |||
| 267 | struct net_device *cookie_ndev = cookie; | 267 | struct net_device *cookie_ndev = cookie; |
| 268 | bool match = false; | 268 | bool match = false; |
| 269 | 269 | ||
| 270 | if (!rdma_ndev) | ||
| 271 | return false; | ||
| 272 | |||
| 270 | rcu_read_lock(); | 273 | rcu_read_lock(); |
| 271 | if (netif_is_bond_master(cookie_ndev) && | 274 | if (netif_is_bond_master(cookie_ndev) && |
| 272 | rdma_is_upper_dev_rcu(rdma_ndev, cookie_ndev)) | 275 | rdma_is_upper_dev_rcu(rdma_ndev, cookie_ndev)) |
diff --git a/drivers/infiniband/hw/hfi1/chip.c b/drivers/infiniband/hw/hfi1/chip.c index 9b20479dc710..7e6d70936c63 100644 --- a/drivers/infiniband/hw/hfi1/chip.c +++ b/drivers/infiniband/hw/hfi1/chip.c | |||
| @@ -12500,7 +12500,8 @@ static int init_cntrs(struct hfi1_devdata *dd) | |||
| 12500 | } | 12500 | } |
| 12501 | 12501 | ||
| 12502 | /* allocate space for the counter values */ | 12502 | /* allocate space for the counter values */ |
| 12503 | dd->cntrs = kcalloc(dd->ndevcntrs, sizeof(u64), GFP_KERNEL); | 12503 | dd->cntrs = kcalloc(dd->ndevcntrs + num_driver_cntrs, sizeof(u64), |
| 12504 | GFP_KERNEL); | ||
| 12504 | if (!dd->cntrs) | 12505 | if (!dd->cntrs) |
| 12505 | goto bail; | 12506 | goto bail; |
| 12506 | 12507 | ||
diff --git a/drivers/infiniband/hw/hfi1/hfi.h b/drivers/infiniband/hw/hfi1/hfi.h index 1401b6ea4a28..2b882347d0c2 100644 --- a/drivers/infiniband/hw/hfi1/hfi.h +++ b/drivers/infiniband/hw/hfi1/hfi.h | |||
| @@ -155,6 +155,8 @@ struct hfi1_ib_stats { | |||
| 155 | extern struct hfi1_ib_stats hfi1_stats; | 155 | extern struct hfi1_ib_stats hfi1_stats; |
| 156 | extern const struct pci_error_handlers hfi1_pci_err_handler; | 156 | extern const struct pci_error_handlers hfi1_pci_err_handler; |
| 157 | 157 | ||
| 158 | extern int num_driver_cntrs; | ||
| 159 | |||
| 158 | /* | 160 | /* |
| 159 | * First-cut criterion for "device is active" is | 161 | * First-cut criterion for "device is active" is |
| 160 | * two thousand dwords combined Tx, Rx traffic per | 162 | * two thousand dwords combined Tx, Rx traffic per |
diff --git a/drivers/infiniband/hw/hfi1/qp.c b/drivers/infiniband/hw/hfi1/qp.c index 6f3bc4dab858..1a016248039f 100644 --- a/drivers/infiniband/hw/hfi1/qp.c +++ b/drivers/infiniband/hw/hfi1/qp.c | |||
| @@ -340,6 +340,13 @@ int hfi1_setup_wqe(struct rvt_qp *qp, struct rvt_swqe *wqe, bool *call_send) | |||
| 340 | default: | 340 | default: |
| 341 | break; | 341 | break; |
| 342 | } | 342 | } |
| 343 | |||
| 344 | /* | ||
| 345 | * System latency between send and schedule is large enough that | ||
| 346 | * forcing call_send to true for piothreshold packets is necessary. | ||
| 347 | */ | ||
| 348 | if (wqe->length <= piothreshold) | ||
| 349 | *call_send = true; | ||
| 343 | return 0; | 350 | return 0; |
| 344 | } | 351 | } |
| 345 | 352 | ||
diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c index 48e11e510358..a365089a9305 100644 --- a/drivers/infiniband/hw/hfi1/verbs.c +++ b/drivers/infiniband/hw/hfi1/verbs.c | |||
| @@ -1479,7 +1479,7 @@ static const char * const driver_cntr_names[] = { | |||
| 1479 | static DEFINE_MUTEX(cntr_names_lock); /* protects the *_cntr_names bufers */ | 1479 | static DEFINE_MUTEX(cntr_names_lock); /* protects the *_cntr_names bufers */ |
| 1480 | static const char **dev_cntr_names; | 1480 | static const char **dev_cntr_names; |
| 1481 | static const char **port_cntr_names; | 1481 | static const char **port_cntr_names; |
| 1482 | static int num_driver_cntrs = ARRAY_SIZE(driver_cntr_names); | 1482 | int num_driver_cntrs = ARRAY_SIZE(driver_cntr_names); |
| 1483 | static int num_dev_cntrs; | 1483 | static int num_dev_cntrs; |
| 1484 | static int num_port_cntrs; | 1484 | static int num_port_cntrs; |
| 1485 | static int cntr_names_initialized; | 1485 | static int cntr_names_initialized; |
diff --git a/drivers/infiniband/hw/mlx5/devx.c b/drivers/infiniband/hw/mlx5/devx.c index 61aab7c0c513..45c421c87100 100644 --- a/drivers/infiniband/hw/mlx5/devx.c +++ b/drivers/infiniband/hw/mlx5/devx.c | |||
| @@ -1066,7 +1066,9 @@ static int devx_umem_get(struct mlx5_ib_dev *dev, struct ib_ucontext *ucontext, | |||
| 1066 | 1066 | ||
| 1067 | err = uverbs_get_flags32(&access, attrs, | 1067 | err = uverbs_get_flags32(&access, attrs, |
| 1068 | MLX5_IB_ATTR_DEVX_UMEM_REG_ACCESS, | 1068 | MLX5_IB_ATTR_DEVX_UMEM_REG_ACCESS, |
| 1069 | IB_ACCESS_SUPPORTED); | 1069 | IB_ACCESS_LOCAL_WRITE | |
| 1070 | IB_ACCESS_REMOTE_WRITE | | ||
| 1071 | IB_ACCESS_REMOTE_READ); | ||
| 1070 | if (err) | 1072 | if (err) |
| 1071 | return err; | 1073 | return err; |
| 1072 | 1074 | ||
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c index 2cc3d69ab6f6..4dc6cc640ce0 100644 --- a/drivers/infiniband/hw/mlx5/odp.c +++ b/drivers/infiniband/hw/mlx5/odp.c | |||
| @@ -506,14 +506,13 @@ void mlx5_ib_free_implicit_mr(struct mlx5_ib_mr *imr) | |||
| 506 | static int pagefault_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr, | 506 | static int pagefault_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr, |
| 507 | u64 io_virt, size_t bcnt, u32 *bytes_mapped) | 507 | u64 io_virt, size_t bcnt, u32 *bytes_mapped) |
| 508 | { | 508 | { |
| 509 | int npages = 0, current_seq, page_shift, ret, np; | ||
| 510 | bool implicit = false; | ||
| 509 | struct ib_umem_odp *odp_mr = to_ib_umem_odp(mr->umem); | 511 | struct ib_umem_odp *odp_mr = to_ib_umem_odp(mr->umem); |
| 510 | u64 access_mask = ODP_READ_ALLOWED_BIT; | 512 | u64 access_mask = ODP_READ_ALLOWED_BIT; |
| 511 | int npages = 0, page_shift, np; | ||
| 512 | u64 start_idx, page_mask; | 513 | u64 start_idx, page_mask; |
| 513 | struct ib_umem_odp *odp; | 514 | struct ib_umem_odp *odp; |
| 514 | int current_seq; | ||
| 515 | size_t size; | 515 | size_t size; |
| 516 | int ret; | ||
| 517 | 516 | ||
| 518 | if (!odp_mr->page_list) { | 517 | if (!odp_mr->page_list) { |
| 519 | odp = implicit_mr_get_data(mr, io_virt, bcnt); | 518 | odp = implicit_mr_get_data(mr, io_virt, bcnt); |
| @@ -521,7 +520,7 @@ static int pagefault_mr(struct mlx5_ib_dev *dev, struct mlx5_ib_mr *mr, | |||
| 521 | if (IS_ERR(odp)) | 520 | if (IS_ERR(odp)) |
| 522 | return PTR_ERR(odp); | 521 | return PTR_ERR(odp); |
| 523 | mr = odp->private; | 522 | mr = odp->private; |
| 524 | 523 | implicit = true; | |
| 525 | } else { | 524 | } else { |
| 526 | odp = odp_mr; | 525 | odp = odp_mr; |
| 527 | } | 526 | } |
| @@ -600,7 +599,7 @@ next_mr: | |||
| 600 | 599 | ||
| 601 | out: | 600 | out: |
| 602 | if (ret == -EAGAIN) { | 601 | if (ret == -EAGAIN) { |
| 603 | if (mr->parent || !odp->dying) { | 602 | if (implicit || !odp->dying) { |
| 604 | unsigned long timeout = | 603 | unsigned long timeout = |
| 605 | msecs_to_jiffies(MMU_NOTIFIER_TIMEOUT); | 604 | msecs_to_jiffies(MMU_NOTIFIER_TIMEOUT); |
| 606 | 605 | ||
