Skip to content

[devscripts] Preserve host-passthrough CPU in metal3 devscripts#3896

Open
danpawlik wants to merge 1 commit intoopenstack-k8s-operators:mainfrom
danpawlik:bypass-nested-virt
Open

[devscripts] Preserve host-passthrough CPU in metal3 devscripts#3896
danpawlik wants to merge 1 commit intoopenstack-k8s-operators:mainfrom
danpawlik:bypass-nested-virt

Conversation

@danpawlik
Copy link
Copy Markdown
Contributor

The metal3 generates a file in work dir:

# metal3-dev-env/vm-setup/roles/libvirt/tasks/vm_setup_tasks.yml
(...)
- name: Detect virtualization if libvirt_domain_type is not provided
  command: systemd-detect-virt
  ignore_errors: true
  become: true
  register: virt_result

- name: Default to qemu if inside a VM
  set_fact:
    libvirt_domain_type: qemu
  when: virt_result is succeeded

- name: Default to kvm if a VM is not detected
  set_fact:
    libvirt_domain_type: kvm
  when: virt_result is failed
when: libvirt_domain_type is undefined

which generates later in an SNO VM xml:

<cpu mode='custom' match='exact' check='full'>
  <model fallback='forbid'>EPYC</model>
  <vendor>AMD</vendor>
  <feature policy='require' name='monitor'/>
  <feature policy='require' name='x2apic'/>
  <feature policy='require' name='hypervisor'/>
  <feature policy='require' name='acpi'/>
  <feature policy='require' name='ss'/>
  <feature policy='require' name='erms'/>
  <feature policy='require' name='mpx'/>
  <feature policy='require' name='clwb'/>
  <feature policy='require' name='umip'/>
  <feature policy='require' name='pku'/>
  <feature policy='require' name='vaes'/>
  <feature policy='require' name='la57'/>
  <feature policy='require' name='rdpid'/>
  <feature policy='require' name='pks'/>
  <feature policy='require' name='fsrm'/>
  <feature policy='require' name='cmpccxadd'/>
  <feature policy='require' name='fzrm'/>
  <feature policy='require' name='fsrs'/>
  <feature policy='require' name='fsrc'/>
  <feature policy='require' name='3dnowext'/>
  <feature policy='require' name='3dnow'/>
  <feature policy='require' name='xsaveerptr'/>
  <feature policy='require' name='wbnoinvd'/>
  <feature policy='require' name='npt'/>
  <feature policy='require' name='vgif'/>
  <feature policy='require' name='svme-addr-chk'/>
  <feature policy='require' name='no-nested-data-bp'/>
  <feature policy='require' name='null-sel-clr-base'/>
  <feature policy='disable' name='vme'/>
  <feature policy='disable' name='xsavec'/>
  <feature policy='disable' name='misalignsse'/>
  <feature policy='disable' name='osvw'/>
  <feature policy='disable' name='topoext'/>
  <feature policy='disable' name='fxsr_opt'/>
  <feature policy='disable' name='nrip-save'/>
</cpu>

instead of host-passthrough. Bypass that behavior and always use
host-passthrough.

The metal3 generates a file in work dir:

    # metal3-dev-env/vm-setup/roles/libvirt/tasks/vm_setup_tasks.yml
    (...)
    - name: Detect virtualization if libvirt_domain_type is not provided
      command: systemd-detect-virt
      ignore_errors: true
      become: true
      register: virt_result

    - name: Default to qemu if inside a VM
      set_fact:
        libvirt_domain_type: qemu
      when: virt_result is succeeded

    - name: Default to kvm if a VM is not detected
      set_fact:
        libvirt_domain_type: kvm
      when: virt_result is failed
    when: libvirt_domain_type is undefined

which generates later in an SNO VM xml:

    <cpu mode='custom' match='exact' check='full'>
      <model fallback='forbid'>EPYC</model>
      <vendor>AMD</vendor>
      <feature policy='require' name='monitor'/>
      <feature policy='require' name='x2apic'/>
      <feature policy='require' name='hypervisor'/>
      <feature policy='require' name='acpi'/>
      <feature policy='require' name='ss'/>
      <feature policy='require' name='erms'/>
      <feature policy='require' name='mpx'/>
      <feature policy='require' name='clwb'/>
      <feature policy='require' name='umip'/>
      <feature policy='require' name='pku'/>
      <feature policy='require' name='vaes'/>
      <feature policy='require' name='la57'/>
      <feature policy='require' name='rdpid'/>
      <feature policy='require' name='pks'/>
      <feature policy='require' name='fsrm'/>
      <feature policy='require' name='cmpccxadd'/>
      <feature policy='require' name='fzrm'/>
      <feature policy='require' name='fsrs'/>
      <feature policy='require' name='fsrc'/>
      <feature policy='require' name='3dnowext'/>
      <feature policy='require' name='3dnow'/>
      <feature policy='require' name='xsaveerptr'/>
      <feature policy='require' name='wbnoinvd'/>
      <feature policy='require' name='npt'/>
      <feature policy='require' name='vgif'/>
      <feature policy='require' name='svme-addr-chk'/>
      <feature policy='require' name='no-nested-data-bp'/>
      <feature policy='require' name='null-sel-clr-base'/>
      <feature policy='disable' name='vme'/>
      <feature policy='disable' name='xsavec'/>
      <feature policy='disable' name='misalignsse'/>
      <feature policy='disable' name='osvw'/>
      <feature policy='disable' name='topoext'/>
      <feature policy='disable' name='fxsr_opt'/>
      <feature policy='disable' name='nrip-save'/>
    </cpu>

instead of host-passthrough. Bypass that behavior and always use
host-passthrough.

Signed-off-by: Daniel Pawlik <dpawlik@redhat.com>
@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci Bot commented Apr 30, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign michburk for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@danpawlik danpawlik requested a review from a team April 30, 2026 11:34
Copy link
Copy Markdown
Contributor

@abays abays left a comment

Choose a reason for hiding this comment

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

/lgtm

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants