summaryrefslogtreecommitdiffstats
path: root/drivers/base/cpu.c
diff options
context:
space:
mode:
authorIgor Mammedov <imammedo@redhat.com>2013-05-14 10:46:06 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-05-21 13:14:40 -0400
commitc055da9fbad4b63bb3169f2b1a8b7ad429270bd0 (patch)
tree5a861955edf614619a237e671a0d8a65c674612b /drivers/base/cpu.c
parenta4e2400a63f0e4fb6af5083a24d80b6fa4c41ccd (diff)
cpu: fix "crash_notes" and "crash_notes_size" leaks in register_cpu()
"crash_notes" and "crash_notes_size" are dynamically created with device_create_file() but aren't deleted anywhere. Define "crash_notes" and "crash_notes_size" statically via attribute groups so that device_register would create them automatically and files would be destroyed when CPU is destroyed. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Tested-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base/cpu.c')
-rw-r--r--drivers/base/cpu.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
index 3d48fc887ef4..8f9e264220d2 100644
--- a/drivers/base/cpu.c
+++ b/drivers/base/cpu.c
@@ -164,7 +164,24 @@ static ssize_t show_crash_notes_size(struct device *dev,
164 return rc; 164 return rc;
165} 165}
166static DEVICE_ATTR(crash_notes_size, 0400, show_crash_notes_size, NULL); 166static DEVICE_ATTR(crash_notes_size, 0400, show_crash_notes_size, NULL);
167
168static struct attribute *crash_note_cpu_attrs[] = {
169 &dev_attr_crash_notes.attr,
170 &dev_attr_crash_notes_size.attr,
171 NULL
172};
173
174static struct attribute_group crash_note_cpu_attr_group = {
175 .attrs = crash_note_cpu_attrs,
176};
177#endif
178
179static const struct attribute_group *common_cpu_attr_groups[] = {
180#ifdef CONFIG_KEXEC
181 &crash_note_cpu_attr_group,
167#endif 182#endif
183 NULL
184};
168 185
169/* 186/*
170 * Print cpu online, possible, present, and system maps 187 * Print cpu online, possible, present, and system maps
@@ -280,6 +297,7 @@ int __cpuinit register_cpu(struct cpu *cpu, int num)
280#ifdef CONFIG_ARCH_HAS_CPU_AUTOPROBE 297#ifdef CONFIG_ARCH_HAS_CPU_AUTOPROBE
281 cpu->dev.bus->uevent = arch_cpu_uevent; 298 cpu->dev.bus->uevent = arch_cpu_uevent;
282#endif 299#endif
300 cpu->dev.groups = common_cpu_attr_groups;
283 error = device_register(&cpu->dev); 301 error = device_register(&cpu->dev);
284 if (!error && cpu->hotpluggable) 302 if (!error && cpu->hotpluggable)
285 register_cpu_control(cpu); 303 register_cpu_control(cpu);
@@ -288,13 +306,6 @@ int __cpuinit register_cpu(struct cpu *cpu, int num)
288 if (!error) 306 if (!error)
289 register_cpu_under_node(num, cpu_to_node(num)); 307 register_cpu_under_node(num, cpu_to_node(num));
290 308
291#ifdef CONFIG_KEXEC
292 if (!error)
293 error = device_create_file(&cpu->dev, &dev_attr_crash_notes);
294 if (!error)
295 error = device_create_file(&cpu->dev,
296 &dev_attr_crash_notes_size);
297#endif
298 return error; 309 return error;
299} 310}
300 311