[prev in list] [next in list] [prev in thread] [next in thread] 

List:       drbd-cvs
Subject:    [DRBD-cvs] svn commit by phil - r2649 - in trunk/drbd: . linux -
From:       drbd-cvs () linbit ! com
Date:       2006-12-28 15:54:30
Message-ID: 20061228155430.77E5A2CFF462 () mail ! linbit ! com
[Download RAW message or body]

Author: phil
Date: 2006-12-28 16:54:28 +0100 (Thu, 28 Dec 2006)
New Revision: 2649

Added:
   trunk/drbd/linux/hardirq.h
Modified:
   trunk/drbd/drbd_compat_wrappers.h
   trunk/drbd/linux/connector.h
Log:
Make DRBD compile even on SLES9 (Kernel 2.6.5)


Modified: trunk/drbd/drbd_compat_wrappers.h
===================================================================
--- trunk/drbd/drbd_compat_wrappers.h	2006-12-28 12:07:12 UTC (rev 2648)
+++ trunk/drbd/drbd_compat_wrappers.h	2006-12-28 15:54:28 UTC (rev 2649)
@@ -166,3 +166,69 @@
 	kunmap(page);
 	return ret;
 }
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,10)
+
+#if defined(__x86_64__)
+
+static __inline__ int atomic_add_return(int i, atomic_t *v)
+{
+        int __i = i;
+        __asm__ __volatile__(
+                LOCK_PREFIX "xaddl %0, %1;"
+                :"=r"(i)
+                :"m"(v->counter), "0"(i));
+        return i + __i;
+}
+
+static __inline__ int atomic_sub_return(int i, atomic_t *v)
+{
+        return atomic_add_return(-i,v);
+}
+
+#define atomic_inc_return(v)  (atomic_add_return(1,v))
+#define atomic_dec_return(v)  (atomic_sub_return(1,v))
+
+#elif defined(__i386__) || defined(__arch_um__)
+
+static __inline__ int atomic_add_return(int i, atomic_t *v)
+{
+        int __i;
+#ifdef CONFIG_M386
+        unsigned long flags;
+        if(unlikely(boot_cpu_data.x86==3))
+                goto no_xadd;
+#endif
+        /* Modern 486+ processor */
+        __i = i;
+        __asm__ __volatile__(
+                LOCK_PREFIX "xaddl %0, %1;"
+                :"=r"(i)
+                :"m"(v->counter), "0"(i));
+        return i + __i;
+
+#ifdef CONFIG_M386
+no_xadd: /* Legacy 386 processor */
+        local_irq_save(flags);
+        __i = atomic_read(v);
+        atomic_set(v, i + __i);
+        local_irq_restore(flags);
+        return i + __i;
+#endif
+}
+
+static __inline__ int atomic_sub_return(int i, atomic_t *v)
+{
+        return atomic_add_return(-i,v);
+}
+
+#define atomic_inc_return(v)  (atomic_add_return(1,v))
+#define atomic_dec_return(v)  (atomic_sub_return(1,v))
+
+#else 
+# error "You need to copy/past atomic_inc_return()/atomic_dec_return() here"
+# error "for your architecture. (Hint: Kernels after 2.6.10 have those"
+# error "by default! Using a later kernel might be less effort!)"
+#endif
+
+#endif

Modified: trunk/drbd/linux/connector.h
===================================================================
--- trunk/drbd/linux/connector.h	2006-12-28 12:07:12 UTC (rev 2648)
+++ trunk/drbd/linux/connector.h	2006-12-28 15:54:28 UTC (rev 2649)
@@ -96,10 +96,8 @@
 #ifdef __KERNEL__
 #include <linux/drbd_config.h>
 
-#if defined(NETLINK_ROUTE6) && !defined(KERNEL_HAS_GFP_T)
-   /* pre 2.6.16 */
-   /* This ifdef check needs to be refined */
-typedef unsigned __bitwise__ gfp_t;
+#if !defined(KERNEL_HAS_GFP_T)
+typedef unsigned int gfp_t;
 #endif
 
 #include <asm/atomic.h>

Added: trunk/drbd/linux/hardirq.h
===================================================================
--- trunk/drbd/linux/hardirq.h	2006-12-28 12:07:12 UTC (rev 2648)
+++ trunk/drbd/linux/hardirq.h	2006-12-28 15:54:28 UTC (rev 2649)
@@ -0,0 +1 @@
+/* Just an empty file. */

_______________________________________________
drbd-cvs mailing list
drbd-cvs@lists.linbit.com
http://lists.linbit.com/mailman/listinfo/drbd-cvs
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic