From: Ian Campbell <Ian.Campbell@citrix.com> To: Julien Grall <julien.grall@citrix.com> Cc: Julian Pidancet <julian.pidancet@citrix.com>, "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>, "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>, Stefano Stabellini <Stefano.Stabellini@eu.citrix.com> Subject: Re: [Qemu-devel] [Xen-devel] [XEN][RFC PATCH 01/15] hvm: Modify interface to support multiple ioreq server Date: Fri, 23 Mar 2012 11:33:23 +0000 [thread overview] Message-ID: <1332502403.30916.23.camel@zakaz.uk.xensource.com> (raw) In-Reply-To: <2187e535bf91f5f650401a4e08e0e795003ad2aa.1332430810.git.julien.grall@citrix.com> On Thu, 2012-03-22 at 15:59 +0000, Julien Grall wrote: > Add structure to handle ioreq server. It's server which can > handle a range of IO (MMIO and/or PIO) and emulate a PCI. > Each server as its own shared page to receive ioreq. So > we have introduced to HVM PARAM to set/get the first and > the last shared used for ioreq. > With it's id, the server knows which page it must use. So id is always the page offset with the range? Why not just call it iobuf_offset then? Is the additional layer of abstraction from calling it "id" useful if we are just going to peek around it? > We introduce a new kind a ioreq type IOREQ_TYPE_PCICONFIG > which permit to forward easily PCI config space access. > > Signed-off-by: Julien Grall <julien.grall@citrix.com> > --- > [...] > xen/include/public/hvm/hvm_op.h | 49 ++++++++++++++++++++++++++++++++++++++ > xen/include/public/hvm/ioreq.h | 1 + > xen/include/public/hvm/params.h | 6 ++++- > xen/include/public/xen.h | 1 + I only looked at the public interface changes so far. > diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_op.h > index 6a78f75..1e0e27b 100644 > --- a/xen/include/public/hvm/hvm_op.h > +++ b/xen/include/public/hvm/hvm_op.h > @@ -24,6 +24,8 @@ > #include "../xen.h" > #include "../trace.h" > > +#include "hvm_info_table.h" /* HVM_MAX_VCPUS */ You don't appear to use HVM_MAX_VCPUS anywhere in your additions? > /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ > #define HVMOP_set_param 0 > #define HVMOP_get_param 1 > @@ -227,6 +229,53 @@ struct xen_hvm_inject_trap { > typedef struct xen_hvm_inject_trap xen_hvm_inject_trap_t; > DEFINE_XEN_GUEST_HANDLE(xen_hvm_inject_trap_t); > > +#define HVMOP_register_ioreq_server 20 > +struct xen_hvm_register_ioreq_server { > + domid_t domid; /* IN - domain to be serviced */ > + unsigned int id; /* OUT - handle for identifying this server */ elsewhere this is called servid_t? > +}; > +typedef struct xen_hvm_register_ioreq_server xen_hvm_register_ioreq_server_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_register_ioreq_server_t); > + > +#define HVMOP_get_ioreq_server_buf_channel 21 > +struct xen_hvm_get_ioreq_server_buf_channel { > + domid_t domid; /* IN - domain to be serviced */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + unsigned int channel; /* OUT - buf ioreq channel */ evtchn_port_t? > +}; > +typedef struct xen_hvm_get_ioreq_server_buf_channel xen_hvm_get_ioreq_server_buf_channel_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_ioreq_server_buf_channel_t); > + > +#define HVMOP_map_io_range_to_ioreq_server 22 > +struct xen_hvm_map_io_range_to_ioreq_server { > + domid_t domid; /* IN - domain to be serviced */ > + uint8_t is_mmio; /* IN - MMIO or port IO? */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + uint64_aligned_t s, e; /* IN - inclusive start and end of range */ > +}; > +typedef struct xen_hvm_map_io_range_to_ioreq_server xen_hvm_map_io_range_to_ioreq_server_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_map_io_range_to_ioreq_server_t); > + > +#define HVMOP_unmap_io_range_from_ioreq_server 23 > +struct xen_hvm_unmap_io_range_from_ioreq_server { > + domid_t domid; /* IN - domain to be serviced */ > + uint8_t is_mmio; /* IN - MMIO or port IO? */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + uint64_aligned_t addr; /* IN - address inside the range to remove */ > +}; > +typedef struct xen_hvm_unmap_io_range_from_ioreq_server xen_hvm_unmap_io_range_from_ioreq_server_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_unmap_io_range_from_ioreq_server_t); > + > +#define HVMOP_register_pcidev 24 > +struct xen_hvm_register_pcidev { > + domid_t domid; /* IN - domain to be serviced */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + uint16_t bdf; /* IN - pci */ > +}; > +typedef struct xen_hvm_register_pcidev xen_hvm_register_pcidev_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_register_pcidev_t); > + > + > #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ > > #define HVMOP_get_mem_type 15 > diff --git a/xen/include/public/hvm/ioreq.h b/xen/include/public/hvm/ioreq.h > index 4022a1d..87aacd3 100644 > --- a/xen/include/public/hvm/ioreq.h > +++ b/xen/include/public/hvm/ioreq.h > @@ -34,6 +34,7 @@ > > #define IOREQ_TYPE_PIO 0 /* pio */ > #define IOREQ_TYPE_COPY 1 /* mmio ops */ > +#define IOREQ_TYPE_PCI_CONFIG 2 /* pci config space ops */ > #define IOREQ_TYPE_TIMEOFFSET 7 > #define IOREQ_TYPE_INVALIDATE 8 /* mapcache */ > > diff --git a/xen/include/public/hvm/params.h b/xen/include/public/hvm/params.h > index 55c1b57..309ac1b 100644 > --- a/xen/include/public/hvm/params.h > +++ b/xen/include/public/hvm/params.h > @@ -147,6 +147,10 @@ > #define HVM_PARAM_ACCESS_RING_PFN 28 > #define HVM_PARAM_SHARING_RING_PFN 29 > > -#define HVM_NR_PARAMS 30 > +/* Param for ioreq servers */ > +#define HVM_PARAM_IO_PFN_FIRST 30 > +#define HVM_PARAM_IO_PFN_LAST 31 > + > +#define HVM_NR_PARAMS 32 > > #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > index b2f6c50..26d0e9d 100644 > --- a/xen/include/public/xen.h > +++ b/xen/include/public/xen.h > @@ -466,6 +466,7 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t); > #ifndef __ASSEMBLY__ > > typedef uint16_t domid_t; > +typedef uint32_t servid_t; ioservid_t? > /* Domain ids >= DOMID_FIRST_RESERVED cannot be used for ordinary domains. */ > #define DOMID_FIRST_RESERVED (0x7FF0U)
WARNING: multiple messages have this Message-ID (diff)
From: Ian Campbell <Ian.Campbell@citrix.com> To: Julien Grall <julien.grall@citrix.com> Cc: Julian Pidancet <julian.pidancet@citrix.com>, "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>, "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>, Stefano Stabellini <Stefano.Stabellini@eu.citrix.com> Subject: Re: [XEN][RFC PATCH 01/15] hvm: Modify interface to support multiple ioreq server Date: Fri, 23 Mar 2012 11:33:23 +0000 [thread overview] Message-ID: <1332502403.30916.23.camel@zakaz.uk.xensource.com> (raw) In-Reply-To: <2187e535bf91f5f650401a4e08e0e795003ad2aa.1332430810.git.julien.grall@citrix.com> On Thu, 2012-03-22 at 15:59 +0000, Julien Grall wrote: > Add structure to handle ioreq server. It's server which can > handle a range of IO (MMIO and/or PIO) and emulate a PCI. > Each server as its own shared page to receive ioreq. So > we have introduced to HVM PARAM to set/get the first and > the last shared used for ioreq. > With it's id, the server knows which page it must use. So id is always the page offset with the range? Why not just call it iobuf_offset then? Is the additional layer of abstraction from calling it "id" useful if we are just going to peek around it? > We introduce a new kind a ioreq type IOREQ_TYPE_PCICONFIG > which permit to forward easily PCI config space access. > > Signed-off-by: Julien Grall <julien.grall@citrix.com> > --- > [...] > xen/include/public/hvm/hvm_op.h | 49 ++++++++++++++++++++++++++++++++++++++ > xen/include/public/hvm/ioreq.h | 1 + > xen/include/public/hvm/params.h | 6 ++++- > xen/include/public/xen.h | 1 + I only looked at the public interface changes so far. > diff --git a/xen/include/public/hvm/hvm_op.h b/xen/include/public/hvm/hvm_op.h > index 6a78f75..1e0e27b 100644 > --- a/xen/include/public/hvm/hvm_op.h > +++ b/xen/include/public/hvm/hvm_op.h > @@ -24,6 +24,8 @@ > #include "../xen.h" > #include "../trace.h" > > +#include "hvm_info_table.h" /* HVM_MAX_VCPUS */ You don't appear to use HVM_MAX_VCPUS anywhere in your additions? > /* Get/set subcommands: extra argument == pointer to xen_hvm_param struct. */ > #define HVMOP_set_param 0 > #define HVMOP_get_param 1 > @@ -227,6 +229,53 @@ struct xen_hvm_inject_trap { > typedef struct xen_hvm_inject_trap xen_hvm_inject_trap_t; > DEFINE_XEN_GUEST_HANDLE(xen_hvm_inject_trap_t); > > +#define HVMOP_register_ioreq_server 20 > +struct xen_hvm_register_ioreq_server { > + domid_t domid; /* IN - domain to be serviced */ > + unsigned int id; /* OUT - handle for identifying this server */ elsewhere this is called servid_t? > +}; > +typedef struct xen_hvm_register_ioreq_server xen_hvm_register_ioreq_server_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_register_ioreq_server_t); > + > +#define HVMOP_get_ioreq_server_buf_channel 21 > +struct xen_hvm_get_ioreq_server_buf_channel { > + domid_t domid; /* IN - domain to be serviced */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + unsigned int channel; /* OUT - buf ioreq channel */ evtchn_port_t? > +}; > +typedef struct xen_hvm_get_ioreq_server_buf_channel xen_hvm_get_ioreq_server_buf_channel_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_get_ioreq_server_buf_channel_t); > + > +#define HVMOP_map_io_range_to_ioreq_server 22 > +struct xen_hvm_map_io_range_to_ioreq_server { > + domid_t domid; /* IN - domain to be serviced */ > + uint8_t is_mmio; /* IN - MMIO or port IO? */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + uint64_aligned_t s, e; /* IN - inclusive start and end of range */ > +}; > +typedef struct xen_hvm_map_io_range_to_ioreq_server xen_hvm_map_io_range_to_ioreq_server_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_map_io_range_to_ioreq_server_t); > + > +#define HVMOP_unmap_io_range_from_ioreq_server 23 > +struct xen_hvm_unmap_io_range_from_ioreq_server { > + domid_t domid; /* IN - domain to be serviced */ > + uint8_t is_mmio; /* IN - MMIO or port IO? */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + uint64_aligned_t addr; /* IN - address inside the range to remove */ > +}; > +typedef struct xen_hvm_unmap_io_range_from_ioreq_server xen_hvm_unmap_io_range_from_ioreq_server_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_unmap_io_range_from_ioreq_server_t); > + > +#define HVMOP_register_pcidev 24 > +struct xen_hvm_register_pcidev { > + domid_t domid; /* IN - domain to be serviced */ > + servid_t id; /* IN - handle from HVMOP_register_ioreq_server */ > + uint16_t bdf; /* IN - pci */ > +}; > +typedef struct xen_hvm_register_pcidev xen_hvm_register_pcidev_t; > +DEFINE_XEN_GUEST_HANDLE(xen_hvm_register_pcidev_t); > + > + > #endif /* defined(__XEN__) || defined(__XEN_TOOLS__) */ > > #define HVMOP_get_mem_type 15 > diff --git a/xen/include/public/hvm/ioreq.h b/xen/include/public/hvm/ioreq.h > index 4022a1d..87aacd3 100644 > --- a/xen/include/public/hvm/ioreq.h > +++ b/xen/include/public/hvm/ioreq.h > @@ -34,6 +34,7 @@ > > #define IOREQ_TYPE_PIO 0 /* pio */ > #define IOREQ_TYPE_COPY 1 /* mmio ops */ > +#define IOREQ_TYPE_PCI_CONFIG 2 /* pci config space ops */ > #define IOREQ_TYPE_TIMEOFFSET 7 > #define IOREQ_TYPE_INVALIDATE 8 /* mapcache */ > > diff --git a/xen/include/public/hvm/params.h b/xen/include/public/hvm/params.h > index 55c1b57..309ac1b 100644 > --- a/xen/include/public/hvm/params.h > +++ b/xen/include/public/hvm/params.h > @@ -147,6 +147,10 @@ > #define HVM_PARAM_ACCESS_RING_PFN 28 > #define HVM_PARAM_SHARING_RING_PFN 29 > > -#define HVM_NR_PARAMS 30 > +/* Param for ioreq servers */ > +#define HVM_PARAM_IO_PFN_FIRST 30 > +#define HVM_PARAM_IO_PFN_LAST 31 > + > +#define HVM_NR_PARAMS 32 > > #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */ > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > index b2f6c50..26d0e9d 100644 > --- a/xen/include/public/xen.h > +++ b/xen/include/public/xen.h > @@ -466,6 +466,7 @@ DEFINE_XEN_GUEST_HANDLE(mmuext_op_t); > #ifndef __ASSEMBLY__ > > typedef uint16_t domid_t; > +typedef uint32_t servid_t; ioservid_t? > /* Domain ids >= DOMID_FIRST_RESERVED cannot be used for ordinary domains. */ > #define DOMID_FIRST_RESERVED (0x7FF0U)
next prev parent reply other threads:[~2012-03-23 11:34 UTC|newest] Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-03-22 15:59 [Qemu-devel] [XEN][RFC PATCH 00/15] QEMU disaggregation Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 01/15] hvm: Modify interface to support multiple ioreq server Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-23 8:18 ` [Qemu-devel] [Xen-devel] " Jan Beulich 2012-03-23 8:18 ` Jan Beulich 2012-03-26 12:32 ` [Qemu-devel] [Xen-devel] " Julien Grall 2012-03-26 12:53 ` Jan Beulich 2012-03-26 12:53 ` [Qemu-devel] [Xen-devel] " Jan Beulich 2012-03-26 12:32 ` Julien Grall 2012-03-23 11:33 ` Ian Campbell [this message] 2012-03-23 11:33 ` Ian Campbell 2012-04-12 19:33 ` [Xen-devel] " Julien Grall 2012-04-02 17:12 ` [Qemu-devel] " Ian Jackson 2012-04-02 17:12 ` Ian Jackson 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 02/15] hvm: Add functions to handle ioreq servers Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 03/15] hvm-pci: Handle PCI config space in Xen Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-23 8:29 ` [Qemu-devel] [Xen-devel] " Jan Beulich 2012-03-23 8:29 ` Jan Beulich 2012-03-26 12:20 ` Julien Grall 2012-03-26 12:20 ` [Qemu-devel] [Xen-devel] " Julien Grall 2012-03-26 12:52 ` Jan Beulich 2012-03-26 12:52 ` [Qemu-devel] [Xen-devel] " Jan Beulich 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 04/15] hvm: Change initialization/destruction of an hvm Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 05/15] hvm: Modify hvm_op Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-04-26 17:50 ` Christian Limpach 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 06/15] hvm-io: IO refactoring with ioreq server Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 07/15] hvm-io: send invalidate map cache to each registered servers Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 08/15] hvm-io: Handle server in buffered IO Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 09/15] xc: Add the hypercall for multiple servers Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-23 11:37 ` [Qemu-devel] [Xen-devel] " Ian Campbell 2012-03-23 11:37 ` Ian Campbell 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 10/15] xc: Add argument to allocate more special pages Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-23 11:39 ` [Qemu-devel] [Xen-devel] " Ian Campbell 2012-03-23 11:39 ` Ian Campbell 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 11/15] xc: Fix python build Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-23 11:39 ` [Qemu-devel] [Xen-devel] " Ian Campbell 2012-03-23 11:39 ` Ian Campbell 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 12/15] xl: Add interface to handle multiple device models Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-23 11:47 ` [Qemu-devel] [Xen-devel] " Ian Campbell 2012-03-23 11:47 ` Ian Campbell 2012-03-23 13:06 ` [Qemu-devel] [Xen-devel] " Julien Grall 2012-03-23 13:06 ` Julien Grall 2012-03-23 13:55 ` [Qemu-devel] " Ian Campbell 2012-03-23 13:55 ` Ian Campbell 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 13/15] xl-qmp: add device model id to qmp function Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 14/15] xl-parsing: Parse the new option device_models Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-04-02 17:11 ` [Qemu-devel] [Xen-devel] " Ian Jackson 2012-04-02 17:11 ` Ian Jackson 2012-04-03 10:05 ` [Qemu-devel] " Stefano Stabellini 2012-04-03 10:05 ` Stefano Stabellini 2012-04-03 13:31 ` [Qemu-devel] " Ian Jackson 2012-04-03 13:31 ` Ian Jackson 2012-04-03 13:54 ` [Qemu-devel] " Julien Grall 2012-04-03 13:54 ` Julien Grall 2012-04-03 14:02 ` [Qemu-devel] [Xen-devel] " Ian Jackson 2012-04-03 14:02 ` Ian Jackson 2012-04-03 14:16 ` [Qemu-devel] [Xen-devel] " Stefano Stabellini 2012-04-03 14:16 ` Stefano Stabellini 2012-04-03 14:23 ` [Qemu-devel] " Ian Jackson 2012-04-03 14:23 ` Ian Jackson 2012-03-22 15:59 ` [Qemu-devel] [XEN][RFC PATCH 15/15] xl: Launch and destroy all device models Julien Grall 2012-03-22 15:59 ` Julien Grall 2012-03-22 16:59 ` [Qemu-devel] [Xen-devel] [XEN][RFC PATCH 00/15] QEMU disaggregation Tim Deegan 2012-03-22 16:59 ` Tim Deegan 2012-03-23 13:44 ` [Qemu-devel] [Xen-devel] " Julien Grall 2012-03-23 13:44 ` Julien Grall
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=1332502403.30916.23.camel@zakaz.uk.xensource.com \ --to=ian.campbell@citrix.com \ --cc=Stefano.Stabellini@eu.citrix.com \ --cc=julian.pidancet@citrix.com \ --cc=julien.grall@citrix.com \ --cc=qemu-devel@nongnu.org \ --cc=xen-devel@lists.xensource.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.