lkml.org 
[lkml]   [2018]   [Mar]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v2 2/4] ioremap: Implement TLB_INV before huge mapping
On Thu, Mar 15, 2018 at 06:15:04PM +0530, Chintan Pandya wrote:
> @@ -91,10 +93,15 @@ static inline int ioremap_pmd_range(pud_t *pud, unsigned long addr,
>
> if (ioremap_pmd_enabled() &&
> ((next - addr) == PMD_SIZE) &&
> - IS_ALIGNED(phys_addr + addr, PMD_SIZE) &&
> - pmd_free_pte_page(pmd)) {
> - if (pmd_set_huge(pmd, phys_addr + addr, prot))
> + IS_ALIGNED(phys_addr + addr, PMD_SIZE)) {
> + old_pmd = *pmd;
> + pmd_clear(pmd);
> + flush_tlb_pgtable(&init_mm, addr);
> + if (pmd_set_huge(pmd, phys_addr + addr, prot)) {
> + pmd_free_pte_page(&old_pmd);
> continue;
> + } else
> + set_pmd(pmd, old_pmd);
> }
>

Can we have something like a pmd_can_set_huge() helper? Then we could
avoid pointless modification and TLB invalidation work when
pmd_set_huge() will fail.

if (ioremap_pmd_enabled() &&
((next - addr) == PMD_SIZE) &&
IS_ALIGNED(phys_addr + addr, PMD_SIZE) &&
pmd_can_set_huge(pmd, phys_addr + addr, prot)) {
// clear entries, invalidate TLBs, and free tables
...
continue;

}

Thanks,
MArk.

\
 
 \ /
  Last update: 2018-03-15 14:32    [W:0.203 / U:1.404 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site