From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: Jan Beulich <JBeulich@suse.com>
Cc: kevin.tian@intel.com, keir@xen.org,
suravee.suthikulpanit@amd.com, andrew.cooper3@citrix.com,
tim@xen.org, dietmar.hahn@ts.fujitsu.com,
xen-devel@lists.xen.org, Aravind.Gopalakrishnan@amd.com,
jun.nakajima@intel.com, dgdegra@tycho.nsa.gov
Subject: Re: [PATCH v15 11/21] x86/VPMU: Interface for setting PMU mode and flags
Date: Wed, 26 Nov 2014 09:26:29 -0500 [thread overview]
Message-ID: <5475E315.8050507@oracle.com> (raw)
In-Reply-To: <547493D4020000780004AAF3@mail.emea.novell.com>
On 11/25/2014 08:36 AM, Jan Beulich wrote:
>
>> +static long vpmu_sched_checkin(void *arg)
>> +{
>> + int cpu = cpumask_next(smp_processor_id(), &cpu_online_map);
> unsigned int.
>
>> + int ret;
>> +
>> + /* Mode change shouldn't take more than a few (say, 5) seconds. */
>> + if ( NOW() > vpmu_start_ctxt_switch + SECONDS(5) )
>> + {
>> + ret = -EBUSY;
>> + goto fail;
>> + }
> So what does this guard against? Holding xenpmu_mode_lock for
> 5 seconds is not a problem, plus I don't think you actually need a
> lock at all. Just using a global, atomically updated flag ought to be
> sufficient (the way you use the lock is really nothing else afaict).
I didn't put it here because of the lock. I just wanted to terminate
this operation (mode change) if it takes unreasonable amount of time.
And I thought 5 seconds would be unreasonable.
>
>> +{
>> + int ret;
>> +
>> + vpmu_start_ctxt_switch = NOW();
>> +
>> + ret = continue_hypercall_on_cpu(cpumask_first(&cpu_online_map),
>> + vpmu_sched_checkin, (void *)old_mode);
>> + if ( ret )
>> + vpmu_start_ctxt_switch = 0;
>> +
>> + return ret;
>> +}
> I don't think it is guaranteed (independent of implementation details
> of continue_hypercall_on_cpu()) that this way you went through the
> context switch path once on each CPU if
> cpumask_first(&cpu_online_map) == smp_processor_id() here. In
> particular it looks like there being a problem calling vcpu_sleep_sync()
> in the tasklet handler when v == current (which would be the case
> if you started on the "correct" CPU and the tasklet softirq got
> handled before the scheduler one). I think you instead want to use
> cpumask_cycle() here and above, and finish the whole operation
> once you're back on the CPU you started on (the single-pCPU case
> may need some extra consideration).
So your concern is only because of initiating CPU? I can do a
force_save() on it so I don't really need a context switch here. This
will take care of single PCPU too.
>
> I realize that you simply follow what microcode_update() does, but
> I think we should rather correct that one than copy the latent issue
> it has elsewhere.
>
>> +long do_xenpmu_op(int op, XEN_GUEST_HANDLE_PARAM(xen_pmu_params_t) arg)
>> +{
>> + int ret;
>> + struct xen_pmu_params pmu_params;
>> +
>> + ret = xsm_pmu_op(XSM_OTHER, current->domain, op);
>> + if ( ret )
>> + return ret;
>> +
>> + switch ( op )
>> + {
>> + case XENPMU_mode_set:
>> + {
>> + uint64_t old_mode;
> Irrespective of the earlier comments I don't see why this isn't just
> unsigned int (or typeof(vpmu_mode)).
This was because vpmu_force_context switch() takes uint64_t as an
argument. Now that it will become unsigned long this should too, no?
Yes, the compiler will promote it if it is an int but I thought this
would look cleaner.
-boris
next prev parent reply other threads:[~2014-11-26 14:26 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-11-16 23:07 [PATCH v15 00/21] x86/PMU: Xen PMU PV(H) support Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 01/21] common/symbols: Export hypervisor symbols to privileged guest Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 02/21] x86/VPMU: Manage VPMU_CONTEXT_SAVE flag in vpmu_save_force() Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 03/21] x86/VPMU: Set MSR bitmaps only for HVM/PVH guests Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 04/21] x86/VPMU: Make vpmu macros a bit more efficient Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 05/21] intel/VPMU: Clean up Intel VPMU code Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 06/21] vmx: Merge MSR management routines Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 07/21] x86/VPMU: Handle APIC_LVTPC accesses Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 08/21] intel/VPMU: MSR_CORE_PERF_GLOBAL_CTRL should be initialized to zero Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 09/21] x86/VPMU: Add public xenpmu.h Boris Ostrovsky
2014-11-25 12:48 ` Jan Beulich
2014-11-25 15:19 ` Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 10/21] x86/VPMU: Make vpmu not HVM-specific Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 11/21] x86/VPMU: Interface for setting PMU mode and flags Boris Ostrovsky
2014-11-25 13:36 ` Jan Beulich
2014-11-26 14:26 ` Boris Ostrovsky [this message]
2014-11-27 8:55 ` Jan Beulich
2014-11-25 13:49 ` Jan Beulich
2014-11-26 14:32 ` Boris Ostrovsky
2014-11-27 8:57 ` Jan Beulich
2014-12-03 20:13 ` Boris Ostrovsky
2014-12-04 8:51 ` Jan Beulich
2014-12-04 15:55 ` Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 12/21] x86/VPMU: Initialize VPMUs with __initcall Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 13/21] x86/VPMU: Initialize PMU for PV(H) guests Boris Ostrovsky
2014-11-25 14:03 ` Jan Beulich
2014-11-16 23:07 ` [PATCH v15 14/21] x86/VPMU: Save VPMU state for PV guests during context switch Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 15/21] x86/VPMU: When handling MSR accesses, leave fault injection to callers Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 16/21] x86/VPMU: Add support for PMU register handling on PV guests Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 17/21] x86/VPMU: Handle PMU interrupts for " Boris Ostrovsky
2014-11-25 14:28 ` Jan Beulich
2014-11-26 14:39 ` Boris Ostrovsky
2014-11-27 8:59 ` Jan Beulich
2014-12-03 20:29 ` Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 18/21] x86/VPMU: Merge vpmu_rdmsr and vpmu_wrmsr Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 19/21] x86/VPMU: Add privileged PMU mode Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 20/21] x86/VPMU: NMI-based VPMU support Boris Ostrovsky
2014-11-16 23:07 ` [PATCH v15 21/21] x86/VPMU: Move VPMU files up from hvm/ directory Boris Ostrovsky
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=5475E315.8050507@oracle.com \
--to=boris.ostrovsky@oracle.com \
--cc=Aravind.Gopalakrishnan@amd.com \
--cc=JBeulich@suse.com \
--cc=andrew.cooper3@citrix.com \
--cc=dgdegra@tycho.nsa.gov \
--cc=dietmar.hahn@ts.fujitsu.com \
--cc=jun.nakajima@intel.com \
--cc=keir@xen.org \
--cc=kevin.tian@intel.com \
--cc=suravee.suthikulpanit@amd.com \
--cc=tim@xen.org \
--cc=xen-devel@lists.xen.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 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.