ChangeSet 1.2231.1.147, 2005/03/28 19:57:22-08:00, [EMAIL PROTECTED]

        [PATCH] InfiniBand: remove unsafe use of in_atomic()
        
        Using in_atomic() to decide between GFP_KERNEL and GFP_ATOMIC is not 
safe
        (it doesn't work if CONFIG_PREEMPT=n).  Change to just always allocating
        with GFP_ATOMIC, since we don't know if we can sleep or not.
        
        Signed-off-by: Roland Dreier <[EMAIL PROTECTED]>
        Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
        Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>



 mad.c |   14 ++++----------
 1 files changed, 4 insertions(+), 10 deletions(-)


diff -Nru a/drivers/infiniband/core/mad.c b/drivers/infiniband/core/mad.c
--- a/drivers/infiniband/core/mad.c     2005-03-28 21:38:50 -08:00
+++ b/drivers/infiniband/core/mad.c     2005-03-28 21:38:50 -08:00
@@ -646,7 +646,7 @@
                                  struct ib_smp *smp,
                                  struct ib_send_wr *send_wr)
 {
-       int ret, alloc_flags, solicited;
+       int ret, solicited;
        unsigned long flags;
        struct ib_mad_local_private *local;
        struct ib_mad_private *mad_priv;
@@ -666,11 +666,7 @@
        if (!ret || !device->process_mad)
                goto out;
 
-       if (in_atomic() || irqs_disabled())
-               alloc_flags = GFP_ATOMIC;
-       else
-               alloc_flags = GFP_KERNEL;
-       local = kmalloc(sizeof *local, alloc_flags);
+       local = kmalloc(sizeof *local, GFP_ATOMIC);
        if (!local) {
                ret = -ENOMEM;
                printk(KERN_ERR PFX "No memory for ib_mad_local_private\n");
@@ -678,7 +674,7 @@
        }
        local->mad_priv = NULL;
        local->recv_mad_agent = NULL;
-       mad_priv = kmem_cache_alloc(ib_mad_cache, alloc_flags);
+       mad_priv = kmem_cache_alloc(ib_mad_cache, GFP_ATOMIC);
        if (!mad_priv) {
                ret = -ENOMEM;
                printk(KERN_ERR PFX "No memory for local response MAD\n");
@@ -860,9 +856,7 @@
                }
 
                /* Allocate MAD send WR tracking structure */
-               mad_send_wr = kmalloc(sizeof *mad_send_wr,
-                                     (in_atomic() || irqs_disabled()) ?
-                                     GFP_ATOMIC : GFP_KERNEL);
+               mad_send_wr = kmalloc(sizeof *mad_send_wr, GFP_ATOMIC);
                if (!mad_send_wr) {
                        printk(KERN_ERR PFX "No memory for "
                               "ib_mad_send_wr_private\n");
-
To unsubscribe from this list: send the line "unsubscribe bk-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