IB/ipath: Fix bad argument to clear_bit()
Code was converted from a &= ~mask to clear_bit, but the bit was left shifted instead of being used directly, so we were either trashing memory several pages away, or sometimes taking a kernel page fault on an invalid page. Signed-off-by: Dave Olson <dave.olson@qlogic.com> Signed-off-by: Bryan O'Sullivan <bryan.osullivan@qlogic.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
This commit is contained in:
parent
8ec1077b35
commit
614d49a21e
|
@ -842,11 +842,10 @@ static void handle_urcv(struct ipath_devdata *dd, u32 istat)
|
|||
struct ipath_portdata *pd = dd->ipath_pd[i];
|
||||
if (portr & (1 << i) && pd && pd->port_cnt &&
|
||||
test_bit(IPATH_PORT_WAITING_RCV, &pd->port_flag)) {
|
||||
int rcbit;
|
||||
clear_bit(IPATH_PORT_WAITING_RCV,
|
||||
&pd->port_flag);
|
||||
rcbit = i + INFINIPATH_R_INTRAVAIL_SHIFT;
|
||||
clear_bit(1UL << rcbit, &dd->ipath_rcvctrl);
|
||||
clear_bit(i + INFINIPATH_R_INTRAVAIL_SHIFT,
|
||||
&dd->ipath_rcvctrl);
|
||||
wake_up_interruptible(&pd->port_wait);
|
||||
rcvdint = 1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue