From: Alexander Graf <agraf@suse.de>
To: David Gibson <david@gibson.dropbear.id.au>
Cc: paulus@samba.org, qemu-devel@nongnu.org, anton@samba.org
Subject: [Qemu-devel] Re: [PATCH 14/26] Implement the bus structure for PAPR virtual IO
Date: Wed, 16 Mar 2011 15:43:34 +0100 [thread overview]
Message-ID: <4D80CC96.8060107@suse.de> (raw)
In-Reply-To: <1300251423-6715-15-git-send-email-david@gibson.dropbear.id.au>
On 03/16/2011 05:56 AM, David Gibson wrote:
> This extends the "pseries" (PAPR) machine to include a virtual IO bus
> supporting the PAPR defined hypercall based virtual IO mechanisms.
>
> So far only one VIO device is provided, the vty / vterm, providing
> a full console (polled only, for now).
>
> Signed-off-by: David Gibson<dwg@au1.ibm.com>
> ---
> Makefile.target | 3 +-
> hw/spapr.c | 47 ++++++++-----
> hw/spapr.h | 3 +
> hw/spapr_vio.c | 212 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
> hw/spapr_vio.h | 50 +++++++++++++
> hw/spapr_vty.c | 145 +++++++++++++++++++++++++++++++++++++
> 6 files changed, 441 insertions(+), 19 deletions(-)
> create mode 100644 hw/spapr_vio.c
> create mode 100644 hw/spapr_vio.h
> create mode 100644 hw/spapr_vty.c
>
> diff --git a/Makefile.target b/Makefile.target
> index e6a7557..3f2b235 100644
> --- a/Makefile.target
> +++ b/Makefile.target
> @@ -232,7 +232,8 @@ obj-ppc-y += ppc_oldworld.o
> # NewWorld PowerMac
> obj-ppc-y += ppc_newworld.o
> # IBM pSeries (sPAPR)
> -obj-ppc-y += spapr.o spapr_hcall.o
> +obj-ppc-y += spapr.o spapr_hcall.o spapr_vio.o
> +obj-ppc-y += spapr_vty.o
> # PowerPC 4xx boards
> obj-ppc-y += ppc4xx_devs.o ppc4xx_pci.o ppc405_uc.o ppc405_boards.o
> obj-ppc-y += ppc440.o ppc440_bamboo.o
> diff --git a/hw/spapr.c b/hw/spapr.c
> index 8b4e16e..25e4a9e 100644
> --- a/hw/spapr.c
> +++ b/hw/spapr.c
> @@ -25,7 +25,6 @@
> *
> */
> #include "sysemu.h"
> -#include "qemu-char.h"
> #include "hw.h"
> #include "elf.h"
>
> @@ -34,6 +33,7 @@
> #include "hw/loader.h"
>
> #include "hw/spapr.h"
> +#include "hw/spapr_vio.h"
>
> #include<libfdt.h>
>
> @@ -58,6 +58,7 @@ static void *spapr_create_fdt(int *fdt_size, ram_addr_t ramsize,
> uint32_t end_prop = cpu_to_be32(initrd_base + initrd_size);
> int i;
> char *modelname;
> + int ret;
>
> #define _FDT(exp) \
> do { \
> @@ -152,9 +153,29 @@ static void *spapr_create_fdt(int *fdt_size, ram_addr_t ramsize,
>
> _FDT((fdt_end_node(fdt)));
>
> + /* vdevice */
> + _FDT((fdt_begin_node(fdt, "vdevice")));
> +
> + _FDT((fdt_property_string(fdt, "device_type", "vdevice")));
> + _FDT((fdt_property_string(fdt, "compatible", "IBM,vdevice")));
> + _FDT((fdt_property_cell(fdt, "#address-cells", 0x1)));
> + _FDT((fdt_property_cell(fdt, "#size-cells", 0x0)));
> +
> + _FDT((fdt_end_node(fdt)));
> +
> _FDT((fdt_end_node(fdt))); /* close root node */
> _FDT((fdt_finish(fdt)));
>
> + /* re-expand to allow for further tweaks */
> + _FDT((fdt_open_into(fdt, fdt, FDT_MAX_SIZE)));
> +
> + ret = spapr_populate_vdevice(spapr->vio_bus, fdt);
> + if (ret< 0) {
> + fprintf(stderr, "couldn't setup vio devices in fdt\n");
> + }
> +
> + _FDT((fdt_pack(fdt)));
> +
> if (fdt_size) {
> *fdt_size = fdt_totalsize(fdt);
> }
> @@ -173,21 +194,6 @@ static void emulate_spapr_hypercall(CPUState *env, void *opaque)
> env->gpr[3],&env->gpr[4]);
> }
>
> -/* FIXME: hack until we implement the proper VIO console */
> -static target_ulong h_put_term_char(CPUState *env, sPAPREnvironment *spapr,
> - target_ulong opcode, target_ulong *args)
> -{
> - uint8_t buf[16];
> -
> - stq_p(buf, args[2]);
> - stq_p(buf + 8, args[3]);
> -
> - qemu_chr_write(serial_hds[0], buf, args[1]);
> -
> - return 0;
> -}
> -
> -
> /* pSeries LPAR / sPAPR hardware init */
> static void ppc_spapr_init(ram_addr_t ram_size,
> const char *boot_device,
> @@ -242,7 +248,13 @@ static void ppc_spapr_init(ram_addr_t ram_size,
> ram_offset = qemu_ram_alloc(NULL, "ppc_spapr.ram", ram_size);
> cpu_register_physical_memory(0, ram_size, ram_offset);
>
> - spapr_register_hypercall(H_PUT_TERM_CHAR, h_put_term_char);
> + spapr->vio_bus = spapr_vio_bus_init();
> +
> + for (i = 0; i< MAX_SERIAL_PORTS; i++) {
> + if (serial_hds[i]) {
> + spapr_vty_create(spapr->vio_bus, i, serial_hds[i]);
> + }
> + }
>
> if (kernel_filename) {
> uint64_t lowaddr = 0;
> @@ -274,7 +286,6 @@ static void ppc_spapr_init(ram_addr_t ram_size,
> initrd_base = 0;
> initrd_size = 0;
> }
> -
> } else {
> fprintf(stderr, "pSeries machine needs -kernel for now");
> exit(1);
> diff --git a/hw/spapr.h b/hw/spapr.h
> index 9e63a19..47bf2ef 100644
> --- a/hw/spapr.h
> +++ b/hw/spapr.h
> @@ -1,7 +1,10 @@
> #if !defined (__HW_SPAPR_H__)
> #define __HW_SPAPR_H__
>
> +struct VIOsPAPRBus;
> +
> typedef struct sPAPREnvironment {
> + struct VIOsPAPRBus *vio_bus;
> } sPAPREnvironment;
>
> #define H_SUCCESS 0
> diff --git a/hw/spapr_vio.c b/hw/spapr_vio.c
> new file mode 100644
> index 0000000..0ed63f4
> --- /dev/null
> +++ b/hw/spapr_vio.c
> @@ -0,0 +1,212 @@
> +/*
> + * QEMU sPAPR VIO code
> + *
> + * Copyright (c) 2010 David Gibson, IBM Corporation<david@gibson.dropbear.id.au>
> + * Based on the s390 virtio bus code:
> + * Copyright (c) 2009 Alexander Graf<agraf@suse.de>
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see<http://www.gnu.org/licenses/>.
> + */
> +
> +#include "hw.h"
> +#include "sysemu.h"
> +#include "boards.h"
> +#include "monitor.h"
> +#include "loader.h"
> +#include "elf.h"
> +#include "hw/sysbus.h"
> +#include "kvm.h"
> +#include "device_tree.h"
> +
> +#include "hw/spapr.h"
> +#include "hw/spapr_vio.h"
> +
> +#ifdef CONFIG_FDT
> +#include<libfdt.h>
> +#endif /* CONFIG_FDT */
> +
> +/* #define DEBUG_SPAPR */
> +
> +#ifdef DEBUG_SPAPR
> +#define dprintf(fmt, ...) \
> + do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0)
> +#else
> +#define dprintf(fmt, ...) \
> + do { } while (0)
> +#endif
> +
> +static struct BusInfo spapr_vio_bus_info = {
> + .name = "spapr-vio",
> + .size = sizeof(VIOsPAPRBus),
> +};
> +
> +VIOsPAPRDevice *spapr_vio_find_by_reg(VIOsPAPRBus *bus, uint32_t reg)
> +{
> + DeviceState *qdev;
> + VIOsPAPRDevice *dev = NULL;
> +
> + QLIST_FOREACH(qdev,&bus->bus.children, sibling) {
> + dev = (VIOsPAPRDevice *)qdev;
> + if (dev->reg == reg) {
> + break;
> + }
> + }
> +
> + return dev;
> +}
> +
> +#ifdef CONFIG_FDT
> +static int vio_make_devnode(VIOsPAPRDevice *dev,
> + void *fdt)
> +{
> + VIOsPAPRDeviceInfo *info = (VIOsPAPRDeviceInfo *)dev->qdev.info;
> + int vdevice_off, node_off;
> + int ret;
> +
> + vdevice_off = fdt_path_offset(fdt, "/vdevice");
> + if (vdevice_off< 0) {
> + return vdevice_off;
> + }
> +
> + node_off = fdt_add_subnode(fdt, vdevice_off, dev->qdev.id);
> + if (node_off< 0) {
> + return node_off;
> + }
> +
> + ret = fdt_setprop_cell(fdt, node_off, "reg", dev->reg);
> + if (ret< 0) {
> + return ret;
> + }
> +
> + if (info->dt_type) {
> + ret = fdt_setprop_string(fdt, node_off, "device_type",
> + info->dt_type);
> + if (ret< 0) {
> + return ret;
> + }
> + }
> +
> + if (info->dt_compatible) {
> + ret = fdt_setprop_string(fdt, node_off, "compatible",
> + info->dt_compatible);
> + if (ret< 0) {
> + return ret;
> + }
> + }
> +
> + if (info->devnode) {
> + ret = (info->devnode)(dev, fdt, node_off);
> + if (ret< 0) {
> + return ret;
> + }
> + }
> +
> + return node_off;
> +}
> +#endif /* CONFIG_FDT */
> +
> +static int spapr_vio_busdev_init(DeviceState *dev, DeviceInfo *info)
> +{
> + VIOsPAPRDeviceInfo *_info = (VIOsPAPRDeviceInfo *)info;
> + VIOsPAPRDevice *_dev = (VIOsPAPRDevice *)dev;
> + char *id;
> +
> + if (asprintf(&id, "%s@%x", _info->dt_name, _dev->reg)< 0) {
> + return -1;
> + }
> +
> + _dev->qdev.id = id;
asprintf only guarantees existence during the scope it's called in. So
id is not guaranteed to actually be real data when it's used later on,
no? I'm not even sure if it'd work of init would strdup it - the
compiler could optimize the function call below away into a real branch.
> +
> + return _info->init(_dev);
> +}
> +
> +void spapr_vio_bus_register_withprop(VIOsPAPRDeviceInfo *info)
> +{
> + info->qdev.init = spapr_vio_busdev_init;
> + info->qdev.bus_info =&spapr_vio_bus_info;
> +
> + assert(info->qdev.size>= sizeof(VIOsPAPRDevice));
> + qdev_register(&info->qdev);
> +}
> +
> +VIOsPAPRBus *spapr_vio_bus_init(void)
> +{
> + VIOsPAPRBus *bus;
> + BusState *_bus;
> + DeviceState *dev;
> + DeviceInfo *_info;
> +
> + /* Create bridge device */
> + dev = qdev_create(NULL, "spapr-vio-bridge");
> + qdev_init_nofail(dev);
> +
> + /* Create bus on bridge device */
> +
> + _bus = qbus_create(&spapr_vio_bus_info, dev, "spapr-vio");
> + bus = DO_UPCAST(VIOsPAPRBus, bus, _bus);
> +
> + for (_info = device_info_list; _info; _info = _info->next) {
> + VIOsPAPRDeviceInfo *info = (VIOsPAPRDeviceInfo *)_info;
> +
> + if (_info->bus_info !=&spapr_vio_bus_info)
Braces
> + continue;
> +
> + if (info->hcalls)
Braces
> + info->hcalls(bus);
> + }
> +
> + return bus;
> +}
> +
> +/* Represents sPAPR hcall VIO devices */
> +
> +static int spapr_vio_bridge_init(SysBusDevice *dev)
> +{
> + /* nothing */
> + return 0;
> +}
> +
> +static SysBusDeviceInfo spapr_vio_bridge_info = {
> + .init = spapr_vio_bridge_init,
> + .qdev.name = "spapr-vio-bridge",
> + .qdev.size = sizeof(SysBusDevice),
> + .qdev.no_user = 1,
> +};
> +
> +static void spapr_vio_register_devices(void)
> +{
> + sysbus_register_withprop(&spapr_vio_bridge_info);
> +}
> +
> +device_init(spapr_vio_register_devices)
> +
> +#ifdef CONFIG_FDT
> +int spapr_populate_vdevice(VIOsPAPRBus *bus, void *fdt)
> +{
> + DeviceState *qdev;
> + int ret = 0;
> +
> + QLIST_FOREACH(qdev,&bus->bus.children, sibling) {
> + VIOsPAPRDevice *dev = (VIOsPAPRDevice *)qdev;
> +
> + ret = vio_make_devnode(dev, fdt);
> +
> + if (ret< 0) {
> + return ret;
> + }
> + }
> +
> + return 0;
> +}
> +#endif /* CONFIG_FDT */
> diff --git a/hw/spapr_vio.h b/hw/spapr_vio.h
> new file mode 100644
> index 0000000..b164ad3
> --- /dev/null
> +++ b/hw/spapr_vio.h
> @@ -0,0 +1,50 @@
> +#ifndef _HW_SPAPR_VIO_H
> +#define _HW_SPAPR_VIO_H
> +/*
> + * QEMU sPAPR VIO bus definitions
> + *
> + * Copyright (c) 2010 David Gibson, IBM Corporation<david@gibson.dropbear.id.au>
> + * Based on the s390 virtio bus definitions:
> + * Copyright (c) 2009 Alexander Graf<agraf@suse.de>
> + *
> + * This library is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU Lesser General Public
> + * License as published by the Free Software Foundation; either
> + * version 2 of the License, or (at your option) any later version.
> + *
> + * This library is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
> + * Lesser General Public License for more details.
> + *
> + * You should have received a copy of the GNU Lesser General Public
> + * License along with this library; if not, see<http://www.gnu.org/licenses/>.
> + */
> +
> +typedef struct VIOsPAPRDevice {
> + DeviceState qdev;
> + uint32_t reg;
> +} VIOsPAPRDevice;
> +
> +typedef struct VIOsPAPRBus {
> + BusState bus;
> +} VIOsPAPRBus;
> +
> +typedef struct {
> + DeviceInfo qdev;
> + const char *dt_name, *dt_type, *dt_compatible;
> + int (*init)(VIOsPAPRDevice *dev);
> + void (*hcalls)(VIOsPAPRBus *bus);
> + int (*devnode)(VIOsPAPRDevice *dev, void *fdt, int node_off);
> +} VIOsPAPRDeviceInfo;
> +
> +extern VIOsPAPRBus *spapr_vio_bus_init(void);
> +extern VIOsPAPRDevice *spapr_vio_find_by_reg(VIOsPAPRBus *bus, uint32_t reg);
> +extern void spapr_vio_bus_register_withprop(VIOsPAPRDeviceInfo *info);
> +extern int spapr_populate_vdevice(VIOsPAPRBus *bus, void *fdt);
> +
> +void vty_putchars(VIOsPAPRDevice *sdev, uint8_t *buf, int len);
> +void spapr_vty_create(VIOsPAPRBus *bus,
> + uint32_t reg, CharDriverState *chardev);
> +
> +#endif /* _HW_SPAPR_VIO_H */
> diff --git a/hw/spapr_vty.c b/hw/spapr_vty.c
> new file mode 100644
> index 0000000..afc9ef9
> --- /dev/null
> +++ b/hw/spapr_vty.c
> @@ -0,0 +1,145 @@
license header
> +#include "qdev.h"
> +#include "qemu-char.h"
> +#include "hw/spapr.h"
> +#include "hw/spapr_vio.h"
> +
> +#define VTERM_BUFSIZE 16
> +
> +typedef struct VIOsPAPRVTYDevice {
> + VIOsPAPRDevice sdev;
> + CharDriverState *chardev;
> + uint32_t in, out;
> + uint8_t buf[VTERM_BUFSIZE];
> +} VIOsPAPRVTYDevice;
> +
> +static int vty_can_receive(void *opaque)
> +{
> + VIOsPAPRVTYDevice *dev = (VIOsPAPRVTYDevice *)opaque;
> +
> + return (dev->in - dev->out)< VTERM_BUFSIZE;
> +}
> +
> +static void vty_receive(void *opaque, const uint8_t *buf, int size)
> +{
> + VIOsPAPRVTYDevice *dev = (VIOsPAPRVTYDevice *)opaque;
> + int i;
> +
> + for (i = 0; i< size; i++) {
> + assert((dev->in - dev->out)< VTERM_BUFSIZE);
> + dev->buf[dev->in++ % VTERM_BUFSIZE] = buf[i];
> + }
> +}
> +
> +static int vty_getchars(VIOsPAPRDevice *sdev, uint8_t *buf, int max)
> +{
> + VIOsPAPRVTYDevice *dev = (VIOsPAPRVTYDevice *)sdev;
> + int n = 0;
> +
> + while ((n< max)&& (dev->out != dev->in))
Braces
> + buf[n++] = dev->buf[dev->out++ % VTERM_BUFSIZE];
> +
> + return n;
> +}
> +
> +void vty_putchars(VIOsPAPRDevice *sdev, uint8_t *buf, int len)
> +{
> + VIOsPAPRVTYDevice *dev = (VIOsPAPRVTYDevice *)sdev;
> +
> + /* FIXME: should check the qemu_chr_write() return value */
> + qemu_chr_write(dev->chardev, buf, len);
> +}
> +
> +static int spapr_vty_init(VIOsPAPRDevice *sdev)
> +{
> + VIOsPAPRVTYDevice *dev = (VIOsPAPRVTYDevice *)sdev;
> +
> + qemu_chr_add_handlers(dev->chardev, vty_can_receive,
> + vty_receive, NULL, dev);
> +
> + return 0;
> +}
> +
> +static target_ulong h_put_term_char(CPUState *env, sPAPREnvironment *spapr,
> + target_ulong opcode, target_ulong *args)
> +{
> + target_ulong reg = args[0];
> + target_ulong len = args[1];
> + target_ulong char0_7 = args[2];
> + target_ulong char8_15 = args[3];
> + VIOsPAPRDevice *sdev = spapr_vio_find_by_reg(spapr->vio_bus, reg);
> + uint8_t buf[16];
> +
> + if (!sdev)
Braces
> + return H_PARAMETER;
> +
> + if (len> 16)
Braces
> + return H_PARAMETER;
> +
> + *((uint64_t *)buf) = cpu_to_be64(char0_7);
This is be64_to_cpu, no? Not that it matters...
Btw - shouldn't stq_p work just as well here?
> + *((uint64_t *)buf + 1) = cpu_to_be64(char8_15);
> +
> + vty_putchars(sdev, buf, len);
> +
> + return H_SUCCESS;
> +}
> +
> +static target_ulong h_get_term_char(CPUState *env, sPAPREnvironment *spapr,
> + target_ulong opcode, target_ulong *args)
> +{
> + target_ulong reg = args[0];
> + target_ulong *len = args + 0;
> + target_ulong *char0_7 = args + 1;
> + target_ulong *char8_15 = args + 2;
> + VIOsPAPRDevice *sdev = spapr_vio_find_by_reg(spapr->vio_bus, reg);
> + uint8_t buf[16];
> +
> + if (!sdev)
Braces
> + return H_PARAMETER;
> +
> + *len = vty_getchars(sdev, buf, sizeof(buf));
> + if (*len< 16)
Braces
> + memset(buf + *len, 0, 16 - *len);
> +
> + *char0_7 = be64_to_cpu(*((uint64_t *)buf));
This is basically *char0_7 = ldq_p(buf); But I don't mind if you leave
it as is - it's probably faster this way. Not that the 2 ns actually
matter ;).
Alex
next prev parent reply other threads:[~2011-03-16 14:43 UTC|newest]
Thread overview: 82+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-16 4:56 [Qemu-devel] Implement emulation of pSeries logical partitions (v3) David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 01/26] Clean up PowerPC SLB handling code David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 02/26] Allow qemu_devtree_setprop() to take arbitrary values David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 03/26] Add a hook to allow hypercalls to be emulated on PowerPC David Gibson
2011-03-16 13:46 ` [Qemu-devel] " Alexander Graf
2011-03-16 16:58 ` Stefan Hajnoczi
2011-03-17 2:26 ` David Gibson
2011-03-16 20:44 ` [Qemu-devel] " Anthony Liguori
2011-03-17 4:55 ` David Gibson
2011-03-17 13:20 ` Anthony Liguori
2011-03-18 4:03 ` David Gibson
2011-03-18 6:57 ` Alexander Graf
2011-03-16 4:56 ` [Qemu-devel] [PATCH 04/26] Implement PowerPC slbmfee and slbmfev instructions David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 05/26] Implement missing parts of the logic for the POWER PURR David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 06/26] Correct ppc popcntb logic, implement popcntw and popcntd David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 07/26] Clean up slb_lookup() function David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 08/26] Parse SDR1 on mtspr instead of at translate time David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 09/26] Use "hash" more consistently in ppc mmu code David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 10/26] Better factor the ppc hash translation path David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 11/26] Support 1T segments on ppc David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 12/26] Add POWER7 support for ppc David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 13/26] Start implementing pSeries logical partition machine David Gibson
2011-03-16 14:30 ` [Qemu-devel] " Alexander Graf
2011-03-16 21:59 ` [Qemu-devel] " Anthony Liguori
2011-03-16 23:46 ` Alexander Graf
2011-03-17 3:08 ` David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 14/26] Implement the bus structure for PAPR virtual IO David Gibson
2011-03-16 14:43 ` Alexander Graf [this message]
2011-03-16 22:04 ` Anthony Liguori
2011-03-17 3:19 ` David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 15/26] Virtual hash page table handling on pSeries machine David Gibson
2011-03-16 15:03 ` [Qemu-devel] " Alexander Graf
2011-03-17 1:03 ` [Qemu-devel] Re: [PATCH 15/26] Virtual hash page table handling on pSeries machine' David Gibson
2011-03-17 7:35 ` Alexander Graf
2011-03-16 4:56 ` [Qemu-devel] [PATCH 16/26] Implement hcall based RTAS for pSeries machines David Gibson
2011-03-16 15:08 ` [Qemu-devel] " Alexander Graf
2011-03-17 1:22 ` David Gibson
2011-03-17 7:36 ` Alexander Graf
2011-03-16 22:08 ` [Qemu-devel] " Anthony Liguori
2011-03-16 4:56 ` [Qemu-devel] [PATCH 17/26] Implement assorted pSeries hcalls and RTAS methods David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 18/26] Implement the PAPR (pSeries) virtualized interrupt controller (xics) David Gibson
2011-03-16 15:47 ` [Qemu-devel] " Alexander Graf
2011-03-17 1:29 ` David Gibson
2011-03-17 7:37 ` Alexander Graf
2011-03-16 22:16 ` [Qemu-devel] " Anthony Liguori
2011-03-17 1:34 ` David Gibson
2011-03-17 13:13 ` Anthony Liguori
2011-03-23 3:48 ` David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 19/26] Add PAPR H_VIO_SIGNAL hypercall and infrastructure for VIO interrupts David Gibson
2011-03-16 15:49 ` [Qemu-devel] " Alexander Graf
2011-03-17 1:38 ` David Gibson
2011-03-17 7:38 ` Alexander Graf
2011-03-16 4:56 ` [Qemu-devel] [PATCH 20/26] Add (virtual) interrupt to PAPR virtual tty device David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 21/26] Implement TCE translation for sPAPR VIO David Gibson
2011-03-16 16:03 ` [Qemu-devel] " Alexander Graf
2011-03-16 20:05 ` Benjamin Herrenschmidt
2011-03-16 20:21 ` Anthony Liguori
2011-03-16 20:22 ` Anthony Liguori
2011-03-16 20:36 ` Benjamin Herrenschmidt
2011-03-17 1:43 ` David Gibson
2011-03-16 22:20 ` [Qemu-devel] " Anthony Liguori
2011-03-18 1:58 ` David Gibson
2011-03-16 4:56 ` [Qemu-devel] [PATCH 22/26] Implement sPAPR Virtual LAN (ibmveth) David Gibson
2011-03-16 16:12 ` [Qemu-devel] " Alexander Graf
2011-03-17 2:04 ` David Gibson
2011-03-16 22:29 ` [Qemu-devel] " Anthony Liguori
2011-03-17 2:09 ` David Gibson
2011-03-16 4:57 ` [Qemu-devel] [PATCH 23/26] Implement PAPR CRQ hypercalls David Gibson
2011-03-16 16:15 ` [Qemu-devel] " Alexander Graf
2011-03-16 4:57 ` [Qemu-devel] [PATCH 24/26] Implement PAPR virtual SCSI interface (ibmvscsi) David Gibson
2011-03-16 16:41 ` [Qemu-devel] " Alexander Graf
2011-03-16 16:51 ` Anthony Liguori
2011-03-16 20:08 ` Benjamin Herrenschmidt
2011-03-16 20:19 ` Anthony Liguori
2011-03-16 4:57 ` [Qemu-devel] [PATCH 25/26] Add a PAPR TCE-bypass mechanism for the pSeries machine David Gibson
2011-03-16 16:43 ` [Qemu-devel] " Alexander Graf
2011-03-17 2:21 ` David Gibson
2011-03-17 3:25 ` Benjamin Herrenschmidt
2011-03-17 7:44 ` Alexander Graf
2011-03-17 8:44 ` Benjamin Herrenschmidt
2011-03-17 9:37 ` Alexander Graf
2011-03-16 4:57 ` [Qemu-devel] [PATCH 26/26] Implement PAPR VPA functions for pSeries shared processor partitions David Gibson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4D80CC96.8060107@suse.de \
--to=agraf@suse.de \
--cc=anton@samba.org \
--cc=david@gibson.dropbear.id.au \
--cc=paulus@samba.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).