mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
RDMA: Update workqueue usage
RDMA/nes: Fix incorrect SFP+ link status detection on driver init
RDMA/nes: Fix SFP+ link down detection issue with switch port disable
RDMA/nes: Generate IB_EVENT_PORT_ERR/PORT_ACTIVE events
RDMA/nes: Fix bonding on iw_nes
IB/srp: Test only once whether iu allocation succeeded
IB/mlx4: Handle protocol field in multicast table
RDMA: Use vzalloc() to replace vmalloc()+memset(0)
mlx4_{core, ib, en}: Fix driver when sizeof (phys_addr_t) > sizeof (long)
IB/mthca: Fix driver when sizeof (phys_addr_t) > sizeof (long)
This commit is contained in:
commit
6845a44a31
38 changed files with 351 additions and 144 deletions
|
|
@ -113,7 +113,7 @@ static void catas_reset(struct work_struct *work)
|
|||
void mlx4_start_catas_poll(struct mlx4_dev *dev)
|
||||
{
|
||||
struct mlx4_priv *priv = mlx4_priv(dev);
|
||||
unsigned long addr;
|
||||
phys_addr_t addr;
|
||||
|
||||
INIT_LIST_HEAD(&priv->catas_err.list);
|
||||
init_timer(&priv->catas_err.timer);
|
||||
|
|
@ -124,8 +124,8 @@ void mlx4_start_catas_poll(struct mlx4_dev *dev)
|
|||
|
||||
priv->catas_err.map = ioremap(addr, priv->fw.catas_size * 4);
|
||||
if (!priv->catas_err.map) {
|
||||
mlx4_warn(dev, "Failed to map internal error buffer at 0x%lx\n",
|
||||
addr);
|
||||
mlx4_warn(dev, "Failed to map internal error buffer at 0x%llx\n",
|
||||
(unsigned long long) addr);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -202,7 +202,8 @@ static void *mlx4_en_add(struct mlx4_dev *dev)
|
|||
if (mlx4_uar_alloc(dev, &mdev->priv_uar))
|
||||
goto err_pd;
|
||||
|
||||
mdev->uar_map = ioremap(mdev->priv_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
|
||||
mdev->uar_map = ioremap((phys_addr_t) mdev->priv_uar.pfn << PAGE_SHIFT,
|
||||
PAGE_SIZE);
|
||||
if (!mdev->uar_map)
|
||||
goto err_uar;
|
||||
spin_lock_init(&mdev->uar_lock);
|
||||
|
|
|
|||
|
|
@ -829,7 +829,7 @@ static int mlx4_setup_hca(struct mlx4_dev *dev)
|
|||
goto err_uar_table_free;
|
||||
}
|
||||
|
||||
priv->kar = ioremap(priv->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
|
||||
priv->kar = ioremap((phys_addr_t) priv->driver_uar.pfn << PAGE_SHIFT, PAGE_SIZE);
|
||||
if (!priv->kar) {
|
||||
mlx4_err(dev, "Couldn't map kernel access region, "
|
||||
"aborting.\n");
|
||||
|
|
|
|||
|
|
@ -95,7 +95,8 @@ static int mlx4_MGID_HASH(struct mlx4_dev *dev, struct mlx4_cmd_mailbox *mailbox
|
|||
* entry in hash chain and *mgm holds end of hash chain.
|
||||
*/
|
||||
static int find_mgm(struct mlx4_dev *dev,
|
||||
u8 *gid, struct mlx4_cmd_mailbox *mgm_mailbox,
|
||||
u8 *gid, enum mlx4_protocol protocol,
|
||||
struct mlx4_cmd_mailbox *mgm_mailbox,
|
||||
u16 *hash, int *prev, int *index)
|
||||
{
|
||||
struct mlx4_cmd_mailbox *mailbox;
|
||||
|
|
@ -134,7 +135,8 @@ static int find_mgm(struct mlx4_dev *dev,
|
|||
return err;
|
||||
}
|
||||
|
||||
if (!memcmp(mgm->gid, gid, 16))
|
||||
if (!memcmp(mgm->gid, gid, 16) &&
|
||||
be32_to_cpu(mgm->members_count) >> 30 == protocol)
|
||||
return err;
|
||||
|
||||
*prev = *index;
|
||||
|
|
@ -146,7 +148,7 @@ static int find_mgm(struct mlx4_dev *dev,
|
|||
}
|
||||
|
||||
int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
||||
int block_mcast_loopback)
|
||||
int block_mcast_loopback, enum mlx4_protocol protocol)
|
||||
{
|
||||
struct mlx4_priv *priv = mlx4_priv(dev);
|
||||
struct mlx4_cmd_mailbox *mailbox;
|
||||
|
|
@ -165,7 +167,7 @@ int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
|||
|
||||
mutex_lock(&priv->mcg_table.mutex);
|
||||
|
||||
err = find_mgm(dev, gid, mailbox, &hash, &prev, &index);
|
||||
err = find_mgm(dev, gid, protocol, mailbox, &hash, &prev, &index);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
|
|
@ -187,7 +189,7 @@ int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
|||
memcpy(mgm->gid, gid, 16);
|
||||
}
|
||||
|
||||
members_count = be32_to_cpu(mgm->members_count);
|
||||
members_count = be32_to_cpu(mgm->members_count) & 0xffffff;
|
||||
if (members_count == MLX4_QP_PER_MGM) {
|
||||
mlx4_err(dev, "MGM at index %x is full.\n", index);
|
||||
err = -ENOMEM;
|
||||
|
|
@ -207,7 +209,7 @@ int mlx4_multicast_attach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
|||
else
|
||||
mgm->qp[members_count++] = cpu_to_be32(qp->qpn & MGM_QPN_MASK);
|
||||
|
||||
mgm->members_count = cpu_to_be32(members_count);
|
||||
mgm->members_count = cpu_to_be32(members_count | (u32) protocol << 30);
|
||||
|
||||
err = mlx4_WRITE_MCG(dev, index, mailbox);
|
||||
if (err)
|
||||
|
|
@ -242,7 +244,8 @@ out:
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(mlx4_multicast_attach);
|
||||
|
||||
int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16])
|
||||
int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16],
|
||||
enum mlx4_protocol protocol)
|
||||
{
|
||||
struct mlx4_priv *priv = mlx4_priv(dev);
|
||||
struct mlx4_cmd_mailbox *mailbox;
|
||||
|
|
@ -260,7 +263,7 @@ int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16])
|
|||
|
||||
mutex_lock(&priv->mcg_table.mutex);
|
||||
|
||||
err = find_mgm(dev, gid, mailbox, &hash, &prev, &index);
|
||||
err = find_mgm(dev, gid, protocol, mailbox, &hash, &prev, &index);
|
||||
if (err)
|
||||
goto out;
|
||||
|
||||
|
|
@ -270,7 +273,7 @@ int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16])
|
|||
goto out;
|
||||
}
|
||||
|
||||
members_count = be32_to_cpu(mgm->members_count);
|
||||
members_count = be32_to_cpu(mgm->members_count) & 0xffffff;
|
||||
for (loc = -1, i = 0; i < members_count; ++i)
|
||||
if ((be32_to_cpu(mgm->qp[i]) & MGM_QPN_MASK) == qp->qpn)
|
||||
loc = i;
|
||||
|
|
@ -282,7 +285,7 @@ int mlx4_multicast_detach(struct mlx4_dev *dev, struct mlx4_qp *qp, u8 gid[16])
|
|||
}
|
||||
|
||||
|
||||
mgm->members_count = cpu_to_be32(--members_count);
|
||||
mgm->members_count = cpu_to_be32(--members_count | (u32) protocol << 30);
|
||||
mgm->qp[loc] = mgm->qp[i - 1];
|
||||
mgm->qp[i - 1] = 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue