diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-12-02 15:10:56 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-12-02 15:10:56 -0500 |
| commit | 75318ec3277d1fc46ecc129d7ef880b269fd9ee0 (patch) | |
| tree | 168d69f005bfa39c1c79f7b9f0516bc5865ab566 | |
| parent | 8cb280c90f9cfaab3ba3afbace0b1711dee80d0c (diff) | |
| parent | 7adce751ce79bcb6d0a591e6b94d76631c9a232c (diff) | |
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:
IB: Fix information leak in marshalling code
IB/pack: Remove some unused code added by the IBoE patches
IB/mlx4: Fix IBoE link state
IB/mlx4: Fix IBoE reported link rate
mlx4_core: Workaround firmware bug in query dev cap
IB/mlx4: Fix memory ordering of VLAN insertion control bits
MAINTAINERS: Update NetEffect entry
| -rw-r--r-- | MAINTAINERS | 3 | ||||
| -rw-r--r-- | drivers/infiniband/core/ud_header.c | 30 | ||||
| -rw-r--r-- | drivers/infiniband/core/uverbs_marshall.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx4/main.c | 4 | ||||
| -rw-r--r-- | drivers/infiniband/hw/mlx4/qp.c | 10 | ||||
| -rw-r--r-- | drivers/net/mlx4/fw.c | 4 |
6 files changed, 16 insertions, 39 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 3eafe9ee086e..74b8e050bf74 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -4064,9 +4064,8 @@ F: drivers/scsi/NCR_D700.* | |||
| 4064 | 4064 | ||
| 4065 | NETEFFECT IWARP RNIC DRIVER (IW_NES) | 4065 | NETEFFECT IWARP RNIC DRIVER (IW_NES) |
| 4066 | M: Faisal Latif <faisal.latif@intel.com> | 4066 | M: Faisal Latif <faisal.latif@intel.com> |
| 4067 | M: Chien Tung <chien.tin.tung@intel.com> | ||
| 4068 | L: linux-rdma@vger.kernel.org | 4067 | L: linux-rdma@vger.kernel.org |
| 4069 | W: http://www.neteffect.com | 4068 | W: http://www.intel.com/Products/Server/Adapters/Server-Cluster/Server-Cluster-overview.htm |
| 4070 | S: Supported | 4069 | S: Supported |
| 4071 | F: drivers/infiniband/hw/nes/ | 4070 | F: drivers/infiniband/hw/nes/ |
| 4072 | 4071 | ||
diff --git a/drivers/infiniband/core/ud_header.c b/drivers/infiniband/core/ud_header.c index bb7e19280821..9b737ff133e2 100644 --- a/drivers/infiniband/core/ud_header.c +++ b/drivers/infiniband/core/ud_header.c | |||
| @@ -278,36 +278,6 @@ void ib_ud_header_init(int payload_bytes, | |||
| 278 | EXPORT_SYMBOL(ib_ud_header_init); | 278 | EXPORT_SYMBOL(ib_ud_header_init); |
| 279 | 279 | ||
| 280 | /** | 280 | /** |
| 281 | * ib_lrh_header_pack - Pack LRH header struct into wire format | ||
| 282 | * @lrh:unpacked LRH header struct | ||
| 283 | * @buf:Buffer to pack into | ||
| 284 | * | ||
| 285 | * ib_lrh_header_pack() packs the LRH header structure @lrh into | ||
| 286 | * wire format in the buffer @buf. | ||
| 287 | */ | ||
| 288 | int ib_lrh_header_pack(struct ib_unpacked_lrh *lrh, void *buf) | ||
| 289 | { | ||
| 290 | ib_pack(lrh_table, ARRAY_SIZE(lrh_table), lrh, buf); | ||
| 291 | return 0; | ||
| 292 | } | ||
| 293 | EXPORT_SYMBOL(ib_lrh_header_pack); | ||
| 294 | |||
| 295 | /** | ||
| 296 | * ib_lrh_header_unpack - Unpack LRH structure from wire format | ||
| 297 | * @lrh:unpacked LRH header struct | ||
| 298 | * @buf:Buffer to pack into | ||
| 299 | * | ||
| 300 | * ib_lrh_header_unpack() unpacks the LRH header structure from | ||
| 301 | * wire format (in buf) into @lrh. | ||
| 302 | */ | ||
| 303 | int ib_lrh_header_unpack(void *buf, struct ib_unpacked_lrh *lrh) | ||
| 304 | { | ||
| 305 | ib_unpack(lrh_table, ARRAY_SIZE(lrh_table), buf, lrh); | ||
| 306 | return 0; | ||
| 307 | } | ||
| 308 | EXPORT_SYMBOL(ib_lrh_header_unpack); | ||
| 309 | |||
| 310 | /** | ||
| 311 | * ib_ud_header_pack - Pack UD header struct into wire format | 281 | * ib_ud_header_pack - Pack UD header struct into wire format |
| 312 | * @header:UD header struct | 282 | * @header:UD header struct |
| 313 | * @buf:Buffer to pack into | 283 | * @buf:Buffer to pack into |
diff --git a/drivers/infiniband/core/uverbs_marshall.c b/drivers/infiniband/core/uverbs_marshall.c index 5440da0e59b4..1b1146f87124 100644 --- a/drivers/infiniband/core/uverbs_marshall.c +++ b/drivers/infiniband/core/uverbs_marshall.c | |||
| @@ -40,18 +40,21 @@ void ib_copy_ah_attr_to_user(struct ib_uverbs_ah_attr *dst, | |||
| 40 | dst->grh.sgid_index = src->grh.sgid_index; | 40 | dst->grh.sgid_index = src->grh.sgid_index; |
| 41 | dst->grh.hop_limit = src->grh.hop_limit; | 41 | dst->grh.hop_limit = src->grh.hop_limit; |
| 42 | dst->grh.traffic_class = src->grh.traffic_class; | 42 | dst->grh.traffic_class = src->grh.traffic_class; |
| 43 | memset(&dst->grh.reserved, 0, sizeof(dst->grh.reserved)); | ||
| 43 | dst->dlid = src->dlid; | 44 | dst->dlid = src->dlid; |
| 44 | dst->sl = src->sl; | 45 | dst->sl = src->sl; |
| 45 | dst->src_path_bits = src->src_path_bits; | 46 | dst->src_path_bits = src->src_path_bits; |
| 46 | dst->static_rate = src->static_rate; | 47 | dst->static_rate = src->static_rate; |
| 47 | dst->is_global = src->ah_flags & IB_AH_GRH ? 1 : 0; | 48 | dst->is_global = src->ah_flags & IB_AH_GRH ? 1 : 0; |
| 48 | dst->port_num = src->port_num; | 49 | dst->port_num = src->port_num; |
| 50 | dst->reserved = 0; | ||
| 49 | } | 51 | } |
| 50 | EXPORT_SYMBOL(ib_copy_ah_attr_to_user); | 52 | EXPORT_SYMBOL(ib_copy_ah_attr_to_user); |
| 51 | 53 | ||
| 52 | void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, | 54 | void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, |
| 53 | struct ib_qp_attr *src) | 55 | struct ib_qp_attr *src) |
| 54 | { | 56 | { |
| 57 | dst->qp_state = src->qp_state; | ||
| 55 | dst->cur_qp_state = src->cur_qp_state; | 58 | dst->cur_qp_state = src->cur_qp_state; |
| 56 | dst->path_mtu = src->path_mtu; | 59 | dst->path_mtu = src->path_mtu; |
| 57 | dst->path_mig_state = src->path_mig_state; | 60 | dst->path_mig_state = src->path_mig_state; |
| @@ -83,6 +86,7 @@ void ib_copy_qp_attr_to_user(struct ib_uverbs_qp_attr *dst, | |||
| 83 | dst->rnr_retry = src->rnr_retry; | 86 | dst->rnr_retry = src->rnr_retry; |
| 84 | dst->alt_port_num = src->alt_port_num; | 87 | dst->alt_port_num = src->alt_port_num; |
| 85 | dst->alt_timeout = src->alt_timeout; | 88 | dst->alt_timeout = src->alt_timeout; |
| 89 | memset(dst->reserved, 0, sizeof(dst->reserved)); | ||
| 86 | } | 90 | } |
| 87 | EXPORT_SYMBOL(ib_copy_qp_attr_to_user); | 91 | EXPORT_SYMBOL(ib_copy_qp_attr_to_user); |
| 88 | 92 | ||
diff --git a/drivers/infiniband/hw/mlx4/main.c b/drivers/infiniband/hw/mlx4/main.c index bf3e20cd0298..30e09caf0da9 100644 --- a/drivers/infiniband/hw/mlx4/main.c +++ b/drivers/infiniband/hw/mlx4/main.c | |||
| @@ -219,7 +219,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port, | |||
| 219 | struct net_device *ndev; | 219 | struct net_device *ndev; |
| 220 | enum ib_mtu tmp; | 220 | enum ib_mtu tmp; |
| 221 | 221 | ||
| 222 | props->active_width = IB_WIDTH_4X; | 222 | props->active_width = IB_WIDTH_1X; |
| 223 | props->active_speed = 4; | 223 | props->active_speed = 4; |
| 224 | props->port_cap_flags = IB_PORT_CM_SUP; | 224 | props->port_cap_flags = IB_PORT_CM_SUP; |
| 225 | props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port]; | 225 | props->gid_tbl_len = to_mdev(ibdev)->dev->caps.gid_table_len[port]; |
| @@ -242,7 +242,7 @@ static int eth_link_query_port(struct ib_device *ibdev, u8 port, | |||
| 242 | tmp = iboe_get_mtu(ndev->mtu); | 242 | tmp = iboe_get_mtu(ndev->mtu); |
| 243 | props->active_mtu = tmp ? min(props->max_mtu, tmp) : IB_MTU_256; | 243 | props->active_mtu = tmp ? min(props->max_mtu, tmp) : IB_MTU_256; |
| 244 | 244 | ||
| 245 | props->state = netif_running(ndev) && netif_oper_up(ndev) ? | 245 | props->state = (netif_running(ndev) && netif_carrier_ok(ndev)) ? |
| 246 | IB_PORT_ACTIVE : IB_PORT_DOWN; | 246 | IB_PORT_ACTIVE : IB_PORT_DOWN; |
| 247 | props->phys_state = state_to_phys_state(props->state); | 247 | props->phys_state = state_to_phys_state(props->state); |
| 248 | 248 | ||
diff --git a/drivers/infiniband/hw/mlx4/qp.c b/drivers/infiniband/hw/mlx4/qp.c index 9a7794ac34c1..2001f20a4361 100644 --- a/drivers/infiniband/hw/mlx4/qp.c +++ b/drivers/infiniband/hw/mlx4/qp.c | |||
| @@ -1816,6 +1816,11 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 1816 | ctrl->fence_size = (wr->send_flags & IB_SEND_FENCE ? | 1816 | ctrl->fence_size = (wr->send_flags & IB_SEND_FENCE ? |
| 1817 | MLX4_WQE_CTRL_FENCE : 0) | size; | 1817 | MLX4_WQE_CTRL_FENCE : 0) | size; |
| 1818 | 1818 | ||
| 1819 | if (be16_to_cpu(vlan) < 0x1000) { | ||
| 1820 | ctrl->ins_vlan = 1 << 6; | ||
| 1821 | ctrl->vlan_tag = vlan; | ||
| 1822 | } | ||
| 1823 | |||
| 1819 | /* | 1824 | /* |
| 1820 | * Make sure descriptor is fully written before | 1825 | * Make sure descriptor is fully written before |
| 1821 | * setting ownership bit (because HW can start | 1826 | * setting ownership bit (because HW can start |
| @@ -1831,11 +1836,6 @@ int mlx4_ib_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr, | |||
| 1831 | ctrl->owner_opcode = mlx4_ib_opcode[wr->opcode] | | 1836 | ctrl->owner_opcode = mlx4_ib_opcode[wr->opcode] | |
| 1832 | (ind & qp->sq.wqe_cnt ? cpu_to_be32(1 << 31) : 0) | blh; | 1837 | (ind & qp->sq.wqe_cnt ? cpu_to_be32(1 << 31) : 0) | blh; |
| 1833 | 1838 | ||
| 1834 | if (be16_to_cpu(vlan) < 0x1000) { | ||
| 1835 | ctrl->ins_vlan = 1 << 6; | ||
| 1836 | ctrl->vlan_tag = vlan; | ||
| 1837 | } | ||
| 1838 | |||
| 1839 | stamp = ind + qp->sq_spare_wqes; | 1839 | stamp = ind + qp->sq_spare_wqes; |
| 1840 | ind += DIV_ROUND_UP(size * 16, 1U << qp->sq.wqe_shift); | 1840 | ind += DIV_ROUND_UP(size * 16, 1U << qp->sq.wqe_shift); |
| 1841 | 1841 | ||
diff --git a/drivers/net/mlx4/fw.c b/drivers/net/mlx4/fw.c index b68eee2414c2..7a7e18ba278a 100644 --- a/drivers/net/mlx4/fw.c +++ b/drivers/net/mlx4/fw.c | |||
| @@ -289,6 +289,10 @@ int mlx4_QUERY_DEV_CAP(struct mlx4_dev *dev, struct mlx4_dev_cap *dev_cap) | |||
| 289 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_BF_REG_SZ_OFFSET); | 289 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_BF_REG_SZ_OFFSET); |
| 290 | dev_cap->bf_reg_size = 1 << (field & 0x1f); | 290 | dev_cap->bf_reg_size = 1 << (field & 0x1f); |
| 291 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_MAX_BF_REGS_PER_PAGE_OFFSET); | 291 | MLX4_GET(field, outbox, QUERY_DEV_CAP_LOG_MAX_BF_REGS_PER_PAGE_OFFSET); |
| 292 | if ((1 << (field & 0x3f)) > (PAGE_SIZE / dev_cap->bf_reg_size)) { | ||
| 293 | mlx4_warn(dev, "firmware bug: log2 # of blue flame regs is invalid (%d), forcing 3\n", field & 0x1f); | ||
| 294 | field = 3; | ||
| 295 | } | ||
| 292 | dev_cap->bf_regs_per_page = 1 << (field & 0x3f); | 296 | dev_cap->bf_regs_per_page = 1 << (field & 0x3f); |
| 293 | mlx4_dbg(dev, "BlueFlame available (reg size %d, regs/page %d)\n", | 297 | mlx4_dbg(dev, "BlueFlame available (reg size %d, regs/page %d)\n", |
| 294 | dev_cap->bf_reg_size, dev_cap->bf_regs_per_page); | 298 | dev_cap->bf_reg_size, dev_cap->bf_regs_per_page); |
