Message ID | 20220825051827.246698-1-jarkko@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86/sgx: Print EREMOVE return value in __sgx_sanitize_pages() | expand |
On Thu, Aug 25, 2022 at 08:18:27AM +0300, Jarkko Sakkinen wrote: > In the 2nd run of __sgx_sanitize_pages() print the error > message. All EREMOVE's should succeed. This will allow to > provide some additional clues, if not. > > Cc: Paul Menzel <pmenzel@molgen.mpg.de> > Cc: Dave Hansen <dave.hansen@linux.intel.com> > Cc: Reinette Chatre <reinette.chatre@intel.com> > Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> > --- > arch/x86/kernel/cpu/sgx/main.c | 9 ++++++--- > 1 file changed, 6 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c > index 515e2a5f25bb..33354921c59f 100644 > --- a/arch/x86/kernel/cpu/sgx/main.c > +++ b/arch/x86/kernel/cpu/sgx/main.c > @@ -50,7 +50,7 @@ static LIST_HEAD(sgx_dirty_page_list); > * from the input list, and made available for the page allocator. SECS pages > * prepending their children in the input list are left intact. > */ > -static void __sgx_sanitize_pages(struct list_head *dirty_page_list) > +static void __sgx_sanitize_pages(struct list_head *dirty_page_list, bool verbose) > { > struct sgx_epc_page *page; > LIST_HEAD(dirty); > @@ -90,6 +90,9 @@ static void __sgx_sanitize_pages(struct list_head *dirty_page_list) > list_del(&page->list); > sgx_free_epc_page(page); > } else { > + if (verbose) > + pr_err_ratelimited(EREMOVE_ERROR_MESSAGE, ret, ret); > + > /* The page is not yet clean - move to the dirty list. */ > list_move_tail(&page->list, &dirty); > } > @@ -394,8 +397,8 @@ static int ksgxd(void *p) > * Sanitize pages in order to recover from kexec(). The 2nd pass is > * required for SECS pages, whose child pages blocked EREMOVE. > */ > - __sgx_sanitize_pages(&sgx_dirty_page_list); > - __sgx_sanitize_pages(&sgx_dirty_page_list); > + __sgx_sanitize_pages(&sgx_dirty_page_list, false); > + __sgx_sanitize_pages(&sgx_dirty_page_list, true); > > /* sanity check: */ > WARN_ON(!list_empty(&sgx_dirty_page_list)); > -- > 2.37.1 > Should this also print the number of pages not eremoved? That would render out the need for WARN_ON() at call site, and would provide more data. BR, Jarkko
diff --git a/arch/x86/kernel/cpu/sgx/main.c b/arch/x86/kernel/cpu/sgx/main.c index 515e2a5f25bb..33354921c59f 100644 --- a/arch/x86/kernel/cpu/sgx/main.c +++ b/arch/x86/kernel/cpu/sgx/main.c @@ -50,7 +50,7 @@ static LIST_HEAD(sgx_dirty_page_list); * from the input list, and made available for the page allocator. SECS pages * prepending their children in the input list are left intact. */ -static void __sgx_sanitize_pages(struct list_head *dirty_page_list) +static void __sgx_sanitize_pages(struct list_head *dirty_page_list, bool verbose) { struct sgx_epc_page *page; LIST_HEAD(dirty); @@ -90,6 +90,9 @@ static void __sgx_sanitize_pages(struct list_head *dirty_page_list) list_del(&page->list); sgx_free_epc_page(page); } else { + if (verbose) + pr_err_ratelimited(EREMOVE_ERROR_MESSAGE, ret, ret); + /* The page is not yet clean - move to the dirty list. */ list_move_tail(&page->list, &dirty); } @@ -394,8 +397,8 @@ static int ksgxd(void *p) * Sanitize pages in order to recover from kexec(). The 2nd pass is * required for SECS pages, whose child pages blocked EREMOVE. */ - __sgx_sanitize_pages(&sgx_dirty_page_list); - __sgx_sanitize_pages(&sgx_dirty_page_list); + __sgx_sanitize_pages(&sgx_dirty_page_list, false); + __sgx_sanitize_pages(&sgx_dirty_page_list, true); /* sanity check: */ WARN_ON(!list_empty(&sgx_dirty_page_list));
In the 2nd run of __sgx_sanitize_pages() print the error message. All EREMOVE's should succeed. This will allow to provide some additional clues, if not. Cc: Paul Menzel <pmenzel@molgen.mpg.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org> --- arch/x86/kernel/cpu/sgx/main.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)