From: Heiko Carstens Date: Fri, 27 Oct 2023 12:12:35 +0000 (+0200) Subject: s390/cmma: cleanup inline assemblies X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=92b519f3bc1c90e098bb3f12d8e739fc56c2d444;p=linux.git s390/cmma: cleanup inline assemblies Cleanup cmma related inline assemblies: - consolidate inline assemblies - use symbolic names - add same white space where missing - add braces to for-loops which contain a multi-line statement Reviewed-by: Claudio Imbrenda Signed-off-by: Heiko Carstens Signed-off-by: Vasily Gorbik --- diff --git a/arch/s390/mm/page-states.c b/arch/s390/mm/page-states.c index a31acb2c4ef24..202dacdf17db0 100644 --- a/arch/s390/mm/page-states.c +++ b/arch/s390/mm/page-states.c @@ -40,7 +40,7 @@ static inline int cmma_test_essa(void) " .insn rrf,0xb9ab0000,%[tmp],%[tmp],%[cmd],0\n" "0: la %[rc],0\n" "1:\n" - EX_TABLE(0b,1b) + EX_TABLE(0b, 1b) : [rc] "+&d" (rc), [tmp] "+&d" (tmp) : [cmd] "i" (ESSA_GET_STATE)); return rc; @@ -58,37 +58,41 @@ void __init cmma_init(void) cmma_flag = 2; } -static inline void set_page_unused(struct page *page, int order) +static __always_inline void essa(unsigned long paddr, unsigned char cmd) { - int i, rc; + unsigned long rc; - for (i = 0; i < (1 << order); i++) - asm volatile(".insn rrf,0xb9ab0000,%0,%1,%2,0" - : "=&d" (rc) - : "a" (page_to_phys(page + i)), - "i" (ESSA_SET_UNUSED)); + asm volatile( + " .insn rrf,0xb9ab0000,%[rc],%[paddr],%[cmd],0" + : [rc] "=d" (rc) + : [paddr] "d" (paddr), + [cmd] "i" (cmd)); } -static inline void set_page_stable_dat(struct page *page, int order) +static __always_inline void __set_page_state(struct page *page, int order, unsigned char cmd) { - int i, rc; + unsigned long paddr = page_to_phys(page); + unsigned long num_pages = 1UL << order; - for (i = 0; i < (1 << order); i++) - asm volatile(".insn rrf,0xb9ab0000,%0,%1,%2,0" - : "=&d" (rc) - : "a" (page_to_phys(page + i)), - "i" (ESSA_SET_STABLE)); + while (num_pages--) { + essa(paddr, cmd); + paddr += PAGE_SIZE; + } } -static inline void set_page_stable_nodat(struct page *page, int order) +static inline void set_page_unused(struct page *page, int order) { - int i, rc; + __set_page_state(page, order, ESSA_SET_UNUSED); +} - for (i = 0; i < (1 << order); i++) - asm volatile(".insn rrf,0xb9ab0000,%0,%1,%2,0" - : "=&d" (rc) - : "a" (page_to_phys(page + i)), - "i" (ESSA_SET_STABLE_NODAT)); +static inline void set_page_stable_dat(struct page *page, int order) +{ + __set_page_state(page, order, ESSA_SET_STABLE); +} + +static inline void set_page_stable_nodat(struct page *page, int order) +{ + __set_page_state(page, order, ESSA_SET_STABLE_NODAT); } static void mark_kernel_pmd(pud_t *pud, unsigned long addr, unsigned long end)