Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Paolo Bonzini: "ARM: - data abort report and injection - steal time support - GICv4 performance improvements - vgic ITS emulation fixes - simplify FWB handling - enable halt polling counters - make the emulated timer PREEMPT_RT compliant s390: - small fixes and cleanups - selftest improvements - yield improvements PPC: - add capability to tell userspace whether we can single-step the guest - improve the allocation of XIVE virtual processor IDs - rewrite interrupt synthesis code to deliver interrupts in virtual mode when appropriate. - minor cleanups and improvements. x86: - XSAVES support for AMD - more accurate report of nested guest TSC to the nested hypervisor - retpoline optimizations - support for nested 5-level page tables - PMU virtualization optimizations, and improved support for nested PMU virtualization - correct latching of INITs for nested virtualization - IOAPIC optimization - TSX_CTRL virtualization for more TAA happiness - improved allocation and flushing of SEV ASIDs - many bugfixes and cleanups" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (127 commits) kvm: nVMX: Relax guest IA32_FEATURE_CONTROL constraints KVM: x86: Grab KVM's srcu lock when setting nested state KVM: x86: Open code shared_msr_update() in its only caller KVM: Fix jump label out_free_* in kvm_init() KVM: x86: Remove a spurious export of a static function KVM: x86: create mmu/ subdirectory KVM: nVMX: Remove unnecessary TLB flushes on L1<->L2 switches when L1 use apic-access-page KVM: x86: remove set but not used variable 'called' KVM: nVMX: Do not mark vmcs02->apic_access_page as dirty when unpinning KVM: vmx: use MSR_IA32_TSX_CTRL to hard-disable TSX on guest that lack it KVM: vmx: implement MSR_IA32_TSX_CTRL disable RTM functionality KVM: x86: implement MSR_IA32_TSX_CTRL effect on CPUID KVM: x86: do not modify masked bits of shared MSRs KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES KVM: PPC: Book3S HV: XIVE: Fix potential page leak on error path KVM: PPC: Book3S HV: XIVE: Free previous EQ page when setting up a new one KVM: nVMX: Assume TLB entries of L1 and L2 are tagged differently if L0 use EPT KVM: x86: Unexport kvm_vcpu_reload_apic_access_page() KVM: nVMX: add CR4_LA57 bit to nested CR4_FIXED1 KVM: nVMX: Use semi-colon instead of comma for exit-handlers initialization ...
This commit is contained in:
@@ -5029,6 +5029,24 @@ static void _perf_event_reset(struct perf_event *event)
|
||||
perf_event_update_userpage(event);
|
||||
}
|
||||
|
||||
/* Assume it's not an event with inherit set. */
|
||||
u64 perf_event_pause(struct perf_event *event, bool reset)
|
||||
{
|
||||
struct perf_event_context *ctx;
|
||||
u64 count;
|
||||
|
||||
ctx = perf_event_ctx_lock(event);
|
||||
WARN_ON_ONCE(event->attr.inherit);
|
||||
_perf_event_disable(event);
|
||||
count = local64_read(&event->count);
|
||||
if (reset)
|
||||
local64_set(&event->count, 0);
|
||||
perf_event_ctx_unlock(event, ctx);
|
||||
|
||||
return count;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(perf_event_pause);
|
||||
|
||||
/*
|
||||
* Holding the top-level event's child_mutex means that any
|
||||
* descendant process that has inherited this event will block
|
||||
@@ -5106,16 +5124,11 @@ static int perf_event_check_period(struct perf_event *event, u64 value)
|
||||
return event->pmu->check_period(event, value);
|
||||
}
|
||||
|
||||
static int perf_event_period(struct perf_event *event, u64 __user *arg)
|
||||
static int _perf_event_period(struct perf_event *event, u64 value)
|
||||
{
|
||||
u64 value;
|
||||
|
||||
if (!is_sampling_event(event))
|
||||
return -EINVAL;
|
||||
|
||||
if (copy_from_user(&value, arg, sizeof(value)))
|
||||
return -EFAULT;
|
||||
|
||||
if (!value)
|
||||
return -EINVAL;
|
||||
|
||||
@@ -5133,6 +5146,19 @@ static int perf_event_period(struct perf_event *event, u64 __user *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int perf_event_period(struct perf_event *event, u64 value)
|
||||
{
|
||||
struct perf_event_context *ctx;
|
||||
int ret;
|
||||
|
||||
ctx = perf_event_ctx_lock(event);
|
||||
ret = _perf_event_period(event, value);
|
||||
perf_event_ctx_unlock(event, ctx);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(perf_event_period);
|
||||
|
||||
static const struct file_operations perf_fops;
|
||||
|
||||
static inline int perf_fget_light(int fd, struct fd *p)
|
||||
@@ -5176,8 +5202,14 @@ static long _perf_ioctl(struct perf_event *event, unsigned int cmd, unsigned lon
|
||||
return _perf_event_refresh(event, arg);
|
||||
|
||||
case PERF_EVENT_IOC_PERIOD:
|
||||
return perf_event_period(event, (u64 __user *)arg);
|
||||
{
|
||||
u64 value;
|
||||
|
||||
if (copy_from_user(&value, (u64 __user *)arg, sizeof(value)))
|
||||
return -EFAULT;
|
||||
|
||||
return _perf_event_period(event, value);
|
||||
}
|
||||
case PERF_EVENT_IOC_ID:
|
||||
{
|
||||
u64 id = primary_event_id(event);
|
||||
|
Reference in New Issue
Block a user