diff --git a/cmd/nvidia-container-runtime/runtime_factory.go b/cmd/nvidia-container-runtime/runtime_factory.go index 9c1d2cf3..ab7c037f 100644 --- a/cmd/nvidia-container-runtime/runtime_factory.go +++ b/cmd/nvidia-container-runtime/runtime_factory.go @@ -77,10 +77,16 @@ func newSpecModifier(logger *logrus.Logger, cfg *config.Config, ociSpec oci.Spec return nil, err } + tegraModifier, err := modifier.NewTegraPlatformFiles(logger) + if err != nil { + return nil, err + } + modifiers := modifier.Merge( modeModifier, gdsModifier, mofedModifier, + tegraModifier, ) return modifiers, nil } diff --git a/internal/modifier/tegra.go b/internal/modifier/tegra.go new file mode 100644 index 00000000..547f6216 --- /dev/null +++ b/internal/modifier/tegra.go @@ -0,0 +1,45 @@ +/** +# Copyright (c) 2022, NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +**/ + +package modifier + +import ( + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" + "github.com/NVIDIA/nvidia-container-toolkit/internal/info" + "github.com/NVIDIA/nvidia-container-toolkit/internal/lookup" + "github.com/NVIDIA/nvidia-container-toolkit/internal/oci" + "github.com/sirupsen/logrus" +) + +// NewTegraPlatformFiles creates a modifier to inject the Tegra platform files into a container. +func NewTegraPlatformFiles(logger *logrus.Logger) (oci.SpecModifier, error) { + isTegra, _ := info.IsTegraSystem() + if !isTegra { + return nil, nil + } + + tegraSystemMounts := discover.NewMounts( + logger, + lookup.NewFileLocator(logger, ""), + "", + []string{ + "/etc/nv_tegra_release", + "/sys/devices/soc0/family", + }, + ) + + return NewModifierFromDiscoverer(logger, tegraSystemMounts) +}