xen-hvm: Add trace to ioreq
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Don Slutz <dslutz@verizon.com>
This commit is contained in:
parent
8611280505
commit
eeb6b13a5a
@ -936,6 +936,13 @@ xen_map_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %
|
||||
xen_unmap_portio_range(uint32_t id, uint64_t start_addr, uint64_t end_addr) "id: %u start: %#"PRIx64" end: %#"PRIx64
|
||||
xen_map_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
|
||||
xen_unmap_pcidev(uint32_t id, uint8_t bus, uint8_t dev, uint8_t func) "id: %u bdf: %02x.%02x.%02x"
|
||||
handle_ioreq(void *req, uint32_t type, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p type=%d dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
handle_ioreq_read(void *req, uint32_t type, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p read type=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
handle_ioreq_write(void *req, uint32_t type, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p write type=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
cpu_ioreq_pio(void *req, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p pio dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
cpu_ioreq_pio_read_reg(void *req, uint64_t data, uint64_t addr, uint32_t size) "I/O=%p pio read reg data=%#"PRIx64" port=%#"PRIx64" size=%d"
|
||||
cpu_ioreq_pio_write_reg(void *req, uint64_t data, uint64_t addr, uint32_t size) "I/O=%p pio write reg data=%#"PRIx64" port=%#"PRIx64" size=%d"
|
||||
cpu_ioreq_move(void *req, uint32_t dir, uint32_t df, uint32_t data_is_ptr, uint64_t addr, uint64_t data, uint32_t count, uint32_t size) "I/O=%p copy dir=%d df=%d ptr=%d port=%#"PRIx64" data=%#"PRIx64" count=%d size=%d"
|
||||
|
||||
# xen-mapcache.c
|
||||
xen_map_cache(uint64_t phys_addr) "want %#"PRIx64
|
||||
|
21
xen-hvm.c
21
xen-hvm.c
@ -814,9 +814,14 @@ static void cpu_ioreq_pio(ioreq_t *req)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
trace_cpu_ioreq_pio(req, req->dir, req->df, req->data_is_ptr, req->addr,
|
||||
req->data, req->count, req->size);
|
||||
|
||||
if (req->dir == IOREQ_READ) {
|
||||
if (!req->data_is_ptr) {
|
||||
req->data = do_inp(req->addr, req->size);
|
||||
trace_cpu_ioreq_pio_read_reg(req, req->data, req->addr,
|
||||
req->size);
|
||||
} else {
|
||||
uint32_t tmp;
|
||||
|
||||
@ -827,6 +832,8 @@ static void cpu_ioreq_pio(ioreq_t *req)
|
||||
}
|
||||
} else if (req->dir == IOREQ_WRITE) {
|
||||
if (!req->data_is_ptr) {
|
||||
trace_cpu_ioreq_pio_write_reg(req, req->data, req->addr,
|
||||
req->size);
|
||||
do_outp(req->addr, req->size, req->data);
|
||||
} else {
|
||||
for (i = 0; i < req->count; i++) {
|
||||
@ -843,6 +850,9 @@ static void cpu_ioreq_move(ioreq_t *req)
|
||||
{
|
||||
uint32_t i;
|
||||
|
||||
trace_cpu_ioreq_move(req, req->dir, req->df, req->data_is_ptr, req->addr,
|
||||
req->data, req->count, req->size);
|
||||
|
||||
if (!req->data_is_ptr) {
|
||||
if (req->dir == IOREQ_READ) {
|
||||
for (i = 0; i < req->count; i++) {
|
||||
@ -915,11 +925,18 @@ static void handle_vmport_ioreq(XenIOState *state, ioreq_t *req)
|
||||
|
||||
static void handle_ioreq(XenIOState *state, ioreq_t *req)
|
||||
{
|
||||
trace_handle_ioreq(req, req->type, req->dir, req->df, req->data_is_ptr,
|
||||
req->addr, req->data, req->count, req->size);
|
||||
|
||||
if (!req->data_is_ptr && (req->dir == IOREQ_WRITE) &&
|
||||
(req->size < sizeof (target_ulong))) {
|
||||
req->data &= ((target_ulong) 1 << (8 * req->size)) - 1;
|
||||
}
|
||||
|
||||
if (req->dir == IOREQ_WRITE)
|
||||
trace_handle_ioreq_write(req, req->type, req->df, req->data_is_ptr,
|
||||
req->addr, req->data, req->count, req->size);
|
||||
|
||||
switch (req->type) {
|
||||
case IOREQ_TYPE_PIO:
|
||||
cpu_ioreq_pio(req);
|
||||
@ -959,6 +976,10 @@ static void handle_ioreq(XenIOState *state, ioreq_t *req)
|
||||
default:
|
||||
hw_error("Invalid ioreq type 0x%x\n", req->type);
|
||||
}
|
||||
if (req->dir == IOREQ_READ) {
|
||||
trace_handle_ioreq_read(req, req->type, req->df, req->data_is_ptr,
|
||||
req->addr, req->data, req->count, req->size);
|
||||
}
|
||||
}
|
||||
|
||||
static int handle_buffered_iopage(XenIOState *state)
|
||||
|
Loading…
Reference in New Issue
Block a user