Re: [PATCH 7/8] mm: use vm_unmapped_area() on powerpc architecture
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2013-01-09 03:33:27
Also in:
linux-alpha, linux-mm, lkml
From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2013-01-09 03:33:27
Also in:
linux-alpha, linux-mm, lkml
On Tue, 2013-01-08 at 18:38 -0800, Michel Lespinasse wrote:
Well no fair, the previous patch (for powerpc as well) has 22 insertions and 93 deletions :) The benefit is that the new code has lower algorithmic complexity, it replaces a per-vma loop with O(N) complexity with an outer loop that finds contiguous slice blocks and passes them to vm_unmapped_area() which is only O(log N) complexity. So the new code will be faster for workloads which use lots of vmas. That said, I do agree that the code that looks for contiguous available slices looks kinda ugly - just not sure how to make it look nicer though.
Ok. I think at least you can move that construct:
+ if (addr < SLICE_LOW_TOP) {
+ slice = GET_LOW_SLICE_INDEX(addr);
+ addr = (slice + 1) << SLICE_LOW_SHIFT;
+ if (!(available.low_slices & (1u << slice)))
+ continue;
+ } else {
+ slice = GET_HIGH_SLICE_INDEX(addr);
+ addr = (slice + 1) << SLICE_HIGH_SHIFT;
+ if (!(available.high_slices & (1u << slice)))
+ continue;
+ }
Into some kind of helper. It will probably compile to the same thing but
at least it's more readable and it will avoid a fuckup in the future if
somebody changes the algorithm and forgets to update one of the
copies :-)
Cheers,
Ben.