Commit eadf7f93 authored by Alex Elder's avatar Alex Elder Committed by David S. Miller

net: ipa: flag duplicate memory regions

Add a test in ipa_mem_valid() to ensure no memory region is defined
more than once, using a bitmap to record each defined memory region.
Skip over undefined regions when checking (we can have any number of
those).
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 75bcfde6
...@@ -217,6 +217,7 @@ static bool ipa_mem_valid_one(struct ipa *ipa, const struct ipa_mem *mem) ...@@ -217,6 +217,7 @@ static bool ipa_mem_valid_one(struct ipa *ipa, const struct ipa_mem *mem)
/* Verify each defined memory region is valid. */ /* Verify each defined memory region is valid. */
static bool ipa_mem_valid(struct ipa *ipa, const struct ipa_mem_data *mem_data) static bool ipa_mem_valid(struct ipa *ipa, const struct ipa_mem_data *mem_data)
{ {
DECLARE_BITMAP(regions, IPA_MEM_COUNT) = { };
struct device *dev = &ipa->pdev->dev; struct device *dev = &ipa->pdev->dev;
enum ipa_mem_id mem_id; enum ipa_mem_id mem_id;
...@@ -229,6 +230,14 @@ static bool ipa_mem_valid(struct ipa *ipa, const struct ipa_mem_data *mem_data) ...@@ -229,6 +230,14 @@ static bool ipa_mem_valid(struct ipa *ipa, const struct ipa_mem_data *mem_data)
for (mem_id = 0; mem_id < mem_data->local_count; mem_id++) { for (mem_id = 0; mem_id < mem_data->local_count; mem_id++) {
const struct ipa_mem *mem = &mem_data->local[mem_id]; const struct ipa_mem *mem = &mem_data->local[mem_id];
if (mem_id == IPA_MEM_UNDEFINED)
continue;
if (__test_and_set_bit(mem->id, regions)) {
dev_err(dev, "duplicate memory region %u\n", mem->id);
return false;
}
/* Defined regions have non-zero size and/or canary count */ /* Defined regions have non-zero size and/or canary count */
if (mem->size || mem->canary_count) { if (mem->size || mem->canary_count) {
if (ipa_mem_valid_one(ipa, mem)) if (ipa_mem_valid_one(ipa, mem))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment