diff options
| author | Tony Lindgren <tony@atomide.com> | 2015-06-09 23:37:31 -0700 |
|---|---|---|
| committer | Tony Lindgren <tony@atomide.com> | 2015-06-09 23:37:31 -0700 |
| commit | 63e63a1981c7247fea41ce97b3144befc8f2fb7b (patch) | |
| tree | 74a5708579661a741b6c62096530e68aee949273 /kernel/events/ring_buffer.c | |
| parent | 5b83b2234be6733cfe22036c38031b2c890b3db8 (diff) | |
| parent | a3e362f18c01f28abcb6d8e5d00be8b5d97ea09d (diff) | |
Merge branch 'wakeirq-8250' into omap-for-v4.2/wakeirq-v2
Diffstat (limited to 'kernel/events/ring_buffer.c')
| -rw-r--r-- | kernel/events/ring_buffer.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/events/ring_buffer.c b/kernel/events/ring_buffer.c index 232f00f273cb..725c416085e3 100644 --- a/kernel/events/ring_buffer.c +++ b/kernel/events/ring_buffer.c @@ -493,6 +493,20 @@ int rb_alloc_aux(struct ring_buffer *rb, struct perf_event *event, rb->aux_pages[rb->aux_nr_pages] = page_address(page++); } + /* + * In overwrite mode, PMUs that don't support SG may not handle more + * than one contiguous allocation, since they rely on PMI to do double + * buffering. In this case, the entire buffer has to be one contiguous + * chunk. + */ + if ((event->pmu->capabilities & PERF_PMU_CAP_AUX_NO_SG) && + overwrite) { + struct page *page = virt_to_page(rb->aux_pages[0]); + + if (page_private(page) != max_order) + goto out; + } + rb->aux_priv = event->pmu->setup_aux(event->cpu, rb->aux_pages, nr_pages, overwrite); if (!rb->aux_priv) |
