From: Yury Norov <yury.norov@gmail.com> To: linux-kernel@vger.kernel.org, Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>, Joerg Roedel <joro@8bytes.org>, Andy Gross <agross@kernel.org>, Bjorn Andersson <andersson@kernel.org>, Konrad Dybcio <konrad.dybcio@linaro.org>, Yury Norov <yury.norov@gmail.com>, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-arm-msm@vger.kernel.org Cc: 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>, Bart Van Assche <bvanassche@acm.org>, Sergey Shtylyov <s.shtylyov@omp.ru> Subject: [PATCH v2 19/35] iommu: use atomic find_bit() API where appropriate Date: Sun, 3 Dec 2023 11:32:51 -0800 [thread overview] Message-ID: <20231203193307.542794-18-yury.norov@gmail.com> (raw) In-Reply-To: <20231203193307.542794-1-yury.norov@gmail.com> Switch opencoded find_and_set_next_bit() in __arm_smmu_alloc_bitmap() and msm_iommu_alloc_ctx() to use dedicated API, and make them nice one-liner wrappers. While here, refactor msm_iommu_attach_dev() and msm_iommu_alloc_ctx() so that error codes don't mismatch. Signed-off-by: Yury Norov <yury.norov@gmail.com> --- drivers/iommu/arm/arm-smmu/arm-smmu.h | 10 ++-------- drivers/iommu/msm_iommu.c | 18 ++++-------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.h b/drivers/iommu/arm/arm-smmu/arm-smmu.h index 703fd5817ec1..004a4704ebf1 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu.h +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.h @@ -453,15 +453,9 @@ struct arm_smmu_impl { static inline int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end) { - int idx; + int idx = find_and_set_next_bit(map, end, start); - do { - idx = find_next_zero_bit(map, end, start); - if (idx == end) - return -ENOSPC; - } while (test_and_set_bit(idx, map)); - - return idx; + return idx < end ? idx : -ENOSPC; } static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, int n) diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c index f86af9815d6f..67124f4228b1 100644 --- a/drivers/iommu/msm_iommu.c +++ b/drivers/iommu/msm_iommu.c @@ -185,17 +185,9 @@ static const struct iommu_flush_ops msm_iommu_flush_ops = { .tlb_add_page = __flush_iotlb_page, }; -static int msm_iommu_alloc_ctx(unsigned long *map, int start, int end) +static int msm_iommu_alloc_ctx(struct msm_iommu_dev *iommu) { - int idx; - - do { - idx = find_next_zero_bit(map, end, start); - if (idx == end) - return -ENOSPC; - } while (test_and_set_bit(idx, map)); - - return idx; + return find_and_set_bit(iommu->context_map, iommu->ncb); } static void msm_iommu_free_ctx(unsigned long *map, int idx) @@ -418,10 +410,8 @@ static int msm_iommu_attach_dev(struct iommu_domain *domain, struct device *dev) ret = -EEXIST; goto fail; } - master->num = - msm_iommu_alloc_ctx(iommu->context_map, - 0, iommu->ncb); - if (IS_ERR_VALUE(master->num)) { + master->num = msm_iommu_alloc_ctx(iommu); + if (master->num >= iommu->ncb) { ret = -ENODEV; goto fail; } -- 2.40.1
WARNING: multiple messages have this Message-ID (diff)
From: Yury Norov <yury.norov@gmail.com> To: linux-kernel@vger.kernel.org, Will Deacon <will@kernel.org>, Robin Murphy <robin.murphy@arm.com>, Joerg Roedel <joro@8bytes.org>, Andy Gross <agross@kernel.org>, Bjorn Andersson <andersson@kernel.org>, Konrad Dybcio <konrad.dybcio@linaro.org>, Yury Norov <yury.norov@gmail.com>, linux-arm-kernel@lists.infradead.org, iommu@lists.linux.dev, linux-arm-msm@vger.kernel.org Cc: 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>, Bart Van Assche <bvanassche@acm.org>, Sergey Shtylyov <s.shtylyov@omp.ru> Subject: [PATCH v2 19/35] iommu: use atomic find_bit() API where appropriate Date: Sun, 3 Dec 2023 11:32:51 -0800 [thread overview] Message-ID: <20231203193307.542794-18-yury.norov@gmail.com> (raw) In-Reply-To: <20231203193307.542794-1-yury.norov@gmail.com> Switch opencoded find_and_set_next_bit() in __arm_smmu_alloc_bitmap() and msm_iommu_alloc_ctx() to use dedicated API, and make them nice one-liner wrappers. While here, refactor msm_iommu_attach_dev() and msm_iommu_alloc_ctx() so that error codes don't mismatch. Signed-off-by: Yury Norov <yury.norov@gmail.com> --- drivers/iommu/arm/arm-smmu/arm-smmu.h | 10 ++-------- drivers/iommu/msm_iommu.c | 18 ++++-------------- 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/drivers/iommu/arm/arm-smmu/arm-smmu.h b/drivers/iommu/arm/arm-smmu/arm-smmu.h index 703fd5817ec1..004a4704ebf1 100644 --- a/drivers/iommu/arm/arm-smmu/arm-smmu.h +++ b/drivers/iommu/arm/arm-smmu/arm-smmu.h @@ -453,15 +453,9 @@ struct arm_smmu_impl { static inline int __arm_smmu_alloc_bitmap(unsigned long *map, int start, int end) { - int idx; + int idx = find_and_set_next_bit(map, end, start); - do { - idx = find_next_zero_bit(map, end, start); - if (idx == end) - return -ENOSPC; - } while (test_and_set_bit(idx, map)); - - return idx; + return idx < end ? idx : -ENOSPC; } static inline void __iomem *arm_smmu_page(struct arm_smmu_device *smmu, int n) diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c index f86af9815d6f..67124f4228b1 100644 --- a/drivers/iommu/msm_iommu.c +++ b/drivers/iommu/msm_iommu.c @@ -185,17 +185,9 @@ static const struct iommu_flush_ops msm_iommu_flush_ops = { .tlb_add_page = __flush_iotlb_page, }; -static int msm_iommu_alloc_ctx(unsigned long *map, int start, int end) +static int msm_iommu_alloc_ctx(struct msm_iommu_dev *iommu) { - int idx; - - do { - idx = find_next_zero_bit(map, end, start); - if (idx == end) - return -ENOSPC; - } while (test_and_set_bit(idx, map)); - - return idx; + return find_and_set_bit(iommu->context_map, iommu->ncb); } static void msm_iommu_free_ctx(unsigned long *map, int idx) @@ -418,10 +410,8 @@ static int msm_iommu_attach_dev(struct iommu_domain *domain, struct device *dev) ret = -EEXIST; goto fail; } - master->num = - msm_iommu_alloc_ctx(iommu->context_map, - 0, iommu->ncb); - if (IS_ERR_VALUE(master->num)) { + master->num = msm_iommu_alloc_ctx(iommu); + if (master->num >= iommu->ncb) { ret = -ENODEV; goto fail; } -- 2.40.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-12-03 19:33 UTC|newest] Thread overview: 68+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-12-03 19:23 [PATCH v2 00/35] bitops: add atomic find_bit() operations Yury Norov 2023-12-03 19:23 ` Yury Norov 2023-12-03 19:23 ` [PATCH v2 01/35] lib/find: add atomic find_bit() primitives Yury Norov 2023-12-03 19:23 ` Yury Norov 2023-12-03 19:56 ` bitops: add atomic find_bit() operations bluez.test.bot 2023-12-03 19:32 ` [PATCH v2 02/35] lib/find: add test for atomic find_bit() ops Yury Norov 2023-12-03 19:32 ` Yury Norov 2023-12-03 19:32 ` [PATCH v2 03/35] lib/sbitmap; make __sbitmap_get_word() using find_and_set_bit() Yury Norov 2023-12-04 18:22 ` Jan Kara 2023-12-04 18:40 ` Jens Axboe 2023-12-03 19:32 ` [PATCH v2 04/35] watch_queue: use atomic find_bit() in post_one_notification() Yury Norov 2023-12-03 19:32 ` [PATCH v2 05/35] sched: add cpumask_find_and_set() and use it in __mm_cid_get() Yury Norov 2023-12-03 19:32 ` [PATCH v2 06/35] mips: sgi-ip30: rework heart_alloc_int() Yury Norov 2023-12-03 19:32 ` [PATCH v2 07/35] sparc: fix opencoded find_and_set_bit() in alloc_msi() Yury Norov 2023-12-03 19:32 ` [PATCH v2 08/35] perf/arm: optimize opencoded atomic find_bit() API Yury Norov 2023-12-03 19:32 ` Yury Norov 2023-12-03 19:32 ` [PATCH v2 09/35] drivers/perf: optimize ali_drw_get_counter_idx() by using find_bit() Yury Norov 2023-12-03 19:32 ` Yury Norov 2023-12-03 19:32 ` [PATCH v2 10/35] dmaengine: idxd: optimize perfmon_assign_event() Yury Norov 2023-12-03 19:32 ` [PATCH v2 11/35] ath10k: optimize ath10k_snoc_napi_poll() by using find_bit() Yury Norov 2023-12-03 19:32 ` [PATCH v2 12/35] wifi: rtw88: optimize rtw_pci_tx_kick_off() " Yury Norov 2023-12-03 19:32 ` [PATCH v2 13/35] KVM: x86: hyper-v: optimize and cleanup kvm_hv_process_stimers() Yury Norov 2023-12-04 9:53 ` Vitaly Kuznetsov 2023-12-04 16:00 ` Sean Christopherson 2023-12-03 19:32 ` [PATCH v2 14/35] PCI: hv: switch hv_get_dom_num() to use atomic find_bit() Yury Norov 2023-12-04 5:58 ` Wei Liu 2023-12-04 19:14 ` Bjorn Helgaas 2023-12-08 18:34 ` Yury Norov 2023-12-03 19:32 ` [PATCH v2 15/35] scsi: core: use atomic find_bit() API where appropriate Yury Norov 2023-12-03 19:32 ` [PATCH v2 16/35] scsi: mpi3mr: switch to using atomic find_and_set_bit() Yury Norov 2023-12-03 19:32 ` [PATCH v2 17/35] scsi: qedi: rework qedi_get_task_idx() Yury Norov 2023-12-03 19:32 ` [PATCH v2 18/35] powerpc: use atomic find_bit() API where appropriate Yury Norov 2023-12-03 19:32 ` Yury Norov 2023-12-03 19:32 ` Yury Norov [this message] 2023-12-03 19:32 ` [PATCH v2 19/35] iommu: " Yury Norov 2023-12-03 19:32 ` [PATCH v2 20/35] media: radio-shark: " Yury Norov 2023-12-04 8:43 ` Hans Verkuil 2023-12-03 19:32 ` [PATCH v2 21/35] sfc: switch to using " Yury Norov 2023-12-03 19:32 ` [PATCH v2 22/35] tty: nozomi: optimize interrupt_handler() Yury Norov 2023-12-03 19:32 ` [PATCH v2 23/35] usb: cdc-acm: optimize acm_softint() Yury Norov 2023-12-03 19:32 ` [PATCH v2 24/35] block: null_blk: fix opencoded find_and_set_bit() in get_tag() Yury Norov 2023-12-04 18:26 ` Jan Kara 2023-12-05 2:39 ` Chengming Zhou 2023-12-03 19:32 ` [PATCH v2 25/35] RDMA/rtrs: fix opencoded find_and_set_bit_lock() in __rtrs_get_permit() Yury Norov 2023-12-03 19:32 ` [PATCH v2 26/35] mISDN: optimize get_free_devid() Yury Norov 2023-12-03 19:32 ` [PATCH v2 27/35] media: em28xx: cx231xx: fix opencoded find_and_set_bit() Yury Norov 2023-12-04 8:39 ` Hans Verkuil 2023-12-04 13:05 ` Andy Shevchenko 2023-12-04 13:09 ` Hans Verkuil 2023-12-03 19:33 ` [PATCH v2 28/35] ethernet: rocker: optimize ofdpa_port_internal_vlan_id_get() Yury Norov 2023-12-03 19:33 ` [PATCH v2 29/35] serial: sc12is7xx: optimize sc16is7xx_alloc_line() Yury Norov 2023-12-03 19:33 ` [PATCH v2 30/35] bluetooth: optimize cmtp_alloc_block_id() Yury Norov 2023-12-03 19:33 ` [PATCH v2 31/35] net: smc: use find_and_set_bit() in smc_wr_tx_get_free_slot_index() Yury Norov 2023-12-04 9:40 ` Alexandra Winter 2023-12-11 22:34 ` Yury Norov 2023-12-03 19:33 ` [PATCH v2 32/35] ALSA: use atomic find_bit() functions where applicable Yury Norov 2023-12-03 19:33 ` [PATCH v2 33/35] m68k: rework get_mmu_context() Yury Norov 2023-12-03 19:33 ` [PATCH v2 34/35] microblaze: " Yury Norov 2023-12-03 19:33 ` [PATCH v2 35/35] sh: mach-x3proto: rework ilsel_enable() Yury Norov 2024-01-19 8:48 ` Geert Uytterhoeven 2023-12-04 13:07 ` [PATCH v2 00/35] bitops: add atomic find_bit() operations Andy Shevchenko 2023-12-04 13:07 ` Andy Shevchenko 2023-12-04 18:51 ` Jan Kara 2023-12-04 18:51 ` Jan Kara 2023-12-06 5:22 ` Yury Norov 2023-12-06 5:22 ` Yury Norov 2023-12-07 9:10 ` Jan Kara 2023-12-07 9:10 ` Jan Kara
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=20231203193307.542794-18-yury.norov@gmail.com \ --to=yury.norov@gmail.com \ --cc=agross@kernel.org \ --cc=andersson@kernel.org \ --cc=andriy.shevchenko@linux.intel.com \ --cc=bvanassche@acm.org \ --cc=iommu@lists.linux.dev \ --cc=jack@suse.cz \ --cc=joro@8bytes.org \ --cc=klimov.linux@gmail.com \ --cc=konrad.dybcio@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-arm-msm@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@rasmusvillemoes.dk \ --cc=maxim.kuvyrkov@linaro.org \ --cc=mirsad.todorovac@alu.unizg.hr \ --cc=robin.murphy@arm.com \ --cc=s.shtylyov@omp.ru \ --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: linkBe 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.