code overview
sys_reg_to_index (几个辅助函数)
set_id_reg
undef_access
bad_trap
read_from_write_only
write_to_read_only
sr_loc_attr
sr_loc
locate_direct_register
locate_mapped_el2_register
locate_register
read_sr_from_cpu
write_sr_to_cpu
vcpu_read_sys_reg
vcpu_write_sys_reg
get_min_cache_line_size (全部都是 sys_reg_desc 中定义的特殊处理的项目了)
get_ccsidr
set_ccsidr
access_rw
access_dcsw
access_dcgsw
get_access_mask
access_vm_reg
access_actlr
access_gic_sgi
access_gic_sre
trap_raz_wi
trap_loregion
trap_oslar_el1
trap_oslsr_el1
set_oslsr_el1
trap_dbgauthstatus_el1
trap_debug_regs
reg_to_dbg
dbg_to_reg
demux_wb_reg
trap_dbg_wb_reg
set_dbg_wb_reg
get_dbg_wb_reg
reset_dbg_wb_reg
reset_amair_el1
reset_actlr
reset_mpidr
hidden_visibility
pmu_visibility
reset_pmu_reg
reset_pmevcntr
reset_pmevtyper
reset_pmselr
reset_pmcr
check_pmu_access_disabled
pmu_access_el0_disabled
pmu_write_swinc_el0_disabled
pmu_access_cycle_counter_el0_disabled
pmu_access_event_counter_el0_disabled
access_pmcr
access_pmselr
access_pmceid
pmu_counter_idx_valid
get_pmu_evcntr
set_pmu_evcntr
access_pmu_evcntr
access_pmu_evtyper
set_pmreg
get_pmreg
access_pmcnten
access_pminten
access_pmovs
access_pmswinc
access_pmuserenr
get_pmcr
set_pmcr
ptrauth_visibility
access_arch_timer
arch_timer_set_user
arch_timer_get_user
kvm_arm64_ftr_safe_value
arm64_check_features
pmuver_to_perfmon
sanitise_id_aa64pfr0_el1
sanitise_id_aa64pfr1_el1
sanitise_id_aa64dfr0_el1
__kvm_read_sanitised_id_reg
kvm_read_sanitised_id_reg
read_id_reg
is_feature_id_reg
is_vm_ftr_id_reg
is_vcpu_ftr_id_reg
is_aa32_id_reg
id_visibility
aa32_id_visibility
raz_visibility
access_id_reg
sve_visibility
sme_visibility
fp8_visibility
sanitise_id_aa64pfr0_el1
sanitise_id_aa64pfr1_el1
sanitise_id_aa64dfr0_el1
ignore_feat_doublelock
set_id_aa64dfr0_el1
read_sanitised_id_dfr0_el1
set_id_dfr0_el1
set_id_aa64pfr0_el1
set_id_aa64pfr1_el1
set_id_aa64mmfr0_el1
set_id_aa64mmfr2_el1
set_ctr_el0
get_id_reg
set_id_reg
kvm_set_vm_id_reg
get_raz_reg
set_wi_reg
access_ctr
access_clidr
reset_clidr
set_clidr
access_csselr
access_ccsidr
mte_visibility
el2_visibility
bad_vncr_trap
bad_redir_trap
access_sp_el1
access_elr
access_spsr
access_cntkctl_el12
reset_hcr
__el2_visibility
sve_el2_visibility
vncr_el2_visibility
sctlr2_visibility
sctlr2_el2_visibility
access_zcr_el2
access_gic_vtr
access_gic_misr
access_gic_eisr
access_gic_elrsr
s1poe_visibility
s1poe_el2_visibility
tcr2_visibility
tcr2_el2_visibility
fgt2_visibility
fgt_visibility
s1pie_visibility
s1pie_el2_visibility
cnthv_visibility
access_mdcr
access_ras
access_imp_id_reg
init_imp_id_regs
reset_imp_id_reg
set_imp_id_reg
reset_mdcr
handle_at_s1e01
handle_at_s1e2
handle_at_s12
kvm_supported_tlbi_s12_op
handle_alle1is
kvm_supported_tlbi_ipas2_op
tlbi_info
s2_mmu_unmap_range
handle_vmalls12e1is
handle_ripas2e1is
s2_mmu_unmap_ipa
handle_ipas2e1is
s2_mmu_tlbi_s1e1
handle_tlbi_el2
handle_tlbi_el1
trap_dbgdidr
check_sysreg_table
kvm_handle_cp14_load_store
perform_access
emulate_cp
unhandled_cp_access
kvm_handle_cp_64
emulate_sys_reg
kvm_esr_cp10_id_to_sys64
kvm_handle_cp10_id
kvm_emulate_cp15_id_reg
kvm_handle_cp_32 ( coprocess 支持)
kvm_handle_cp15_64
kvm_handle_cp15_32
kvm_handle_cp14_64
kvm_handle_cp14_32
emulate_sys_reg
idregs_debug_find (debugfs 支持)
idregs_debug_start
idregs_debug_next
idregs_debug_stop
idregs_debug_show
idregs_debug_open
kvm_sys_regs_create_debugfs
reset_vm_ftr_id_reg
reset_vcpu_ftr_id_reg
kvm_reset_sys_regs
kvm_handle_sys_reg
index_to_params (和用户态进行交互的部分)
get_reg_by_id
id_to_sys_reg_desc
demux_c15_get
demux_c15_set
kvm_one_reg_to_id
kvm_sys_reg_get_user
kvm_arm_sys_reg_get_reg
kvm_sys_reg_set_user
kvm_arm_sys_reg_set_reg
num_demux_regs
write_demux_regids
sys_reg_to_index
copy_reg_to_user
walk_one_sys_reg
walk_sys_regs
kvm_arm_num_sys_reg_descs
kvm_arm_copy_sys_reg_indices
kvm_vm_ioctl_get_reg_writable_masks
vcpu_set_hcr
kvm_calculate_traps
kvm_finalize_sys_regs
kvm_sys_reg_table_init
debugfs
localhost# cat idregs
SYS_MIDR_EL1: 00000000481fd010
SYS_REVIDR_EL1: 0000000000000000
SYS_ID_PFR0_EL1: 0000000000000000
SYS_ID_PFR1_EL1: 0000000000000000
SYS_ID_DFR0_EL1: 0000000004000000
SYS_ID_AFR0_EL1: 0000000000000000
SYS_ID_MMFR0_EL1: 0000000000000000
SYS_ID_MMFR1_EL1: 0000000000000000
SYS_ID_MMFR2_EL1: 0000000000000000
SYS_ID_MMFR3_EL1: 0000000000000000
SYS_ID_ISAR0_EL1: 0000000000000000
SYS_ID_ISAR1_EL1: 0000000000000000
SYS_ID_ISAR2_EL1: 0000000000000000
SYS_ID_ISAR3_EL1: 0000000000000000
SYS_ID_ISAR4_EL1: 0000000000000000
SYS_ID_ISAR5_EL1: 0000000000000000
SYS_ID_MMFR4_EL1: 0000000000000000
SYS_ID_ISAR6_EL1: 0000000000000000
SYS_MVFR0_EL1: 0000000000000000
SYS_MVFR1_EL1: 0000000000000000
SYS_MVFR2_EL1: 0000000000000000
S3_0_0_3_3: 0000000000000000
SYS_ID_PFR2_EL1: 0000000000000000
SYS_ID_DFR1_EL1: 0000000000000000
SYS_ID_MMFR5_EL1: 0000000000000000
S3_0_0_3_7: 0000000000000000
SYS_ID_AA64PFR0_EL1: 1100000011111111
SYS_ID_AA64PFR1_EL1: 0000000000000000
SYS_ID_AA64PFR2_EL1: 0000000000000000
S3_0_0_4_3: 0000000000000000
SYS_ID_AA64ZFR0_EL1: 0000000000000000
SYS_ID_AA64SMFR0_EL1: 0000000000000000
S3_0_0_4_6: 0000000000000000
SYS_ID_AA64FPFR0_EL1: 0000000000000000
SYS_ID_AA64DFR0_EL1: 0000000010305408
SYS_ID_AA64DFR1_EL1: 0000000000000000
S3_0_0_5_2: 0000000000000000
S3_0_0_5_3: 0000000000000000
SYS_ID_AA64AFR0_EL1: 0000000000000000
SYS_ID_AA64AFR1_EL1: 0000000000000000
S3_0_0_5_6: 0000000000000000
S3_0_0_5_7: 0000000000000000
SYS_ID_AA64ISAR0_EL1: 0001100010211120
SYS_ID_AA64ISAR1_EL1: 0000000000011001
SYS_ID_AA64ISAR2_EL1: 0000000000000000
SYS_ID_AA64ISAR3_EL1: 0000000000000000
S3_0_0_6_4: 0000000000000000
S3_0_0_6_5: 0000000000000000
S3_0_0_6_6: 0000000000000000
S3_0_0_6_7: 0000000000000000
SYS_ID_AA64MMFR0_EL1: 0000000000101125
SYS_ID_AA64MMFR1_EL1: 0000000010211122
SYS_ID_AA64MMFR2_EL1: 0000000000001011
SYS_ID_AA64MMFR3_EL1: 0000000000000000
SYS_ID_AA64MMFR4_EL1: 0000000000000000
S3_0_0_7_5: 0000000000000000
S3_0_0_7_6: 0000000000000000
S3_0_0_7_7: 0000000000000000
SYS_AIDR_EL1: 0000000000000551
SYS_CTR_EL0: 0000000084448004
static const struct seq_operations idregs_debug_sops = {
.start = idregs_debug_start,
.next = idregs_debug_next,
.stop = idregs_debug_stop,
.show = idregs_debug_show,
};
只有部分 id 被挑出来了:
/*
* Return true if the register's (Op0, Op1, CRn, CRm, Op2) is
* (3, 0, 0, crm, op2), where 1<=crm<8, 0<=op2<8, which is the range of ID
* registers KVM maintains on a per-VM basis.
*
* Additionally, the implementation ID registers and CTR_EL0 are handled as
* per-VM registers.
*/
static inline bool is_vm_ftr_id_reg(u32 id)
{
switch (id) {
case SYS_CTR_EL0:
case SYS_MIDR_EL1:
case SYS_REVIDR_EL1:
case SYS_AIDR_EL1:
return true;
default:
return (sys_reg_Op0(id) == 3 && sys_reg_Op1(id) == 0 &&
sys_reg_CRn(id) == 0 && sys_reg_CRm(id) >= 1 &&
sys_reg_CRm(id) < 8);
}
}
本站所有文章转发 CSDN 将按侵权追究法律责任,其它情况随意。