Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:olh:xen-unstable
xen
xen.trc-ioreq_server_select.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xen.trc-ioreq_server_select.patch of Package xen
From: Olaf Hering <olaf@aepfle.de> Date: Thu, 15 Jun 2023 08:43:34 +0000 Subject: trc ioreq_server_select Signed-off-by: Olaf Hering <olaf@aepfle.de> --- xen/common/ioreq.c | 20 ++++++--- 1 file changed, 15 insertions(+), 5 deletions(-) --- a/xen/common/ioreq.c +++ b/xen/common/ioreq.c @@ -1322,71 +1322,81 @@ void ioreq_server_destroy_all(struct domain *d) } rspin_unlock(&d->ioreq_server.lock); } struct ioreq_server *ioreq_server_select(struct domain *d, ioreq_t *p) { struct ioreq_server *s; uint8_t type; uint64_t addr; unsigned int id; + trc_ioreq_server_select_t trc = { + .d = d->domain_id, + .type = p->type, + }; if ( !arch_ioreq_server_get_type_addr(d, p, &type, &addr) ) - return NULL; + { + s = NULL; + goto out; + } FOR_EACH_IOREQ_SERVER(d, id, s) { struct rangeset *r; if ( !s->enabled ) continue; r = s->range[type]; switch ( type ) { unsigned long start, end; case XEN_DMOP_IO_RANGE_PORT: start = addr; end = start + p->size - 1; if ( rangeset_contains_range(r, start, end) ) - return s; + goto out; break; case XEN_DMOP_IO_RANGE_MEMORY: start = ioreq_mmio_first_byte(p); end = ioreq_mmio_last_byte(p); if ( rangeset_contains_range(r, start, end) ) - return s; + goto out; break; case XEN_DMOP_IO_RANGE_PCI: if ( rangeset_contains_singleton(r, addr >> 32) ) { p->type = IOREQ_TYPE_PCI_CONFIG; p->addr = addr; - return s; + goto out; } break; } } - return NULL; +out: + trc.s = TRC_ePTR(s); + TRACE_trc(TRC_IOREQ_ioreq_server_select); + return s; } static int ioreq_send_buffered(struct ioreq_server *s, ioreq_t *p) { struct domain *d = current->domain; struct ioreq_page *iorp; buffered_iopage_t *pg; buf_ioreq_t bp = { .data = p->data, .addr = p->addr, .type = p->type, .dir = p->dir }; /* Timeoffset sends 64b data, but no address. Use two consecutive slots. */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor