]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
core/configs: Change IRQ line access control modeling
authorJan Kiszka <jan.kiszka@siemens.com>
Mon, 2 Jun 2014 10:11:27 +0000 (12:11 +0200)
committerJan Kiszka <jan.kiszka@siemens.com>
Tue, 17 Jun 2014 15:35:27 +0000 (17:35 +0200)
Change the configuration file to manage access to IRQ lines at IRQ chip
level. Each IRQ chip config entry consists an address, typically the
chip's MMIO address, a unique identifier that will be used for interrupt
remapping on x86, and a bitmap controlling access to individual IRQ pins
of that chip. This will simplify access control checks to IRQ chips.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
configs/apic-demo.c
configs/celsius-w420.c
configs/chromebook.c
configs/h700-8G.c
configs/h87i.c
configs/qemu-vm.c
configs/tiny-demo.c
hypervisor/include/jailhouse/cell-config.h

index 479aca2791ef25238aa2b565977b79bab3ba785d..cdc47c96719be1641b873610bb6d586cd0b8f3c2 100644 (file)
@@ -28,7 +28,7 @@ struct {
 
                .cpu_set_size = sizeof(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-               .num_irq_lines = 0,
+               .num_irqchips = 0,
                .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                .num_pci_devices = 0,
        },
index 707168386c2263fd1597960cb16afa7b82dca6b3..f130117ae1c69cdf3c1c813241ac889c5108107b 100644 (file)
@@ -40,7 +40,7 @@ struct {
 
                        .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-                       .num_irq_lines = 0,
+                       .num_irqchips = 0,
                        .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                },
index 55d6e8ce1487b2e40b59105ae97843982bc1660b..65194ab2b7f26dd6fb3aa988209bfbf3f444d276 100644 (file)
@@ -32,7 +32,7 @@ struct {
 
                        .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-                       .num_irq_lines = 0,
+                       .num_irqchips = 0,
                        .pio_bitmap_size = 0,
 
                        .num_pci_devices = 0,
index 63b23cd53f0412f07c7589999afb0a58b76d7ca4..4cfa23e580792b7ec65bff3082817f9c78d7eba6 100644 (file)
@@ -38,7 +38,7 @@ struct {
 
                        .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-                       .num_irq_lines = 0,
+                       .num_irqchips = 0,
                        .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                },
index 4ceeeb17fa6abadce05945951eeebf9dd27d7ba3..ce00fbbd92502dd1ef74de724cb57610b230c5c1 100644 (file)
@@ -38,7 +38,7 @@ struct {
 
                        .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-                       .num_irq_lines = 0,
+                       .num_irqchips = 0,
                        .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                },
index 493db001d5bf42bdae1d3c0499f20b0c05d5041a..20ee8aceb06a713d89d5cabf47424d789f9b3f7b 100644 (file)
@@ -42,7 +42,7 @@ struct {
 
                        .cpu_set_size = sizeof(config.cpus),
                        .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-                       .num_irq_lines = 0,
+                       .num_irqchips = 0,
                        .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                        .num_pci_devices = ARRAY_SIZE(config.pci_devices),
                },
index 6c09a2bea2c8f7199e796273e9a1f9f7f2e5f98a..9edd8f758e9ab56da31667cc8acca6bb5b2e2cf9 100644 (file)
@@ -29,7 +29,7 @@ struct {
 
                .cpu_set_size = sizeof(config.cpus),
                .num_memory_regions = ARRAY_SIZE(config.mem_regions),
-               .num_irq_lines = 0,
+               .num_irqchips = 0,
                .pio_bitmap_size = ARRAY_SIZE(config.pio_bitmap),
                .num_pci_devices = 0,
        },
index ebc27e5407b5613aeed81f7330a3217159405548..8df0b0ea295c33f0d130a8d2fb28e13eb560e314 100644 (file)
@@ -23,7 +23,7 @@ struct jailhouse_cell_desc {
 
        __u32 cpu_set_size;
        __u32 num_memory_regions;
-       __u32 num_irq_lines;
+       __u32 num_irqchips;
        __u32 pio_bitmap_size;
        __u32 num_pci_devices;
 } __attribute__((packed));
@@ -49,9 +49,10 @@ struct jailhouse_memory {
        __u64 flags;
 } __attribute__((packed));
 
-struct jailhouse_irq_line {
-       __u32 num;
-       __u32 irqchip;
+struct jailhouse_irqchip {
+       __u64 address;
+       __u64 id;
+       __u64 pin_bitmap;
 } __attribute__((packed));
 
 #define JAILHOUSE_PCI_TYPE_DEVICE      0x01
@@ -76,7 +77,7 @@ jailhouse_cell_config_size(struct jailhouse_cell_desc *cell)
        return sizeof(struct jailhouse_cell_desc) +
                cell->cpu_set_size +
                cell->num_memory_regions * sizeof(struct jailhouse_memory) +
-               cell->num_irq_lines * sizeof(struct jailhouse_irq_line) +
+               cell->num_irqchips * sizeof(struct jailhouse_irqchip) +
                cell->pio_bitmap_size +
                cell->num_pci_devices * sizeof(struct jailhouse_pci_device);
 }
@@ -103,13 +104,21 @@ jailhouse_cell_mem_regions(const struct jailhouse_cell_desc *cell)
                sizeof(struct jailhouse_cell_desc) + cell->cpu_set_size);
 }
 
+static inline const struct jailhouse_irqchip *
+jailhouse_cell_irqchips(const struct jailhouse_cell_desc *cell)
+{
+       return (const struct jailhouse_irqchip *)((void *)cell +
+               sizeof(struct jailhouse_cell_desc) + cell->cpu_set_size +
+               cell->num_memory_regions * sizeof(struct jailhouse_memory));
+}
+
 static inline const __u8 *
 jailhouse_cell_pio_bitmap(const struct jailhouse_cell_desc *cell)
 {
        return (const __u8 *)((void *)cell +
                sizeof(struct jailhouse_cell_desc) + cell->cpu_set_size +
                cell->num_memory_regions * sizeof(struct jailhouse_memory) +
-               cell->num_irq_lines * sizeof(struct jailhouse_irq_line));
+               cell->num_irqchips * sizeof(struct jailhouse_irqchip));
 }
 
 static inline const struct jailhouse_pci_device *
@@ -118,7 +127,7 @@ jailhouse_cell_pci_devices(const struct jailhouse_cell_desc *cell)
        return (const struct jailhouse_pci_device *)((void *)cell +
                sizeof(struct jailhouse_cell_desc) + cell->cpu_set_size +
                cell->num_memory_regions * sizeof(struct jailhouse_memory) +
-               cell->num_irq_lines * sizeof(struct jailhouse_irq_line) +
+               cell->num_irqchips * sizeof(struct jailhouse_irqchip) +
                cell->pio_bitmap_size);
 }