From patchwork Sun Sep 15 16:16:39 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marcel Apfelbaum X-Patchwork-Id: 275034 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 753932C0121 for ; Mon, 16 Sep 2013 02:18:32 +1000 (EST) Received: from localhost ([::1]:57257 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLF1p-0003Ug-NK for incoming@patchwork.ozlabs.org; Sun, 15 Sep 2013 12:18:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39767) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLF06-0001Gn-H6 for qemu-devel@nongnu.org; Sun, 15 Sep 2013 12:16:48 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VLF00-0001Dk-Gy for qemu-devel@nongnu.org; Sun, 15 Sep 2013 12:16:42 -0400 Received: from mx1.redhat.com ([209.132.183.28]:43983) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VLF00-0001Db-9O for qemu-devel@nongnu.org; Sun, 15 Sep 2013 12:16:36 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r8FGGYoi023775 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Sun, 15 Sep 2013 12:16:34 -0400 Received: from localhost.tlv.redhat.com (dhcp-4-195.tlv.redhat.com [10.35.4.195]) by int-mx11.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r8FGGTuV024389; Sun, 15 Sep 2013 12:16:32 -0400 From: Marcel Apfelbaum To: qemu-devel@nongnu.org Date: Sun, 15 Sep 2013 19:16:39 +0300 Message-Id: <1379261801-16969-2-git-send-email-marcel.a@redhat.com> In-Reply-To: <1379261801-16969-1-git-send-email-marcel.a@redhat.com> References: <1379261801-16969-1-git-send-email-marcel.a@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.24 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 209.132.183.28 Cc: peter.maydell@linaro.org, aliguori@us.ibm.com, mst@redhat.com, jan.kiszka@siemens.com, pbonzini@redhat.com, afaerber@suse.de Subject: [Qemu-devel] [PATCH v4 1/3] memory: allow MemoryRegion's priority field to accept negative values X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Priority is used to make visible some subregions by obscuring the parent MemoryRegion addresses overlapping with the subregion. By allowing the priority to be negative the opposite can be done: Allow a subregion to be visible on all the addresses not covered by the parent MemoryRegion or other subregions. Signed-off-by: Marcel Apfelbaum Acked-by: Michael S. Tsirkin Reviewed-by: Peter Maydell --- Changes from v3: - Addressed Peter Maydell comments - Removed unnecessary changes to priority of MemoryListener - Ensured that priority is now signed in all related places hw/core/sysbus.c | 4 ++-- include/exec/memory.h | 4 ++-- include/hw/sysbus.h | 2 +- memory.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c index b84cd4a..146f50a 100644 --- a/hw/core/sysbus.c +++ b/hw/core/sysbus.c @@ -49,7 +49,7 @@ void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq) } static void sysbus_mmio_map_common(SysBusDevice *dev, int n, hwaddr addr, - bool may_overlap, unsigned priority) + bool may_overlap, int priority) { assert(n >= 0 && n < dev->num_mmio); @@ -81,7 +81,7 @@ void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr addr) } void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr, - unsigned priority) + int priority) { sysbus_mmio_map_common(dev, n, addr, true, priority); } diff --git a/include/exec/memory.h b/include/exec/memory.h index ebe0d24..480dfbf 100644 --- a/include/exec/memory.h +++ b/include/exec/memory.h @@ -153,7 +153,7 @@ struct MemoryRegion { bool flush_coalesced_mmio; MemoryRegion *alias; hwaddr alias_offset; - unsigned priority; + int priority; bool may_overlap; QTAILQ_HEAD(subregions, MemoryRegion) subregions; QTAILQ_ENTRY(MemoryRegion) subregions_link; @@ -779,7 +779,7 @@ void memory_region_add_subregion(MemoryRegion *mr, void memory_region_add_subregion_overlap(MemoryRegion *mr, hwaddr offset, MemoryRegion *subregion, - unsigned priority); + int priority); /** * memory_region_get_ram_addr: Get the ram address associated with a memory diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h index bb50a87..f5aaa05 100644 --- a/include/hw/sysbus.h +++ b/include/hw/sysbus.h @@ -68,7 +68,7 @@ void sysbus_init_ioports(SysBusDevice *dev, pio_addr_t ioport, pio_addr_t size); void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq); void sysbus_mmio_map(SysBusDevice *dev, int n, hwaddr addr); void sysbus_mmio_map_overlap(SysBusDevice *dev, int n, hwaddr addr, - unsigned priority); + int priority); void sysbus_add_io(SysBusDevice *dev, hwaddr addr, MemoryRegion *mem); void sysbus_del_io(SysBusDevice *dev, MemoryRegion *mem); diff --git a/memory.c b/memory.c index 5a10fd0..f49d31a 100644 --- a/memory.c +++ b/memory.c @@ -1473,7 +1473,7 @@ void memory_region_add_subregion(MemoryRegion *mr, void memory_region_add_subregion_overlap(MemoryRegion *mr, hwaddr offset, MemoryRegion *subregion, - unsigned priority) + int priority) { subregion->may_overlap = true; subregion->priority = priority; @@ -1506,7 +1506,7 @@ void memory_region_set_enabled(MemoryRegion *mr, bool enabled) void memory_region_set_address(MemoryRegion *mr, hwaddr addr) { MemoryRegion *parent = mr->parent; - unsigned priority = mr->priority; + int priority = mr->priority; bool may_overlap = mr->may_overlap; if (addr == mr->addr || !parent) {