Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bf628dc22a09ed2022abb32c76011ae5f99ad6b0
Commit:     bf628dc22a09ed2022abb32c76011ae5f99ad6b0
Parent:     c59a3da1342ff456e5123361739bc331446cda21
Author:     Roland Dreier <[EMAIL PROTECTED]>
AuthorDate: Fri Dec 15 14:01:49 2006 -0800
Committer:  Roland Dreier <[EMAIL PROTECTED]>
CommitDate: Fri Dec 15 14:01:49 2006 -0800

    IB/srp: Fix FMR mapping for 32-bit kernels and addresses above 4G
    
    struct srp_device.fmr_page_mask was unsigned long, which means that
    the top part of addresses above 4G was being chopped off on 32-bit
    architectures.  Of course nothing good happens when data from SRP
    targets is DMAed to the wrong place.
    
    Fix this by changing fmr_page_mask to u64, to match the addresses
    actually used by IB devices.
    
    Thanks to Brian Cain <[EMAIL PROTECTED]> and David McMillen
    <[EMAIL PROTECTED]> for help diagnosing the bug and testing
    the fix.
    
    Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
---
 drivers/infiniband/ulp/srp/ib_srp.c |    2 +-
 drivers/infiniband/ulp/srp/ib_srp.h |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c 
b/drivers/infiniband/ulp/srp/ib_srp.c
index e9b6a6f..cdecbf5 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -1898,7 +1898,7 @@ static void srp_add_one(struct ib_device *device)
         */
        srp_dev->fmr_page_shift = max(9, ffs(dev_attr->page_size_cap) - 1);
        srp_dev->fmr_page_size  = 1 << srp_dev->fmr_page_shift;
-       srp_dev->fmr_page_mask  = ~((unsigned long) srp_dev->fmr_page_size - 1);
+       srp_dev->fmr_page_mask  = ~((u64) srp_dev->fmr_page_size - 1);
 
        INIT_LIST_HEAD(&srp_dev->dev_list);
 
diff --git a/drivers/infiniband/ulp/srp/ib_srp.h 
b/drivers/infiniband/ulp/srp/ib_srp.h
index 868a540..c217723 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.h
+++ b/drivers/infiniband/ulp/srp/ib_srp.h
@@ -87,7 +87,7 @@ struct srp_device {
        struct ib_fmr_pool     *fmr_pool;
        int                     fmr_page_shift;
        int                     fmr_page_size;
-       unsigned long           fmr_page_mask;
+       u64                     fmr_page_mask;
 };
 
 struct srp_host {
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to