From: Marc Fiuczynski Date: Thu, 21 Oct 2004 17:54:19 +0000 (+0000) Subject: Fix to prevent kernel from crashing in the memory controller on shutdown. X-Git-Tag: before-enable-kexec-patch~33 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=4c6d892aa5768adb0bcb68db457b52a2a3d33a60;p=linux-2.6.git Fix to prevent kernel from crashing in the memory controller on shutdown. --- diff --git a/include/linux/ckrm_mem_inline.h b/include/linux/ckrm_mem_inline.h index 815fdaa49..718cc2091 100644 --- a/include/linux/ckrm_mem_inline.h +++ b/include/linux/ckrm_mem_inline.h @@ -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 \n", cls, cls->core->name); + if (cls->core == NULL) { + name = "unknown"; + } else { + name = cls->core->name; + } + printk("freeing memclass %p of \n", cls, name); + // BUG_ON(ckrm_memclass_valid(cls)); - //kfree(cls); + // kfree(cls); } } diff --git a/kernel/ckrm/ckrm_mem.c b/kernel/ckrm/ckrm_mem.c index 20a7ea68e..765311819 100644 --- a/kernel/ckrm/ckrm_mem.c +++ b/kernel/ckrm/ckrm_mem.c @@ -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; }