arch/powerpc/kvm/book3s_hv_nestedv2.c

Source file repositories/reference/linux-study-clean/arch/powerpc/kvm/book3s_hv_nestedv2.c

File Facts

System
Linux kernel
Corpus path
arch/powerpc/kvm/book3s_hv_nestedv2.c
Extension
.c
Size
28423 bytes
Lines
1073
Domain
Architecture Layer
Bucket
arch/powerpc
Inferred role
Architecture Layer: exported/initcall integration point
Status
integration implementation candidate

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

switch (iden) {
		case KVMPPC_GSID_HOST_STATE_SIZE:
		case KVMPPC_GSID_RUN_OUTPUT_MIN_SIZE:
		case KVMPPC_GSID_PARTITION_TABLE:
		case KVMPPC_GSID_PROCESS_TABLE:
		case KVMPPC_GSID_RUN_INPUT:
		case KVMPPC_GSID_RUN_OUTPUT:
		  /* Host wide counters */
		case KVMPPC_GSID_L0_GUEST_HEAP:
		case KVMPPC_GSID_L0_GUEST_HEAP_MAX:
		case KVMPPC_GSID_L0_GUEST_PGTABLE_SIZE:
		case KVMPPC_GSID_L0_GUEST_PGTABLE_SIZE_MAX:
		case KVMPPC_GSID_L0_GUEST_PGTABLE_RECLAIM:
			break;
		default:
			size += kvmppc_gse_total_size(kvmppc_gsid_size(iden));
		}
	}
	return size;
}

static int gs_msg_ops_vcpu_fill_info(struct kvmppc_gs_buff *gsb,
				     struct kvmppc_gs_msg *gsm)
{
	struct kvm_vcpu *vcpu;
	vector128 v;
	int rc, i;
	u16 iden;
	u32 arch_compat = 0;

	vcpu = gsm->data;

	kvmppc_gsm_for_each(gsm, iden)
	{
		rc = 0;

		if ((gsm->flags & KVMPPC_GS_FLAGS_WIDE) !=
		    (kvmppc_gsid_flags(iden) & KVMPPC_GS_FLAGS_WIDE))
			continue;

		switch (iden) {
		case KVMPPC_GSID_DSCR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.dscr);
			break;
		case KVMPPC_GSID_MMCRA:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.mmcra);
			break;
		case KVMPPC_GSID_HFSCR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.hfscr);
			break;
		case KVMPPC_GSID_PURR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.purr);
			break;
		case KVMPPC_GSID_SPURR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.spurr);
			break;
		case KVMPPC_GSID_AMR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.amr);
			break;
		case KVMPPC_GSID_UAMOR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.uamor);
			break;
		case KVMPPC_GSID_SIAR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.siar);
			break;
		case KVMPPC_GSID_SDAR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.sdar);
			break;
		case KVMPPC_GSID_IAMR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.iamr);
			break;
		case KVMPPC_GSID_DAWR0:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.dawr0);
			break;
		case KVMPPC_GSID_DAWR1:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.dawr1);
			break;
		case KVMPPC_GSID_DAWRX0:
			rc = kvmppc_gse_put_u32(gsb, iden, vcpu->arch.dawrx0);
			break;
		case KVMPPC_GSID_DAWRX1:
			rc = kvmppc_gse_put_u32(gsb, iden, vcpu->arch.dawrx1);
			break;
		case KVMPPC_GSID_DEXCR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.dexcr);
			break;
		case KVMPPC_GSID_HASHKEYR:
			rc = kvmppc_gse_put_u64(gsb, iden, vcpu->arch.hashkeyr);
			break;
		case KVMPPC_GSID_HASHPKEYR:

Annotation

Implementation Notes