Subject: Re: [patch 2/2] mm: use vm_unmapped_area() on powerpc architecture

From: "Aneesh Kumar K.V" <[email-masked]>
Date: Mon, 18 Mar 2013 17:57:44 +0530

Michel Lespinasse <[email-masked]> writes:

> On Mon, Mar 18, 2013 at 4:12 AM, Aneesh Kumar K.V
> <[email-masked]> wrote:
>> how about  ?
>>
>> static bool slice_scan_available(unsigned long addr,
>>                                  struct slice_mask available,
>>                                  int end,
>>                                  unsigned long *boundary_addr)
>> {
>>         unsigned long slice;
>>         if (addr < SLICE_LOW_TOP) {
>>                 slice = GET_LOW_SLICE_INDEX(addr);
>>                 *boundary_addr = (slice + end) << SLICE_LOW_SHIFT;
>>                 return !!(available.low_slices & (1u << slice));
>>         } else {
>>                 slice = GET_HIGH_SLICE_INDEX(addr);
>
>>                 if ((slice + end) >= SLICE_NUM_HIGH)
>>                         /* loop back in the high slice */
>>                         *boundary_addr = SLICE_LOW_TOP;
>>                 else
>>                         *boundary_addr = (slice + end) << SLICE_HIGH_SHIFT;
>
> I don't mind having this section as an if..else rather than ?:
> statement. However, the condition would need to be if (slice == 0 &&
> end == 0) or if (slice + end == 0)
>
> This is because the beginning of high slice 0 is at SLICE_LOW_TOP and not at 0,
> and the end of high slice 63 is at 64TB not at SLICE_LOW_TOP.
>

aha, I missed the fact that it was to handle slice = 0 && end == 0
case. I was looking it as looping back to start slice in high slice
range once we reached 0xffffffff. Above slice 63 in high slice, we
should have available always unset, so beyond that we can ideally
loop back to SLICE_LOW_TOP right ?

-aneesh