memory: Change MemoryRegion priorities from unsigned to signed
When memory regions overlap, priority can be used to specify which of them takes priority. By making the priority values signed rather than unsigned, we make it more convenient to implement a situation where one "background" region should appear only where no other region exists: rather than having to explicitly specify a high priority for all the other regions, we can let them take the default (zero) priority and specify a negative priority for the background region. Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Marcel Apfelbaum <marcel.a@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
e26d3e7346
commit
a1ff8ae066
@ -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);
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
4
memory.c
4
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) {
|
||||
|
Loading…
Reference in New Issue
Block a user