Commit a2767cfb authored by Matt Fleming's avatar Matt Fleming Committed by Paul Mundt

sh: Don't allocate smaller sized mappings on every iteration

Currently, we've got the less than ideal situation where if we need to
allocate a 256MB mapping we'll allocate four entries like so,

	 entry 1: 128MB
	 entry 2:  64MB
	 entry 3:  16MB
	 entry 4:  16MB

This is because as we execute the loop in pmb_remap() we will
progressively try mapping the remaining address space with smaller and
smaller sizes. This isn't good because the size we use on one iteration
may be the perfect size to use on the next iteration, for instance when
the initial size is divisible by one of the PMB mapping sizes.

With this patch, we now only need two entries in the PMB to map 256MB of
address space,

	  entry 1: 128MB
	  entry 2: 128MB
Signed-off-by: default avatarMatt Fleming <matt@console-pimps.org>
Signed-off-by: default avatarPaul Mundt <lethal@linux-sh.org>
parent 2bea7ea7
...@@ -269,6 +269,13 @@ long pmb_remap(unsigned long vaddr, unsigned long phys, ...@@ -269,6 +269,13 @@ long pmb_remap(unsigned long vaddr, unsigned long phys,
pmbp->link = pmbe; pmbp->link = pmbe;
pmbp = pmbe; pmbp = pmbe;
/*
* Instead of trying smaller sizes on every iteration
* (even if we succeed in allocating space), try using
* pmb_sizes[i].size again.
*/
i--;
} }
if (size >= 0x1000000) if (size >= 0x1000000)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment