--- linux-2.6.11-ib/drivers/infiniband/hw/mellanox-hca/mosal/mosal_mem.c.orig	Fri Mar 18 23:43:31 2005
+++ linux-2.6.11-ib/drivers/infiniband/hw/mellanox-hca/mosal/mosal_mem.c	Fri Mar 18 23:57:59 2005
@@ -207,7 +207,7 @@
   }
 
   down_write(&current->mm->mmap_sem);
-  if (remap_page_range(REMAP_PREFIX virt_map,pa,bsize,pgprot_flags)) {
+  if (remap_pfn_range(REMAP_PREFIX virt_map,pa >> PAGE_SHIFT,bsize,pgprot_flags)) {
     up_write(&current->mm->mmap_sem);
     MTL_ERROR2("MOSAL_map_phys_addr: Failed remap_page_range.\n");
     MOSAL_DO_MUNMAP(current->mm,virt_map,bsize);
@@ -305,8 +305,15 @@
 static inline pmd_t *mosal_get_pmd(MOSAL_prot_ctx_t prot_ctx, const pgd_t *pgd_p, const MT_virt_addr_t va)
 {
   pmd_t *pmd_p;
+  pud_t *pud;
 
-  pmd_p = pmd_offset((pgd_t *)pgd_p, va);
+  pud = pud_offset((pgd_t *)pgd_p, va);
+
+  if (pud_none(*pud)){
+    return NULL;
+  }
+
+  pmd_p = pmd_offset(pud, va);
 
   if ( pmd_none(*pmd_p)  ) {
     return NULL;
--- linux-2.6.11-ib/drivers/infiniband/hw/mellanox-hca/mosal/mosal_bus.c.orig	Fri Mar 18 23:56:18 2005
+++ linux-2.6.11-ib/drivers/infiniband/hw/mellanox-hca/mosal/mosal_bus.c	Fri Mar 18 23:56:50 2005
@@ -174,14 +174,14 @@
 
       rc = MT_OK;
       for ( i=0; i<index; ++i ) {
-        dev = pci_find_class(class_code, dev);
+        dev = pci_get_class(class_code, dev);
         if ( dev == NULL ) {
           rc = MT_ENORSC;
           break;
         }
       }
       if ( rc == MT_OK ) {
-        dev = pci_find_class(class_code, dev);
+        dev = pci_get_class(class_code, dev);
         if ( dev ) {
           *bus_p = dev->bus->number;
           *dev_func_p = dev->devfn;
--- linux-2.6.11-ib/drivers/infiniband/core/mad_static.c.orig	Fri Mar 18 23:54:09 2005
+++ linux-2.6.11-ib/drivers/infiniband/core/mad_static.c	Fri Mar 18 23:55:34 2005
@@ -1,4 +1,4 @@
-/*
+	/*
   This software is available to you under a choice of one of two
   licenses.  You may choose to be licensed under the terms of the GNU
   General Public License (GPL) Version 2, available at
@@ -58,10 +58,10 @@
 			continue;
 		}
 
-		read_lock(&idev->lock);
+		read_lock(&idev->mc_list_lock);
 
 		if (!idev->ifa_list) {
-			read_unlock(&idev->lock);
+			read_unlock(&idev->mc_list_lock);
 			in_dev_put(idev);
 			continue;
 		}
@@ -86,7 +86,7 @@
 				 dev->name, i[0], i[1], i[2], i[3], lid_base);
 		}
 
-		read_unlock(&idev->lock);
+		read_unlock(&idev->mc_list_lock);
 		in_dev_put(idev);
 		break;
 	}
--- linux-2.6.11-ib/drivers/infiniband/ulp/ipoib/ipoib_multicast.c.orig	Sat Mar 19 00:03:50 2005
+++ linux-2.6.11-ib/drivers/infiniband/ulp/ipoib/ipoib_multicast.c	Sat Mar 19 00:04:16 2005
@@ -960,7 +960,7 @@
 	list_for_each_entry(mcast, &priv->multicast_list, list)
 		clear_bit(IPOIB_MCAST_FLAG_FOUND, &mcast->flags);
 
-	read_lock(&in_dev->lock);
+	read_lock(&in_dev->mc_list_lock);
 
 	/* Mark all of the entries that are found or don't exist */
 	for (im = in_dev->mc_list; im; im = im->next) {
@@ -1025,7 +1025,7 @@
 		}
 	}
 
-	read_unlock(&in_dev->lock);
+	read_unlock(&in_dev->mc_list_lock);
 
 	/* Remove all of the entries don't exist anymore */
 	list_for_each_entry_safe(mcast, tmcast, &priv->multicast_list, list) {
