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

Commit 972d45fb authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband

* 'for-linus' of master.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband:
  IPoIB: Convert to NAPI
  IB: Return "maybe missed event" hint from ib_req_notify_cq()
  IB: Add CQ comp_vector support
  IB/ipath: Fix a race condition when generating ACKs
  IB/ipath: Fix two more spin lock problems
  IB/fmr_pool: Add prefix to all printks
  IB/srp: Set proc_name
  IB/srp: Add orig_dgid sysfs attribute to scsi_host
  IPoIB/cm: Don't crash if remote side uses one QP for both directions
  RDMA/cxgb3: Support for new abort logic
  RDMA/cxgb3: Initialize cpu_idx field in cpl_close_listserv_req message
  RDMA/cxgb3: Fail qp creation if the requested max_inline is too large
  RDMA/cxgb3: Fix TERM codes
  IPoIB/cm: Fix error handling in ipoib_cm_dev_open()
  IB/ipath: Don't corrupt pending mmap list when unmapped objects are freed
  IB/mthca: Work around kernel QP starvation
  IB/ipath: Don't put QP in timeout queue if waiting to send
  IB/ipath: Don't call spin_lock_irq() from interrupt context
parents 5b6b5498 8d1cc86a
Loading
Loading
Loading
Loading
+17 −15
Original line number Diff line number Diff line
@@ -43,6 +43,8 @@

#include "core_priv.h"

#define PFX "fmr_pool: "

enum {
	IB_FMR_MAX_REMAPS = 32,

@@ -150,7 +152,7 @@ static void ib_fmr_batch_release(struct ib_fmr_pool *pool)

#ifdef DEBUG
		if (fmr->ref_count !=0) {
			printk(KERN_WARNING "Unmapping FMR 0x%08x with ref count %d",
			printk(KERN_WARNING PFX "Unmapping FMR 0x%08x with ref count %d",
			       fmr, fmr->ref_count);
		}
#endif
@@ -168,7 +170,7 @@ static void ib_fmr_batch_release(struct ib_fmr_pool *pool)

	ret = ib_unmap_fmr(&fmr_list);
	if (ret)
		printk(KERN_WARNING "ib_unmap_fmr returned %d", ret);
		printk(KERN_WARNING PFX "ib_unmap_fmr returned %d", ret);

	spin_lock_irq(&pool->pool_lock);
	list_splice(&unmap_list, &pool->free_list);
@@ -226,20 +228,20 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
	device = pd->device;
	if (!device->alloc_fmr    || !device->dealloc_fmr  ||
	    !device->map_phys_fmr || !device->unmap_fmr) {
		printk(KERN_WARNING "Device %s does not support fast memory regions",
		printk(KERN_INFO PFX "Device %s does not support FMRs\n",
		       device->name);
		return ERR_PTR(-ENOSYS);
	}

	attr = kmalloc(sizeof *attr, GFP_KERNEL);
	if (!attr) {
		printk(KERN_WARNING "couldn't allocate device attr struct");
		printk(KERN_WARNING PFX "couldn't allocate device attr struct");
		return ERR_PTR(-ENOMEM);
	}

	ret = ib_query_device(device, attr);
	if (ret) {
		printk(KERN_WARNING "couldn't query device");
		printk(KERN_WARNING PFX "couldn't query device: %d", ret);
		kfree(attr);
		return ERR_PTR(ret);
	}
@@ -253,7 +255,7 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,

	pool = kmalloc(sizeof *pool, GFP_KERNEL);
	if (!pool) {
		printk(KERN_WARNING "couldn't allocate pool struct");
		printk(KERN_WARNING PFX "couldn't allocate pool struct");
		return ERR_PTR(-ENOMEM);
	}

@@ -270,7 +272,7 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
			kmalloc(IB_FMR_HASH_SIZE * sizeof *pool->cache_bucket,
				GFP_KERNEL);
		if (!pool->cache_bucket) {
			printk(KERN_WARNING "Failed to allocate cache in pool");
			printk(KERN_WARNING PFX "Failed to allocate cache in pool");
			ret = -ENOMEM;
			goto out_free_pool;
		}
@@ -294,7 +296,7 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
				      "ib_fmr(%s)",
				      device->name);
	if (IS_ERR(pool->thread)) {
		printk(KERN_WARNING "couldn't start cleanup thread");
		printk(KERN_WARNING PFX "couldn't start cleanup thread");
		ret = PTR_ERR(pool->thread);
		goto out_free_pool;
	}
@@ -311,8 +313,8 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,
			fmr = kmalloc(sizeof *fmr + params->max_pages_per_fmr * sizeof (u64),
				      GFP_KERNEL);
			if (!fmr) {
				printk(KERN_WARNING "failed to allocate fmr struct "
				       "for FMR %d", i);
				printk(KERN_WARNING PFX "failed to allocate fmr "
				       "struct for FMR %d", i);
				goto out_fail;
			}

@@ -323,7 +325,8 @@ struct ib_fmr_pool *ib_create_fmr_pool(struct ib_pd *pd,

			fmr->fmr = ib_alloc_fmr(pd, params->access, &fmr_attr);
			if (IS_ERR(fmr->fmr)) {
				printk(KERN_WARNING "fmr_create failed for FMR %d", i);
				printk(KERN_WARNING PFX "fmr_create failed "
				       "for FMR %d", i);
				kfree(fmr);
				goto out_fail;
			}
@@ -378,7 +381,7 @@ void ib_destroy_fmr_pool(struct ib_fmr_pool *pool)
	}

	if (i < pool->pool_size)
		printk(KERN_WARNING "pool still has %d regions registered",
		printk(KERN_WARNING PFX "pool still has %d regions registered",
		       pool->pool_size - i);

	kfree(pool->cache_bucket);
@@ -463,8 +466,7 @@ struct ib_pool_fmr *ib_fmr_pool_map_phys(struct ib_fmr_pool *pool_handle,
		list_add(&fmr->list, &pool->free_list);
		spin_unlock_irqrestore(&pool->pool_lock, flags);

		printk(KERN_WARNING "fmr_map returns %d\n",
		       result);
		printk(KERN_WARNING PFX "fmr_map returns %d\n", result);

		return ERR_PTR(result);
	}
@@ -516,7 +518,7 @@ int ib_fmr_pool_unmap(struct ib_pool_fmr *fmr)

#ifdef DEBUG
	if (fmr->ref_count < 0)
		printk(KERN_WARNING "FMR %p has ref count %d < 0",
		printk(KERN_WARNING PFX "FMR %p has ref count %d < 0",
		       fmr, fmr->ref_count);
#endif

+1 −1
Original line number Diff line number Diff line
@@ -2771,7 +2771,7 @@ static int ib_mad_port_open(struct ib_device *device,
	cq_size = (IB_MAD_QP_SEND_SIZE + IB_MAD_QP_RECV_SIZE) * 2;
	port_priv->cq = ib_create_cq(port_priv->device,
				     ib_mad_thread_completion_handler,
				     NULL, port_priv, cq_size);
				     NULL, port_priv, cq_size, 0);
	if (IS_ERR(port_priv->cq)) {
		printk(KERN_ERR PFX "Couldn't create ib_mad CQ\n");
		ret = PTR_ERR(port_priv->cq);
+1 −0
Original line number Diff line number Diff line
@@ -802,6 +802,7 @@ ssize_t ib_uverbs_create_cq(struct ib_uverbs_file *file,
	INIT_LIST_HEAD(&obj->async_list);

	cq = file->device->ib_dev->create_cq(file->device->ib_dev, cmd.cqe,
					     cmd.comp_vector,
					     file->ucontext, &udata);
	if (IS_ERR(cq)) {
		ret = PTR_ERR(cq);
+1 −1
Original line number Diff line number Diff line
@@ -752,7 +752,7 @@ static void ib_uverbs_add_one(struct ib_device *device)
	spin_unlock(&map_lock);

	uverbs_dev->ib_dev           = device;
	uverbs_dev->num_comp_vectors = 1;
	uverbs_dev->num_comp_vectors = device->num_comp_vectors;

	uverbs_dev->dev = cdev_alloc();
	if (!uverbs_dev->dev)
+2 −2
Original line number Diff line number Diff line
@@ -609,11 +609,11 @@ EXPORT_SYMBOL(ib_destroy_qp);
struct ib_cq *ib_create_cq(struct ib_device *device,
			   ib_comp_handler comp_handler,
			   void (*event_handler)(struct ib_event *, void *),
			   void *cq_context, int cqe)
			   void *cq_context, int cqe, int comp_vector)
{
	struct ib_cq *cq;

	cq = device->create_cq(device, cqe, NULL, NULL);
	cq = device->create_cq(device, cqe, comp_vector, NULL, NULL);

	if (!IS_ERR(cq)) {
		cq->device        = device;
Loading