aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pci/dmar.c
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2008-09-03 19:58:34 -0400
committerIngo Molnar <mingo@elte.hu>2008-10-16 10:53:05 -0400
commit04e2ea67069e285404192a35c24dfe7c53b9c61f (patch)
tree38386a8889d61b64d595172b52de96d9f501cc89 /drivers/pci/dmar.c
parent74d04bd7dcb4c6130fd8a314d28bfecc9ae7c360 (diff)
dmar: use list_for_each_entry_safe() in dmar_dev_scope_init()
In dmar_dev_scope_init(), functions called under for_each_drhd_unit()/ for_each_rmrr_units() can delete the list entry under some error conditions. So we should use list_for_each_entry_safe() for safe traversal. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Acked-by: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/pci/dmar.c')
-rw-r--r--drivers/pci/dmar.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/pci/dmar.c b/drivers/pci/dmar.c
index d281a03695f7..ceb338dfa3f2 100644
--- a/drivers/pci/dmar.c
+++ b/drivers/pci/dmar.c
@@ -397,10 +397,10 @@ dmar_find_matched_drhd_unit(struct pci_dev *dev)
397 397
398int __init dmar_dev_scope_init(void) 398int __init dmar_dev_scope_init(void)
399{ 399{
400 struct dmar_drhd_unit *drhd; 400 struct dmar_drhd_unit *drhd, *drhd_n;
401 int ret = -ENODEV; 401 int ret = -ENODEV;
402 402
403 for_each_drhd_unit(drhd) { 403 list_for_each_entry_safe(drhd, drhd_n, &dmar_drhd_units, list) {
404 ret = dmar_parse_dev(drhd); 404 ret = dmar_parse_dev(drhd);
405 if (ret) 405 if (ret)
406 return ret; 406 return ret;
@@ -408,8 +408,8 @@ int __init dmar_dev_scope_init(void)
408 408
409#ifdef CONFIG_DMAR 409#ifdef CONFIG_DMAR
410 { 410 {
411 struct dmar_rmrr_unit *rmrr; 411 struct dmar_rmrr_unit *rmrr, *rmrr_n;
412 for_each_rmrr_units(rmrr) { 412 list_for_each_entry_safe(rmrr, rmrr_n, &dmar_rmrr_units, list) {
413 ret = rmrr_parse_dev(rmrr); 413 ret = rmrr_parse_dev(rmrr);
414 if (ret) 414 if (ret)
415 return ret; 415 return ret;