Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a01fa5e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull rdma fixes from Doug Ledford:
 "This has been a slow -rc cycle for the RDMA subsystem. We really
  haven't had a lot of rc fixes come in. This pull request is the first
  of this entire rc cycle and it has all of the suitable fixes so far
  and it's still only about 20 patches. The fix for the minor breakage
  cause by the dma mapping patchset is in here, as well as a couple
  other potential oops fixes, but the rest is more minor.

  Summary:

   - fix for dma_ops change in this kernel, resolving the s390, powerpc,
     and IOMMU operation

   - a few other oops fixes

   - the rest are all minor fixes"

* tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma:
  IB/qib: fix false-postive maybe-uninitialized warning
  RDMA/iser: Fix possible mr leak on device removal event
  IB/device: Convert ib-comp-wq to be CPU-bound
  IB/cq: Don't process more than the given budget
  IB/rxe: increment msn only when completing a request
  uapi: fix rdma/mlx5-abi.h userspace compilation errors
  IB/core: Restore I/O MMU, s390 and powerpc support
  IB/rxe: Update documentation link
  RDMA/ocrdma: fix a type issue in ocrdma_put_pd_num()
  IB/rxe: double free on error
  RDMA/vmw_pvrdma: Activate device on ethernet link up
  RDMA/vmw_pvrdma: Dont hardcode QP header page
  RDMA/vmw_pvrdma: Cleanup unused variables
  infiniband: Fix alignment of mmap cookies to support VIPT caching
  IB/core: Protect against self-requeue of a cq work item
  i40iw: Receive netdev events post INET_NOTIFIER state
parents 4c3de7e5 f6aafac1
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -29,7 +29,13 @@ static int __ib_process_cq(struct ib_cq *cq, int budget)
{
	int i, n, completed = 0;

	while ((n = ib_poll_cq(cq, IB_POLL_BATCH, cq->wc)) > 0) {
	/*
	 * budget might be (-1) if the caller does not
	 * want to bound this call, thus we need unsigned
	 * minimum here.
	 */
	while ((n = ib_poll_cq(cq, min_t(u32, IB_POLL_BATCH,
			budget - completed), cq->wc)) > 0) {
		for (i = 0; i < n; i++) {
			struct ib_wc *wc = &cq->wc[i];

@@ -196,7 +202,7 @@ void ib_free_cq(struct ib_cq *cq)
		irq_poll_disable(&cq->iop);
		break;
	case IB_POLL_WORKQUEUE:
		flush_work(&cq->work);
		cancel_work_sync(&cq->work);
		break;
	default:
		WARN_ON_ONCE(1);
+21 −8
Original line number Diff line number Diff line
@@ -336,12 +336,26 @@ int ib_register_device(struct ib_device *device,
	struct device *parent = device->dev.parent;

	WARN_ON_ONCE(!parent);
	if (!device->dev.dma_ops)
		device->dev.dma_ops = parent->dma_ops;
	WARN_ON_ONCE(device->dma_device);
	if (device->dev.dma_ops) {
		/*
		 * The caller provided custom DMA operations. Copy the
		 * DMA-related fields that are used by e.g. dma_alloc_coherent()
		 * into device->dev.
		 */
		device->dma_device = &device->dev;
		if (!device->dev.dma_mask)
			device->dev.dma_mask = parent->dma_mask;
		if (!device->dev.coherent_dma_mask)
		device->dev.coherent_dma_mask = parent->coherent_dma_mask;
			device->dev.coherent_dma_mask =
				parent->coherent_dma_mask;
	} else {
		/*
		 * The caller did not provide custom DMA operations. Use the
		 * DMA mapping operations of the parent device.
		 */
		device->dma_device = parent;
	}

	mutex_lock(&device_mutex);

@@ -1015,8 +1029,7 @@ static int __init ib_core_init(void)
		return -ENOMEM;

	ib_comp_wq = alloc_workqueue("ib-comp-wq",
			WQ_UNBOUND | WQ_HIGHPRI | WQ_MEM_RECLAIM,
			WQ_UNBOUND_MAX_ACTIVE);
			WQ_HIGHPRI | WQ_MEM_RECLAIM | WQ_SYSFS, 0);
	if (!ib_comp_wq) {
		ret = -ENOMEM;
		goto err;
+8 −0
Original line number Diff line number Diff line
@@ -160,6 +160,9 @@ int i40iw_inetaddr_event(struct notifier_block *notifier,
		return NOTIFY_DONE;

	iwdev = &hdl->device;
	if (iwdev->init_state < INET_NOTIFIER)
		return NOTIFY_DONE;

	netdev = iwdev->ldev->netdev;
	upper_dev = netdev_master_upper_dev_get(netdev);
	if (netdev != event_netdev)
@@ -214,6 +217,9 @@ int i40iw_inet6addr_event(struct notifier_block *notifier,
		return NOTIFY_DONE;

	iwdev = &hdl->device;
	if (iwdev->init_state < INET_NOTIFIER)
		return NOTIFY_DONE;

	netdev = iwdev->ldev->netdev;
	if (netdev != event_netdev)
		return NOTIFY_DONE;
@@ -260,6 +266,8 @@ int i40iw_net_event(struct notifier_block *notifier, unsigned long event, void *
		if (!iwhdl)
			return NOTIFY_DONE;
		iwdev = &iwhdl->device;
		if (iwdev->init_state < INET_NOTIFIER)
			return NOTIFY_DONE;
		p = (__be32 *)neigh->primary_key;
		i40iw_copy_ip_ntohl(local_ipaddr, p);
		if (neigh->nud_state & NUD_VALID) {
+1 −1
Original line number Diff line number Diff line
@@ -372,7 +372,7 @@ static int _ocrdma_pd_mgr_put_bitmap(struct ocrdma_dev *dev, u16 pd_id,
	return 0;
}

static u8 ocrdma_put_pd_num(struct ocrdma_dev *dev, u16 pd_id,
static int ocrdma_put_pd_num(struct ocrdma_dev *dev, u16 pd_id,
				   bool dpp_pool)
{
	int status;
+1 −1
Original line number Diff line number Diff line
@@ -7068,7 +7068,7 @@ static void qib_7322_txchk_change(struct qib_devdata *dd, u32 start,
	unsigned long flags;

	while (wait) {
		unsigned long shadow;
		unsigned long shadow = 0;
		int cstart, previ = -1;

		/*
Loading