IOMMU Fixes for Linux v7.0-rc6
Including: - IOMMU-PT related compile breakage in for AMD driver. - IOTLB flushing behavior when unmapped region is larger than requested due to page-sizes. - Fix IOTLB flush behavior with empty gathers. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEr9jSbILcajRFYWYyK/BELZcBGuMFAmnOI/gACgkQK/BELZcB GuOt/g/+NVakCOh25ZW43l4GzOpoHUMhNMQnafzNA5Vh7ZrNXMESBPB1mw6kMgta ebaLxbHg6CIWoTZqqN22to01o1enKyEKMtF9/69Sp/178QidMOq21aRssbNtr0VF tpIzzoNspiKQ6io70EoYKBGLIBSIE/yrmnFDAHWo7EO/el/u+CD7RCssFBpT4ZjR d60kLZxj1mUBPVj3xhuFamT2i9IiQaPn00z3igmTocHIH8308KZY6HbRc4JtDfkE QHCrPr8SrZgpPdQwHf4/p6TFF7u5qcWYNyhtoUDp1TGUo7uYdbT2MRIvwmxhcyY1 xzYUdDNz8wufdyuGWjjsFhjcUV2KxLOk1NrneQB9Z9vrgR+N4LqW0cZX0RqcoiSH jufx4J2otd555wQOTYreeSp8zYQ5Ipx+ttaTX7yF0kfEOOhD8qNwKuWJ1nf57eQp g+YvFLDuklNSTS+mASgp0cRx1rTXy2e8RsFfi7vZHt6Chcybi6g72l0G1ALN0Krt zUVjsyp09Up2NSgIp53A6rZhoZyck7UlXUAg5yL1w9//QzIXley2TVtPW29n3zKN NHnZCAxg3qIT3VCrHk7q/Q+CzVewPcClw/4ZgZyTCEcewgAtsIdtaVQRtHKOLGzX MV5NACkK4x3MsdEXneixCy3jcraUvnxrSju67VeoIP/D2SEP/Zs= =miSc -----END PGP SIGNATURE----- Merge tag 'iommu-fixes-v7.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux Pull iommu fixes from Joerg Roedel: - IOMMU-PT related compile breakage in for AMD driver - IOTLB flushing behavior when unmapped region is larger than requested due to page-sizes - Fix IOTLB flush behavior with empty gathers * tag 'iommu-fixes-v7.0-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux: iommupt/amdv1: mark amdv1pt_install_leaf_entry as __always_inline iommupt: Fix short gather if the unmap goes into a large mapping iommu: Do not call drivers for empty gathers
This commit is contained in:
commit
4c2c526b5a
|
|
@ -191,7 +191,7 @@ static inline enum pt_entry_type amdv1pt_load_entry_raw(struct pt_state *pts)
|
||||||
}
|
}
|
||||||
#define pt_load_entry_raw amdv1pt_load_entry_raw
|
#define pt_load_entry_raw amdv1pt_load_entry_raw
|
||||||
|
|
||||||
static inline void
|
static __always_inline void
|
||||||
amdv1pt_install_leaf_entry(struct pt_state *pts, pt_oaddr_t oa,
|
amdv1pt_install_leaf_entry(struct pt_state *pts, pt_oaddr_t oa,
|
||||||
unsigned int oasz_lg2,
|
unsigned int oasz_lg2,
|
||||||
const struct pt_write_attrs *attrs)
|
const struct pt_write_attrs *attrs)
|
||||||
|
|
|
||||||
|
|
@ -1057,7 +1057,7 @@ size_t DOMAIN_NS(unmap_pages)(struct iommu_domain *domain, unsigned long iova,
|
||||||
|
|
||||||
pt_walk_range(&range, __unmap_range, &unmap);
|
pt_walk_range(&range, __unmap_range, &unmap);
|
||||||
|
|
||||||
gather_range_pages(iotlb_gather, iommu_table, iova, len,
|
gather_range_pages(iotlb_gather, iommu_table, iova, unmap.unmapped,
|
||||||
&unmap.free_list);
|
&unmap.free_list);
|
||||||
|
|
||||||
return unmap.unmapped;
|
return unmap.unmapped;
|
||||||
|
|
|
||||||
|
|
@ -980,7 +980,8 @@ static inline void iommu_flush_iotlb_all(struct iommu_domain *domain)
|
||||||
static inline void iommu_iotlb_sync(struct iommu_domain *domain,
|
static inline void iommu_iotlb_sync(struct iommu_domain *domain,
|
||||||
struct iommu_iotlb_gather *iotlb_gather)
|
struct iommu_iotlb_gather *iotlb_gather)
|
||||||
{
|
{
|
||||||
if (domain->ops->iotlb_sync)
|
if (domain->ops->iotlb_sync &&
|
||||||
|
likely(iotlb_gather->start < iotlb_gather->end))
|
||||||
domain->ops->iotlb_sync(domain, iotlb_gather);
|
domain->ops->iotlb_sync(domain, iotlb_gather);
|
||||||
|
|
||||||
iommu_iotlb_gather_init(iotlb_gather);
|
iommu_iotlb_gather_init(iotlb_gather);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue