Commit 933fcd0
iommu/vt-d: Add iotlb_sync_map callback
Some Intel VT-d hardware implementations don't support memory coherency
for page table walk (presented by the Page-Walk-coherency bit in the
ecap register), so that software must flush the corresponding CPU cache
lines explicitly after each page table entry update.
The iommu_map_sg() code iterates through the given scatter-gather list
and invokes iommu_map() for each element in the scatter-gather list,
which calls into the vendor IOMMU driver through iommu_ops callback. As
the result, a single sg mapping may lead to multiple cache line flushes,
which leads to the degradation of I/O performance after the commit
<c588072bba6b5> ("iommu/vt-d: Convert intel iommu driver to the iommu
ops").
Fix this by adding iotlb_sync_map callback and centralizing the clflush
operations after all sg mappings.
Fixes: c588072 ("iommu/vt-d: Convert intel iommu driver to the iommu ops")
Reported-by: Chuck Lever <chuck.lever@oracle.com>
Link: https://lore.kernel.org/linux-iommu/D81314ED-5673-44A6-B597-090E3CB83EB0@oracle.com/
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Cc: Robin Murphy <robin.murphy@arm.com>
[ cel: removed @first_pte, which is no longer used ]
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Link: https://lore.kernel.org/linux-iommu/161177763962.1311.15577661784296014186.stgit@manet.1015granger.net
Link: https://lore.kernel.org/r/20210204014401.2846425-5-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>1 parent 010bf56 commit 933fcd0
1 file changed
Lines changed: 60 additions & 30 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2283 | 2283 | | |
2284 | 2284 | | |
2285 | 2285 | | |
2286 | | - | |
2287 | 2286 | | |
2288 | 2287 | | |
| 2288 | + | |
2289 | 2289 | | |
2290 | 2290 | | |
2291 | 2291 | | |
| |||
2314 | 2314 | | |
2315 | 2315 | | |
2316 | 2316 | | |
2317 | | - | |
| 2317 | + | |
2318 | 2318 | | |
2319 | 2319 | | |
2320 | 2320 | | |
| |||
2375 | 2375 | | |
2376 | 2376 | | |
2377 | 2377 | | |
| 2378 | + | |
| 2379 | + | |
| 2380 | + | |
2378 | 2381 | | |
2379 | 2382 | | |
2380 | 2383 | | |
2381 | | - | |
2382 | | - | |
2383 | | - | |
| 2384 | + | |
2384 | 2385 | | |
2385 | | - | |
2386 | | - | |
2387 | | - | |
2388 | | - | |
2389 | | - | |
2390 | | - | |
2391 | | - | |
2392 | | - | |
2393 | | - | |
2394 | | - | |
2395 | | - | |
2396 | | - | |
2397 | | - | |
2398 | | - | |
2399 | | - | |
2400 | | - | |
2401 | | - | |
2402 | | - | |
2403 | | - | |
2404 | | - | |
2405 | | - | |
2406 | 2386 | | |
2407 | 2387 | | |
2408 | 2388 | | |
| |||
4943 | 4923 | | |
4944 | 4924 | | |
4945 | 4925 | | |
4946 | | - | |
4947 | 4926 | | |
4948 | 4927 | | |
4949 | 4928 | | |
| |||
4969 | 4948 | | |
4970 | 4949 | | |
4971 | 4950 | | |
4972 | | - | |
4973 | | - | |
4974 | | - | |
| 4951 | + | |
| 4952 | + | |
4975 | 4953 | | |
4976 | 4954 | | |
4977 | 4955 | | |
| |||
5424 | 5402 | | |
5425 | 5403 | | |
5426 | 5404 | | |
| 5405 | + | |
| 5406 | + | |
| 5407 | + | |
| 5408 | + | |
| 5409 | + | |
| 5410 | + | |
| 5411 | + | |
| 5412 | + | |
| 5413 | + | |
| 5414 | + | |
| 5415 | + | |
| 5416 | + | |
| 5417 | + | |
| 5418 | + | |
| 5419 | + | |
| 5420 | + | |
| 5421 | + | |
| 5422 | + | |
| 5423 | + | |
| 5424 | + | |
| 5425 | + | |
| 5426 | + | |
| 5427 | + | |
| 5428 | + | |
| 5429 | + | |
| 5430 | + | |
| 5431 | + | |
| 5432 | + | |
| 5433 | + | |
| 5434 | + | |
| 5435 | + | |
| 5436 | + | |
| 5437 | + | |
| 5438 | + | |
| 5439 | + | |
| 5440 | + | |
| 5441 | + | |
| 5442 | + | |
| 5443 | + | |
| 5444 | + | |
| 5445 | + | |
| 5446 | + | |
| 5447 | + | |
| 5448 | + | |
| 5449 | + | |
| 5450 | + | |
| 5451 | + | |
| 5452 | + | |
| 5453 | + | |
| 5454 | + | |
| 5455 | + | |
5427 | 5456 | | |
5428 | 5457 | | |
5429 | 5458 | | |
| |||
5436 | 5465 | | |
5437 | 5466 | | |
5438 | 5467 | | |
| 5468 | + | |
5439 | 5469 | | |
5440 | 5470 | | |
5441 | 5471 | | |
| |||
0 commit comments