mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
![Yasuaki Ishimatsu](/assets/img/avatar_default.png)
When (hot)adding memory into system, /sys/firmware/memmap/X/{end, start, type} sysfs files are created. But there is no code to remove these files. This patch implements the function to remove them. We cannot free firmware_map_entry which is allocated by bootmem because there is no way to do so when the system is up. But we can at least remember the address of that memory and reuse the storage when the memory is added next time. This patch also introduces a new list map_entries_bootmem to link the map entries allocated by bootmem when they are removed, and a lock to protect it. And these entries will be reused when the memory is hot-added again. The idea is suggestted by Andrew Morton. NOTE: It is unsafe to return an entry pointer and release the map_entries_lock. So we should not hold the map_entries_lock separately in firmware_map_find_entry() and firmware_map_remove_entry(). Hold the map_entries_lock across find and remove /sys/firmware/memmap/X operation. And also, users of these two functions need to be careful to hold the lock when using these two functions. [tangchen@cn.fujitsu.com: Hold spinlock across find|remove /sys operation] [tangchen@cn.fujitsu.com: fix the wrong comments of map_entries] [tangchen@cn.fujitsu.com: reuse the storage of /sys/firmware/memmap/X/ allocated by bootmem] [tangchen@cn.fujitsu.com: fix section mismatch problem] [tangchen@cn.fujitsu.com: fix the doc format in drivers/firmware/memmap.c] Signed-off-by: Wen Congyang <wency@cn.fujitsu.com> Signed-off-by: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com> Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com> Reviewed-by: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Cc: Jiang Liu <jiang.liu@huawei.com> Cc: Jianguo Wu <wujianguo@huawei.com> Cc: Lai Jiangshan <laijs@cn.fujitsu.com> Cc: Tang Chen <tangchen@cn.fujitsu.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Julian Calaby <julian.calaby@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
49 lines
1.3 KiB
C
49 lines
1.3 KiB
C
/*
|
|
* include/linux/firmware-map.h:
|
|
* Copyright (C) 2008 SUSE LINUX Products GmbH
|
|
* by Bernhard Walle <bernhard.walle@gmx.de>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License v2.0 as published by
|
|
* the Free Software Foundation
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
*/
|
|
#ifndef _LINUX_FIRMWARE_MAP_H
|
|
#define _LINUX_FIRMWARE_MAP_H
|
|
|
|
#include <linux/list.h>
|
|
|
|
/*
|
|
* provide a dummy interface if CONFIG_FIRMWARE_MEMMAP is disabled
|
|
*/
|
|
#ifdef CONFIG_FIRMWARE_MEMMAP
|
|
|
|
int firmware_map_add_early(u64 start, u64 end, const char *type);
|
|
int firmware_map_add_hotplug(u64 start, u64 end, const char *type);
|
|
int firmware_map_remove(u64 start, u64 end, const char *type);
|
|
|
|
#else /* CONFIG_FIRMWARE_MEMMAP */
|
|
|
|
static inline int firmware_map_add_early(u64 start, u64 end, const char *type)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int firmware_map_add_hotplug(u64 start, u64 end, const char *type)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline int firmware_map_remove(u64 start, u64 end, const char *type)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
#endif /* CONFIG_FIRMWARE_MEMMAP */
|
|
|
|
#endif /* _LINUX_FIRMWARE_MAP_H */
|