Commit 5c16f7ee authored by Ingo Molnar's avatar Ingo Molnar

Merge branch 'x86/urgent' into x86/sgx, to resolve conflict

Conflicts:
	arch/x86/kernel/cpu/sgx/main.c
Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parents 379e4de9 ac5d272a
...@@ -29,8 +29,7 @@ static DEFINE_XARRAY(sgx_epc_address_space); ...@@ -29,8 +29,7 @@ static DEFINE_XARRAY(sgx_epc_address_space);
static LIST_HEAD(sgx_active_page_list); static LIST_HEAD(sgx_active_page_list);
static DEFINE_SPINLOCK(sgx_reclaimer_lock); static DEFINE_SPINLOCK(sgx_reclaimer_lock);
/* The free page list lock protected variables prepend the lock. */ static atomic_long_t sgx_nr_free_pages = ATOMIC_LONG_INIT(0);
static unsigned long sgx_nr_free_pages;
/* Nodes with one or more EPC sections. */ /* Nodes with one or more EPC sections. */
static nodemask_t sgx_numa_mask; static nodemask_t sgx_numa_mask;
...@@ -422,14 +421,15 @@ static void sgx_reclaim_pages(void) ...@@ -422,14 +421,15 @@ static void sgx_reclaim_pages(void)
spin_lock(&node->lock); spin_lock(&node->lock);
list_add_tail(&epc_page->list, &node->free_page_list); list_add_tail(&epc_page->list, &node->free_page_list);
sgx_nr_free_pages++;
spin_unlock(&node->lock); spin_unlock(&node->lock);
atomic_long_inc(&sgx_nr_free_pages);
} }
} }
static bool sgx_should_reclaim(unsigned long watermark) static bool sgx_should_reclaim(unsigned long watermark)
{ {
return sgx_nr_free_pages < watermark && !list_empty(&sgx_active_page_list); return atomic_long_read(&sgx_nr_free_pages) < watermark &&
!list_empty(&sgx_active_page_list);
} }
static int ksgxd(void *p) static int ksgxd(void *p)
...@@ -490,10 +490,10 @@ static struct sgx_epc_page *__sgx_alloc_epc_page_from_node(int nid) ...@@ -490,10 +490,10 @@ static struct sgx_epc_page *__sgx_alloc_epc_page_from_node(int nid)
page = list_first_entry(&node->free_page_list, struct sgx_epc_page, list); page = list_first_entry(&node->free_page_list, struct sgx_epc_page, list);
list_del_init(&page->list); list_del_init(&page->list);
sgx_nr_free_pages--;
page->flags = 0; page->flags = 0;
spin_unlock(&node->lock); spin_unlock(&node->lock);
atomic_long_dec(&sgx_nr_free_pages);
return page; return page;
} }
...@@ -649,10 +649,10 @@ void sgx_free_epc_page(struct sgx_epc_page *page) ...@@ -649,10 +649,10 @@ void sgx_free_epc_page(struct sgx_epc_page *page)
list_add(&page->list, &node->sgx_poison_page_list); list_add(&page->list, &node->sgx_poison_page_list);
else else
list_add_tail(&page->list, &node->free_page_list); list_add_tail(&page->list, &node->free_page_list);
sgx_nr_free_pages++;
page->flags = SGX_EPC_PAGE_IS_FREE; page->flags = SGX_EPC_PAGE_IS_FREE;
spin_unlock(&node->lock); spin_unlock(&node->lock);
atomic_long_inc(&sgx_nr_free_pages);
} }
static bool __init sgx_setup_epc_section(u64 phys_addr, u64 size, static bool __init sgx_setup_epc_section(u64 phys_addr, u64 size,
......
...@@ -742,6 +742,28 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p) ...@@ -742,6 +742,28 @@ dump_kernel_offset(struct notifier_block *self, unsigned long v, void *p)
return 0; return 0;
} }
static char *prepare_command_line(void)
{
#ifdef CONFIG_CMDLINE_BOOL
#ifdef CONFIG_CMDLINE_OVERRIDE
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
#else
if (builtin_cmdline[0]) {
/* append boot loader cmdline to builtin */
strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
}
#endif
#endif
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
parse_early_param();
return command_line;
}
/* /*
* Determine if we were loaded by an EFI loader. If so, then we have also been * Determine if we were loaded by an EFI loader. If so, then we have also been
* passed the efi memmap, systab, etc., so we should use these data structures * passed the efi memmap, systab, etc., so we should use these data structures
...@@ -830,6 +852,23 @@ void __init setup_arch(char **cmdline_p) ...@@ -830,6 +852,23 @@ void __init setup_arch(char **cmdline_p)
x86_init.oem.arch_setup(); x86_init.oem.arch_setup();
/*
* x86_configure_nx() is called before parse_early_param() (called by
* prepare_command_line()) to detect whether hardware doesn't support
* NX (so that the early EHCI debug console setup can safely call
* set_fixmap()). It may then be called again from within noexec_setup()
* during parsing early parameters to honor the respective command line
* option.
*/
x86_configure_nx();
/*
* This parses early params and it needs to run before
* early_reserve_memory() because latter relies on such settings
* supplied as early params.
*/
*cmdline_p = prepare_command_line();
/* /*
* Do some memory reservations *before* memory is added to memblock, so * Do some memory reservations *before* memory is added to memblock, so
* memblock allocations won't overwrite it. * memblock allocations won't overwrite it.
...@@ -863,33 +902,6 @@ void __init setup_arch(char **cmdline_p) ...@@ -863,33 +902,6 @@ void __init setup_arch(char **cmdline_p)
bss_resource.start = __pa_symbol(__bss_start); bss_resource.start = __pa_symbol(__bss_start);
bss_resource.end = __pa_symbol(__bss_stop)-1; bss_resource.end = __pa_symbol(__bss_stop)-1;
#ifdef CONFIG_CMDLINE_BOOL
#ifdef CONFIG_CMDLINE_OVERRIDE
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
#else
if (builtin_cmdline[0]) {
/* append boot loader cmdline to builtin */
strlcat(builtin_cmdline, " ", COMMAND_LINE_SIZE);
strlcat(builtin_cmdline, boot_command_line, COMMAND_LINE_SIZE);
strlcpy(boot_command_line, builtin_cmdline, COMMAND_LINE_SIZE);
}
#endif
#endif
strlcpy(command_line, boot_command_line, COMMAND_LINE_SIZE);
*cmdline_p = command_line;
/*
* x86_configure_nx() is called before parse_early_param() to detect
* whether hardware doesn't support NX (so that the early EHCI debug
* console setup can safely call set_fixmap()). It may then be called
* again from within noexec_setup() during parsing early parameters
* to honor the respective command line option.
*/
x86_configure_nx();
parse_early_param();
#ifdef CONFIG_MEMORY_HOTPLUG #ifdef CONFIG_MEMORY_HOTPLUG
/* /*
* Memory used by the kernel cannot be hot-removed because Linux * Memory used by the kernel cannot be hot-removed because Linux
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment