From: Andreas Herrmann <andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> To: Will Deacon <will.deacon-5wv7dgnIgG8@public.gmane.org> Cc: Andreas Herrmann <andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org>, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org Subject: [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices Date: Thu, 16 Jan 2014 13:44:17 +0100 [thread overview] Message-ID: <1389876263-25759-6-git-send-email-andreas.herrmann@calxeda.com> (raw) In-Reply-To: <1389876263-25759-1-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> Cc: Andreas Herrmann <herrmann.der.user-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> Signed-off-by: Andreas Herrmann <andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> --- drivers/iommu/arm-smmu.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 02a871e..a4e0c93 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -56,6 +56,9 @@ /* Maximum number of stream IDs assigned to a single device */ #define MAX_MASTER_STREAMIDS 8 +/* Maximum stream ID */ +#define ARM_SMMU_MAX_STREAMID (SZ_64K - 1) + /* Maximum number of context banks per SMMU */ #define ARM_SMMU_MAX_CBS 128 @@ -386,6 +389,8 @@ struct arm_smmu_device { u32 smr_mask_mask; u32 smr_id_mask; + unsigned long *sids; + struct list_head list; struct rb_root masters; }; @@ -491,7 +496,7 @@ static int register_smmu_master(struct arm_smmu_device *smmu, struct device *dev, struct of_phandle_args *masterspec) { - int i; + int i, sid; struct arm_smmu_master *master; master = find_smmu_master(smmu, masterspec->np); @@ -516,8 +521,14 @@ static int register_smmu_master(struct arm_smmu_device *smmu, master->of_node = masterspec->np; master->num_streamids = masterspec->args_count; - for (i = 0; i < master->num_streamids; ++i) - master->streamids[i] = masterspec->args[i]; + for (i = 0; i < master->num_streamids; ++i) { + sid = masterspec->args[i]; + if (test_and_set_bit(sid, smmu->sids)) { + dev_err(dev, "duplicate stream ID (%d)\n", sid); + return -EEXIST; + } + master->streamids[i] = sid; + } return insert_smmu_master(smmu, master); } @@ -1934,6 +1945,14 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) } smmu->dev = dev; + smmu->sids = devm_kzalloc(dev, BITS_TO_LONGS(ARM_SMMU_MAX_STREAMID) * + sizeof(long), GFP_KERNEL); + if (!smmu->sids) { + dev_err(dev, + "failed to allocate bitmap for stream ID tracking\n"); + return -ENOMEM; + } + check_driver_options(smmu); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: andreas.herrmann@calxeda.com (Andreas Herrmann) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices Date: Thu, 16 Jan 2014 13:44:17 +0100 [thread overview] Message-ID: <1389876263-25759-6-git-send-email-andreas.herrmann@calxeda.com> (raw) In-Reply-To: <1389876263-25759-1-git-send-email-andreas.herrmann@calxeda.com> Cc: Andreas Herrmann <herrmann.der.user@googlemail.com> Signed-off-by: Andreas Herrmann <andreas.herrmann@calxeda.com> --- drivers/iommu/arm-smmu.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/iommu/arm-smmu.c b/drivers/iommu/arm-smmu.c index 02a871e..a4e0c93 100644 --- a/drivers/iommu/arm-smmu.c +++ b/drivers/iommu/arm-smmu.c @@ -56,6 +56,9 @@ /* Maximum number of stream IDs assigned to a single device */ #define MAX_MASTER_STREAMIDS 8 +/* Maximum stream ID */ +#define ARM_SMMU_MAX_STREAMID (SZ_64K - 1) + /* Maximum number of context banks per SMMU */ #define ARM_SMMU_MAX_CBS 128 @@ -386,6 +389,8 @@ struct arm_smmu_device { u32 smr_mask_mask; u32 smr_id_mask; + unsigned long *sids; + struct list_head list; struct rb_root masters; }; @@ -491,7 +496,7 @@ static int register_smmu_master(struct arm_smmu_device *smmu, struct device *dev, struct of_phandle_args *masterspec) { - int i; + int i, sid; struct arm_smmu_master *master; master = find_smmu_master(smmu, masterspec->np); @@ -516,8 +521,14 @@ static int register_smmu_master(struct arm_smmu_device *smmu, master->of_node = masterspec->np; master->num_streamids = masterspec->args_count; - for (i = 0; i < master->num_streamids; ++i) - master->streamids[i] = masterspec->args[i]; + for (i = 0; i < master->num_streamids; ++i) { + sid = masterspec->args[i]; + if (test_and_set_bit(sid, smmu->sids)) { + dev_err(dev, "duplicate stream ID (%d)\n", sid); + return -EEXIST; + } + master->streamids[i] = sid; + } return insert_smmu_master(smmu, master); } @@ -1934,6 +1945,14 @@ static int arm_smmu_device_dt_probe(struct platform_device *pdev) } smmu->dev = dev; + smmu->sids = devm_kzalloc(dev, BITS_TO_LONGS(ARM_SMMU_MAX_STREAMID) * + sizeof(long), GFP_KERNEL); + if (!smmu->sids) { + dev_err(dev, + "failed to allocate bitmap for stream ID tracking\n"); + return -ENOMEM; + } + check_driver_options(smmu); res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -- 1.7.9.5
next prev parent reply other threads:[~2014-01-16 12:44 UTC|newest] Thread overview: 134+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-01-16 12:44 [PATCH v4 0/11] iommu/arm-smmu: Misc modifications to support SMMUs on Calxeda ECX-2000 Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-1-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-16 12:44 ` [PATCH 01/11] iommu/arm-smmu: Introduce driver option handling Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-2-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-22 11:51 ` Will Deacon 2014-01-22 11:51 ` Will Deacon [not found] ` <20140122115143.GI1621-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-23 20:16 ` Andreas Herrmann 2014-01-23 20:16 ` Andreas Herrmann 2014-01-16 12:44 ` [PATCH 02/11] iommu/arm-smmu: Introduce bus notifier block Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-3-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-18 20:59 ` Varun Sethi 2014-01-18 20:59 ` Varun Sethi [not found] ` <419c2609cab14842b5258f7048ce6d43-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org> 2014-01-20 21:29 ` Andreas Herrmann 2014-01-20 21:29 ` Andreas Herrmann 2014-01-20 21:53 ` [PATCH v2 02/11] iommu/arm-smmu: Introduce iommu_group " Andreas Herrmann 2014-01-20 21:53 ` Andreas Herrmann 2014-01-20 21:56 ` Andreas Herrmann 2014-01-20 21:56 ` Andreas Herrmann 2014-01-20 22:28 ` [PATCH v3 " Andreas Herrmann 2014-01-20 22:28 ` Andreas Herrmann 2014-01-21 17:48 ` Varun Sethi 2014-01-21 17:48 ` Varun Sethi [not found] ` <e92c5fd617fb4068b4ec5de696527ee3-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org> 2014-01-22 12:25 ` Will Deacon 2014-01-22 12:25 ` Will Deacon [not found] ` <20140122122550.GA14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-22 13:14 ` Varun Sethi 2014-01-22 13:14 ` Varun Sethi 2014-01-22 13:40 ` Will Deacon 2014-01-22 13:40 ` Will Deacon [not found] ` <20140122134028.GB14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-22 13:54 ` Varun Sethi 2014-01-22 13:54 ` Varun Sethi [not found] ` <aeebc7cf4084486790a5166cf83cb332-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org> 2014-01-22 15:33 ` Will Deacon 2014-01-22 15:33 ` Will Deacon [not found] ` <20140122153352.GE14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-22 19:07 ` Varun Sethi 2014-01-22 19:07 ` Varun Sethi [not found] ` <3d0a888e122f490ba6bbc80b1aaa977c-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org> 2014-01-23 19:57 ` Andreas Herrmann 2014-01-23 19:57 ` Andreas Herrmann 2014-01-28 11:00 ` Varun Sethi 2014-01-28 11:00 ` Varun Sethi [not found] ` <991cc0024ea54cdb964f31de89c0b0ea-AZ66ij2kwaacCcN9WK45f+O6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org> 2014-01-29 14:14 ` Andreas Herrmann 2014-01-29 14:14 ` Andreas Herrmann 2014-01-29 19:19 ` Varun Sethi 2014-01-29 19:19 ` Varun Sethi 2014-01-23 19:24 ` Andreas Herrmann 2014-01-23 19:24 ` Andreas Herrmann 2014-01-24 9:48 ` Andreas Herrmann 2014-01-24 9:48 ` Andreas Herrmann 2014-01-16 12:44 ` [PATCH 03/11] iommu/arm-smmu: Support buggy implementation where all config accesses are secure Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann 2014-01-16 12:44 ` [PATCH 04/11] iommu/arm-smmu: Introduce automatic stream-id-masking Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-5-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-22 15:26 ` Will Deacon 2014-01-22 15:26 ` Will Deacon [not found] ` <20140122152622.GD14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-22 20:15 ` Andreas Herrmann 2014-01-22 20:15 ` Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [this message] 2014-01-16 12:44 ` [PATCH 05/11] iommu/arm-smmu: Check for duplicate stream IDs when registering master devices Andreas Herrmann [not found] ` <1389876263-25759-6-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-22 15:53 ` Will Deacon 2014-01-22 15:53 ` Will Deacon [not found] ` <20140122155302.GF14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-23 21:17 ` Andreas Herrmann 2014-01-23 21:17 ` Andreas Herrmann 2014-01-16 12:44 ` [PATCH 06/11] documentation/iommu: Update description of ARM System MMU binding Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-7-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-16 14:31 ` Rob Herring 2014-01-16 14:31 ` Rob Herring 2014-01-16 12:44 ` [PATCH 07/11] iommu/arm-smmu: Set MAX_MASTER_STREAMIDS to MAX_PHANDLE_ARGS Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann 2014-01-16 12:44 ` [PATCH 08/11] of: Increase MAX_PHANDLE_ARGS Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-9-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-16 14:25 ` Rob Herring 2014-01-16 14:25 ` Rob Herring [not found] ` <CAL_Jsq+fDUYne1OQAd4AeQw-JAoFBf0TCv4YVpy6Vt_UmdkA8A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-01-17 11:00 ` Andreas Herrmann 2014-01-17 11:00 ` Andreas Herrmann 2014-01-17 11:08 ` [PATCH v2 " Andreas Herrmann 2014-01-17 11:08 ` Andreas Herrmann 2014-01-29 16:11 ` Suravee Suthikulanit 2014-01-29 16:11 ` Suravee Suthikulanit [not found] ` < CAL_JsqLhzp5jUJPA91rNkQ07kCDYCDZLxw8LxxFEVP9b12e1Jw@mail.gmail.com> [not found] ` <52E92842.3000001-5C7GfCeVMHo@public.gmane.org> 2014-01-29 16:57 ` Rob Herring 2014-01-29 16:57 ` Rob Herring [not found] ` <CAL_JsqLhzp5jUJPA91rNkQ07kCDYCDZLxw8LxxFEVP9b12e1Jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-01-29 16:59 ` Suravee Suthikulanit 2014-01-29 16:59 ` Suravee Suthikulanit [not found] ` <52E93360.1000904-5C7GfCeVMHo@public.gmane.org> 2014-01-29 17:16 ` Andreas Herrmann 2014-01-29 17:16 ` Andreas Herrmann 2014-01-29 17:26 ` Suravee Suthikulanit 2014-01-29 17:26 ` Suravee Suthikulanit [not found] ` <52E939CB.1020705-5C7GfCeVMHo@public.gmane.org> 2014-01-29 17:29 ` Will Deacon 2014-01-29 17:29 ` Will Deacon [not found] ` <20140129172932.GQ26622-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-29 17:57 ` Suravee Suthikulanit 2014-01-29 17:57 ` Suravee Suthikulanit [not found] ` <52E940FC.9050602-5C7GfCeVMHo@public.gmane.org> 2014-01-29 18:03 ` Will Deacon 2014-01-29 18:03 ` Will Deacon [not found] ` <20140129180350.GS26622-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-30 22:53 ` Suravee Suthikulanit 2014-01-30 22:53 ` Suravee Suthikulanit [not found] ` <52EAD7EF.3040305-5C7GfCeVMHo@public.gmane.org> 2014-01-31 0:18 ` Will Deacon 2014-01-31 0:18 ` Will Deacon 2014-01-30 17:45 ` Andreas Herrmann 2014-01-30 17:45 ` Andreas Herrmann 2014-01-31 16:24 ` Rob Herring 2014-01-31 16:24 ` Rob Herring [not found] ` <CAL_Jsq+=dm4kPk=e0h_up9=wvED4fd3MBtSNFxm2NEz_yag-uA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-02-03 16:44 ` Will Deacon 2014-02-03 16:44 ` Will Deacon 2014-02-04 17:33 ` Grant Likely 2014-02-04 17:33 ` Grant Likely 2014-02-04 17:36 ` Grant Likely 2014-02-04 17:36 ` Grant Likely 2014-01-16 12:44 ` [PATCH 09/11] ARM: dts: Add nodes for SMMUs on Calxeda ECX-2000 Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-10-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-16 14:30 ` Rob Herring 2014-01-16 14:30 ` Rob Herring [not found] ` <CAL_JsqK2JUBEvCb-=eHFE_T=2AD0K_+V=NAeijzK2DrCwkaCOA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-01-17 11:01 ` Andreas Herrmann 2014-01-17 11:01 ` Andreas Herrmann 2014-01-17 11:16 ` [PATCH v2 " Andreas Herrmann 2014-01-17 11:16 ` Andreas Herrmann 2014-01-16 12:44 ` [PATCH 10/11] arm: dma-mapping: Add additional parameters to arm_iommu_create_mapping Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-11-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-22 16:01 ` Will Deacon 2014-01-22 16:01 ` Will Deacon 2014-01-16 12:44 ` [PATCH 11/11] arm: dma-mapping: Add support to extend DMA IOMMU mappings Andreas Herrmann 2014-01-16 12:44 ` Andreas Herrmann [not found] ` <1389876263-25759-12-git-send-email-andreas.herrmann-bsGFqQB8/DxBDgjK7y7TUQ@public.gmane.org> 2014-01-22 16:10 ` Will Deacon 2014-01-22 16:10 ` Will Deacon [not found] ` <20140122161010.GH14108-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-23 21:50 ` Andreas Herrmann 2014-01-23 21:50 ` Andreas Herrmann 2014-01-29 10:57 ` Marek Szyprowski 2014-01-29 10:57 ` Marek Szyprowski [not found] ` <52E8DE7D.5020801-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2014-01-29 11:05 ` Will Deacon 2014-01-29 11:05 ` Will Deacon [not found] ` <20140129110537.GG26622-MRww78TxoiP5vMa5CHWGZ34zcgK1vI+I0E9HWUfgJXw@public.gmane.org> 2014-01-29 14:40 ` Andreas Herrmann 2014-01-29 14:40 ` Andreas Herrmann 2014-01-30 8:28 ` Marek Szyprowski 2014-01-30 8:28 ` Marek Szyprowski [not found] ` <52EA0D43.1010802-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org> 2014-01-30 8:44 ` Andreas Herrmann 2014-01-30 8:44 ` Andreas Herrmann 2014-01-31 17:23 ` [PATCH] " Andreas Herrmann 2014-01-31 17:23 ` Andreas Herrmann
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=1389876263-25759-6-git-send-email-andreas.herrmann@calxeda.com \ --to=andreas.herrmann-bsgfqqb8/dxbdgjk7y7tuq@public.gmane.org \ --cc=iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=will.deacon-5wv7dgnIgG8@public.gmane.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.