Messages in this thread | | | Subject | Re: [PATCH] powerpc/32s: Don't flush all TLBs when flushing one page | From | Christophe Leroy <> | Date | Sat, 1 Feb 2020 15:53:12 +0100 |
| |
Le 01/02/2020 à 15:06, Segher Boessenkool a écrit : > On Sat, Feb 01, 2020 at 08:27:03AM +0100, Christophe Leroy wrote: >> Le 31/01/2020 à 20:38, Segher Boessenkool a écrit : >>> On Fri, Jan 31, 2020 at 05:15:20PM +0100, Christophe Leroy wrote: >>>> Le 31/01/2020 à 16:51, Segher Boessenkool a écrit : >>>>> On Fri, Jan 31, 2020 at 03:37:34PM +0000, Christophe Leroy wrote: >>>>>> When the range is a single page, do a page flush instead. >>>>> >>>>>> + start &= PAGE_MASK; >>>>>> + end = (end - 1) | ~PAGE_MASK; >>>>>> if (!Hash) { >>>>>> - _tlbia(); >>>>>> + if (end - start == PAGE_SIZE) >>>>>> + _tlbie(start); >>>>>> + else >>>>>> + _tlbia(); >>>>>> return; >>>>>> } >>>>> >>>>> For just one page, you get end - start == 0 actually? >>>> >>>> Oops, good catch. >>>> >>>> Indeed you don't get PAGE_SIZE but (PAGE_SIZE - 1) for just one page. >>> >>> You have all low bits masked off in both start and end, so you get zero. >>> You could make the condion read "if (start == end)? >> >> No, in end the low bits are set, that's a BIT OR with ~PAGE_MASK, so it >> sets all low bits to 1. > > Oh, wow, yes, I cannot read apparently. > > Maybe there are some ROUND_DOWN and ROUND_UP macros you could use? >
Yes but my intention was to modify the existing code as less as possible. What do you think about version v2 of the patch ?
Christophe
| |