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

Commit e8ffef73 authored by Roland Dreier's avatar Roland Dreier
Browse files

IB/ipath: Avoid test_bit() on u64 SDMA status value



Gabriel C <nix.or.die@googlemail.com> pointed out that when the x86
bitops are updated to operate on unsigned long, the code in
sdma_abort_task() will produce warnings:

    drivers/infiniband/hw/ipath/ipath_sdma.c: In function 'sdma_abort_task':
    drivers/infiniband/hw/ipath/ipath_sdma.c:267: warning: passing argument 2 of 'constant_test_bit' from incompatible pointer type

and so on, because it uses test_bit() to operation on a u64 value
(returned by ipath_read_kref64() for a hardware register).

Fix up these warnings by converting the test_bit() operations to &ing
with appropriate symbolic defines of the bits within the hardware
register.  This has the benign side-effect of making the code more
self-documenting as well.

Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
parent eb90d81d
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -232,6 +232,11 @@ struct ipath_sdma_desc {
#define IPATH_SDMA_TXREQ_S_ABORTED   2
#define IPATH_SDMA_TXREQ_S_ABORTED   2
#define IPATH_SDMA_TXREQ_S_SHUTDOWN  3
#define IPATH_SDMA_TXREQ_S_SHUTDOWN  3


#define IPATH_SDMA_STATUS_SCORE_BOARD_DRAIN_IN_PROG	(1ull << 63)
#define IPATH_SDMA_STATUS_ABORT_IN_PROG			(1ull << 62)
#define IPATH_SDMA_STATUS_INTERNAL_SDMA_ENABLE		(1ull << 61)
#define IPATH_SDMA_STATUS_SCB_EMPTY			(1ull << 30)

/* max dwords in small buffer packet */
/* max dwords in small buffer packet */
#define IPATH_SMALLBUF_DWORDS (dd->ipath_piosize2k >> 2)
#define IPATH_SMALLBUF_DWORDS (dd->ipath_piosize2k >> 2)


+4 −8
Original line number Original line Diff line number Diff line
@@ -263,14 +263,10 @@ static void sdma_abort_task(unsigned long opaque)
		hwstatus = ipath_read_kreg64(dd,
		hwstatus = ipath_read_kreg64(dd,
				dd->ipath_kregs->kr_senddmastatus);
				dd->ipath_kregs->kr_senddmastatus);


		if (/* ScoreBoardDrainInProg */
		if ((hwstatus & (IPATH_SDMA_STATUS_SCORE_BOARD_DRAIN_IN_PROG |
		    test_bit(63, &hwstatus) ||
				 IPATH_SDMA_STATUS_ABORT_IN_PROG	     |
		    /* AbortInProg */
				 IPATH_SDMA_STATUS_INTERNAL_SDMA_ENABLE)) ||
		    test_bit(62, &hwstatus) ||
		    !(hwstatus & IPATH_SDMA_STATUS_SCB_EMPTY)) {
		    /* InternalSDmaEnable */
		    test_bit(61, &hwstatus) ||
		    /* ScbEmpty */
		    !test_bit(30, &hwstatus)) {
			if (dd->ipath_sdma_reset_wait > 0) {
			if (dd->ipath_sdma_reset_wait > 0) {
				/* not done shutting down sdma */
				/* not done shutting down sdma */
				--dd->ipath_sdma_reset_wait;
				--dd->ipath_sdma_reset_wait;