arch/powerpc/kvm/guest-state-buffer.c

Source file repositories/reference/linux-study-clean/arch/powerpc/kvm/guest-state-buffer.c

File Facts

System
Linux kernel
Corpus path
arch/powerpc/kvm/guest-state-buffer.c
Extension
.c
Size
15045 bytes
Lines
661
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_L0_GUEST_HEAP:
			fallthrough;
		case KVMPPC_GSID_L0_GUEST_HEAP_MAX:
			fallthrough;
		case KVMPPC_GSID_L0_GUEST_PGTABLE_SIZE:
			fallthrough;
		case KVMPPC_GSID_L0_GUEST_PGTABLE_SIZE_MAX:
			fallthrough;
		case KVMPPC_GSID_L0_GUEST_PGTABLE_RECLAIM:
			type = KVMPPC_GSE_BE64;
			break;
		}
		break;
	case KVMPPC_GS_CLASS_GUESTWIDE:
		switch (iden) {
		case KVMPPC_GSID_HOST_STATE_SIZE:
		case KVMPPC_GSID_RUN_OUTPUT_MIN_SIZE:
		case KVMPPC_GSID_TB_OFFSET:
			type = KVMPPC_GSE_BE64;
			break;
		case KVMPPC_GSID_PARTITION_TABLE:
			type = KVMPPC_GSE_PARTITION_TABLE;
			break;
		case KVMPPC_GSID_PROCESS_TABLE:
			type = KVMPPC_GSE_PROCESS_TABLE;
			break;
		case KVMPPC_GSID_LOGICAL_PVR:
			type = KVMPPC_GSE_BE32;
			break;
		}
		break;
	case KVMPPC_GS_CLASS_META:
		switch (iden) {
		case KVMPPC_GSID_RUN_INPUT:
		case KVMPPC_GSID_RUN_OUTPUT:
			type = KVMPPC_GSE_BUFFER;
			break;
		case KVMPPC_GSID_VPA:
			type = KVMPPC_GSE_BE64;
			break;
		}
		break;
	case KVMPPC_GS_CLASS_DWORD_REG:
		type = KVMPPC_GSE_BE64;
		break;
	case KVMPPC_GS_CLASS_WORD_REG:
		type = KVMPPC_GSE_BE32;
		break;
	case KVMPPC_GS_CLASS_VECTOR:
		type = KVMPPC_GSE_VEC128;
		break;
	case KVMPPC_GS_CLASS_INTR:
		switch (iden) {
		case KVMPPC_GSID_HDAR:
		case KVMPPC_GSID_ASDR:
		case KVMPPC_GSID_HEIR:
			type = KVMPPC_GSE_BE64;
			break;
		case KVMPPC_GSID_HDSISR:
			type = KVMPPC_GSE_BE32;
			break;
		}
		break;
	}

	return type;
}

/**
 * kvmppc_gsid_flags() - the flags for a guest state ID
 * @iden: guest state ID
 *
 * Returns any flags for the guest state ID.
 */
unsigned long kvmppc_gsid_flags(u16 iden)
{
	unsigned long flags = 0;

	switch (kvmppc_gsid_class(iden)) {
	case KVMPPC_GS_CLASS_GUESTWIDE:
		flags = KVMPPC_GS_FLAGS_WIDE;
		break;
	case KVMPPC_GS_CLASS_HOSTWIDE:
		flags = KVMPPC_GS_FLAGS_HOST_WIDE;
		break;
	case KVMPPC_GS_CLASS_META:
	case KVMPPC_GS_CLASS_DWORD_REG:
	case KVMPPC_GS_CLASS_WORD_REG:
	case KVMPPC_GS_CLASS_VECTOR:

Annotation

Implementation Notes