From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MRpfI-0003X6-Di for qemu-devel@nongnu.org; Fri, 17 Jul 2009 11:48:04 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MRpfD-0003Qk-FP for qemu-devel@nongnu.org; Fri, 17 Jul 2009 11:48:03 -0400 Received: from [199.232.76.173] (port=59531 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MRpfD-0003QU-1e for qemu-devel@nongnu.org; Fri, 17 Jul 2009 11:47:59 -0400 Received: from lizzard.sbs.de ([194.138.37.39]:24947) by monty-python.gnu.org with esmtps (TLS-1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1MRpfC-0003j2-4Z for qemu-devel@nongnu.org; Fri, 17 Jul 2009 11:47:58 -0400 Message-ID: <4A609D29.2060701@siemens.com> Date: Fri, 17 Jul 2009 17:47:53 +0200 From: Jan Kiszka MIME-Version: 1.0 References: <1247831508-19023-1-git-send-email-agraf@suse.de> <1247831508-19023-2-git-send-email-agraf@suse.de> <1247831508-19023-3-git-send-email-agraf@suse.de> <1247831508-19023-4-git-send-email-agraf@suse.de> <1247831508-19023-5-git-send-email-agraf@suse.de> <1247831508-19023-6-git-send-email-agraf@suse.de> <1247831508-19023-7-git-send-email-agraf@suse.de> <1247831508-19023-8-git-send-email-agraf@suse.de> <4A608CB5.7000802@siemens.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] Re: [PATCH 7/7] Fake dirty loggin when it's not there List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexander Graf Cc: qemu-devel@nongnu.org, hollisb@us.ibm.com Alexander Graf wrote: > > On 17.07.2009, at 16:37, Jan Kiszka wrote: > >> Alexander Graf wrote: >>> Some KVM platforms don't support dirty logging yet, like IA64 and PPC, >>> so in order to still have screen updates on those, we need to fake it. >>> >>> This patch just tells the getter function for dirty bitmaps, that all >>> pages within a slot are dirty when the slot has dirty logging enabled. >>> >>> That way we can implement dirty logging on those platforms sometime when >>> it drags down performance, but share the rest of the code with dirty >>> logging capable platforms. >>> >>> Signed-off-by: Alexander Graf >>> --- >>> kvm-all.c | 13 ++++++++++++- >>> 1 files changed, 12 insertions(+), 1 deletions(-) >>> >>> diff --git a/kvm-all.c b/kvm-all.c >>> index 60b76cf..72b7935 100644 >>> --- a/kvm-all.c >>> +++ b/kvm-all.c >>> @@ -300,6 +300,7 @@ int >>> kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr, >>> KVMDirtyLog d; >>> KVMSlot *mem; >>> int ret = 0; >>> + int r; >>> >>> d.dirty_bitmap = NULL; >>> while (start_addr < end_addr) { >>> @@ -308,6 +309,11 @@ int >>> kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr, >>> break; >>> } >>> >>> + /* We didn't activate dirty logging? Don't care then. */ >>> + if(!(mem->flags & KVM_MEM_LOG_DIRTY_PAGES)) { >>> + continue; >>> + } >>> + >> >> Isn't this worth a separate patch? Do we already run into this patch on >> dirty-logging archs (ie. x86)? I'm still wondering why it's needed. > > We don't. I'm just being paranoid. > >>> size = ((mem->memory_size >> TARGET_PAGE_BITS) + 7) / 8; >>> if (!d.dirty_bitmap) { >>> d.dirty_bitmap = qemu_malloc(size); >>> @@ -319,7 +325,8 @@ int >>> kvm_physical_sync_dirty_bitmap(target_phys_addr_t start_addr, >>> >>> d.slot = mem->slot; >>> >>> - if (kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d) == -1) { >>> + r = kvm_vm_ioctl(s, KVM_GET_DIRTY_LOG, &d); >>> + if (r == -EINVAL) { >> >> I would say, better exclude 0 and the error you for missing support here >> than to assume only EINVAL is a "real" error. > > Hum, this was the logic that was there before and it makes sense. > -EINVAL is used for errors whole -ENOTSUPP is used for N/A. > Unfortunately -ENOTSUPP is only exported when __KERNEL__ is defined. Uuh, kvm returns a private error code to user space? That would be a bug. So we need a check for the to-be-fixed error code and >= 512. Jan -- Siemens AG, Corporate Technology, CT SE 2 Corporate Competence Center Embedded Linux