Skip to content

Conversation

@Okoyl
Copy link

@Okoyl Okoyl commented Nov 6, 2025

nvidiabluefield is an ignition provider for Nvidia BlueField DPUs.

It uses the bootfifo device provided by the mlxbf-bootctl kernel module to pull the ignition.

Previous discussion is at issue #2148

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request introduces a new Ignition provider for Nvidia BlueField DPUs. The provider reads the Ignition config from the bootfifo device. The implementation is straightforward and correct. I've made a couple of suggestions to improve code style and maintainability: one regarding Go's idiomatic error handling, and another about package naming conventions for consistency with other providers in the project.

@dustymabe
Copy link
Member

CI is reporting:

Undocumented platform ID: nvidiabluefield

which I think wants you to update https://github.com/coreos/ignition/blob/main/docs/supported-platforms.md

@dustymabe
Copy link
Member

dustymabe commented Nov 24, 2025

I'm testing this now. Can you squash all commits down into 1?

@Okoyl
Copy link
Author

Okoyl commented Nov 24, 2025

All of the previous commits are now squashed into one :)

@dustymabe
Copy link
Member

I hit trouble here because the mlxbf_bootctl kernel module wasn't loaded. I think we need to get it into the initramfs with something like

instmods -c vsock
and then maybe conditionally load it here like
// load qemu_fw_cfg module
if _, err = f.Logger.LogCmd(exec.Command(distro.ModprobeCmd(), "qemu_fw_cfg"), "loading QEMU firmware config module"); err != nil {
return
}

@Okoyl
Copy link
Author

Okoyl commented Nov 25, 2025

I added the dracut generation step and it worked immediately on an RHCOS pullspec image, even without the modprobe section. I included the modprobe part afterward just to be safe.


# required by nvidiabluefield platform to read ignition file through bootfifo sysfs interface
if [[ ${DRACUT_ARCH:-$(uname -m)} == aarch64 ]]; then
instmods -c mlxbf-bootctl
Copy link
Member

Choose a reason for hiding this comment

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

I think typically underscores are used here:

Suggested change
instmods -c mlxbf-bootctl
instmods -c mlxbf_bootctl

Copy link
Member

Choose a reason for hiding this comment

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

also, are we sure this won't apply to x86_64 at some point?

Copy link
Author

@Okoyl Okoyl Nov 25, 2025

Choose a reason for hiding this comment

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

It’ll likely stay aarch64 for the foreseeable future, given that current BlueField models are based on ARM SoCs.
It seems like this kernel module is not built on x86 at the major distros.

@dustymabe
Copy link
Member

Can you update the release notes with an entry for this new platform?

https://github.com/coreos/ignition/blob/main/docs/release-notes.md

@Okoyl Okoyl force-pushed the nvidia-bluefield branch 2 times, most recently from 500e9a5 to 5d91b2a Compare November 25, 2025 13:55
Copy link
Collaborator

@prestist prestist left a comment

Choose a reason for hiding this comment

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

From my perspective the changes make sense and are conforming to my expectation for adding this platform.

LGTM, thank you all for working through this.

My only nit is the commit message.

I would prefer it to look more like "providers/nvidiabluefield: add initial support" but not a blocker.

@dustymabe
Copy link
Member

I tested this in RHCOS by running a version of the make_bfb.sh with:

printf "systemd.mask=systemd-udev-trigger.service console=hvc0 initrd=initramfs permissive=1 ignition.firstboot ignition.platform.id=nvidiabluefield systemd.journald.forward_to_console=1" > "$boot_args2"

and providing an Ignition config like:

variant: fcos
version: 1.6.0
storage:
  files:
    - path: /etc/coreos/installer.d/install.yaml 
      contents:
        inline: |
          ignition-file: /var/lib/config.ign
          platform: metal
          console: [hvc0]
          append-karg: [systemd.mask=systemd-vconsole-setup.service, systemd.mask=systemd-udev-trigger.service]
          offline: true
          dest-device: /dev/nvme0n1
    - path: /var/lib/config.ign
      contents:
        inline: |
          {"ignition":{"version":"3.5.0"},"kernelArguments":{"shouldExist":["systemd.mask=systemd-udev-trigger.service","console=hvc0"]},"systemd":{"units":[{"dropins":[{"contents":"[Service]\n# Override Execstart in main unit\nExecStart=\n# Add new Execstart with `-` prefix to ignore failure\nExecStart=-/usr/sbin/agetty --autologin core --noclear %I $TERM\nTTYVTDisallocate=no\n","name":"autologin-core.conf"}],"name":"[email protected]"}]}}

Basically this is the Ignition config for the install boot that drops down an installer config and then also the Ignition for the first boot delivered to /var/lib/config.ign.

Here's the outdated make_bfb.sh

Copy link
Member

@dustymabe dustymabe 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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants