Fix to prevent kernel from crashing in the memory controller on shutdown.
authorMarc Fiuczynski <mef@cs.princeton.edu>
Thu, 21 Oct 2004 17:54:19 +0000 (17:54 +0000)
committerMarc Fiuczynski <mef@cs.princeton.edu>
Thu, 21 Oct 2004 17:54:19 +0000 (17:54 +0000)
include/linux/ckrm_mem_inline.h
kernel/ckrm/ckrm_mem.c

index 815fdaa..718cc20 100644 (file)
@@ -73,11 +73,18 @@ mem_class_get(ckrm_mem_res_t *cls)
 static inline void
 mem_class_put(ckrm_mem_res_t *cls)
 {
+       const char *name;
        
        if (cls && atomic_dec_and_test(&(cls->nr_users)) ) {
-               printk("freeing memclass %p of <core:%s>\n", cls, cls->core->name);
+               if (cls->core == NULL) {
+                       name = "unknown";
+               } else {
+                       name = cls->core->name;
+               }
+               printk("freeing memclass %p of <core:%s>\n", cls, name);
+
                // BUG_ON(ckrm_memclass_valid(cls));
-               //kfree(cls);
+               // kfree(cls);
        }       
 }
 
index 20a7ea6..7653118 100644 (file)
@@ -192,11 +192,13 @@ mem_res_free(void *my_res)
                child_guarantee_changed(&parres->shares, res->shares.my_guarantee, 0);
                child_maxlimit_changed_local(parres);
        }
+       ckrm_mem_evaluate_all_pages();
+       res->core = NULL;
+
        spin_lock(&ckrm_mem_lock);
        list_del(&res->mcls_list);
        spin_unlock(&ckrm_mem_lock);
        mem_class_put(res);
-       ckrm_mem_evaluate_all_pages();
        return;
 }