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

Commit cf504632 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/roland/infiniband:
  mlx4_core: Don't double-free IRQs when falling back from MSI-X to INTx
  IB/mthca: Don't double-free IRQs when falling back from MSI-X to INTx
  IB/mlx4: Add strong ordering to local inval and fast reg work requests
  IB/ehca: Remove superfluous bitmasks from QP control block
  RDMA/cxgb3: Limit fast register size based on T3 limitations
  RDMA/cxgb3: Report correct port state and MTU
  mlx4_core: Add module parameter for number of MTTs per segment
  IB/mthca: Add module parameter for number of MTTs per segment
  RDMA/nes: Fix off-by-one bugs in reset_adapter_ne020() and init_serdes()
  infiniband: Remove void casts
  IB/ehca: Increment version number
  IB/ehca: Remove unnecessary memory operations for userspace queue pairs
  IB/ehca: Fall back to vmalloc() for big allocations
  IB/ehca: Replace vmalloc() with kmalloc() for queue allocation
parents ae937deb 8d34ff34
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -133,7 +133,7 @@ static inline int c2_poll_one(struct c2_dev *c2dev,
	struct c2_qp *qp;
	struct c2_qp *qp;
	int is_recv = 0;
	int is_recv = 0;


	ce = (struct c2wr_ce *) c2_mq_consume(&cq->mq);
	ce = c2_mq_consume(&cq->mq);
	if (!ce) {
	if (!ce) {
		return -EAGAIN;
		return -EAGAIN;
	}
	}
@@ -146,7 +146,7 @@ static inline int c2_poll_one(struct c2_dev *c2dev,
	while ((qp =
	while ((qp =
		(struct c2_qp *) (unsigned long) ce->qp_user_context) == NULL) {
		(struct c2_qp *) (unsigned long) ce->qp_user_context) == NULL) {
		c2_mq_free(&cq->mq);
		c2_mq_free(&cq->mq);
		ce = (struct c2wr_ce *) c2_mq_consume(&cq->mq);
		ce = c2_mq_consume(&cq->mq);
		if (!ce)
		if (!ce)
			return -EAGAIN;
			return -EAGAIN;
	}
	}
+1 −1
Original line number Original line Diff line number Diff line
@@ -176,7 +176,7 @@ struct t3_send_wr {
	struct t3_sge sgl[T3_MAX_SGE];	/* 4+ */
	struct t3_sge sgl[T3_MAX_SGE];	/* 4+ */
};
};


#define T3_MAX_FASTREG_DEPTH 24
#define T3_MAX_FASTREG_DEPTH 10
#define T3_MAX_FASTREG_FRAG 10
#define T3_MAX_FASTREG_FRAG 10


struct t3_fastreg_wr {
struct t3_fastreg_wr {
+30 −2
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@
#include <linux/spinlock.h>
#include <linux/spinlock.h>
#include <linux/ethtool.h>
#include <linux/ethtool.h>
#include <linux/rtnetlink.h>
#include <linux/rtnetlink.h>
#include <linux/inetdevice.h>


#include <asm/io.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/irq.h>
@@ -1152,12 +1153,39 @@ static int iwch_query_device(struct ib_device *ibdev,
static int iwch_query_port(struct ib_device *ibdev,
static int iwch_query_port(struct ib_device *ibdev,
			   u8 port, struct ib_port_attr *props)
			   u8 port, struct ib_port_attr *props)
{
{
	struct iwch_dev *dev;
	struct net_device *netdev;
	struct in_device *inetdev;

	PDBG("%s ibdev %p\n", __func__, ibdev);
	PDBG("%s ibdev %p\n", __func__, ibdev);


	dev = to_iwch_dev(ibdev);
	netdev = dev->rdev.port_info.lldevs[port-1];

	memset(props, 0, sizeof(struct ib_port_attr));
	memset(props, 0, sizeof(struct ib_port_attr));
	props->max_mtu = IB_MTU_4096;
	props->max_mtu = IB_MTU_4096;
	if (netdev->mtu >= 4096)
		props->active_mtu = IB_MTU_4096;
	else if (netdev->mtu >= 2048)
		props->active_mtu = IB_MTU_2048;
		props->active_mtu = IB_MTU_2048;
	else if (netdev->mtu >= 1024)
		props->active_mtu = IB_MTU_1024;
	else if (netdev->mtu >= 512)
		props->active_mtu = IB_MTU_512;
	else
		props->active_mtu = IB_MTU_256;

	if (!netif_carrier_ok(netdev))
		props->state = IB_PORT_DOWN;
	else {
		inetdev = in_dev_get(netdev);
		if (inetdev->ifa_list)
			props->state = IB_PORT_ACTIVE;
			props->state = IB_PORT_ACTIVE;
		else
			props->state = IB_PORT_INIT;
		in_dev_put(inetdev);
	}

	props->port_cap_flags =
	props->port_cap_flags =
	    IB_PORT_CM_SUP |
	    IB_PORT_CM_SUP |
	    IB_PORT_SNMP_TUNNEL_SUP |
	    IB_PORT_SNMP_TUNNEL_SUP |
+0 −28
Original line number Original line Diff line number Diff line
@@ -165,7 +165,6 @@ struct hcp_modify_qp_control_block {
#define MQPCB_MASK_ALT_P_KEY_IDX                EHCA_BMASK_IBM( 7,  7)
#define MQPCB_MASK_ALT_P_KEY_IDX                EHCA_BMASK_IBM( 7,  7)
#define MQPCB_MASK_RDMA_ATOMIC_CTRL             EHCA_BMASK_IBM( 8,  8)
#define MQPCB_MASK_RDMA_ATOMIC_CTRL             EHCA_BMASK_IBM( 8,  8)
#define MQPCB_MASK_QP_STATE                     EHCA_BMASK_IBM( 9,  9)
#define MQPCB_MASK_QP_STATE                     EHCA_BMASK_IBM( 9,  9)
#define MQPCB_QP_STATE                          EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_RDMA_NR_ATOMIC_RESP_RES      EHCA_BMASK_IBM(11, 11)
#define MQPCB_MASK_RDMA_NR_ATOMIC_RESP_RES      EHCA_BMASK_IBM(11, 11)
#define MQPCB_MASK_PATH_MIGRATION_STATE         EHCA_BMASK_IBM(12, 12)
#define MQPCB_MASK_PATH_MIGRATION_STATE         EHCA_BMASK_IBM(12, 12)
#define MQPCB_MASK_RDMA_ATOMIC_OUTST_DEST_QP    EHCA_BMASK_IBM(13, 13)
#define MQPCB_MASK_RDMA_ATOMIC_OUTST_DEST_QP    EHCA_BMASK_IBM(13, 13)
@@ -176,60 +175,33 @@ struct hcp_modify_qp_control_block {
#define MQPCB_MASK_RETRY_COUNT                  EHCA_BMASK_IBM(18, 18)
#define MQPCB_MASK_RETRY_COUNT                  EHCA_BMASK_IBM(18, 18)
#define MQPCB_MASK_TIMEOUT                      EHCA_BMASK_IBM(19, 19)
#define MQPCB_MASK_TIMEOUT                      EHCA_BMASK_IBM(19, 19)
#define MQPCB_MASK_PATH_MTU                     EHCA_BMASK_IBM(20, 20)
#define MQPCB_MASK_PATH_MTU                     EHCA_BMASK_IBM(20, 20)
#define MQPCB_PATH_MTU                          EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_MAX_STATIC_RATE              EHCA_BMASK_IBM(21, 21)
#define MQPCB_MASK_MAX_STATIC_RATE              EHCA_BMASK_IBM(21, 21)
#define MQPCB_MAX_STATIC_RATE                   EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_DLID                         EHCA_BMASK_IBM(22, 22)
#define MQPCB_MASK_DLID                         EHCA_BMASK_IBM(22, 22)
#define MQPCB_DLID                              EHCA_BMASK_IBM(16, 31)
#define MQPCB_MASK_RNR_RETRY_COUNT              EHCA_BMASK_IBM(23, 23)
#define MQPCB_MASK_RNR_RETRY_COUNT              EHCA_BMASK_IBM(23, 23)
#define MQPCB_RNR_RETRY_COUNT                   EHCA_BMASK_IBM(29, 31)
#define MQPCB_MASK_SOURCE_PATH_BITS             EHCA_BMASK_IBM(24, 24)
#define MQPCB_MASK_SOURCE_PATH_BITS             EHCA_BMASK_IBM(24, 24)
#define MQPCB_SOURCE_PATH_BITS                  EHCA_BMASK_IBM(25, 31)
#define MQPCB_MASK_TRAFFIC_CLASS                EHCA_BMASK_IBM(25, 25)
#define MQPCB_MASK_TRAFFIC_CLASS                EHCA_BMASK_IBM(25, 25)
#define MQPCB_TRAFFIC_CLASS                     EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_HOP_LIMIT                    EHCA_BMASK_IBM(26, 26)
#define MQPCB_MASK_HOP_LIMIT                    EHCA_BMASK_IBM(26, 26)
#define MQPCB_HOP_LIMIT                         EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_SOURCE_GID_IDX               EHCA_BMASK_IBM(27, 27)
#define MQPCB_MASK_SOURCE_GID_IDX               EHCA_BMASK_IBM(27, 27)
#define MQPCB_SOURCE_GID_IDX                    EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_FLOW_LABEL                   EHCA_BMASK_IBM(28, 28)
#define MQPCB_MASK_FLOW_LABEL                   EHCA_BMASK_IBM(28, 28)
#define MQPCB_FLOW_LABEL                        EHCA_BMASK_IBM(12, 31)
#define MQPCB_MASK_DEST_GID                     EHCA_BMASK_IBM(30, 30)
#define MQPCB_MASK_DEST_GID                     EHCA_BMASK_IBM(30, 30)
#define MQPCB_MASK_SERVICE_LEVEL_AL             EHCA_BMASK_IBM(31, 31)
#define MQPCB_MASK_SERVICE_LEVEL_AL             EHCA_BMASK_IBM(31, 31)
#define MQPCB_SERVICE_LEVEL_AL                  EHCA_BMASK_IBM(28, 31)
#define MQPCB_MASK_SEND_GRH_FLAG_AL             EHCA_BMASK_IBM(32, 32)
#define MQPCB_MASK_SEND_GRH_FLAG_AL             EHCA_BMASK_IBM(32, 32)
#define MQPCB_SEND_GRH_FLAG_AL                  EHCA_BMASK_IBM(31, 31)
#define MQPCB_MASK_RETRY_COUNT_AL               EHCA_BMASK_IBM(33, 33)
#define MQPCB_MASK_RETRY_COUNT_AL               EHCA_BMASK_IBM(33, 33)
#define MQPCB_RETRY_COUNT_AL                    EHCA_BMASK_IBM(29, 31)
#define MQPCB_MASK_TIMEOUT_AL                   EHCA_BMASK_IBM(34, 34)
#define MQPCB_MASK_TIMEOUT_AL                   EHCA_BMASK_IBM(34, 34)
#define MQPCB_TIMEOUT_AL                        EHCA_BMASK_IBM(27, 31)
#define MQPCB_MASK_MAX_STATIC_RATE_AL           EHCA_BMASK_IBM(35, 35)
#define MQPCB_MASK_MAX_STATIC_RATE_AL           EHCA_BMASK_IBM(35, 35)
#define MQPCB_MAX_STATIC_RATE_AL                EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_DLID_AL                      EHCA_BMASK_IBM(36, 36)
#define MQPCB_MASK_DLID_AL                      EHCA_BMASK_IBM(36, 36)
#define MQPCB_DLID_AL                           EHCA_BMASK_IBM(16, 31)
#define MQPCB_MASK_RNR_RETRY_COUNT_AL           EHCA_BMASK_IBM(37, 37)
#define MQPCB_MASK_RNR_RETRY_COUNT_AL           EHCA_BMASK_IBM(37, 37)
#define MQPCB_RNR_RETRY_COUNT_AL                EHCA_BMASK_IBM(29, 31)
#define MQPCB_MASK_SOURCE_PATH_BITS_AL          EHCA_BMASK_IBM(38, 38)
#define MQPCB_MASK_SOURCE_PATH_BITS_AL          EHCA_BMASK_IBM(38, 38)
#define MQPCB_SOURCE_PATH_BITS_AL               EHCA_BMASK_IBM(25, 31)
#define MQPCB_MASK_TRAFFIC_CLASS_AL             EHCA_BMASK_IBM(39, 39)
#define MQPCB_MASK_TRAFFIC_CLASS_AL             EHCA_BMASK_IBM(39, 39)
#define MQPCB_TRAFFIC_CLASS_AL                  EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_HOP_LIMIT_AL                 EHCA_BMASK_IBM(40, 40)
#define MQPCB_MASK_HOP_LIMIT_AL                 EHCA_BMASK_IBM(40, 40)
#define MQPCB_HOP_LIMIT_AL                      EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_SOURCE_GID_IDX_AL            EHCA_BMASK_IBM(41, 41)
#define MQPCB_MASK_SOURCE_GID_IDX_AL            EHCA_BMASK_IBM(41, 41)
#define MQPCB_SOURCE_GID_IDX_AL                 EHCA_BMASK_IBM(24, 31)
#define MQPCB_MASK_FLOW_LABEL_AL                EHCA_BMASK_IBM(42, 42)
#define MQPCB_MASK_FLOW_LABEL_AL                EHCA_BMASK_IBM(42, 42)
#define MQPCB_FLOW_LABEL_AL                     EHCA_BMASK_IBM(12, 31)
#define MQPCB_MASK_DEST_GID_AL                  EHCA_BMASK_IBM(44, 44)
#define MQPCB_MASK_DEST_GID_AL                  EHCA_BMASK_IBM(44, 44)
#define MQPCB_MASK_MAX_NR_OUTST_SEND_WR         EHCA_BMASK_IBM(45, 45)
#define MQPCB_MASK_MAX_NR_OUTST_SEND_WR         EHCA_BMASK_IBM(45, 45)
#define MQPCB_MAX_NR_OUTST_SEND_WR              EHCA_BMASK_IBM(16, 31)
#define MQPCB_MASK_MAX_NR_OUTST_RECV_WR         EHCA_BMASK_IBM(46, 46)
#define MQPCB_MASK_MAX_NR_OUTST_RECV_WR         EHCA_BMASK_IBM(46, 46)
#define MQPCB_MAX_NR_OUTST_RECV_WR              EHCA_BMASK_IBM(16, 31)
#define MQPCB_MASK_DISABLE_ETE_CREDIT_CHECK     EHCA_BMASK_IBM(47, 47)
#define MQPCB_MASK_DISABLE_ETE_CREDIT_CHECK     EHCA_BMASK_IBM(47, 47)
#define MQPCB_DISABLE_ETE_CREDIT_CHECK          EHCA_BMASK_IBM(31, 31)
#define MQPCB_QP_NUMBER                         EHCA_BMASK_IBM( 8, 31)
#define MQPCB_MASK_QP_ENABLE                    EHCA_BMASK_IBM(48, 48)
#define MQPCB_MASK_QP_ENABLE                    EHCA_BMASK_IBM(48, 48)
#define MQPCB_QP_ENABLE                         EHCA_BMASK_IBM(31, 31)
#define MQPCB_MASK_CURR_SRQ_LIMIT               EHCA_BMASK_IBM(49, 49)
#define MQPCB_MASK_CURR_SRQ_LIMIT               EHCA_BMASK_IBM(49, 49)
#define MQPCB_CURR_SRQ_LIMIT                    EHCA_BMASK_IBM(16, 31)
#define MQPCB_MASK_QP_AFF_ASYN_EV_LOG_REG       EHCA_BMASK_IBM(50, 50)
#define MQPCB_MASK_QP_AFF_ASYN_EV_LOG_REG       EHCA_BMASK_IBM(50, 50)
#define MQPCB_MASK_SHARED_RQ_HNDL               EHCA_BMASK_IBM(51, 51)
#define MQPCB_MASK_SHARED_RQ_HNDL               EHCA_BMASK_IBM(51, 51)


+4 −5
Original line number Original line Diff line number Diff line
@@ -479,13 +479,13 @@ void ehca_tasklet_neq(unsigned long data)
	struct ehca_eqe *eqe;
	struct ehca_eqe *eqe;
	u64 ret;
	u64 ret;


	eqe = (struct ehca_eqe *)ehca_poll_eq(shca, &shca->neq);
	eqe = ehca_poll_eq(shca, &shca->neq);


	while (eqe) {
	while (eqe) {
		if (!EHCA_BMASK_GET(NEQE_COMPLETION_EVENT, eqe->entry))
		if (!EHCA_BMASK_GET(NEQE_COMPLETION_EVENT, eqe->entry))
			parse_ec(shca, eqe->entry);
			parse_ec(shca, eqe->entry);


		eqe = (struct ehca_eqe *)ehca_poll_eq(shca, &shca->neq);
		eqe = ehca_poll_eq(shca, &shca->neq);
	}
	}


	ret = hipz_h_reset_event(shca->ipz_hca_handle,
	ret = hipz_h_reset_event(shca->ipz_hca_handle,
@@ -572,8 +572,7 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
	eqe_cnt = 0;
	eqe_cnt = 0;
	do {
	do {
		u32 token;
		u32 token;
		eqe_cache[eqe_cnt].eqe =
		eqe_cache[eqe_cnt].eqe = ehca_poll_eq(shca, eq);
			(struct ehca_eqe *)ehca_poll_eq(shca, eq);
		if (!eqe_cache[eqe_cnt].eqe)
		if (!eqe_cache[eqe_cnt].eqe)
			break;
			break;
		eqe_value = eqe_cache[eqe_cnt].eqe->entry;
		eqe_value = eqe_cache[eqe_cnt].eqe->entry;
@@ -637,7 +636,7 @@ void ehca_process_eq(struct ehca_shca *shca, int is_irq)
		goto unlock_irq_spinlock;
		goto unlock_irq_spinlock;
	do {
	do {
		struct ehca_eqe *eqe;
		struct ehca_eqe *eqe;
		eqe = (struct ehca_eqe *)ehca_poll_eq(shca, &shca->eq);
		eqe = ehca_poll_eq(shca, &shca->eq);
		if (!eqe)
		if (!eqe)
			break;
			break;
		process_eqe(shca, eqe);
		process_eqe(shca, eqe);
Loading