* [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() @ 2020-10-15 19:46 Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 1/2] hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument Philippe Mathieu-Daudé ` (2 more replies) 0 siblings, 3 replies; 6+ messages in thread From: Philippe Mathieu-Daudé @ 2020-10-15 19:46 UTC (permalink / raw) To: qemu-devel Cc: qemu-trivial, Mark Cave-Ayland, Philippe Mathieu-Daudé, Hervé Poussineau, qemu-ppc, Artyom Tarasenko, David Gibson Since v1: - Do not remove mem_base in patch 1 (Laurent) - Pass MemoryRegion* (new patch) - Run check-qtest Philippe Mathieu-Daudé (2): hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument include/hw/rtc/m48t59.h | 5 ++--- hw/ppc/ppc405_boards.c | 2 +- hw/rtc/m48t59.c | 14 +++----------- hw/sparc/sun4m.c | 3 ++- hw/sparc64/sun4u.c | 7 ++----- 5 files changed, 10 insertions(+), 21 deletions(-) -- 2.26.2 ^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument 2020-10-15 19:46 [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Philippe Mathieu-Daudé @ 2020-10-15 19:46 ` Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 2/2] hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument Philippe Mathieu-Daudé 2020-10-16 9:38 ` [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Mark Cave-Ayland 2 siblings, 0 replies; 6+ messages in thread From: Philippe Mathieu-Daudé @ 2020-10-15 19:46 UTC (permalink / raw) To: qemu-devel Cc: qemu-trivial, Mark Cave-Ayland, Philippe Mathieu-Daudé, Hervé Poussineau, qemu-ppc, Artyom Tarasenko, David Gibson As the 'io_base' argument of m48t59_init() is unused (set to 0), remove it to simplify. To create a device on the ISA bus, m48t59_init_isa() is the preferred function to use. Acked-by: David Gibson <david@gibson.dropbear.id.au> Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- include/hw/rtc/m48t59.h | 3 +-- hw/ppc/ppc405_boards.c | 2 +- hw/rtc/m48t59.c | 6 +----- hw/sparc/sun4m.c | 2 +- hw/sparc64/sun4u.c | 2 +- 5 files changed, 5 insertions(+), 10 deletions(-) diff --git a/include/hw/rtc/m48t59.h b/include/hw/rtc/m48t59.h index 04abedf3b2b..d99dda2b7de 100644 --- a/include/hw/rtc/m48t59.h +++ b/include/hw/rtc/m48t59.h @@ -50,7 +50,6 @@ struct NvramClass { Nvram *m48t59_init_isa(ISABus *bus, uint32_t io_base, uint16_t size, int base_year, int type); Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, - uint32_t io_base, uint16_t size, int base_year, - int type); + uint16_t size, int base_year, int model); #endif /* HW_M48T59_H */ diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c index 6198ec1035b..93ffee801a3 100644 --- a/hw/ppc/ppc405_boards.c +++ b/hw/ppc/ppc405_boards.c @@ -227,7 +227,7 @@ static void ref405ep_init(MachineState *machine) /* Register FPGA */ ref405ep_fpga_init(sysmem, 0xF0300000); /* Register NVRAM */ - m48t59_init(NULL, 0xF0000000, 0, 8192, 1968, 8); + m48t59_init(NULL, 0xF0000000, 8192, 1968, 8); /* Load kernel */ linux_boot = (kernel_filename != NULL); if (linux_boot) { diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c index 6525206976b..8b02c2ec558 100644 --- a/hw/rtc/m48t59.c +++ b/hw/rtc/m48t59.c @@ -566,7 +566,7 @@ const MemoryRegionOps m48t59_io_ops = { /* Initialisation routine */ Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, - uint32_t io_base, uint16_t size, int base_year, + uint16_t size, int base_year, int model) { DeviceState *dev; @@ -584,10 +584,6 @@ Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, s = SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(s, &error_fatal); sysbus_connect_irq(s, 0, IRQ); - if (io_base != 0) { - memory_region_add_subregion(get_system_io(), io_base, - sysbus_mmio_get_region(s, 1)); - } if (mem_base != 0) { sysbus_mmio_map(s, 0, mem_base); } diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 54a2b2f9ef3..20c1fa41192 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -966,7 +966,7 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, create_unimplemented_device("SUNW,sx", hwdef->sx_base, 0x2000); } - nvram = m48t59_init(slavio_irq[0], hwdef->nvram_base, 0, 0x2000, 1968, 8); + nvram = m48t59_init(slavio_irq[0], hwdef->nvram_base, 0x2000, 1968, 8); slavio_timer_init_all(hwdef->counter_base, slavio_irq[19], slavio_cpu_irq, smp_cpus); diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index ad5ca2472a4..6854522bbfa 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -671,7 +671,7 @@ static void sun4uv_init(MemoryRegion *address_space_mem, pci_ide_create_devs(pci_dev); /* Map NVRAM into I/O (ebus) space */ - nvram = m48t59_init(NULL, 0, 0, NVRAM_SIZE, 1968, 59); + nvram = m48t59_init(NULL, 0, NVRAM_SIZE, 1968, 59); s = SYS_BUS_DEVICE(nvram); memory_region_add_subregion(pci_address_space_io(ebus), 0x2000, sysbus_mmio_get_region(s, 0)); -- 2.26.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument 2020-10-15 19:46 [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 1/2] hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument Philippe Mathieu-Daudé @ 2020-10-15 19:46 ` Philippe Mathieu-Daudé 2020-10-16 0:44 ` David Gibson 2020-10-16 9:38 ` [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Mark Cave-Ayland 2 siblings, 1 reply; 6+ messages in thread From: Philippe Mathieu-Daudé @ 2020-10-15 19:46 UTC (permalink / raw) To: qemu-devel Cc: qemu-trivial, Mark Cave-Ayland, Philippe Mathieu-Daudé, Hervé Poussineau, qemu-ppc, Artyom Tarasenko, David Gibson Pass a MemoryRegion* to m48t59_init(), directly call memory_region_add_subregion() instead of sysbus_mmio_map(). Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> --- include/hw/rtc/m48t59.h | 2 +- hw/ppc/ppc405_boards.c | 2 +- hw/rtc/m48t59.c | 10 +++------- hw/sparc/sun4m.c | 3 ++- hw/sparc64/sun4u.c | 7 ++----- 5 files changed, 9 insertions(+), 15 deletions(-) diff --git a/include/hw/rtc/m48t59.h b/include/hw/rtc/m48t59.h index d99dda2b7de..3c337e8171c 100644 --- a/include/hw/rtc/m48t59.h +++ b/include/hw/rtc/m48t59.h @@ -49,7 +49,7 @@ struct NvramClass { Nvram *m48t59_init_isa(ISABus *bus, uint32_t io_base, uint16_t size, int base_year, int type); -Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, +Nvram *m48t59_init(MemoryRegion *mr, hwaddr mem_base, qemu_irq IRQ, uint16_t size, int base_year, int model); #endif /* HW_M48T59_H */ diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c index 93ffee801a3..6ab1b860545 100644 --- a/hw/ppc/ppc405_boards.c +++ b/hw/ppc/ppc405_boards.c @@ -227,7 +227,7 @@ static void ref405ep_init(MachineState *machine) /* Register FPGA */ ref405ep_fpga_init(sysmem, 0xF0300000); /* Register NVRAM */ - m48t59_init(NULL, 0xF0000000, 8192, 1968, 8); + m48t59_init(get_system_memory(), 0xF0000000, NULL, 8192, 1968, 8); /* Load kernel */ linux_boot = (kernel_filename != NULL); if (linux_boot) { diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c index 8b02c2ec558..7ec4b241218 100644 --- a/hw/rtc/m48t59.c +++ b/hw/rtc/m48t59.c @@ -565,9 +565,8 @@ const MemoryRegionOps m48t59_io_ops = { }; /* Initialisation routine */ -Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, - uint16_t size, int base_year, - int model) +Nvram *m48t59_init(MemoryRegion *mr, hwaddr mem_base, qemu_irq IRQ, + uint16_t size, int base_year, int model) { DeviceState *dev; SysBusDevice *s; @@ -584,10 +583,7 @@ Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, s = SYS_BUS_DEVICE(dev); sysbus_realize_and_unref(s, &error_fatal); sysbus_connect_irq(s, 0, IRQ); - if (mem_base != 0) { - sysbus_mmio_map(s, 0, mem_base); - } - + memory_region_add_subregion(mr, mem_base, sysbus_mmio_get_region(s, 0)); return NVRAM(s); } diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c index 20c1fa41192..aebe9e0df3d 100644 --- a/hw/sparc/sun4m.c +++ b/hw/sparc/sun4m.c @@ -966,7 +966,8 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, create_unimplemented_device("SUNW,sx", hwdef->sx_base, 0x2000); } - nvram = m48t59_init(slavio_irq[0], hwdef->nvram_base, 0x2000, 1968, 8); + nvram = m48t59_init(get_system_memory(), hwdef->nvram_base, slavio_irq[0], + 0x2000, 1968, 8); slavio_timer_init_all(hwdef->counter_base, slavio_irq[19], slavio_cpu_irq, smp_cpus); diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c index 6854522bbfa..4c975c25274 100644 --- a/hw/sparc64/sun4u.c +++ b/hw/sparc64/sun4u.c @@ -561,7 +561,6 @@ static void sun4uv_init(MemoryRegion *address_space_mem, SabreState *sabre; PCIBus *pci_bus, *pci_busA, *pci_busB; PCIDevice *ebus, *pci_dev; - SysBusDevice *s; DeviceState *iommu, *dev; FWCfgState *fw_cfg; NICInfo *nd; @@ -671,10 +670,8 @@ static void sun4uv_init(MemoryRegion *address_space_mem, pci_ide_create_devs(pci_dev); /* Map NVRAM into I/O (ebus) space */ - nvram = m48t59_init(NULL, 0, NVRAM_SIZE, 1968, 59); - s = SYS_BUS_DEVICE(nvram); - memory_region_add_subregion(pci_address_space_io(ebus), 0x2000, - sysbus_mmio_get_region(s, 0)); + nvram = m48t59_init(pci_address_space_io(ebus), 0x2000, NULL, + NVRAM_SIZE, 1968, 59); initrd_size = 0; initrd_addr = 0; -- 2.26.2 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument 2020-10-15 19:46 ` [PATCH v2 2/2] hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument Philippe Mathieu-Daudé @ 2020-10-16 0:44 ` David Gibson 0 siblings, 0 replies; 6+ messages in thread From: David Gibson @ 2020-10-16 0:44 UTC (permalink / raw) To: Philippe Mathieu-Daudé Cc: qemu-trivial, Mark Cave-Ayland, qemu-devel, Hervé Poussineau, qemu-ppc, Artyom Tarasenko [-- Attachment #1: Type: text/plain, Size: 4610 bytes --] On Thu, Oct 15, 2020 at 09:46:47PM +0200, Philippe Mathieu-Daudé wrote: > Pass a MemoryRegion* to m48t59_init(), directly call > memory_region_add_subregion() instead of sysbus_mmio_map(). > > Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org> ppc parts Acked-by: David Gibson <david@gibson.dropbear.id.au> > --- > include/hw/rtc/m48t59.h | 2 +- > hw/ppc/ppc405_boards.c | 2 +- > hw/rtc/m48t59.c | 10 +++------- > hw/sparc/sun4m.c | 3 ++- > hw/sparc64/sun4u.c | 7 ++----- > 5 files changed, 9 insertions(+), 15 deletions(-) > > diff --git a/include/hw/rtc/m48t59.h b/include/hw/rtc/m48t59.h > index d99dda2b7de..3c337e8171c 100644 > --- a/include/hw/rtc/m48t59.h > +++ b/include/hw/rtc/m48t59.h > @@ -49,7 +49,7 @@ struct NvramClass { > > Nvram *m48t59_init_isa(ISABus *bus, uint32_t io_base, uint16_t size, > int base_year, int type); > -Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, > +Nvram *m48t59_init(MemoryRegion *mr, hwaddr mem_base, qemu_irq IRQ, > uint16_t size, int base_year, int model); > > #endif /* HW_M48T59_H */ > diff --git a/hw/ppc/ppc405_boards.c b/hw/ppc/ppc405_boards.c > index 93ffee801a3..6ab1b860545 100644 > --- a/hw/ppc/ppc405_boards.c > +++ b/hw/ppc/ppc405_boards.c > @@ -227,7 +227,7 @@ static void ref405ep_init(MachineState *machine) > /* Register FPGA */ > ref405ep_fpga_init(sysmem, 0xF0300000); > /* Register NVRAM */ > - m48t59_init(NULL, 0xF0000000, 8192, 1968, 8); > + m48t59_init(get_system_memory(), 0xF0000000, NULL, 8192, 1968, 8); > /* Load kernel */ > linux_boot = (kernel_filename != NULL); > if (linux_boot) { > diff --git a/hw/rtc/m48t59.c b/hw/rtc/m48t59.c > index 8b02c2ec558..7ec4b241218 100644 > --- a/hw/rtc/m48t59.c > +++ b/hw/rtc/m48t59.c > @@ -565,9 +565,8 @@ const MemoryRegionOps m48t59_io_ops = { > }; > > /* Initialisation routine */ > -Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, > - uint16_t size, int base_year, > - int model) > +Nvram *m48t59_init(MemoryRegion *mr, hwaddr mem_base, qemu_irq IRQ, > + uint16_t size, int base_year, int model) > { > DeviceState *dev; > SysBusDevice *s; > @@ -584,10 +583,7 @@ Nvram *m48t59_init(qemu_irq IRQ, hwaddr mem_base, > s = SYS_BUS_DEVICE(dev); > sysbus_realize_and_unref(s, &error_fatal); > sysbus_connect_irq(s, 0, IRQ); > - if (mem_base != 0) { > - sysbus_mmio_map(s, 0, mem_base); > - } > - > + memory_region_add_subregion(mr, mem_base, sysbus_mmio_get_region(s, 0)); > return NVRAM(s); > } > > diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c > index 20c1fa41192..aebe9e0df3d 100644 > --- a/hw/sparc/sun4m.c > +++ b/hw/sparc/sun4m.c > @@ -966,7 +966,8 @@ static void sun4m_hw_init(const struct sun4m_hwdef *hwdef, > create_unimplemented_device("SUNW,sx", hwdef->sx_base, 0x2000); > } > > - nvram = m48t59_init(slavio_irq[0], hwdef->nvram_base, 0x2000, 1968, 8); > + nvram = m48t59_init(get_system_memory(), hwdef->nvram_base, slavio_irq[0], > + 0x2000, 1968, 8); > > slavio_timer_init_all(hwdef->counter_base, slavio_irq[19], slavio_cpu_irq, smp_cpus); > > diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c > index 6854522bbfa..4c975c25274 100644 > --- a/hw/sparc64/sun4u.c > +++ b/hw/sparc64/sun4u.c > @@ -561,7 +561,6 @@ static void sun4uv_init(MemoryRegion *address_space_mem, > SabreState *sabre; > PCIBus *pci_bus, *pci_busA, *pci_busB; > PCIDevice *ebus, *pci_dev; > - SysBusDevice *s; > DeviceState *iommu, *dev; > FWCfgState *fw_cfg; > NICInfo *nd; > @@ -671,10 +670,8 @@ static void sun4uv_init(MemoryRegion *address_space_mem, > pci_ide_create_devs(pci_dev); > > /* Map NVRAM into I/O (ebus) space */ > - nvram = m48t59_init(NULL, 0, NVRAM_SIZE, 1968, 59); > - s = SYS_BUS_DEVICE(nvram); > - memory_region_add_subregion(pci_address_space_io(ebus), 0x2000, > - sysbus_mmio_get_region(s, 0)); > + nvram = m48t59_init(pci_address_space_io(ebus), 0x2000, NULL, > + NVRAM_SIZE, 1968, 59); > > initrd_size = 0; > initrd_addr = 0; -- David Gibson | I'll have my music baroque, and my code david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_ | _way_ _around_! http://www.ozlabs.org/~dgibson [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() 2020-10-15 19:46 [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 1/2] hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 2/2] hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument Philippe Mathieu-Daudé @ 2020-10-16 9:38 ` Mark Cave-Ayland 2020-10-16 9:49 ` Philippe Mathieu-Daudé 2 siblings, 1 reply; 6+ messages in thread From: Mark Cave-Ayland @ 2020-10-16 9:38 UTC (permalink / raw) To: Philippe Mathieu-Daudé, qemu-devel Cc: qemu-trivial, qemu-ppc, Hervé Poussineau, Artyom Tarasenko, David Gibson On 15/10/2020 20:46, Philippe Mathieu-Daudé wrote: > Since v1: > - Do not remove mem_base in patch 1 (Laurent) > - Pass MemoryRegion* (new patch) > - Run check-qtest > > Philippe Mathieu-Daudé (2): > hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument > hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument > > include/hw/rtc/m48t59.h | 5 ++--- > hw/ppc/ppc405_boards.c | 2 +- > hw/rtc/m48t59.c | 14 +++----------- > hw/sparc/sun4m.c | 3 ++- > hw/sparc64/sun4u.c | 7 ++----- > 5 files changed, 10 insertions(+), 21 deletions(-) This looks good, and from what you've done here it's only a little more work to remove m48t59_init() completely. Would you mind if I try this using these patches as a starting point? :) ATB, Mark. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() 2020-10-16 9:38 ` [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Mark Cave-Ayland @ 2020-10-16 9:49 ` Philippe Mathieu-Daudé 0 siblings, 0 replies; 6+ messages in thread From: Philippe Mathieu-Daudé @ 2020-10-16 9:49 UTC (permalink / raw) To: Mark Cave-Ayland Cc: QEMU Trivial, qemu-devel@nongnu.org Developers, Hervé Poussineau, qemu-ppc, Artyom Tarasenko, David Gibson [-- Attachment #1: Type: text/plain, Size: 1103 bytes --] Le ven. 16 oct. 2020 11:39, Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> a écrit : > On 15/10/2020 20:46, Philippe Mathieu-Daudé wrote: > > > Since v1: > > - Do not remove mem_base in patch 1 (Laurent) > > - Pass MemoryRegion* (new patch) > > - Run check-qtest > > > > Philippe Mathieu-Daudé (2): > > hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument > > hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument > > > > include/hw/rtc/m48t59.h | 5 ++--- > > hw/ppc/ppc405_boards.c | 2 +- > > hw/rtc/m48t59.c | 14 +++----------- > > hw/sparc/sun4m.c | 3 ++- > > hw/sparc64/sun4u.c | 7 ++----- > > 5 files changed, 10 insertions(+), 21 deletions(-) > > This looks good, and from what you've done here it's only a little more > work to > remove m48t59_init() completely. Would you mind if I try this using these > patches as > a starting point? :) > I had a look at your previous suggestion, but I have too many in flight series waiting for 5.2, so sure go ahead! > > ATB, > > Mark. > > [-- Attachment #2: Type: text/html, Size: 1765 bytes --] ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-10-16 9:51 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-10-15 19:46 [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 1/2] hw/rtc/m48t59: Simplify m48t59_init() removing 'io_base' argument Philippe Mathieu-Daudé 2020-10-15 19:46 ` [PATCH v2 2/2] hw/rtc/m48t59: Simplify m48t59_init() passing MemoryRegion argument Philippe Mathieu-Daudé 2020-10-16 0:44 ` David Gibson 2020-10-16 9:38 ` [PATCH v2 0/2] hw/rtc/m48t59: Simplify m48t59_init() Mark Cave-Ayland 2020-10-16 9:49 ` Philippe Mathieu-Daudé
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).