Skip to content

Commit f6681ab

Browse files
jgunthorpewilldeacon
authored andcommitted
iommu/arm-smmu-v3: Expose the arm_smmu_attach interface
The arm-smmuv3-iommufd.c file will need to call these functions too. Remove statics and put them in the header file. Remove the kunit visibility protections from arm_smmu_make_abort_ste() and arm_smmu_make_s2_domain_ste(). Reviewed-by: Nicolin Chen <nicolinc@nvidia.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> Reviewed-by: Jerry Snitselaar <jsnitsel@redhat.com> Reviewed-by: Mostafa Saleh <smostafa@google.com> Reviewed-by: Donald Dutile <ddutile@redhat.com> Tested-by: Nicolin Chen <nicolinc@nvidia.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Link: https://lore.kernel.org/r/7-v4-9e99b76f3518+3a8-smmuv3_nesting_jgg@nvidia.com Signed-off-by: Will Deacon <will@kernel.org>
1 parent 874b87c commit f6681ab

File tree

2 files changed

+27
-22
lines changed

2 files changed

+27
-22
lines changed

drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1549,7 +1549,6 @@ static void arm_smmu_write_ste(struct arm_smmu_master *master, u32 sid,
15491549
}
15501550
}
15511551

1552-
VISIBLE_IF_KUNIT
15531552
void arm_smmu_make_abort_ste(struct arm_smmu_ste *target)
15541553
{
15551554
memset(target, 0, sizeof(*target));
@@ -1632,7 +1631,6 @@ void arm_smmu_make_cdtable_ste(struct arm_smmu_ste *target,
16321631
}
16331632
EXPORT_SYMBOL_IF_KUNIT(arm_smmu_make_cdtable_ste);
16341633

1635-
VISIBLE_IF_KUNIT
16361634
void arm_smmu_make_s2_domain_ste(struct arm_smmu_ste *target,
16371635
struct arm_smmu_master *master,
16381636
struct arm_smmu_domain *smmu_domain,
@@ -2505,8 +2503,8 @@ arm_smmu_get_step_for_sid(struct arm_smmu_device *smmu, u32 sid)
25052503
}
25062504
}
25072505

2508-
static void arm_smmu_install_ste_for_dev(struct arm_smmu_master *master,
2509-
const struct arm_smmu_ste *target)
2506+
void arm_smmu_install_ste_for_dev(struct arm_smmu_master *master,
2507+
const struct arm_smmu_ste *target)
25102508
{
25112509
int i, j;
25122510
struct arm_smmu_device *smmu = master->smmu;
@@ -2671,16 +2669,6 @@ static void arm_smmu_remove_master_domain(struct arm_smmu_master *master,
26712669
spin_unlock_irqrestore(&smmu_domain->devices_lock, flags);
26722670
}
26732671

2674-
struct arm_smmu_attach_state {
2675-
/* Inputs */
2676-
struct iommu_domain *old_domain;
2677-
struct arm_smmu_master *master;
2678-
bool cd_needs_ats;
2679-
ioasid_t ssid;
2680-
/* Resulting state */
2681-
bool ats_enabled;
2682-
};
2683-
26842672
/*
26852673
* Start the sequence to attach a domain to a master. The sequence contains three
26862674
* steps:
@@ -2701,8 +2689,8 @@ struct arm_smmu_attach_state {
27012689
* new_domain can be a non-paging domain. In this case ATS will not be enabled,
27022690
* and invalidations won't be tracked.
27032691
*/
2704-
static int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state,
2705-
struct iommu_domain *new_domain)
2692+
int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state,
2693+
struct iommu_domain *new_domain)
27062694
{
27072695
struct arm_smmu_master *master = state->master;
27082696
struct arm_smmu_master_domain *master_domain;
@@ -2784,7 +2772,7 @@ static int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state,
27842772
* completes synchronizing the PCI device's ATC and finishes manipulating the
27852773
* smmu_domain->devices list.
27862774
*/
2787-
static void arm_smmu_attach_commit(struct arm_smmu_attach_state *state)
2775+
void arm_smmu_attach_commit(struct arm_smmu_attach_state *state)
27882776
{
27892777
struct arm_smmu_master *master = state->master;
27902778

drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -830,21 +830,22 @@ struct arm_smmu_entry_writer_ops {
830830
void (*sync)(struct arm_smmu_entry_writer *writer);
831831
};
832832

833+
void arm_smmu_make_abort_ste(struct arm_smmu_ste *target);
834+
void arm_smmu_make_s2_domain_ste(struct arm_smmu_ste *target,
835+
struct arm_smmu_master *master,
836+
struct arm_smmu_domain *smmu_domain,
837+
bool ats_enabled);
838+
833839
#if IS_ENABLED(CONFIG_KUNIT)
834840
void arm_smmu_get_ste_used(const __le64 *ent, __le64 *used_bits);
835841
void arm_smmu_write_entry(struct arm_smmu_entry_writer *writer, __le64 *cur,
836842
const __le64 *target);
837843
void arm_smmu_get_cd_used(const __le64 *ent, __le64 *used_bits);
838-
void arm_smmu_make_abort_ste(struct arm_smmu_ste *target);
839844
void arm_smmu_make_bypass_ste(struct arm_smmu_device *smmu,
840845
struct arm_smmu_ste *target);
841846
void arm_smmu_make_cdtable_ste(struct arm_smmu_ste *target,
842847
struct arm_smmu_master *master, bool ats_enabled,
843848
unsigned int s1dss);
844-
void arm_smmu_make_s2_domain_ste(struct arm_smmu_ste *target,
845-
struct arm_smmu_master *master,
846-
struct arm_smmu_domain *smmu_domain,
847-
bool ats_enabled);
848849
void arm_smmu_make_sva_cd(struct arm_smmu_cd *target,
849850
struct arm_smmu_master *master, struct mm_struct *mm,
850851
u16 asid);
@@ -902,6 +903,22 @@ static inline bool arm_smmu_master_canwbs(struct arm_smmu_master *master)
902903
IOMMU_FWSPEC_PCI_RC_CANWBS;
903904
}
904905

906+
struct arm_smmu_attach_state {
907+
/* Inputs */
908+
struct iommu_domain *old_domain;
909+
struct arm_smmu_master *master;
910+
bool cd_needs_ats;
911+
ioasid_t ssid;
912+
/* Resulting state */
913+
bool ats_enabled;
914+
};
915+
916+
int arm_smmu_attach_prepare(struct arm_smmu_attach_state *state,
917+
struct iommu_domain *new_domain);
918+
void arm_smmu_attach_commit(struct arm_smmu_attach_state *state);
919+
void arm_smmu_install_ste_for_dev(struct arm_smmu_master *master,
920+
const struct arm_smmu_ste *target);
921+
905922
#ifdef CONFIG_ARM_SMMU_V3_SVA
906923
bool arm_smmu_sva_supported(struct arm_smmu_device *smmu);
907924
bool arm_smmu_master_sva_supported(struct arm_smmu_master *master);

0 commit comments

Comments
 (0)