@@ -1342,43 +1342,18 @@ void irq_domain_free_irqs_top(struct irq_domain *domain, unsigned int virq,
1342
1342
irq_domain_free_irqs_common (domain , virq , nr_irqs );
1343
1343
}
1344
1344
1345
- static bool irq_domain_is_auto_recursive (struct irq_domain * domain )
1346
- {
1347
- return domain -> flags & IRQ_DOMAIN_FLAG_AUTO_RECURSIVE ;
1348
- }
1349
-
1350
- static void irq_domain_free_irqs_recursive (struct irq_domain * domain ,
1345
+ static void irq_domain_free_irqs_hierarchy (struct irq_domain * domain ,
1351
1346
unsigned int irq_base ,
1352
1347
unsigned int nr_irqs )
1353
1348
{
1354
1349
domain -> ops -> free (domain , irq_base , nr_irqs );
1355
- if (irq_domain_is_auto_recursive (domain )) {
1356
- BUG_ON (!domain -> parent );
1357
- irq_domain_free_irqs_recursive (domain -> parent , irq_base ,
1358
- nr_irqs );
1359
- }
1360
1350
}
1361
1351
1362
- int irq_domain_alloc_irqs_recursive (struct irq_domain * domain ,
1352
+ int irq_domain_alloc_irqs_hierarchy (struct irq_domain * domain ,
1363
1353
unsigned int irq_base ,
1364
1354
unsigned int nr_irqs , void * arg )
1365
1355
{
1366
- int ret = 0 ;
1367
- struct irq_domain * parent = domain -> parent ;
1368
- bool recursive = irq_domain_is_auto_recursive (domain );
1369
-
1370
- BUG_ON (recursive && !parent );
1371
- if (recursive )
1372
- ret = irq_domain_alloc_irqs_recursive (parent , irq_base ,
1373
- nr_irqs , arg );
1374
- if (ret < 0 )
1375
- return ret ;
1376
-
1377
- ret = domain -> ops -> alloc (domain , irq_base , nr_irqs , arg );
1378
- if (ret < 0 && recursive )
1379
- irq_domain_free_irqs_recursive (parent , irq_base , nr_irqs );
1380
-
1381
- return ret ;
1356
+ return domain -> ops -> alloc (domain , irq_base , nr_irqs , arg );
1382
1357
}
1383
1358
1384
1359
/**
@@ -1439,7 +1414,7 @@ int __irq_domain_alloc_irqs(struct irq_domain *domain, int irq_base,
1439
1414
}
1440
1415
1441
1416
mutex_lock (& irq_domain_mutex );
1442
- ret = irq_domain_alloc_irqs_recursive (domain , virq , nr_irqs , arg );
1417
+ ret = irq_domain_alloc_irqs_hierarchy (domain , virq , nr_irqs , arg );
1443
1418
if (ret < 0 ) {
1444
1419
mutex_unlock (& irq_domain_mutex );
1445
1420
goto out_free_irq_data ;
@@ -1474,7 +1449,7 @@ void irq_domain_free_irqs(unsigned int virq, unsigned int nr_irqs)
1474
1449
mutex_lock (& irq_domain_mutex );
1475
1450
for (i = 0 ; i < nr_irqs ; i ++ )
1476
1451
irq_domain_remove_irq (virq + i );
1477
- irq_domain_free_irqs_recursive (data -> domain , virq , nr_irqs );
1452
+ irq_domain_free_irqs_hierarchy (data -> domain , virq , nr_irqs );
1478
1453
mutex_unlock (& irq_domain_mutex );
1479
1454
1480
1455
irq_domain_free_irq_data (virq , nr_irqs );
@@ -1494,15 +1469,11 @@ int irq_domain_alloc_irqs_parent(struct irq_domain *domain,
1494
1469
unsigned int irq_base , unsigned int nr_irqs ,
1495
1470
void * arg )
1496
1471
{
1497
- /* irq_domain_alloc_irqs_recursive() has called parent's alloc() */
1498
- if (irq_domain_is_auto_recursive (domain ))
1499
- return 0 ;
1472
+ if (!domain -> parent )
1473
+ return - ENOSYS ;
1500
1474
1501
- domain = domain -> parent ;
1502
- if (domain )
1503
- return irq_domain_alloc_irqs_recursive (domain , irq_base ,
1504
- nr_irqs , arg );
1505
- return - ENOSYS ;
1475
+ return irq_domain_alloc_irqs_hierarchy (domain -> parent , irq_base ,
1476
+ nr_irqs , arg );
1506
1477
}
1507
1478
EXPORT_SYMBOL_GPL (irq_domain_alloc_irqs_parent );
1508
1479
@@ -1517,10 +1488,10 @@ EXPORT_SYMBOL_GPL(irq_domain_alloc_irqs_parent);
1517
1488
void irq_domain_free_irqs_parent (struct irq_domain * domain ,
1518
1489
unsigned int irq_base , unsigned int nr_irqs )
1519
1490
{
1520
- /* irq_domain_free_irqs_recursive() will call parent's free */
1521
- if (! irq_domain_is_auto_recursive ( domain ) && domain -> parent )
1522
- irq_domain_free_irqs_recursive ( domain -> parent , irq_base ,
1523
- nr_irqs );
1491
+ if (! domain -> parent )
1492
+ return ;
1493
+
1494
+ irq_domain_free_irqs_hierarchy ( domain -> parent , irq_base , nr_irqs );
1524
1495
}
1525
1496
EXPORT_SYMBOL_GPL (irq_domain_free_irqs_parent );
1526
1497
0 commit comments