From: Yury Norov <yury.norov@gmail.com>
To: Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org, Mark Rutland <mark.rutland@arm.com>,
linux-arm-kernel@lists.infradead.org, Jan Kara <jack@suse.cz>,
Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>,
Matthew Wilcox <willy@infradead.org>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>,
Alexey Klimov <klimov.linux@gmail.com>
Subject: Re: [PATCH 07/34] perf/arm: optimize opencoded atomic find_bit() API
Date: Tue, 21 Nov 2023 08:16:13 -0800 [thread overview]
Message-ID: <ZVzXzbbQq2QEYtgs@yury-ThinkPad> (raw)
In-Reply-To: <20231121155344.GB1938@willie-the-truck>
On Tue, Nov 21, 2023 at 03:53:44PM +0000, Will Deacon wrote:
> On Sat, Nov 18, 2023 at 07:50:38AM -0800, Yury Norov wrote:
> > Switch subsystem to use atomic find_bit() or atomic iterators as
> > appropriate.
> >
> > Signed-off-by: Yury Norov <yury.norov@gmail.com>
> > ---
> > drivers/perf/arm-cci.c | 23 +++++------------------
> > drivers/perf/arm-ccn.c | 10 ++--------
> > drivers/perf/arm_dmc620_pmu.c | 9 ++-------
> > drivers/perf/arm_pmuv3.c | 8 ++------
> > 4 files changed, 11 insertions(+), 39 deletions(-)
> >
> > diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c
> > index 61de861eaf91..70fbf9d09d37 100644
> > --- a/drivers/perf/arm-cci.c
> > +++ b/drivers/perf/arm-cci.c
> > @@ -320,12 +320,8 @@ static int cci400_get_event_idx(struct cci_pmu *cci_pmu,
> > return CCI400_PMU_CYCLE_CNTR_IDX;
> > }
> >
> > - for (idx = CCI400_PMU_CNTR0_IDX; idx <= CCI_PMU_CNTR_LAST(cci_pmu); ++idx)
> > - if (!test_and_set_bit(idx, hw->used_mask))
> > - return idx;
> > -
> > - /* No counters available */
> > - return -EAGAIN;
> > + idx = find_and_set_bit(hw->used_mask, CCI_PMU_CNTR_LAST(cci_pmu) + 1);
>
> CCI400_PMU_CNTR0_IDX is defined as 1, so isn't this wrong?
You're right. Will fix in v2
> [...]
>
> > diff --git a/drivers/perf/arm_dmc620_pmu.c b/drivers/perf/arm_dmc620_pmu.c
> > index 30cea6859574..e41c84dabc3e 100644
> > --- a/drivers/perf/arm_dmc620_pmu.c
> > +++ b/drivers/perf/arm_dmc620_pmu.c
> > @@ -303,13 +303,8 @@ static int dmc620_get_event_idx(struct perf_event *event)
> > end_idx = DMC620_PMU_MAX_COUNTERS;
> > }
> >
> > - for (idx = start_idx; idx < end_idx; ++idx) {
> > - if (!test_and_set_bit(idx, dmc620_pmu->used_mask))
> > - return idx;
> > - }
> > -
> > - /* The counters are all in use. */
> > - return -EAGAIN;
> > + idx = find_and_set_next_bit(dmc620_pmu->used_mask, end_idx, start_idx);
>
> It might just be me, but I'd find this a tonne easier to read if you swapped
> the last two arguments around so that the offset came before the limit in
> the new function.
I personally agree, but we already have find_next_*_bit(addr, nbits, offset)
functions, and having atomic versions of the same with different order
of arguments will make it even more messy...
Thanks,
Yury
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
WARNING: multiple messages have this Message-ID (diff)
From: Yury Norov <yury.norov@gmail.com>
To: Will Deacon <will@kernel.org>
Cc: linux-kernel@vger.kernel.org, Mark Rutland <mark.rutland@arm.com>,
linux-arm-kernel@lists.infradead.org, Jan Kara <jack@suse.cz>,
Mirsad Todorovac <mirsad.todorovac@alu.unizg.hr>,
Matthew Wilcox <willy@infradead.org>,
Rasmus Villemoes <linux@rasmusvillemoes.dk>,
Andy Shevchenko <andriy.shevchenko@linux.intel.com>,
Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>,
Alexey Klimov <klimov.linux@gmail.com>
Subject: Re: [PATCH 07/34] perf/arm: optimize opencoded atomic find_bit() API
Date: Tue, 21 Nov 2023 08:16:13 -0800 [thread overview]
Message-ID: <ZVzXzbbQq2QEYtgs@yury-ThinkPad> (raw)
In-Reply-To: <20231121155344.GB1938@willie-the-truck>
On Tue, Nov 21, 2023 at 03:53:44PM +0000, Will Deacon wrote:
> On Sat, Nov 18, 2023 at 07:50:38AM -0800, Yury Norov wrote:
> > Switch subsystem to use atomic find_bit() or atomic iterators as
> > appropriate.
> >
> > Signed-off-by: Yury Norov <yury.norov@gmail.com>
> > ---
> > drivers/perf/arm-cci.c | 23 +++++------------------
> > drivers/perf/arm-ccn.c | 10 ++--------
> > drivers/perf/arm_dmc620_pmu.c | 9 ++-------
> > drivers/perf/arm_pmuv3.c | 8 ++------
> > 4 files changed, 11 insertions(+), 39 deletions(-)
> >
> > diff --git a/drivers/perf/arm-cci.c b/drivers/perf/arm-cci.c
> > index 61de861eaf91..70fbf9d09d37 100644
> > --- a/drivers/perf/arm-cci.c
> > +++ b/drivers/perf/arm-cci.c
> > @@ -320,12 +320,8 @@ static int cci400_get_event_idx(struct cci_pmu *cci_pmu,
> > return CCI400_PMU_CYCLE_CNTR_IDX;
> > }
> >
> > - for (idx = CCI400_PMU_CNTR0_IDX; idx <= CCI_PMU_CNTR_LAST(cci_pmu); ++idx)
> > - if (!test_and_set_bit(idx, hw->used_mask))
> > - return idx;
> > -
> > - /* No counters available */
> > - return -EAGAIN;
> > + idx = find_and_set_bit(hw->used_mask, CCI_PMU_CNTR_LAST(cci_pmu) + 1);
>
> CCI400_PMU_CNTR0_IDX is defined as 1, so isn't this wrong?
You're right. Will fix in v2
> [...]
>
> > diff --git a/drivers/perf/arm_dmc620_pmu.c b/drivers/perf/arm_dmc620_pmu.c
> > index 30cea6859574..e41c84dabc3e 100644
> > --- a/drivers/perf/arm_dmc620_pmu.c
> > +++ b/drivers/perf/arm_dmc620_pmu.c
> > @@ -303,13 +303,8 @@ static int dmc620_get_event_idx(struct perf_event *event)
> > end_idx = DMC620_PMU_MAX_COUNTERS;
> > }
> >
> > - for (idx = start_idx; idx < end_idx; ++idx) {
> > - if (!test_and_set_bit(idx, dmc620_pmu->used_mask))
> > - return idx;
> > - }
> > -
> > - /* The counters are all in use. */
> > - return -EAGAIN;
> > + idx = find_and_set_next_bit(dmc620_pmu->used_mask, end_idx, start_idx);
>
> It might just be me, but I'd find this a tonne easier to read if you swapped
> the last two arguments around so that the offset came before the limit in
> the new function.
I personally agree, but we already have find_next_*_bit(addr, nbits, offset)
functions, and having atomic versions of the same with different order
of arguments will make it even more messy...
Thanks,
Yury
next prev parent reply other threads:[~2023-11-21 16:16 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-11-18 15:50 [PATCH 00/34] biops: add atomig find_bit() operations Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` [PATCH 01/34] lib/find: add atomic find_bit() primitives Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 16:23 ` Bart Van Assche
2023-11-18 16:23 ` Bart Van Assche
2023-11-18 16:23 ` Bart Van Assche
2023-11-18 16:34 ` biops: add atomig find_bit() operations bluez.test.bot
2023-11-18 15:50 ` [PATCH 02/34] lib/sbitmap; make __sbitmap_get_word() using find_and_set_bit() Yury Norov
2023-11-18 15:50 ` [PATCH 03/34] watch_queue: use atomic find_bit() in post_one_notification() Yury Norov
2023-11-18 15:50 ` [PATCH 04/34] sched: add cpumask_find_and_set() and use it in __mm_cid_get() Yury Norov
2023-11-20 11:31 ` Peter Zijlstra
2023-11-20 16:17 ` Mathieu Desnoyers
2023-11-21 13:31 ` Yury Norov
2023-11-21 13:44 ` Mathieu Desnoyers
2023-11-21 17:00 ` Yury Norov
2023-11-18 15:50 ` [PATCH 05/34] mips: sgi-ip30: rework heart_alloc_int() Yury Norov
2023-11-18 15:50 ` [PATCH 06/34] sparc: fix opencoded find_and_set_bit() in alloc_msi() Yury Norov
2023-11-18 15:50 ` [PATCH 07/34] perf/arm: optimize opencoded atomic find_bit() API Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-21 15:53 ` Will Deacon
2023-11-21 15:53 ` Will Deacon
2023-11-21 16:16 ` Yury Norov [this message]
2023-11-21 16:16 ` Yury Norov
2023-11-21 16:17 ` Will Deacon
2023-11-21 16:17 ` Will Deacon
2023-11-18 15:50 ` [PATCH 08/34] drivers/perf: optimize ali_drw_get_counter_idx() by using find_bit() Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-21 15:54 ` Will Deacon
2023-11-21 15:54 ` Will Deacon
2023-11-18 15:50 ` [PATCH 09/34] dmaengine: idxd: optimize perfmon_assign_event() Yury Norov
2023-11-20 15:34 ` Dave Jiang
2023-11-24 12:15 ` Vinod Koul
2023-11-18 15:50 ` [PATCH 10/34] ath10k: optimize ath10k_snoc_napi_poll() by using find_bit() Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` [PATCH 11/34] wifi: rtw88: optimize rtw_pci_tx_kick_off() " Yury Norov
2023-11-18 15:50 ` [PATCH 12/34] wifi: intel: use atomic find_bit() API where appropriate Yury Norov
2023-11-19 19:58 ` Johannes Berg
2023-11-21 16:36 ` Yury Norov
2023-11-18 15:50 ` [PATCH 13/34] KVM: x86: hyper-v: optimize and cleanup kvm_hv_process_stimers() Yury Norov
2023-11-20 14:26 ` Vitaly Kuznetsov
2023-11-21 13:35 ` Yury Norov
2023-11-18 15:50 ` [PATCH 14/34] PCI: hv: switch hv_get_dom_num() to use atomic find_bit() Yury Norov
2023-11-18 17:59 ` Michael Kelley
2023-11-18 15:50 ` [PATCH 15/34] scsi: use atomic find_bit() API where appropriate Yury Norov
2023-11-18 16:30 ` Bart Van Assche
2023-11-18 15:50 ` [PATCH 16/34] powerpc: " Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` [PATCH 17/34] iommu: " Yury Norov
2023-11-18 15:50 ` Yury Norov
2023-11-18 15:50 ` [PATCH 18/34] media: radio-shark: " Yury Norov
2023-11-18 15:50 ` [PATCH 19/34] sfc: switch to using " Yury Norov
2023-11-21 19:46 ` Edward Cree
2023-11-18 15:50 ` [PATCH 20/34] tty: nozomi: optimize interrupt_handler() Yury Norov
2023-11-18 15:50 ` [PATCH 21/34] usb: cdc-acm: optimize acm_softint() Yury Norov
2023-11-20 11:39 ` Oliver Neukum
2023-11-18 15:50 ` [PATCH 22/34] block: null_blk: fix opencoded find_and_set_bit() in get_tag() Yury Norov
2023-11-18 15:50 ` [PATCH 23/34] RDMA/rtrs: fix opencoded find_and_set_bit_lock() in __rtrs_get_permit() Yury Norov
2023-11-18 15:50 ` [PATCH 24/34] mISDN: optimize get_free_devid() Yury Norov
2023-11-18 15:50 ` [PATCH 25/34] media: em28xx: cx231xx: fix opencoded find_and_set_bit() Yury Norov
2023-11-18 15:50 ` [PATCH 26/34] ethernet: rocker: optimize ofdpa_port_internal_vlan_id_get() Yury Norov
2023-11-18 15:50 ` [PATCH 27/34] serial: sc12is7xx: optimize sc16is7xx_alloc_line() Yury Norov
2023-11-18 15:50 ` [PATCH 28/34] bluetooth: optimize cmtp_alloc_block_id() Yury Norov
2023-11-18 15:51 ` [PATCH 29/34] net: smc: fix opencoded find_and_set_bit() in smc_wr_tx_get_free_slot_index() Yury Norov
2023-11-20 8:43 ` Alexandra Winter
2023-11-21 13:41 ` Yury Norov
2023-11-21 15:39 ` Alexandra Winter
2023-11-20 9:56 ` Tony Lu
2023-11-18 15:51 ` [PATCH 30/34] ALSA: use atomic find_bit() functions where applicable Yury Norov
2023-11-20 15:57 ` Takashi Iwai
2023-11-18 15:51 ` [PATCH 31/34] drivers/perf: optimize m1_pmu_get_event_idx() by using find_bit() API Yury Norov
2023-11-18 15:51 ` Yury Norov
2023-11-18 18:40 ` Marc Zyngier
2023-11-18 18:40 ` Marc Zyngier
2023-11-18 18:45 ` Yury Norov
2023-11-18 18:45 ` Yury Norov
2023-11-18 15:51 ` [PATCH 32/34] m68k: rework get_mmu_context() Yury Norov
2023-11-19 19:29 ` Geert Uytterhoeven
2023-11-21 14:39 ` Greg Ungerer
2023-11-18 15:51 ` [PATCH 33/34] microblaze: " Yury Norov
2023-11-18 15:51 ` [PATCH 34/34] sh: rework ilsel_enable() Yury Norov
2023-11-18 16:15 ` John Paul Adrian Glaubitz
2023-11-21 13:43 ` Yury Norov
2023-11-18 16:18 ` [PATCH 00/34] biops: add atomig find_bit() operations Bart Van Assche
2023-11-18 16:18 ` Bart Van Assche
2023-11-18 16:18 ` Bart Van Assche
2023-11-18 19:06 ` Sergey Shtylyov
2023-11-18 19:06 ` Sergey Shtylyov
2023-11-18 19:06 ` Sergey Shtylyov
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=ZVzXzbbQq2QEYtgs@yury-ThinkPad \
--to=yury.norov@gmail.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=jack@suse.cz \
--cc=klimov.linux@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=mark.rutland@arm.com \
--cc=maxim.kuvyrkov@linaro.org \
--cc=mirsad.todorovac@alu.unizg.hr \
--cc=will@kernel.org \
--cc=willy@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 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.