Revision eed7624552ca55c346a4e9ccaa9ab0723841aee6 authored by Jack Morgenstein on 21 May 2017, 16:11:13 UTC, committed by Doug Ledford on 01 June 2017, 21:04:51 UTC
The cited patch added a type field to structures ib_ah and rdma_ah_attr.

Function mlx4_ib_query_ah() builds an rdma_ah_attr structure from the
data in an mlx4_ib_ah structure (which contains both an ib_ah structure
and an address vector).

For mlx4_ib_query_ah() to work properly, the type field in the contained
ib_ah structure must be set correctly.

In the outgoing MAD tunneling flow, procedure mlx4_ib_multiplex_mad()
paravirtualizes a MAD received from a slave and sends the processed
mad out over the wire. During this processing, it populates an
mlx4_ib_ah structure and calls mlx4_ib_query_ah().

The cited commit overlooked setting the type field in the contained
ib_ah structure before invoking mlx4_ib_query_ah(). As a result, the
type field remained uninitialized, and the rdma_ah_attr structure was
incorrectly built. This resulted in improperly built MADs being sent out
over the wire.

This patch properly initializes the type field in the contained ib_ah
structure before calling mlx4_ib_query_ah(). The rdma_ah_attr structure
is then generated correctly.

Fixes: 44c58487d51a ("IB/core: Define 'ib' and 'roce' rdma_ah_attr types")
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
1 parent 1feb400
Raw File
carta_random.S
/*
 * Fast, simple, yet decent quality random number generator based on
 * a paper by David G. Carta ("Two Fast Implementations of the
 * `Minimal Standard' Random Number Generator," Communications of the
 * ACM, January, 1990).
 *
 * Copyright (C) 2002 Hewlett-Packard Co
 *	David Mosberger-Tang <davidm@hpl.hp.com>
 */

#include <asm/asmmacro.h>

#define a	r2
#define m	r3
#define lo	r8
#define hi	r9
#define t0	r16
#define t1	r17
#define	seed	r32

GLOBAL_ENTRY(carta_random32)
	movl	a = (16807 << 16) | 16807
	;;
	pmpyshr2.u t0 = a, seed, 0
	pmpyshr2.u t1 = a, seed, 16
	;;
	unpack2.l t0 = t1, t0
	dep	m = -1, r0, 0, 31
	;;
	zxt4	lo = t0
	shr.u	hi = t0, 32
	;;
	dep	t0 = 0, hi, 15, 49	// t0 = (hi & 0x7fff)
	;;
	shl	t0 = t0, 16		// t0 = (hi & 0x7fff) << 16
	shr	t1 = hi, 15		// t1 = (hi >> 15)
	;;
	add	lo = lo, t0
	;;
	cmp.gtu	p6, p0 = lo, m
	;;
(p6)	and	lo = lo, m
	;;
(p6)	add	lo = 1, lo
	;;
	add	lo = lo, t1
	;;
	cmp.gtu p6, p0 = lo, m
	;;
(p6)	and	lo = lo, m
	;;
(p6)	add	lo = 1, lo
	br.ret.sptk.many rp
END(carta_random32)
back to top