From mboxrd@z Thu Jan 1 00:00:00 1970 From: Takuya Yoshikawa Subject: Re: [PATCH RFC 2/5] KVM: use a rapper function to calculate the sizes of dirty bitmaps Date: Mon, 12 Apr 2010 10:53:54 +0900 Message-ID: <4BC27D32.4020001@oss.ntt.co.jp> References: <20100409182732.857de4db.yoshikawa.takuya@oss.ntt.co.jp> <20100409183242.caa4e304.yoshikawa.takuya@oss.ntt.co.jp> <4BC202E9.6060300@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: mtosatti@redhat.com, kvm@vger.kernel.org, fernando@oss.ntt.co.jp To: Avi Kivity Return-path: Received: from serv2.oss.ntt.co.jp ([222.151.198.100]:43800 "EHLO serv2.oss.ntt.co.jp" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751065Ab0DLBut (ORCPT ); Sun, 11 Apr 2010 21:50:49 -0400 In-Reply-To: <4BC202E9.6060300@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: (2010/04/12 2:12), Avi Kivity wrote: > On 04/09/2010 12:32 PM, Takuya Yoshikawa wrote: >> We will use this later in other parts. >> > > s/rapper/wrapper/... Oh, my poor English, sorry. > >> >> +static inline int kvm_dirty_bitmap_bytes(struct kvm_memory_slot >> *memslot) >> +{ >> + return ALIGN(memslot->npages, BITS_PER_LONG) / 8; >> +} >> + > > 'int' may overflow. Then, we have to fix a bit more. In mark_page_dirty(), we pass unsigned long rel_gfn to __set_bit(), but __set_bit() takes the offset as int. We have to shift the base before using __set_bit(). I'll send this as a separate bug fix. > >> struct kvm_kernel_irq_routing_entry { >> u32 gsi; >> u32 type; >> diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c >> index 9379533..5ab581e 100644 >> --- a/virt/kvm/kvm_main.c >> +++ b/virt/kvm/kvm_main.c >> @@ -645,7 +645,7 @@ skip_lpage: >> >> /* Allocate page dirty bitmap if needed */ >> if ((new.flags& KVM_MEM_LOG_DIRTY_PAGES)&& !new.dirty_bitmap) { >> - unsigned dirty_bytes = ALIGN(npages, BITS_PER_LONG) / 8; >> + int dirty_bytes = kvm_dirty_bitmap_bytes(&new); > > Ah, an existing bug. >