From: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: <joro@8bytes.org>, <bp@alien8.de>, <mingo@redhat.com>,
<acme@kernel.org>, <andihartmann@freenet.de>,
<linux-kernel@vger.kernel.org>,
<iommu@lists.linux-foundation.org>
Subject: Re: [PATCH V4 5/6] perf/amd/iommu: Enable support for multiple IOMMUs
Date: Mon, 22 Feb 2016 15:00:31 +0700 [thread overview]
Message-ID: <56CAC01F.8090800@amd.com> (raw)
In-Reply-To: <20160218131853.GU6357@twins.programming.kicks-ass.net>
Hi Peter,
On 02/18/2016 08:18 PM, Peter Zijlstra wrote:
> On Thu, Feb 11, 2016 at 04:15:26PM +0700, Suravee Suthikulpanit wrote:
>> static void perf_iommu_read(struct perf_event *event)
>> {
>> + int i;
>> u64 delta = 0ULL;
>> struct hw_perf_event *hwc = &event->hw;
>> + struct perf_amd_iommu *perf_iommu = container_of(event->pmu,
>> + struct perf_amd_iommu,
>> + pmu);
>>
>> + if (amd_iommu_pc_get_counters(_GET_BANK(event), _GET_CNTR(event),
>> + amd_iommu_get_num_iommus(),
>> + perf_iommu_cnts))
>> return;
>>
>> + /*
>> + * Now we re-aggregating event counts and prev-counts
>> + * from all IOMMUs
>> + */
>> + local64_set(&hwc->prev_count, 0);
>> +
>> + for (i = 0; i < amd_iommu_get_num_iommus(); i++) {
>> + int indx = get_iommu_bnk_cnt_evt_idx(perf_iommu, i,
>> + _GET_BANK(event),
>> + _GET_CNTR(event));
>> + u64 prev_raw_count = local64_read(&perf_iommu->prev_cnts[indx]);
>> +
>> + /* IOMMU pc counter register is only 48 bits */
>> + perf_iommu_cnts[i] &= GENMASK_ULL(48, 0);
>> +
>> + /*
>> + * Since we do not enable counter overflow interrupts,
>> + * we do not have to worry about prev_count changing on us
>> + */
>> + local64_set(&perf_iommu->prev_cnts[indx], perf_iommu_cnts[i]);
>> + local64_add(prev_raw_count, &hwc->prev_count);
>> +
>> + /* Handle 48-bit counter overflow */
>> + delta = (perf_iommu_cnts[i] << COUNTER_SHIFT) - (prev_raw_count << COUNTER_SHIFT);
>> + delta >>= COUNTER_SHIFT;
>> + local64_add(delta, &event->count);
>> + }
>> }
>
> So I really don't have time to review new muck while I'm hunting perf
> core fail, but Boris made me look at this.
>
> This is crazy, if you have multiple IOMMUs then create an event per
> IOMMU, do _NOT_ fold them all into a single event.
These are system-wide events, which are programmed on every IOMMU the
same way. I am not sure what you meant by creating an event per IOMMU.
Do you mean I should create internal per-IOMMU struct perf_event for
each event? Could you please give me some pointers?
> In any case, the reason Boris asked me to look at this is that your
> overflow handling is broken, you want delta to be s64. Otherwise:
>
> delta >>= COUNTER_SHIFT;
>
> ends up as a SHR and you loose the MSB sign bits.
Ah. Sorry, I missed that.
Thanks,
Suravee
next prev parent reply other threads:[~2016-02-22 8:00 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-11 9:15 [PATCH V4 0/6] perf/amd/iommu: Enable multi-IOMMU support Suravee Suthikulpanit
2016-02-11 9:15 ` [PATCH V4 1/6] perf/amd/iommu: Consolidate and move perf_event_amd_iommu header Suravee Suthikulpanit
2016-02-11 9:15 ` [PATCH V4 2/6] perf/amd/iommu: Modify functions to query max banks and counters Suravee Suthikulpanit
2016-02-18 11:11 ` Borislav Petkov
2016-02-22 4:55 ` Suravee Suthikulpanit
2016-02-11 9:15 ` [PATCH V4 3/6] iommu/amd: Introduce amd_iommu_get_num_iommus() Suravee Suthikulpanit
2016-02-11 9:15 ` [PATCH V4 4/6] perf/amd/iommu: Introduce get_iommu_bnk_cnt_evt_idx Suravee Suthikulpanit
2016-02-18 11:45 ` Borislav Petkov
2016-02-11 9:15 ` [PATCH V4 5/6] perf/amd/iommu: Enable support for multiple IOMMUs Suravee Suthikulpanit
2016-02-18 13:18 ` Peter Zijlstra
2016-02-22 8:00 ` Suravee Suthikulpanit [this message]
2016-02-22 14:07 ` Peter Zijlstra
2016-02-23 5:12 ` Suravee Suthikulpanit
2016-02-23 5:24 ` Alex Williamson
2016-02-23 9:56 ` Suravee Suthikulpanit
2016-02-18 13:21 ` Borislav Petkov
2016-02-11 9:15 ` [PATCH V4 6/6] perf/amd/iommu: Clean up print messages pr_debug Suravee Suthikulpanit
2016-02-18 13:22 ` Borislav Petkov
2016-02-18 2:30 ` [PATCH V4 0/6] perf/amd/iommu: Enable multi-IOMMU support Suravee Suthikulpanit
2016-02-23 11:04 ` Joerg Roedel
2016-02-23 11:27 ` Suravee Suthikulpanit
2016-02-23 11:39 ` Suravee Suthikulpanit
2016-02-23 12:12 ` [PATCH] iommu/amd: Fix boot warning when device 00:00.0 is not iommu Joerg Roedel
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=56CAC01F.8090800@amd.com \
--to=suravee.suthikulpanit@amd.com \
--cc=acme@kernel.org \
--cc=andihartmann@freenet.de \
--cc=bp@alien8.de \
--cc=iommu@lists.linux-foundation.org \
--cc=joro@8bytes.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome