Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Prepare for update to COCONUT linux host and QEMU 9.0 #415

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 6 additions & 16 deletions kernel/src/cpu/vc.rs
Original file line number Diff line number Diff line change
Expand Up @@ -512,20 +512,10 @@ mod tests {

#[test]
#[cfg_attr(not(test_in_svsm), ignore = "Can only be run inside guest")]
fn test_rdmsr_debug_ctl() {
const MSR_DEBUG_CTL: u32 = 0x1d9;
let apic_base = verify_ghcb_gets_altered(|| read_msr(MSR_DEBUG_CTL));
assert_eq!(apic_base, 0);
}

const MSR_TSC_AUX: u32 = 0xc0000103;

#[test]
#[cfg_attr(not(test_in_svsm), ignore = "Can only be run inside guest")]
fn test_wrmsr_tsc_aux() {
let test_val = 0x1234;
verify_ghcb_gets_altered(|| write_msr(MSR_TSC_AUX, test_val));
let readback = verify_ghcb_gets_altered(|| read_msr(MSR_TSC_AUX));
fn test_wrmsr_apic_base() {
let test_val = read_msr(MSR_APIC_BASE);
verify_ghcb_gets_altered(|| write_msr(MSR_APIC_BASE, test_val));
let readback = verify_ghcb_gets_altered(|| read_msr(MSR_APIC_BASE));
assert_eq!(test_val, readback);
}

Expand Down Expand Up @@ -577,8 +567,8 @@ mod tests {
#[test]
#[cfg_attr(not(test_in_svsm), ignore = "Can only be run inside guest")]
fn test_rdtscp() {
let expected_pid = u32::try_from(verify_ghcb_gets_altered(|| read_msr(MSR_TSC_AUX)))
.expect("pid should be 32 bits");
const MSR_TSC_AUX: u32 = 0xc0000103;
let expected_pid = u32::try_from(read_msr(MSR_TSC_AUX)).expect("pid should be 32 bits");
let RdtscpOut {
timestamp: mut prev,
pid,
Expand Down
17 changes: 15 additions & 2 deletions scripts/launch_guest.sh
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,24 @@ QEMU_MINOR=${QEMU_MINOR%%.$QEMU_BUILD}

# The QEMU machine and memory command line changed after QEMU 8.2.0 from
# the coconut-svsm git repository.
if (( (QEMU_MAJOR > 8) || ((QEMU_MAJOR == 8) && (QEMU_MINOR >= 2)) )); then
if (( QEMU_MAJOR >= 9 )); then
MACHINE=q35,confidential-guest-support=sev0,memory-backend=mem0,igvm-cfg=igvm0
IGVM_OBJECT=
Copy link
Contributor

@stefano-garzarella stefano-garzarella Jul 24, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess it's a left over. Can we remove this line (67)?

MEMORY=memory-backend-memfd,size=8G,id=mem0,share=true,prealloc=false,reserve=false
IGVM_OBJECT="-object igvm-cfg,id=igvm0,file=$IGVM"
INIT_FLAGS=
IGVM_FILE=
elif (( (QEMU_MAJOR > 8) || ((QEMU_MAJOR == 8) && (QEMU_MINOR >= 2)) )); then
MACHINE=q35,confidential-guest-support=sev0,memory-backend=mem0
MEMORY=memory-backend-memfd,size=8G,id=mem0,share=true,prealloc=false,reserve=false
IGVM_FILE=",igvm-file=$IGVM"
IGVM_OBJECT=
INIT_FLAGS=,init-flags=5
else
MACHINE=q35,confidential-guest-support=sev0,memory-backend=mem0,kvm-type=protected
MEMORY=memory-backend-memfd-private,size=8G,id=mem0,share=true
IGVM_OBJECT=
INIT_FLAGS=,init-flags=5
fi

# Setup a disk if an image has been specified
Expand Down Expand Up @@ -103,7 +115,8 @@ $SUDO_CMD \
-cpu EPYC-v4 \
-machine $MACHINE \
-object $MEMORY \
-object sev-snp-guest,id=sev0,cbitpos=$C_BIT_POS,reduced-phys-bits=1,init-flags=5,igvm-file=$IGVM \
-object sev-snp-guest,id=sev0,cbitpos=$C_BIT_POS,reduced-phys-bits=1$INIT_FLAGS$IGVM_FILE \
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not a strong opinion, but what about defining an SEV_SNP_OBJECT and assign it for each QEMU version, so it's a bit clear also for the reader the differences between the versions?

I mean something like this:

if (( QEMU_MAJOR >= 9 )); then
    ...
    SEV_SNP_OBJECT="-object sev-snp-guest,id=sev0,cbitpos=$C_BIT_POS,reduced-phys-bits=1"
elif (( (QEMU_MAJOR > 8) || ((QEMU_MAJOR == 8) && (QEMU_MINOR >= 2)) )); then
    ...
    SEV_SNP_OBJECT="-object sev-snp-guest,id=sev0,cbitpos=$C_BIT_POS,reduced-phys-bits=1,init-flags=5,igvm-file=$IGVM"
   ...

$IGVM_OBJECT \
-smp 4 \
-no-reboot \
-netdev user,id=vmnic -device e1000,netdev=vmnic,romfile= \
Expand Down
Loading