mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
[vfs2] Implement /sys/devices/system/cpu/cpuX.
Fixes #3364 PiperOrigin-RevId: 324724614
This commit is contained in:
@@ -30,6 +30,7 @@ import (
|
||||
|
||||
// Name is the default filesystem name.
|
||||
const Name = "sysfs"
|
||||
const defaultSysDirMode = linux.FileMode(0755)
|
||||
|
||||
// FilesystemType implements vfs.FilesystemType.
|
||||
type FilesystemType struct{}
|
||||
@@ -57,9 +58,6 @@ func (fsType FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
devMinor: devMinor,
|
||||
}
|
||||
fs.VFSFilesystem().Init(vfsObj, &fsType, fs)
|
||||
k := kernel.KernelFromContext(ctx)
|
||||
maxCPUCores := k.ApplicationCores()
|
||||
defaultSysDirMode := linux.FileMode(0755)
|
||||
|
||||
root := fs.newDir(creds, defaultSysDirMode, map[string]*kernfs.Dentry{
|
||||
"block": fs.newDir(creds, defaultSysDirMode, nil),
|
||||
@@ -70,11 +68,7 @@ func (fsType FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
"dev": fs.newDir(creds, defaultSysDirMode, nil),
|
||||
"devices": fs.newDir(creds, defaultSysDirMode, map[string]*kernfs.Dentry{
|
||||
"system": fs.newDir(creds, defaultSysDirMode, map[string]*kernfs.Dentry{
|
||||
"cpu": fs.newDir(creds, defaultSysDirMode, map[string]*kernfs.Dentry{
|
||||
"online": fs.newCPUFile(creds, maxCPUCores, linux.FileMode(0444)),
|
||||
"possible": fs.newCPUFile(creds, maxCPUCores, linux.FileMode(0444)),
|
||||
"present": fs.newCPUFile(creds, maxCPUCores, linux.FileMode(0444)),
|
||||
}),
|
||||
"cpu": cpuDir(ctx, fs, creds),
|
||||
}),
|
||||
}),
|
||||
"firmware": fs.newDir(creds, defaultSysDirMode, nil),
|
||||
@@ -86,6 +80,20 @@ func (fsType FilesystemType) GetFilesystem(ctx context.Context, vfsObj *vfs.Virt
|
||||
return fs.VFSFilesystem(), root.VFSDentry(), nil
|
||||
}
|
||||
|
||||
func cpuDir(ctx context.Context, fs *filesystem, creds *auth.Credentials) *kernfs.Dentry {
|
||||
k := kernel.KernelFromContext(ctx)
|
||||
maxCPUCores := k.ApplicationCores()
|
||||
children := map[string]*kernfs.Dentry{
|
||||
"online": fs.newCPUFile(creds, maxCPUCores, linux.FileMode(0444)),
|
||||
"possible": fs.newCPUFile(creds, maxCPUCores, linux.FileMode(0444)),
|
||||
"present": fs.newCPUFile(creds, maxCPUCores, linux.FileMode(0444)),
|
||||
}
|
||||
for i := uint(0); i < maxCPUCores; i++ {
|
||||
children[fmt.Sprintf("cpu%d", i)] = fs.newDir(creds, linux.FileMode(0555), nil)
|
||||
}
|
||||
return fs.newDir(creds, defaultSysDirMode, children)
|
||||
}
|
||||
|
||||
// Release implements vfs.FilesystemImpl.Release.
|
||||
func (fs *filesystem) Release(ctx context.Context) {
|
||||
fs.Filesystem.VFSFilesystem().VirtualFilesystem().PutAnonBlockDevMinor(fs.devMinor)
|
||||
|
||||
Reference in New Issue
Block a user