/* Trap handling code needs to get at a few critical values upon *trapentryandtoprocessTSBmisses.Thesecannotbeinthe *per_cpu()areaaswereallyneedtolockthemintotheTLBand *thusmakethempartofthemainkernelimage.Asaresultwe *trytomakethisassmallaspossible. * *Thisispaddedoutandalignedto64-bytestoavoidfalsesharing *onSMP.
*/
/* If you modify the size of this structure, please update *TRAP_BLOCK_SZ_SHIFTbelow.
*/ struct thread_info; struct trap_per_cpu { /* D-cache line 1: Basic thread information, cpu and device mondo queues */ struct thread_info *thread; unsignedlong pgd_paddr; unsignedlong cpu_mondo_pa; unsignedlong dev_mondo_pa;
/* D-cache line 2: Error Mondo Queue and kernel buffer pointers */ unsignedlong resum_mondo_pa; unsignedlong resum_kernel_buf_pa; unsignedlong nonresum_mondo_pa; unsignedlong nonresum_kernel_buf_pa;
/* Dcache lines 3, 4, 5, and 6: Hypervisor Fault Status */ struct hv_fault_status fault_info;
/* Dcache line 7: Physical addresses of CPU send mondo block and CPU list. */ unsignedlong cpu_mondo_block_pa; unsignedlong cpu_list_pa; unsignedlong tsb_huge; unsignedlong tsb_huge_temp;
/* Dcache line 8: IRQ work list, and keep trap_block a power-of-2 in size. */ unsignedlong irq_worklist_pa; unsignedint cpu_mondo_qmask; unsignedint dev_mondo_qmask; unsignedint resum_qmask; unsignedint nonresum_qmask; unsignedlong __per_cpu_base;
} __attribute__((aligned(64))); externstruct trap_per_cpu trap_block[NR_CPUS]; void init_cur_cpu_trap(struct thread_info *); void setup_tba(void); externint ncpus_probed; extern u64 cpu_mondo_counter[NR_CPUS];
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.