@@ -1390,157 +1390,6 @@ static void __iommu_flush_dev_iotlb(struct device_domain_info *info,
1390
1390
quirk_extra_dev_tlb_flush (info , addr , mask , IOMMU_NO_PASID , qdep );
1391
1391
}
1392
1392
1393
- static void iommu_flush_dev_iotlb (struct dmar_domain * domain ,
1394
- u64 addr , unsigned mask )
1395
- {
1396
- struct dev_pasid_info * dev_pasid ;
1397
- struct device_domain_info * info ;
1398
- unsigned long flags ;
1399
-
1400
- if (!domain -> has_iotlb_device )
1401
- return ;
1402
-
1403
- spin_lock_irqsave (& domain -> lock , flags );
1404
- list_for_each_entry (info , & domain -> devices , link )
1405
- __iommu_flush_dev_iotlb (info , addr , mask );
1406
-
1407
- list_for_each_entry (dev_pasid , & domain -> dev_pasids , link_domain ) {
1408
- info = dev_iommu_priv_get (dev_pasid -> dev );
1409
-
1410
- if (!info -> ats_enabled )
1411
- continue ;
1412
-
1413
- qi_flush_dev_iotlb_pasid (info -> iommu ,
1414
- PCI_DEVID (info -> bus , info -> devfn ),
1415
- info -> pfsid , dev_pasid -> pasid ,
1416
- info -> ats_qdep , addr ,
1417
- mask );
1418
- }
1419
- spin_unlock_irqrestore (& domain -> lock , flags );
1420
- }
1421
-
1422
- static void domain_flush_pasid_iotlb (struct intel_iommu * iommu ,
1423
- struct dmar_domain * domain , u64 addr ,
1424
- unsigned long npages , bool ih )
1425
- {
1426
- u16 did = domain_id_iommu (domain , iommu );
1427
- struct dev_pasid_info * dev_pasid ;
1428
- unsigned long flags ;
1429
-
1430
- spin_lock_irqsave (& domain -> lock , flags );
1431
- list_for_each_entry (dev_pasid , & domain -> dev_pasids , link_domain )
1432
- qi_flush_piotlb (iommu , did , dev_pasid -> pasid , addr , npages , ih );
1433
-
1434
- if (!list_empty (& domain -> devices ))
1435
- qi_flush_piotlb (iommu , did , IOMMU_NO_PASID , addr , npages , ih );
1436
- spin_unlock_irqrestore (& domain -> lock , flags );
1437
- }
1438
-
1439
- static void __iommu_flush_iotlb_psi (struct intel_iommu * iommu , u16 did ,
1440
- unsigned long pfn , unsigned int pages ,
1441
- int ih )
1442
- {
1443
- unsigned int aligned_pages = __roundup_pow_of_two (pages );
1444
- unsigned long bitmask = aligned_pages - 1 ;
1445
- unsigned int mask = ilog2 (aligned_pages );
1446
- u64 addr = (u64 )pfn << VTD_PAGE_SHIFT ;
1447
-
1448
- /*
1449
- * PSI masks the low order bits of the base address. If the
1450
- * address isn't aligned to the mask, then compute a mask value
1451
- * needed to ensure the target range is flushed.
1452
- */
1453
- if (unlikely (bitmask & pfn )) {
1454
- unsigned long end_pfn = pfn + pages - 1 , shared_bits ;
1455
-
1456
- /*
1457
- * Since end_pfn <= pfn + bitmask, the only way bits
1458
- * higher than bitmask can differ in pfn and end_pfn is
1459
- * by carrying. This means after masking out bitmask,
1460
- * high bits starting with the first set bit in
1461
- * shared_bits are all equal in both pfn and end_pfn.
1462
- */
1463
- shared_bits = ~(pfn ^ end_pfn ) & ~bitmask ;
1464
- mask = shared_bits ? __ffs (shared_bits ) : BITS_PER_LONG ;
1465
- }
1466
-
1467
- /*
1468
- * Fallback to domain selective flush if no PSI support or
1469
- * the size is too big.
1470
- */
1471
- if (!cap_pgsel_inv (iommu -> cap ) || mask > cap_max_amask_val (iommu -> cap ))
1472
- iommu -> flush .flush_iotlb (iommu , did , 0 , 0 ,
1473
- DMA_TLB_DSI_FLUSH );
1474
- else
1475
- iommu -> flush .flush_iotlb (iommu , did , addr | ih , mask ,
1476
- DMA_TLB_PSI_FLUSH );
1477
- }
1478
-
1479
- static void iommu_flush_iotlb_psi (struct intel_iommu * iommu ,
1480
- struct dmar_domain * domain ,
1481
- unsigned long pfn , unsigned int pages ,
1482
- int ih , int map )
1483
- {
1484
- unsigned int aligned_pages = __roundup_pow_of_two (pages );
1485
- unsigned int mask = ilog2 (aligned_pages );
1486
- uint64_t addr = (uint64_t )pfn << VTD_PAGE_SHIFT ;
1487
- u16 did = domain_id_iommu (domain , iommu );
1488
-
1489
- if (WARN_ON (!pages ))
1490
- return ;
1491
-
1492
- if (ih )
1493
- ih = 1 << 6 ;
1494
-
1495
- if (domain -> use_first_level )
1496
- domain_flush_pasid_iotlb (iommu , domain , addr , pages , ih );
1497
- else
1498
- __iommu_flush_iotlb_psi (iommu , did , pfn , pages , ih );
1499
-
1500
- if (!map )
1501
- iommu_flush_dev_iotlb (domain , addr , mask );
1502
- }
1503
-
1504
- /*
1505
- * Flush the relevant caches in nested translation if the domain
1506
- * also serves as a parent
1507
- */
1508
- static void parent_domain_flush (struct dmar_domain * domain ,
1509
- unsigned long pfn ,
1510
- unsigned long pages , int ih )
1511
- {
1512
- struct dmar_domain * s1_domain ;
1513
-
1514
- spin_lock (& domain -> s1_lock );
1515
- list_for_each_entry (s1_domain , & domain -> s1_domains , s2_link ) {
1516
- struct device_domain_info * device_info ;
1517
- struct iommu_domain_info * info ;
1518
- unsigned long flags ;
1519
- unsigned long i ;
1520
-
1521
- xa_for_each (& s1_domain -> iommu_array , i , info )
1522
- __iommu_flush_iotlb_psi (info -> iommu , info -> did ,
1523
- pfn , pages , ih );
1524
-
1525
- if (!s1_domain -> has_iotlb_device )
1526
- continue ;
1527
-
1528
- spin_lock_irqsave (& s1_domain -> lock , flags );
1529
- list_for_each_entry (device_info , & s1_domain -> devices , link )
1530
- /*
1531
- * Address translation cache in device side caches the
1532
- * result of nested translation. There is no easy way
1533
- * to identify the exact set of nested translations
1534
- * affected by a change in S2. So just flush the entire
1535
- * device cache.
1536
- */
1537
- __iommu_flush_dev_iotlb (device_info , 0 ,
1538
- MAX_AGAW_PFN_WIDTH );
1539
- spin_unlock_irqrestore (& s1_domain -> lock , flags );
1540
- }
1541
- spin_unlock (& domain -> s1_lock );
1542
- }
1543
-
1544
1393
static void intel_flush_iotlb_all (struct iommu_domain * domain )
1545
1394
{
1546
1395
cache_tag_flush_all (to_dmar_domain (domain ));
@@ -1991,9 +1840,7 @@ static void switch_to_super_page(struct dmar_domain *domain,
1991
1840
unsigned long end_pfn , int level )
1992
1841
{
1993
1842
unsigned long lvl_pages = lvl_to_nr_pages (level );
1994
- struct iommu_domain_info * info ;
1995
1843
struct dma_pte * pte = NULL ;
1996
- unsigned long i ;
1997
1844
1998
1845
while (start_pfn <= end_pfn ) {
1999
1846
if (!pte )
@@ -2005,13 +1852,8 @@ static void switch_to_super_page(struct dmar_domain *domain,
2005
1852
start_pfn + lvl_pages - 1 ,
2006
1853
level + 1 );
2007
1854
2008
- xa_for_each (& domain -> iommu_array , i , info )
2009
- iommu_flush_iotlb_psi (info -> iommu , domain ,
2010
- start_pfn , lvl_pages ,
2011
- 0 , 0 );
2012
- if (domain -> nested_parent )
2013
- parent_domain_flush (domain , start_pfn ,
2014
- lvl_pages , 0 );
1855
+ cache_tag_flush_range (domain , start_pfn << VTD_PAGE_SHIFT ,
1856
+ end_pfn << VTD_PAGE_SHIFT , 0 );
2015
1857
}
2016
1858
2017
1859
pte ++ ;
@@ -3381,18 +3223,9 @@ static int intel_iommu_memory_notifier(struct notifier_block *nb,
3381
3223
case MEM_OFFLINE :
3382
3224
case MEM_CANCEL_ONLINE :
3383
3225
{
3384
- struct dmar_drhd_unit * drhd ;
3385
- struct intel_iommu * iommu ;
3386
3226
LIST_HEAD (freelist );
3387
3227
3388
3228
domain_unmap (si_domain , start_vpfn , last_vpfn , & freelist );
3389
-
3390
- rcu_read_lock ();
3391
- for_each_active_iommu (iommu , drhd )
3392
- iommu_flush_iotlb_psi (iommu , si_domain ,
3393
- start_vpfn , mhp -> nr_pages ,
3394
- list_empty (& freelist ), 0 );
3395
- rcu_read_unlock ();
3396
3229
put_pages_list (& freelist );
3397
3230
}
3398
3231
break ;
0 commit comments