firecracker-microvm/firecracker · error

balloon: invalid queue id: {qidx}

Error message

balloon: invalid queue id: {qidx}

What it means

Error "balloon: invalid queue id: {qidx}" thrown in firecracker-microvm/firecracker.

Source

Thrown at src/vmm/src/devices/virtio/balloon/device.rs:659

            queue.add_used(head.index, 0)?;
            needs_interrupt = true;
        }

        queue.advance_used_ring_idx();

        if needs_interrupt {
            self.signal_used_queue(idx)?;
        }

        Ok(())
    }

    pub(crate) fn signal_used_queue(&self, qidx: usize) -> Result<(), BalloonError> {
        self.interrupt_trigger()
            .trigger(VirtioInterruptType::Queue(
                qidx.try_into()
                    .unwrap_or_else(|_| panic!("balloon: invalid queue id: {qidx}")),
            ))
            .map_err(|err| {
                METRICS.event_fails.inc();
                BalloonError::InterruptError(err)
            })
    }

    /// Process device virtio queue(s).
    pub fn process_virtio_queues(&mut self) -> Result<(), InvalidAvailIdx> {
        if let Err(BalloonError::InvalidAvailIdx(err)) = self.process_inflate() {
            return Err(err);
        }
        if let Err(BalloonError::InvalidAvailIdx(err)) = self.process_deflate_queue() {
            return Err(err);
        }

        if self.free_page_hinting()
            && let Err(BalloonError::InvalidAvailIdx(err)) = self.process_free_page_hinting_queue()

View on GitHub (pinned to cc535f035f)

Solutions

  1. Ensure the queue index passed to the balloon device is within the number of queues the device exposes.
  2. Verify virtio queue negotiation completed before signalling queue events.

When it happens

Trigger: Thrown at src/vmm/src/devices/virtio/balloon/device.rs:664 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of firecracker-microvm/firecracker@cc535f035f (2026-08-19). Data as JSON: /api/errors/5ded8cf23fb8906b. Report an issue: GitHub.