Skip to content

Commit

Permalink
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/git/roland/infiniband

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
  IB/core: Use kmemdup() instead of kmalloc()+memcpy()
  IB/iser: Fix error flow in iser_create_ib_conn_res()
  IB/iser: Enhance disconnection logic for multi-pathing
  IB/iser: Remove buggy back-pointer setting
  IB/iser: Add asynchronous event handler
  MAINTAINERS: Add cxgb4 and iw_cxgb4 entries
  RDMA/cxgb3: Shrink .text with compile-time init of handlers arrays
  IPoIB: Allow disabling/enabling TSO on the fly through ethtool
  IB/mlx4: Add support for masked atomic operations
  IB/core: Add support for masked atomic operations
  RDMA/cma: Randomize local port allocation
  RDMA/nes: Make unnecessarily global functions static
  RDMA/nes: Make nesadapter->phy_lock usage consistent
  RDMA/cxgb4: Add driver for Chelsio T4 RNIC
  IB/mthca: Use the dma state API instead of pci equivalents
  RDMA/amso1100: Use the dma state API instead of pci equivalents
  RDMA/cxgb3: Don't free skbs on NET_XMIT_* indications from LLD
  RDMA/cxgb3: Use the dma state API instead of pci equivalents
  IB: Explicitly rule out llseek to avoid BKL in default_llseek()
  • Loading branch information
torvalds committed May 20, 2010
2 parents 96b5b7f + ffebedb commit 9d35bc1
Show file tree
Hide file tree
Showing 51 changed files with 9,838 additions and 251 deletions.
14 changes: 14 additions & 0 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -1749,6 +1749,20 @@ W: http://www.openfabrics.org
S: Supported
F: drivers/infiniband/hw/cxgb3/

CXGB4 ETHERNET DRIVER (CXGB4)
M: Dimitris Michailidis <dm@chelsio.com>
L: netdev@vger.kernel.org
W: http://www.chelsio.com
S: Supported
F: drivers/net/cxgb4/

CXGB4 IWARP RNIC DRIVER (IW_CXGB4)
M: Steve Wise <swise@chelsio.com>
L: linux-rdma@vger.kernel.org
W: http://www.openfabrics.org
S: Supported
F: drivers/infiniband/hw/cxgb4/

CYBERPRO FB DRIVER
M: Russell King <linux@arm.linux.org.uk>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
Expand Down
1 change: 1 addition & 0 deletions drivers/infiniband/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ source "drivers/infiniband/hw/ipath/Kconfig"
source "drivers/infiniband/hw/ehca/Kconfig"
source "drivers/infiniband/hw/amso1100/Kconfig"
source "drivers/infiniband/hw/cxgb3/Kconfig"
source "drivers/infiniband/hw/cxgb4/Kconfig"
source "drivers/infiniband/hw/mlx4/Kconfig"
source "drivers/infiniband/hw/nes/Kconfig"

Expand Down
1 change: 1 addition & 0 deletions drivers/infiniband/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ obj-$(CONFIG_INFINIBAND_IPATH) += hw/ipath/
obj-$(CONFIG_INFINIBAND_EHCA) += hw/ehca/
obj-$(CONFIG_INFINIBAND_AMSO1100) += hw/amso1100/
obj-$(CONFIG_INFINIBAND_CXGB3) += hw/cxgb3/
obj-$(CONFIG_INFINIBAND_CXGB4) += hw/cxgb4/
obj-$(CONFIG_MLX4_INFINIBAND) += hw/mlx4/
obj-$(CONFIG_INFINIBAND_NES) += hw/nes/
obj-$(CONFIG_INFINIBAND_IPOIB) += ulp/ipoib/
Expand Down
74 changes: 27 additions & 47 deletions drivers/infiniband/core/cma.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ static DEFINE_IDR(sdp_ps);
static DEFINE_IDR(tcp_ps);
static DEFINE_IDR(udp_ps);
static DEFINE_IDR(ipoib_ps);
static int next_port;

struct cma_device {
struct list_head list;
Expand Down Expand Up @@ -1677,13 +1676,13 @@ int rdma_set_ib_paths(struct rdma_cm_id *id,
if (!cma_comp_exch(id_priv, CMA_ADDR_RESOLVED, CMA_ROUTE_RESOLVED))
return -EINVAL;

id->route.path_rec = kmalloc(sizeof *path_rec * num_paths, GFP_KERNEL);
id->route.path_rec = kmemdup(path_rec, sizeof *path_rec * num_paths,
GFP_KERNEL);
if (!id->route.path_rec) {
ret = -ENOMEM;
goto err;
}

memcpy(id->route.path_rec, path_rec, sizeof *path_rec * num_paths);
id->route.num_paths = num_paths;
return 0;
err:
Expand Down Expand Up @@ -1970,47 +1969,33 @@ static int cma_alloc_port(struct idr *ps, struct rdma_id_private *id_priv,

static int cma_alloc_any_port(struct idr *ps, struct rdma_id_private *id_priv)
{
struct rdma_bind_list *bind_list;
int port, ret, low, high;

bind_list = kzalloc(sizeof *bind_list, GFP_KERNEL);
if (!bind_list)
return -ENOMEM;

retry:
/* FIXME: add proper port randomization per like inet_csk_get_port */
do {
ret = idr_get_new_above(ps, bind_list, next_port, &port);
} while ((ret == -EAGAIN) && idr_pre_get(ps, GFP_KERNEL));

if (ret)
goto err1;
static unsigned int last_used_port;
int low, high, remaining;
unsigned int rover;

inet_get_local_port_range(&low, &high);
if (port > high) {
if (next_port != low) {
idr_remove(ps, port);
next_port = low;
goto retry;
}
ret = -EADDRNOTAVAIL;
goto err2;
remaining = (high - low) + 1;
rover = net_random() % remaining + low;
retry:
if (last_used_port != rover &&
!idr_find(ps, (unsigned short) rover)) {
int ret = cma_alloc_port(ps, id_priv, rover);
/*
* Remember previously used port number in order to avoid
* re-using same port immediately after it is closed.
*/
if (!ret)
last_used_port = rover;
if (ret != -EADDRNOTAVAIL)
return ret;
}

if (port == high)
next_port = low;
else
next_port = port + 1;

bind_list->ps = ps;
bind_list->port = (unsigned short) port;
cma_bind_port(bind_list, id_priv);
return 0;
err2:
idr_remove(ps, port);
err1:
kfree(bind_list);
return ret;
if (--remaining) {
rover++;
if ((rover < low) || (rover > high))
rover = low;
goto retry;
}
return -EADDRNOTAVAIL;
}

static int cma_use_port(struct idr *ps, struct rdma_id_private *id_priv)
Expand Down Expand Up @@ -2995,12 +2980,7 @@ static void cma_remove_one(struct ib_device *device)

static int __init cma_init(void)
{
int ret, low, high, remaining;

get_random_bytes(&next_port, sizeof next_port);
inet_get_local_port_range(&low, &high);
remaining = (high - low) + 1;
next_port = ((unsigned int) next_port % remaining) + low;
int ret;

cma_wq = create_singlethread_workqueue("rdma_cm");
if (!cma_wq)
Expand Down
4 changes: 1 addition & 3 deletions drivers/infiniband/core/mad.c
Original file line number Diff line number Diff line change
Expand Up @@ -291,13 +291,11 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
}

if (mad_reg_req) {
reg_req = kmalloc(sizeof *reg_req, GFP_KERNEL);
reg_req = kmemdup(mad_reg_req, sizeof *reg_req, GFP_KERNEL);
if (!reg_req) {
ret = ERR_PTR(-ENOMEM);
goto error3;
}
/* Make a copy of the MAD registration request */
memcpy(reg_req, mad_reg_req, sizeof *reg_req);
}

/* Now, fill in the various structures */
Expand Down
3 changes: 2 additions & 1 deletion drivers/infiniband/core/ucm.c
Original file line number Diff line number Diff line change
Expand Up @@ -1181,7 +1181,7 @@ static int ib_ucm_open(struct inode *inode, struct file *filp)
file->filp = filp;
file->device = container_of(inode->i_cdev, struct ib_ucm_device, cdev);

return 0;
return nonseekable_open(inode, filp);
}

static int ib_ucm_close(struct inode *inode, struct file *filp)
Expand Down Expand Up @@ -1229,6 +1229,7 @@ static const struct file_operations ucm_fops = {
.release = ib_ucm_close,
.write = ib_ucm_write,
.poll = ib_ucm_poll,
.llseek = no_llseek,
};

static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr,
Expand Down
4 changes: 3 additions & 1 deletion drivers/infiniband/core/ucma.c
Original file line number Diff line number Diff line change
Expand Up @@ -1220,7 +1220,8 @@ static int ucma_open(struct inode *inode, struct file *filp)

filp->private_data = file;
file->filp = filp;
return 0;

return nonseekable_open(inode, filp);
}

static int ucma_close(struct inode *inode, struct file *filp)
Expand Down Expand Up @@ -1250,6 +1251,7 @@ static const struct file_operations ucma_fops = {
.release = ucma_close,
.write = ucma_write,
.poll = ucma_poll,
.llseek = no_llseek,
};

static struct miscdevice ucma_misc = {
Expand Down
12 changes: 8 additions & 4 deletions drivers/infiniband/core/user_mad.c
Original file line number Diff line number Diff line change
Expand Up @@ -781,7 +781,7 @@ static int ib_umad_open(struct inode *inode, struct file *filp)
{
struct ib_umad_port *port;
struct ib_umad_file *file;
int ret = 0;
int ret;

port = container_of(inode->i_cdev, struct ib_umad_port, cdev);
if (port)
Expand Down Expand Up @@ -814,6 +814,8 @@ static int ib_umad_open(struct inode *inode, struct file *filp)

list_add_tail(&file->port_list, &port->file_list);

ret = nonseekable_open(inode, filp);

out:
mutex_unlock(&port->file_mutex);
return ret;
Expand Down Expand Up @@ -866,7 +868,8 @@ static const struct file_operations umad_fops = {
.compat_ioctl = ib_umad_compat_ioctl,
#endif
.open = ib_umad_open,
.release = ib_umad_close
.release = ib_umad_close,
.llseek = no_llseek,
};

static int ib_umad_sm_open(struct inode *inode, struct file *filp)
Expand Down Expand Up @@ -903,7 +906,7 @@ static int ib_umad_sm_open(struct inode *inode, struct file *filp)

filp->private_data = port;

return 0;
return nonseekable_open(inode, filp);

fail:
kref_put(&port->umad_dev->ref, ib_umad_release_dev);
Expand Down Expand Up @@ -933,7 +936,8 @@ static int ib_umad_sm_close(struct inode *inode, struct file *filp)
static const struct file_operations umad_sm_fops = {
.owner = THIS_MODULE,
.open = ib_umad_sm_open,
.release = ib_umad_sm_close
.release = ib_umad_sm_close,
.llseek = no_llseek,
};

static struct ib_client umad_client = {
Expand Down
11 changes: 7 additions & 4 deletions drivers/infiniband/core/uverbs_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,8 @@ static const struct file_operations uverbs_event_fops = {
.read = ib_uverbs_event_read,
.poll = ib_uverbs_event_poll,
.release = ib_uverbs_event_close,
.fasync = ib_uverbs_event_fasync
.fasync = ib_uverbs_event_fasync,
.llseek = no_llseek,
};

void ib_uverbs_comp_handler(struct ib_cq *cq, void *cq_context)
Expand Down Expand Up @@ -623,7 +624,7 @@ static int ib_uverbs_open(struct inode *inode, struct file *filp)

filp->private_data = file;

return 0;
return nonseekable_open(inode, filp);

err_module:
module_put(dev->ib_dev->owner);
Expand Down Expand Up @@ -651,15 +652,17 @@ static const struct file_operations uverbs_fops = {
.owner = THIS_MODULE,
.write = ib_uverbs_write,
.open = ib_uverbs_open,
.release = ib_uverbs_close
.release = ib_uverbs_close,
.llseek = no_llseek,
};

static const struct file_operations uverbs_mmap_fops = {
.owner = THIS_MODULE,
.write = ib_uverbs_write,
.mmap = ib_uverbs_mmap,
.open = ib_uverbs_open,
.release = ib_uverbs_close
.release = ib_uverbs_close,
.llseek = no_llseek,
};

static struct ib_client uverbs_client = {
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/amso1100/c2.h
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,7 @@ struct c2_array {
struct sp_chunk {
struct sp_chunk *next;
dma_addr_t dma_addr;
DECLARE_PCI_UNMAP_ADDR(mapping);
DEFINE_DMA_UNMAP_ADDR(mapping);
u16 head;
u16 shared_ptr[0];
};
Expand Down
4 changes: 2 additions & 2 deletions drivers/infiniband/hw/amso1100/c2_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ static int c2_alloc_mqsp_chunk(struct c2_dev *c2dev, gfp_t gfp_mask,
return -ENOMEM;

new_head->dma_addr = dma_addr;
pci_unmap_addr_set(new_head, mapping, new_head->dma_addr);
dma_unmap_addr_set(new_head, mapping, new_head->dma_addr);

new_head->next = NULL;
new_head->head = 0;
Expand Down Expand Up @@ -81,7 +81,7 @@ void c2_free_mqsp_pool(struct c2_dev *c2dev, struct sp_chunk *root)
while (root) {
next = root->next;
dma_free_coherent(&c2dev->pcidev->dev, PAGE_SIZE, root,
pci_unmap_addr(root, mapping));
dma_unmap_addr(root, mapping));
root = next;
}
}
Expand Down
4 changes: 2 additions & 2 deletions drivers/infiniband/hw/amso1100/c2_cq.c
Original file line number Diff line number Diff line change
Expand Up @@ -257,7 +257,7 @@ int c2_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags notify_flags)
static void c2_free_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq)
{
dma_free_coherent(&c2dev->pcidev->dev, mq->q_size * mq->msg_size,
mq->msg_pool.host, pci_unmap_addr(mq, mapping));
mq->msg_pool.host, dma_unmap_addr(mq, mapping));
}

static int c2_alloc_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq, int q_size,
Expand All @@ -278,7 +278,7 @@ static int c2_alloc_cq_buf(struct c2_dev *c2dev, struct c2_mq *mq, int q_size,
NULL, /* peer (currently unknown) */
C2_MQ_HOST_TARGET);

pci_unmap_addr_set(mq, mapping, mq->host_dma);
dma_unmap_addr_set(mq, mapping, mq->host_dma);

return 0;
}
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/amso1100/c2_mq.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ struct c2_mq {
u8 __iomem *adapter;
} msg_pool;
dma_addr_t host_dma;
DECLARE_PCI_UNMAP_ADDR(mapping);
DEFINE_DMA_UNMAP_ADDR(mapping);
u16 hint_count;
u16 priv;
struct c2_mq_shared __iomem *peer;
Expand Down
2 changes: 1 addition & 1 deletion drivers/infiniband/hw/amso1100/c2_provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@

struct c2_buf_list {
void *buf;
DECLARE_PCI_UNMAP_ADDR(mapping)
DEFINE_DMA_UNMAP_ADDR(mapping);
};


Expand Down
12 changes: 6 additions & 6 deletions drivers/infiniband/hw/amso1100/c2_rnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -524,7 +524,7 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)
err = -ENOMEM;
goto bail1;
}
pci_unmap_addr_set(&c2dev->rep_vq, mapping, c2dev->rep_vq.host_dma);
dma_unmap_addr_set(&c2dev->rep_vq, mapping, c2dev->rep_vq.host_dma);
pr_debug("%s rep_vq va %p dma %llx\n", __func__, q1_pages,
(unsigned long long) c2dev->rep_vq.host_dma);
c2_mq_rep_init(&c2dev->rep_vq,
Expand All @@ -545,7 +545,7 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)
err = -ENOMEM;
goto bail2;
}
pci_unmap_addr_set(&c2dev->aeq, mapping, c2dev->aeq.host_dma);
dma_unmap_addr_set(&c2dev->aeq, mapping, c2dev->aeq.host_dma);
pr_debug("%s aeq va %p dma %llx\n", __func__, q2_pages,
(unsigned long long) c2dev->aeq.host_dma);
c2_mq_rep_init(&c2dev->aeq,
Expand Down Expand Up @@ -596,11 +596,11 @@ int __devinit c2_rnic_init(struct c2_dev *c2dev)
bail3:
dma_free_coherent(&c2dev->pcidev->dev,
c2dev->aeq.q_size * c2dev->aeq.msg_size,
q2_pages, pci_unmap_addr(&c2dev->aeq, mapping));
q2_pages, dma_unmap_addr(&c2dev->aeq, mapping));
bail2:
dma_free_coherent(&c2dev->pcidev->dev,
c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
q1_pages, pci_unmap_addr(&c2dev->rep_vq, mapping));
q1_pages, dma_unmap_addr(&c2dev->rep_vq, mapping));
bail1:
c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool);
bail0:
Expand Down Expand Up @@ -637,13 +637,13 @@ void __devexit c2_rnic_term(struct c2_dev *c2dev)
dma_free_coherent(&c2dev->pcidev->dev,
c2dev->aeq.q_size * c2dev->aeq.msg_size,
c2dev->aeq.msg_pool.host,
pci_unmap_addr(&c2dev->aeq, mapping));
dma_unmap_addr(&c2dev->aeq, mapping));

/* Free the verbs reply queue */
dma_free_coherent(&c2dev->pcidev->dev,
c2dev->rep_vq.q_size * c2dev->rep_vq.msg_size,
c2dev->rep_vq.msg_pool.host,
pci_unmap_addr(&c2dev->rep_vq, mapping));
dma_unmap_addr(&c2dev->rep_vq, mapping));

/* Free the MQ shared pointer pool */
c2_free_mqsp_pool(c2dev, c2dev->kern_mqsp_pool);
Expand Down
Loading

0 comments on commit 9d35bc1

Please sign in to comment.