From: Roger Pau Monne <roger.pau@citrix.com> To: <xen-devel@lists.xenproject.org> Cc: Andrew Cooper <andrew.cooper3@citrix.com>, Paul Durrant <paul.durrant@citrix.com>, Wei Liu <wl@xen.org>, Jan Beulich <jbeulich@suse.com>, Roger Pau Monne <roger.pau@citrix.com> Subject: [Xen-devel] [PATCH 3/7] ioreq: allow dispatching ioreqs to internal servers Date: Wed, 21 Aug 2019 16:58:59 +0200 Message-ID: <20190821145903.45934-4-roger.pau@citrix.com> (raw) In-Reply-To: <20190821145903.45934-1-roger.pau@citrix.com> Internal ioreq servers are always processed first, and ioreqs are dispatched by calling the handler function. If no internal servers have registered for an ioreq it's then forwarded to external callers. Signed-off-by: Roger Pau Monné <roger.pau@citrix.com> --- xen/arch/x86/hvm/ioreq.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/xen/arch/x86/hvm/ioreq.c b/xen/arch/x86/hvm/ioreq.c index 23ef9b0c02..3fb6fe9585 100644 --- a/xen/arch/x86/hvm/ioreq.c +++ b/xen/arch/x86/hvm/ioreq.c @@ -1305,6 +1305,7 @@ struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d, uint8_t type; uint64_t addr; unsigned int id; + bool internal = true; if ( p->type != IOREQ_TYPE_COPY && p->type != IOREQ_TYPE_PIO ) return NULL; @@ -1345,11 +1346,12 @@ struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d, addr = p->addr; } + retry: FOR_EACH_IOREQ_SERVER(d, id, s) { struct rangeset *r; - if ( !s->enabled ) + if ( !s->enabled || s->internal != internal ) continue; r = s->range[type]; @@ -1387,6 +1389,12 @@ struct hvm_ioreq_server *hvm_select_ioreq_server(struct domain *d, } } + if ( internal ) + { + internal = false; + goto retry; + } + return NULL; } @@ -1492,9 +1500,18 @@ int hvm_send_ioreq(struct hvm_ioreq_server *s, ioreq_t *proto_p, ASSERT(s); + if ( s->internal && buffered ) + { + ASSERT_UNREACHABLE(); + return X86EMUL_UNHANDLEABLE; + } + if ( buffered ) return hvm_send_buffered_ioreq(s, proto_p); + if ( s->internal ) + return s->handler(curr, proto_p); + if ( unlikely(!vcpu_start_shutdown_deferral(curr)) ) return X86EMUL_RETRY; -- 2.22.0 _______________________________________________ Xen-devel mailing list Xen-devel@lists.xenproject.org https://lists.xenproject.org/mailman/listinfo/xen-devel
next prev parent reply index Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-21 14:58 [Xen-devel] [PATCH 0/7] ioreq: add support for " Roger Pau Monne 2019-08-21 14:58 ` [Xen-devel] [PATCH 1/7] ioreq: add fields to allow internal ioreq servers Roger Pau Monne 2019-08-21 14:58 ` [Xen-devel] [PATCH 2/7] ioreq: add internal ioreq initialization support Roger Pau Monne 2019-08-21 16:24 ` Paul Durrant 2019-08-22 7:23 ` Roger Pau Monné 2019-08-22 8:30 ` Paul Durrant 2019-08-21 14:58 ` Roger Pau Monne [this message] 2019-08-21 16:29 ` [Xen-devel] [PATCH 3/7] ioreq: allow dispatching ioreqs to internal servers Paul Durrant 2019-08-22 7:40 ` Roger Pau Monné 2019-08-22 8:33 ` Paul Durrant 2019-08-21 14:59 ` [Xen-devel] [PATCH 4/7] ioreq: allow registering internal ioreq server handler Roger Pau Monne 2019-08-21 16:35 ` Paul Durrant 2019-08-22 7:43 ` Roger Pau Monné 2019-08-22 8:38 ` Paul Durrant 2019-08-21 14:59 ` [Xen-devel] [PATCH 5/7] ioreq: allow decoding accesses to MMCFG regions Roger Pau Monne 2019-08-21 14:59 ` [Xen-devel] [PATCH 6/7] vpci: register as an internal ioreq server Roger Pau Monne 2019-08-21 14:59 ` [Xen-devel] [PATCH 7/7] ioreq: provide support for long-running operations Roger Pau Monne 2019-08-22 9:15 ` Paul Durrant 2019-08-22 12:55 ` Roger Pau Monné 2019-08-22 13:07 ` Paul Durrant
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=20190821145903.45934-4-roger.pau@citrix.com \ --to=roger.pau@citrix.com \ --cc=andrew.cooper3@citrix.com \ --cc=jbeulich@suse.com \ --cc=paul.durrant@citrix.com \ --cc=wl@xen.org \ --cc=xen-devel@lists.xenproject.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
Xen-Devel Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/xen-devel/0 xen-devel/git/0.git git clone --mirror https://lore.kernel.org/xen-devel/1 xen-devel/git/1.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 xen-devel xen-devel/ https://lore.kernel.org/xen-devel \ xen-devel@lists.xenproject.org xen-devel@lists.xen.org public-inbox-index xen-devel Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.xenproject.lists.xen-devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git