From patchwork Sun May 17 15:43:11 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony Liguori X-Patchwork-Id: 24323 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n4HFhjQn013021 for ; Sun, 17 May 2009 15:43:46 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754731AbZEQPnn (ORCPT ); Sun, 17 May 2009 11:43:43 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1754253AbZEQPnk (ORCPT ); Sun, 17 May 2009 11:43:40 -0400 Received: from e7.ny.us.ibm.com ([32.97.182.137]:44905 "EHLO e7.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754444AbZEQPnh (ORCPT ); Sun, 17 May 2009 11:43:37 -0400 Received: from d01relay02.pok.ibm.com (d01relay02.pok.ibm.com [9.56.227.234]) by e7.ny.us.ibm.com (8.13.1/8.13.1) with ESMTP id n4HFWPWM023698 for ; Sun, 17 May 2009 11:32:25 -0400 Received: from d01av02.pok.ibm.com (d01av02.pok.ibm.com [9.56.224.216]) by d01relay02.pok.ibm.com (8.13.8/8.13.8/NCO v9.2) with ESMTP id n4HFhcGm245664 for ; Sun, 17 May 2009 11:43:38 -0400 Received: from d01av02.pok.ibm.com (loopback [127.0.0.1]) by d01av02.pok.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id n4HFfcQ9030463 for ; Sun, 17 May 2009 11:41:38 -0400 Received: from localhost.localdomain (sig-9-65-8-189.mts.ibm.com [9.65.8.189]) by d01av02.pok.ibm.com (8.12.11.20060308/8.12.11) with ESMTP id n4HFfPcW030035; Sun, 17 May 2009 11:41:37 -0400 From: Anthony Liguori To: kvm@vger.kernel.org Cc: Glauber Costa , Avi Kivity , Anthony Liguori Subject: [PATCH 10/17] Support unregistering memory regions larger than a slot Date: Sun, 17 May 2009 10:43:11 -0500 Message-Id: <1242574999-20887-11-git-send-email-aliguori@us.ibm.com> X-Mailer: git-send-email 1.6.0.6 In-Reply-To: <1242574999-20887-1-git-send-email-aliguori@us.ibm.com> References: <1242574999-20887-1-git-send-email-aliguori@us.ibm.com> Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org From: Avi Kivity Unbreaks vga text mode after switching from graphics mode. Signed-off-by: Avi Kivity Signed-off-by: Anthony Liguori diff --git a/qemu-kvm.c b/qemu-kvm.c index fab00ac..10e2caa 100644 --- a/qemu-kvm.c +++ b/qemu-kvm.c @@ -889,14 +889,15 @@ void kvm_cpu_register_physical_memory(target_phys_addr_t start_addr, unsigned long phys_offset) { int r = 0; - unsigned long area_flags = phys_offset & ~TARGET_PAGE_MASK; + unsigned long area_flags; #ifdef TARGET_I386 struct mapping *p; #endif phys_offset &= ~IO_MEM_ROM; + area_flags = phys_offset & ~TARGET_PAGE_MASK; - if (area_flags == IO_MEM_UNASSIGNED) { + if (area_flags != IO_MEM_RAM) { #ifdef TARGET_I386 if (must_use_aliases_source(start_addr)) { kvm_destroy_memory_alias(kvm_context, start_addr); @@ -905,7 +906,19 @@ void kvm_cpu_register_physical_memory(target_phys_addr_t start_addr, if (must_use_aliases_target(start_addr)) return; #endif - kvm_unregister_memory_area(kvm_context, start_addr, size); + while (size > 0) { + p = find_mapping(start_addr); + if (p) { + kvm_unregister_memory_area(kvm_context, p->phys, p->len); + drop_mapping(p->phys); + } + start_addr += TARGET_PAGE_SIZE; + if (size > TARGET_PAGE_SIZE) { + size -= TARGET_PAGE_SIZE; + } else { + size = 0; + } + } return; }