diff options
| author | Michael Bestas <mkbestas@lineageos.org> | 2020-12-09 21:13:42 +0200 |
|---|---|---|
| committer | Michael Bestas <mkbestas@lineageos.org> | 2020-12-09 21:13:42 +0200 |
| commit | 8102b85e3faf04bca28962ad5e351a8f6e96e1d4 (patch) | |
| tree | 769f7e955438f13ba98787fc9dcf4772e88816bc /kernel/events | |
| parent | 7b1ec6c9c1ad407744d6480da1ef9d650679e831 (diff) | |
| parent | 4cb652f2d058eacdfb720e53de0dceaf19ae4587 (diff) | |
Merge branch 'android-4.4-p' of https://android.googlesource.com/kernel/common into lineage-17.1-caf-msm8998
This brings LA.UM.8.4.r1-06200-8x98.0 up to date with
https://android.googlesource.com/kernel/common/ android-4.4-p at commit:
4cb652f2d058e ANDROID: cuttlefish_defconfig: Disable CONFIG_KSM
Conflicts:
arch/arm64/include/asm/mmu_context.h
arch/powerpc/include/asm/uaccess.h
drivers/scsi/ufs/ufshcd.c
Change-Id: I25e090fc1a5a7d379aa8f681371e9918b3adeda6
Diffstat (limited to 'kernel/events')
| -rw-r--r-- | kernel/events/core.c | 7 | ||||
| -rw-r--r-- | kernel/events/internal.h | 2 |
2 files changed, 5 insertions, 4 deletions
diff --git a/kernel/events/core.c b/kernel/events/core.c index 8cc235d115ee..bbd9c080ffd0 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -4768,11 +4768,11 @@ static void perf_pmu_output_stop(struct perf_event *event); static void perf_mmap_close(struct vm_area_struct *vma) { struct perf_event *event = vma->vm_file->private_data; - struct ring_buffer *rb = ring_buffer_get(event); struct user_struct *mmap_user = rb->mmap_user; int mmap_locked = rb->mmap_locked; unsigned long size = perf_data_size(rb); + bool detach_rest = false; if (event->pmu->event_unmapped) event->pmu->event_unmapped(event); @@ -4803,7 +4803,8 @@ static void perf_mmap_close(struct vm_area_struct *vma) mutex_unlock(&event->mmap_mutex); } - atomic_dec(&rb->mmap_count); + if (atomic_dec_and_test(&rb->mmap_count)) + detach_rest = true; if (!atomic_dec_and_mutex_lock(&event->mmap_count, &event->mmap_mutex)) goto out_put; @@ -4812,7 +4813,7 @@ static void perf_mmap_close(struct vm_area_struct *vma) mutex_unlock(&event->mmap_mutex); /* If there's still other mmap()s of this buffer, we're done. */ - if (atomic_read(&rb->mmap_count)) + if (!detach_rest) goto out_put; /* diff --git a/kernel/events/internal.h b/kernel/events/internal.h index 2b229fdcfc09..7e59e583e1a3 100644 --- a/kernel/events/internal.h +++ b/kernel/events/internal.h @@ -192,7 +192,7 @@ static inline int get_recursion_context(int *recursion) rctx = 3; else if (in_irq()) rctx = 2; - else if (in_softirq()) + else if (in_serving_softirq()) rctx = 1; else rctx = 0; |
