On 07/26/2011 06:41 PM, Richard Henderson wrote:
On 07/26/2011 04:36 AM, Paolo Bonzini wrote:
> On 07/26/2011 01:26 PM, Avi Kivity wrote:
>> +while (i< view->nr) {
>> +j = i + 1;
>> +while (j< view->nr
>> +&& can_merge(&view->ranges[j-1],&view->ranges[j])) {
>> +
On 07/26/2011 04:36 AM, Paolo Bonzini wrote:
> On 07/26/2011 01:26 PM, Avi Kivity wrote:
>> +while (i < view->nr) {
>> +j = i + 1;
>> +while (j < view->nr
>> + && can_merge(&view->ranges[j-1], &view->ranges[j])) {
>> +view->ranges[i].addr.size += view->
On 07/26/2011 02:51 PM, Paolo Bonzini wrote:
On 07/26/2011 01:38 PM, Avi Kivity wrote:
if (j != i) {
+memmove(&view->ranges[i], &view->ranges[j],
+(view->nr - j) * sizeof(view->ranges[j]));
+view->nr -= j - i;
+}
}
Seems to work both ways?
Sure, but y
On 07/26/2011 01:38 PM, Avi Kivity wrote:
if (j != i) {
+memmove(&view->ranges[i], &view->ranges[j],
+(view->nr - j) * sizeof(view->ranges[j]));
+view->nr -= j - i;
+}
}
Seems to work both ways?
Sure, but you're pointlessly memmove-ing memory over itse
On 07/26/2011 02:36 PM, Paolo Bonzini wrote:
On 07/26/2011 01:26 PM, Avi Kivity wrote:
+while (i < view->nr) {
+j = i + 1;
+while (j < view->nr
+ && can_merge(&view->ranges[j-1], &view->ranges[j])) {
+view->ranges[i].addr.size += view->ranges[j].addr.size;
+
On 07/26/2011 01:26 PM, Avi Kivity wrote:
+while (i < view->nr) {
+j = i + 1;
+while (j < view->nr
+ && can_merge(&view->ranges[j-1], &view->ranges[j])) {
+view->ranges[i].addr.size += view->ranges[j].addr.size;
+++j;
+}
++
Simple implementations of memory routers, for example the Cirrus VGA memory
banks
or the 440FX PAM registers can generate adjacent memory regions which are
contiguous.
Detect these and merge them; this saves kvm memory slots and shortens lookup
times.
Signed-off-by: Avi Kivity
---
memory.c |