Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c5e83e3f42938c0a84047e125edb98d6513f985b
Commit:     c5e83e3f42938c0a84047e125edb98d6513f985b
Parent:     a3f5c338b9f30f328276739d9589beae19254936
Author:     Jack Steiner <[EMAIL PROTECTED]>
AuthorDate: Mon Mar 12 08:07:49 2007 -0500
Committer:  Tony Luck <[EMAIL PROTECTED]>
CommitDate: Tue Mar 20 13:42:23 2007 -0700

    [IA64] Fix get_model_name() for mixed cpu type systems
    
    If a system consists of mixed processor types, kmalloc()
    can be called before the per-cpu data page is initialized.
    If the slab contains sufficient memory, then kmalloc() works
    ok. However, if the slabs are empty, slab calls the memory
    allocator. This requires per-cpu data (NODE_DATA()) & the
    cpu dies.
    
    Also noted by Russ Anderson who had a very similar patch.
    
    Signed-off-by: Jack Steiner <[EMAIL PROTECTED]>
    Signed-off-by: Tony Luck <[EMAIL PROTECTED]>
---
 arch/ia64/kernel/setup.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c
index 339e8a5..69b9bb3 100644
--- a/arch/ia64/kernel/setup.c
+++ b/arch/ia64/kernel/setup.c
@@ -692,12 +692,15 @@ struct seq_operations cpuinfo_op = {
        .show =         show_cpuinfo
 };
 
-static char brandname[128];
+#define MAX_BRANDS     8
+static char brandname[MAX_BRANDS][128];
 
 static char * __cpuinit
 get_model_name(__u8 family, __u8 model)
 {
+       static int overflow;
        char brand[128];
+       int i;
 
        memcpy(brand, "Unknown", 8);
        if (ia64_pal_get_brand_info(brand)) {
@@ -709,12 +712,17 @@ get_model_name(__u8 family, __u8 model)
                        case 2: memcpy(brand, "Madison up to 9M cache", 23); 
break;
                }
        }
-       if (brandname[0] == '\0')
-               return strcpy(brandname, brand);
-       else if (strcmp(brandname, brand) == 0)
-               return brandname;
-       else
-               return kstrdup(brand, GFP_KERNEL);
+       for (i = 0; i < MAX_BRANDS; i++)
+               if (strcmp(brandname[i], brand) == 0)
+                       return brandname[i];
+       for (i = 0; i < MAX_BRANDS; i++)
+               if (brandname[i][0] == '\0')
+                       return strcpy(brandname[i], brand);
+       if (overflow++ == 0)
+               printk(KERN_ERR
+                      "%s: Table overflow. Some processor model information 
will be missing\n",
+                      __FUNCTION__);
+       return "Unknown";
 }
 
 static void __cpuinit
-
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