All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Wang <jasowang@redhat.com>
To: Peter Xu <peterx@redhat.com>, qemu-devel@nongnu.org
Cc: tianyu.lan@intel.com, kevin.tian@intel.com, mst@redhat.com,
	jan.kiszka@siemens.com, alex.williamson@redhat.com,
	bd.aviv@gmail.com, David Gibson <david@gibson.dropbear.id.au>
Subject: Re: [Qemu-devel] [PATCH v7 08/17] intel_iommu: convert dbg macros to trace for trans
Date: Wed, 8 Feb 2017 10:49:54 +0800	[thread overview]
Message-ID: <b8281b60-fd4d-06a5-145b-815000f34847@redhat.com> (raw)
In-Reply-To: <1486456099-7345-9-git-send-email-peterx@redhat.com>



On 2017年02月07日 16:28, Peter Xu wrote:
> Another patch to convert the DPRINTF() stuffs. This patch focuses on the
> address translation path and caching.
>
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>   hw/i386/intel_iommu.c | 69 ++++++++++++++++++---------------------------------
>   hw/i386/trace-events  | 10 ++++++++
>   2 files changed, 34 insertions(+), 45 deletions(-)

Reviewed-by: Jason Wang <jasowang@redhat.com>

>
> diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c
> index 08e43b6..ad304f6 100644
> --- a/hw/i386/intel_iommu.c
> +++ b/hw/i386/intel_iommu.c
> @@ -260,11 +260,9 @@ static void vtd_update_iotlb(IntelIOMMUState *s, uint16_t source_id,
>       uint64_t *key = g_malloc(sizeof(*key));
>       uint64_t gfn = vtd_get_iotlb_gfn(addr, level);
>   
> -    VTD_DPRINTF(CACHE, "update iotlb sid 0x%"PRIx16 " iova 0x%"PRIx64
> -                " slpte 0x%"PRIx64 " did 0x%"PRIx16, source_id, addr, slpte,
> -                domain_id);
> +    trace_vtd_iotlb_page_update(source_id, addr, slpte, domain_id);
>       if (g_hash_table_size(s->iotlb) >= VTD_IOTLB_MAX_SIZE) {
> -        VTD_DPRINTF(CACHE, "iotlb exceeds size limit, forced to reset");
> +        trace_vtd_iotlb_reset("iotlb exceeds size limit");
>           vtd_reset_iotlb(s);
>       }
>   
> @@ -505,8 +503,7 @@ static int vtd_get_root_entry(IntelIOMMUState *s, uint8_t index,
>   
>       addr = s->root + index * sizeof(*re);
>       if (dma_memory_read(&address_space_memory, addr, re, sizeof(*re))) {
> -        VTD_DPRINTF(GENERAL, "error: fail to access root-entry at 0x%"PRIx64
> -                    " + %"PRIu8, s->root, index);
> +        trace_vtd_re_invalid(re->rsvd, re->val);
>           re->val = 0;
>           return -VTD_FR_ROOT_TABLE_INV;
>       }
> @@ -524,15 +521,10 @@ static int vtd_get_context_entry_from_root(VTDRootEntry *root, uint8_t index,
>   {
>       dma_addr_t addr;
>   
> -    if (!vtd_root_entry_present(root)) {
> -        VTD_DPRINTF(GENERAL, "error: root-entry is not present");
> -        return -VTD_FR_ROOT_ENTRY_P;
> -    }
> +    /* we have checked that root entry is present */
>       addr = (root->val & VTD_ROOT_ENTRY_CTP) + index * sizeof(*ce);
>       if (dma_memory_read(&address_space_memory, addr, ce, sizeof(*ce))) {
> -        VTD_DPRINTF(GENERAL, "error: fail to access context-entry at 0x%"PRIx64
> -                    " + %"PRIu8,
> -                    (uint64_t)(root->val & VTD_ROOT_ENTRY_CTP), index);
> +        trace_vtd_re_invalid(root->rsvd, root->val);
>           return -VTD_FR_CONTEXT_TABLE_INV;
>       }
>       ce->lo = le64_to_cpu(ce->lo);
> @@ -704,12 +696,11 @@ static int vtd_dev_to_context_entry(IntelIOMMUState *s, uint8_t bus_num,
>       }
>   
>       if (!vtd_root_entry_present(&re)) {
> -        VTD_DPRINTF(GENERAL, "error: root-entry #%"PRIu8 " is not present",
> -                    bus_num);
> +        /* Not error - it's okay we don't have root entry. */
> +        trace_vtd_re_not_present(bus_num);
>           return -VTD_FR_ROOT_ENTRY_P;
>       } else if (re.rsvd || (re.val & VTD_ROOT_ENTRY_RSVD)) {
> -        VTD_DPRINTF(GENERAL, "error: non-zero reserved field in root-entry "
> -                    "hi 0x%"PRIx64 " lo 0x%"PRIx64, re.rsvd, re.val);
> +        trace_vtd_re_invalid(re.rsvd, re.val);
>           return -VTD_FR_ROOT_ENTRY_RSVD;
>       }
>   
> @@ -719,22 +710,17 @@ static int vtd_dev_to_context_entry(IntelIOMMUState *s, uint8_t bus_num,
>       }
>   
>       if (!vtd_context_entry_present(ce)) {
> -        VTD_DPRINTF(GENERAL,
> -                    "error: context-entry #%"PRIu8 "(bus #%"PRIu8 ") "
> -                    "is not present", devfn, bus_num);
> +        /* Not error - it's okay we don't have context entry. */
> +        trace_vtd_ce_not_present(bus_num, devfn);
>           return -VTD_FR_CONTEXT_ENTRY_P;
>       } else if ((ce->hi & VTD_CONTEXT_ENTRY_RSVD_HI) ||
>                  (ce->lo & VTD_CONTEXT_ENTRY_RSVD_LO)) {
> -        VTD_DPRINTF(GENERAL,
> -                    "error: non-zero reserved field in context-entry "
> -                    "hi 0x%"PRIx64 " lo 0x%"PRIx64, ce->hi, ce->lo);
> +        trace_vtd_ce_invalid(ce->hi, ce->lo);
>           return -VTD_FR_CONTEXT_ENTRY_RSVD;
>       }
>       /* Check if the programming of context-entry is valid */
>       if (!vtd_is_level_supported(s, vtd_get_level_from_context_entry(ce))) {
> -        VTD_DPRINTF(GENERAL, "error: unsupported Address Width value in "
> -                    "context-entry hi 0x%"PRIx64 " lo 0x%"PRIx64,
> -                    ce->hi, ce->lo);
> +        trace_vtd_ce_invalid(ce->hi, ce->lo);
>           return -VTD_FR_CONTEXT_ENTRY_INV;
>       } else {
>           switch (ce->lo & VTD_CONTEXT_ENTRY_TT) {
> @@ -743,9 +729,7 @@ static int vtd_dev_to_context_entry(IntelIOMMUState *s, uint8_t bus_num,
>           case VTD_CONTEXT_TT_DEV_IOTLB:
>               break;
>           default:
> -            VTD_DPRINTF(GENERAL, "error: unsupported Translation Type in "
> -                        "context-entry hi 0x%"PRIx64 " lo 0x%"PRIx64,
> -                        ce->hi, ce->lo);
> +            trace_vtd_ce_invalid(ce->hi, ce->lo);
>               return -VTD_FR_CONTEXT_ENTRY_INV;
>           }
>       }
> @@ -825,9 +809,8 @@ static void vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus,
>       /* Try to fetch slpte form IOTLB */
>       iotlb_entry = vtd_lookup_iotlb(s, source_id, addr);
>       if (iotlb_entry) {
> -        VTD_DPRINTF(CACHE, "hit iotlb sid 0x%"PRIx16 " iova 0x%"PRIx64
> -                    " slpte 0x%"PRIx64 " did 0x%"PRIx16, source_id, addr,
> -                    iotlb_entry->slpte, iotlb_entry->domain_id);
> +        trace_vtd_iotlb_page_hit(source_id, addr, iotlb_entry->slpte,
> +                                 iotlb_entry->domain_id);
>           slpte = iotlb_entry->slpte;
>           reads = iotlb_entry->read_flags;
>           writes = iotlb_entry->write_flags;
> @@ -836,10 +819,9 @@ static void vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus,
>       }
>       /* Try to fetch context-entry from cache first */
>       if (cc_entry->context_cache_gen == s->context_cache_gen) {
> -        VTD_DPRINTF(CACHE, "hit context-cache bus %d devfn %d "
> -                    "(hi %"PRIx64 " lo %"PRIx64 " gen %"PRIu32 ")",
> -                    bus_num, devfn, cc_entry->context_entry.hi,
> -                    cc_entry->context_entry.lo, cc_entry->context_cache_gen);
> +        trace_vtd_iotlb_cc_hit(bus_num, devfn, cc_entry->context_entry.hi,
> +                               cc_entry->context_entry.lo,
> +                               cc_entry->context_cache_gen);
>           ce = cc_entry->context_entry;
>           is_fpd_set = ce.lo & VTD_CONTEXT_ENTRY_FPD;
>       } else {
> @@ -848,19 +830,16 @@ static void vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus,
>           if (ret_fr) {
>               ret_fr = -ret_fr;
>               if (is_fpd_set && vtd_is_qualified_fault(ret_fr)) {
> -                VTD_DPRINTF(FLOG, "fault processing is disabled for DMA "
> -                            "requests through this context-entry "
> -                            "(with FPD Set)");
> +                trace_vtd_fault_disabled();
>               } else {
>                   vtd_report_dmar_fault(s, source_id, addr, ret_fr, is_write);
>               }
>               return;
>           }
>           /* Update context-cache */
> -        VTD_DPRINTF(CACHE, "update context-cache bus %d devfn %d "
> -                    "(hi %"PRIx64 " lo %"PRIx64 " gen %"PRIu32 "->%"PRIu32 ")",
> -                    bus_num, devfn, ce.hi, ce.lo,
> -                    cc_entry->context_cache_gen, s->context_cache_gen);
> +        trace_vtd_iotlb_cc_update(bus_num, devfn, ce.hi, ce.lo,
> +                                  cc_entry->context_cache_gen,
> +                                  s->context_cache_gen);
>           cc_entry->context_entry = ce;
>           cc_entry->context_cache_gen = s->context_cache_gen;
>       }
> @@ -870,8 +849,7 @@ static void vtd_do_iommu_translate(VTDAddressSpace *vtd_as, PCIBus *bus,
>       if (ret_fr) {
>           ret_fr = -ret_fr;
>           if (is_fpd_set && vtd_is_qualified_fault(ret_fr)) {
> -            VTD_DPRINTF(FLOG, "fault processing is disabled for DMA requests "
> -                        "through this context-entry (with FPD Set)");
> +            trace_vtd_fault_disabled();
>           } else {
>               vtd_report_dmar_fault(s, source_id, addr, ret_fr, is_write);
>           }
> @@ -1031,6 +1009,7 @@ static uint64_t vtd_context_cache_invalidate(IntelIOMMUState *s, uint64_t val)
>   
>   static void vtd_iotlb_global_invalidate(IntelIOMMUState *s)
>   {
> +    trace_vtd_iotlb_reset("global invalidation recved");
>       vtd_reset_iotlb(s);
>   }
>   
> diff --git a/hw/i386/trace-events b/hw/i386/trace-events
> index 02aeaab..88ad5e4 100644
> --- a/hw/i386/trace-events
> +++ b/hw/i386/trace-events
> @@ -20,6 +20,16 @@ vtd_inv_desc_wait_sw(uint64_t addr, uint32_t data) "wait invalidate status write
>   vtd_inv_desc_wait_irq(const char *msg) "%s"
>   vtd_inv_desc_wait_invalid(uint64_t hi, uint64_t lo) "invalid wait desc hi 0x%"PRIx64" lo 0x%"PRIx64
>   vtd_inv_desc_wait_write_fail(uint64_t hi, uint64_t lo) "write fail for wait desc hi 0x%"PRIx64" lo 0x%"PRIx64
> +vtd_re_not_present(uint8_t bus) "Root entry bus %"PRIu8" not present"
> +vtd_re_invalid(uint64_t hi, uint64_t lo) "invalid root entry hi 0x%"PRIx64" lo 0x%"PRIx64
> +vtd_ce_not_present(uint8_t bus, uint8_t devfn) "Context entry bus %"PRIu8" devfn %"PRIu8" not present"
> +vtd_ce_invalid(uint64_t hi, uint64_t lo) "invalid context entry hi 0x%"PRIx64" lo 0x%"PRIx64
> +vtd_iotlb_page_hit(uint16_t sid, uint64_t addr, uint64_t slpte, uint16_t domain) "IOTLB page hit sid 0x%"PRIx16" iova 0x%"PRIx64" slpte 0x%"PRIx64" domain 0x%"PRIx16
> +vtd_iotlb_page_update(uint16_t sid, uint64_t addr, uint64_t slpte, uint16_t domain) "IOTLB page update sid 0x%"PRIx16" iova 0x%"PRIx64" slpte 0x%"PRIx64" domain 0x%"PRIx16
> +vtd_iotlb_cc_hit(uint8_t bus, uint8_t devfn, uint64_t high, uint64_t low, uint32_t gen) "IOTLB context hit bus 0x%"PRIx8" devfn 0x%"PRIx8" high 0x%"PRIx64" low 0x%"PRIx64" gen %"PRIu32
> +vtd_iotlb_cc_update(uint8_t bus, uint8_t devfn, uint64_t high, uint64_t low, uint32_t gen1, uint32_t gen2) "IOTLB context update bus 0x%"PRIx8" devfn 0x%"PRIx8" high 0x%"PRIx64" low 0x%"PRIx64" gen %"PRIu32" -> gen %"PRIu32
> +vtd_iotlb_reset(const char *reason) "IOTLB reset (reason: %s)"
> +vtd_fault_disabled(void) "Fault processing disabled for context entry"
>   
>   # hw/i386/amd_iommu.c
>   amdvi_evntlog_fail(uint64_t addr, uint32_t head) "error: fail to write at addr 0x%"PRIx64" +  offset 0x%"PRIx32

  reply	other threads:[~2017-02-08  2:50 UTC|newest]

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-02-07  8:28 [Qemu-devel] [PATCH v7 00/17] VT-d: vfio enablement and misc enhances Peter Xu
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 01/17] vfio: trace map/unmap for notify as well Peter Xu
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 02/17] vfio: introduce vfio_get_vaddr() Peter Xu
2017-02-10  1:12   ` David Gibson
2017-02-10  5:50     ` Peter Xu
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 03/17] vfio: allow to notify unmap for very large region Peter Xu
2017-02-10  1:13   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 04/17] intel_iommu: add "caching-mode" option Peter Xu
2017-02-10  1:14   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 05/17] intel_iommu: simplify irq region translation Peter Xu
2017-02-10  1:15   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 06/17] intel_iommu: renaming gpa to iova where proper Peter Xu
2017-02-10  1:17   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 07/17] intel_iommu: convert dbg macros to traces for inv Peter Xu
2017-02-08  2:47   ` Jason Wang
2017-02-10  1:19   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 08/17] intel_iommu: convert dbg macros to trace for trans Peter Xu
2017-02-08  2:49   ` Jason Wang [this message]
2017-02-10  1:20   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 09/17] intel_iommu: vtd_slpt_level_shift check level Peter Xu
2017-02-10  1:20   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 10/17] memory: add section range info for IOMMU notifier Peter Xu
2017-02-10  2:29   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 11/17] memory: provide IOMMU_NOTIFIER_FOREACH macro Peter Xu
2017-02-10  2:30   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 12/17] memory: provide iommu_replay_all() Peter Xu
2017-02-10  2:31   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 13/17] memory: introduce memory_region_notify_one() Peter Xu
2017-02-10  2:33   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 14/17] memory: add MemoryRegionIOMMUOps.replay() callback Peter Xu
2017-02-10  2:34   ` David Gibson
2017-03-27  8:35   ` Liu, Yi L
2017-03-27  9:12     ` Peter Xu
2017-03-27  9:21       ` Liu, Yi L
2017-03-30 11:06         ` Liu, Yi L
2017-03-30 11:57           ` Jason Wang
2017-03-31  2:56             ` Peter Xu
2017-03-31  4:21               ` Jason Wang
2017-03-31  5:01                 ` Peter Xu
2017-03-31  5:12                   ` Jason Wang
2017-03-31  5:28                     ` Peter Xu
2017-03-31  5:34             ` Liu, Yi L
2017-03-31  7:16               ` Jason Wang
2017-03-31  7:30                 ` Liu, Yi L
2017-04-01  5:00                   ` Jason Wang
2017-04-01  6:39                     ` Liu, Yi L
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 15/17] intel_iommu: provide its own replay() callback Peter Xu
2017-02-10  2:36   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 16/17] intel_iommu: allow dynamic switch of IOMMU region Peter Xu
2017-02-10  2:38   ` David Gibson
2017-02-07  8:28 ` [Qemu-devel] [PATCH v7 17/17] intel_iommu: enable vfio devices Peter Xu
2017-02-10  6:24   ` Jason Wang
2017-03-16  4:05   ` Peter Xu
2017-03-19 15:34     ` Aviv B.D.
2017-03-20  1:56       ` Peter Xu
2017-03-20  2:12         ` Liu, Yi L
2017-03-20  2:41           ` Peter Xu
2017-02-17 17:18 ` [Qemu-devel] [PATCH v7 00/17] VT-d: vfio enablement and misc enhances Alex Williamson
2017-02-20  7:47   ` Peter Xu
2017-02-20  8:17     ` Liu, Yi L
2017-02-20  8:32       ` Peter Xu
2017-02-20 19:15     ` Alex Williamson
2017-02-28  7:52 ` Peter Xu

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=b8281b60-fd4d-06a5-145b-815000f34847@redhat.com \
    --to=jasowang@redhat.com \
    --cc=alex.williamson@redhat.com \
    --cc=bd.aviv@gmail.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=jan.kiszka@siemens.com \
    --cc=kevin.tian@intel.com \
    --cc=mst@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=tianyu.lan@intel.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: link
Be 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.