diff --git a/pkg/plugins/generic/generic_plugin.go b/pkg/plugins/generic/generic_plugin.go index 4ad10b85c..8254acaa6 100644 --- a/pkg/plugins/generic/generic_plugin.go +++ b/pkg/plugins/generic/generic_plugin.go @@ -2,6 +2,7 @@ package generic import ( "bytes" + "errors" "os/exec" "reflect" "strconv" @@ -172,6 +173,10 @@ func (p *GenericPlugin) Apply() error { } if err := utils.SyncNodeState(p.DesireState, pfsToSkip); err != nil { + // Catch the "cannot allocate memory" error and try to use PCI realloc + if errors.Is(err, syscall.ENOMEM) { + p.addToDesiredKernelArgs(utils.KernelArgPciRealloc) + } return err } p.LastState = &sriovnetworkv1.SriovNetworkNodeState{} diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 635ca054b..a63c67587 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -42,6 +42,7 @@ const ( DeviceBF2 = "a2d6" DeviceBF3 = "a2dc" + KernelArgPciRealloc = "pci=realloc" KernelArgIntelIommu = "intel_iommu=on" KernelArgIommuPt = "iommu=pt" )