diff options
author | Bryan O'Sullivan <bos@pathscale.com> | 2007-03-15 17:44:56 -0400 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2007-04-18 23:20:56 -0400 |
commit | 614d49a21e96737f84b13f644ac813f8eb6d297a (patch) | |
tree | 6a8389bcaf26f17d57a6720f84c3fe5b5887423d /drivers/infiniband | |
parent | 8ec1077b35359c973f4b1de7c516be570a6df495 (diff) |
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>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_intr.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_intr.c b/drivers/infiniband/hw/ipath/ipath_intr.c index 037b8e276429..24853310df1c 100644 --- a/drivers/infiniband/hw/ipath/ipath_intr.c +++ b/drivers/infiniband/hw/ipath/ipath_intr.c | |||
@@ -842,11 +842,10 @@ static void handle_urcv(struct ipath_devdata *dd, u32 istat) | |||
842 | struct ipath_portdata *pd = dd->ipath_pd[i]; | 842 | struct ipath_portdata *pd = dd->ipath_pd[i]; |
843 | if (portr & (1 << i) && pd && pd->port_cnt && | 843 | if (portr & (1 << i) && pd && pd->port_cnt && |
844 | test_bit(IPATH_PORT_WAITING_RCV, &pd->port_flag)) { | 844 | test_bit(IPATH_PORT_WAITING_RCV, &pd->port_flag)) { |
845 | int rcbit; | ||
846 | clear_bit(IPATH_PORT_WAITING_RCV, | 845 | clear_bit(IPATH_PORT_WAITING_RCV, |
847 | &pd->port_flag); | 846 | &pd->port_flag); |
848 | rcbit = i + INFINIPATH_R_INTRAVAIL_SHIFT; | 847 | clear_bit(i + INFINIPATH_R_INTRAVAIL_SHIFT, |
849 | clear_bit(1UL << rcbit, &dd->ipath_rcvctrl); | 848 | &dd->ipath_rcvctrl); |
850 | wake_up_interruptible(&pd->port_wait); | 849 | wake_up_interruptible(&pd->port_wait); |
851 | rcvdint = 1; | 850 | rcvdint = 1; |
852 | } | 851 | } |