Skip to content

Commit

Permalink
iommu/vt-d: Factor out dmar_alloc_dev_scope() for later reuse
Browse files Browse the repository at this point in the history
Factor out function dmar_alloc_dev_scope() from dmar_parse_dev_scope()
for later reuse.

Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com>
Signed-off-by: Joerg Roedel <joro@8bytes.org>
  • Loading branch information
Jiang Liu authored and Joerg Roedel committed Mar 4, 2014
1 parent 7e7dfab commit bb3a6b7
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 12 deletions.
28 changes: 16 additions & 12 deletions drivers/iommu/dmar.c
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,9 @@ static int __init dmar_parse_one_dev_scope(struct acpi_dmar_device_scope *scope,
return 0;
}

int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,
struct pci_dev ***devices, u16 segment)
void *dmar_alloc_dev_scope(void *start, void *end, int *cnt)
{
struct acpi_dmar_device_scope *scope;
void * tmp = start;
int index;
int ret;

*cnt = 0;
while (start < end) {
Expand All @@ -138,15 +134,24 @@ int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,
start += scope->length;
}
if (*cnt == 0)
return 0;
return NULL;

return kcalloc(*cnt, sizeof(struct pci_dev *), GFP_KERNEL);
}

int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,
struct pci_dev ***devices, u16 segment)
{
struct acpi_dmar_device_scope *scope;
int index, ret;

*devices = kcalloc(*cnt, sizeof(struct pci_dev *), GFP_KERNEL);
if (!*devices)
*devices = dmar_alloc_dev_scope(start, end, cnt);
if (*cnt == 0)
return 0;
else if (!*devices)
return -ENOMEM;

start = tmp;
index = 0;
while (start < end) {
for (index = 0; start < end; start += scope->length) {
scope = start;
if (scope->entry_type == ACPI_DMAR_SCOPE_TYPE_ENDPOINT ||
scope->entry_type == ACPI_DMAR_SCOPE_TYPE_BRIDGE) {
Expand All @@ -158,7 +163,6 @@ int __init dmar_parse_dev_scope(void *start, void *end, int *cnt,
}
index ++;
}
start += scope->length;
}

return 0;
Expand Down
1 change: 1 addition & 0 deletions include/linux/dmar.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ extern int dmar_table_init(void);
extern int dmar_dev_scope_init(void);
extern int dmar_parse_dev_scope(void *start, void *end, int *cnt,
struct pci_dev ***devices, u16 segment);
extern void *dmar_alloc_dev_scope(void *start, void *end, int *cnt);
extern void dmar_free_dev_scope(struct pci_dev ***devices, int *cnt);

/* Intel IOMMU detection */
Expand Down

0 comments on commit bb3a6b7

Please sign in to comment.