These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / infiniband / hw / qib / qib_mad.c
index 395f404..9625e7c 100644 (file)
@@ -83,7 +83,8 @@ static void qib_send_trap(struct qib_ibport *ibp, void *data, unsigned len)
                return;
 
        send_buf = ib_create_send_mad(agent, 0, 0, 0, IB_MGMT_MAD_HDR,
-                                     IB_MGMT_MAD_DATA, GFP_ATOMIC);
+                                     IB_MGMT_MAD_DATA, GFP_ATOMIC,
+                                     IB_MGMT_BASE_VERSION);
        if (IS_ERR(send_buf))
                return;
 
@@ -1854,7 +1855,7 @@ static int pma_set_portcounters_ext(struct ib_pma_mad *pmp,
 }
 
 static int process_subn(struct ib_device *ibdev, int mad_flags,
-                       u8 port, struct ib_mad *in_mad,
+                       u8 port, const struct ib_mad *in_mad,
                        struct ib_mad *out_mad)
 {
        struct ib_smp *smp = (struct ib_smp *)out_mad;
@@ -2006,7 +2007,7 @@ bail:
 }
 
 static int process_perf(struct ib_device *ibdev, u8 port,
-                       struct ib_mad *in_mad,
+                       const struct ib_mad *in_mad,
                        struct ib_mad *out_mad)
 {
        struct ib_pma_mad *pmp = (struct ib_pma_mad *)out_mad;
@@ -2299,7 +2300,7 @@ static int check_cc_key(struct qib_ibport *ibp,
 }
 
 static int process_cc(struct ib_device *ibdev, int mad_flags,
-                       u8 port, struct ib_mad *in_mad,
+                       u8 port, const struct ib_mad *in_mad,
                        struct ib_mad *out_mad)
 {
        struct ib_cc_mad *ccp = (struct ib_cc_mad *)out_mad;
@@ -2400,12 +2401,20 @@ bail:
  * This is called by the ib_mad module.
  */
 int qib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port,
-                   struct ib_wc *in_wc, struct ib_grh *in_grh,
-                   struct ib_mad *in_mad, struct ib_mad *out_mad)
+                   const struct ib_wc *in_wc, const struct ib_grh *in_grh,
+                   const struct ib_mad_hdr *in, size_t in_mad_size,
+                   struct ib_mad_hdr *out, size_t *out_mad_size,
+                   u16 *out_mad_pkey_index)
 {
        int ret;
        struct qib_ibport *ibp = to_iport(ibdev, port);
        struct qib_pportdata *ppd = ppd_from_ibp(ibp);
+       const struct ib_mad *in_mad = (const struct ib_mad *)in;
+       struct ib_mad *out_mad = (struct ib_mad *)out;
+
+       if (WARN_ON_ONCE(in_mad_size != sizeof(*in_mad) ||
+                        *out_mad_size != sizeof(*out_mad)))
+               return IB_MAD_RESULT_FAILURE;
 
        switch (in_mad->mad_hdr.mgmt_class) {
        case IB_MGMT_CLASS_SUBN_DIRECTED_ROUTE: