github.com/ttpreport/gvisor-ligolo@v0.0.0-20240123134145-a858404967ba/pkg/sentry/devices/accel/accel.go (about) 1 // Copyright 2023 The gVisor Authors. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 // Package accel implements proxying for hardware accelerators. 16 package accel 17 18 import ( 19 "github.com/ttpreport/gvisor-ligolo/pkg/context" 20 "github.com/ttpreport/gvisor-ligolo/pkg/errors/linuxerr" 21 "github.com/ttpreport/gvisor-ligolo/pkg/sentry/arch" 22 "github.com/ttpreport/gvisor-ligolo/pkg/sentry/vfs" 23 "github.com/ttpreport/gvisor-ligolo/pkg/usermem" 24 "github.com/ttpreport/gvisor-ligolo/pkg/waiter" 25 ) 26 27 // accelFD implements vfs.FileDescriptionImpl for /dev/accel[0-9]+. 28 // 29 // accelFD is not savable; we do not implement save/restore of accelerator 30 // state. 31 type accelFD struct { 32 vfsfd vfs.FileDescription 33 vfs.FileDescriptionDefaultImpl 34 vfs.DentryMetadataFileDescriptionImpl 35 vfs.NoLockFD 36 37 hostFD int32 38 } 39 40 // Release implements vfs.FileDescriptionImpl.Release. 41 func (fd *accelFD) Release(context.Context) { 42 } 43 44 // EventRegister implements waiter.Waitable.EventRegister. 45 func (fd *accelFD) EventRegister(e *waiter.Entry) error { 46 return nil 47 } 48 49 // EventUnregister implements waiter.Waitable.EventUnregister. 50 func (fd *accelFD) EventUnregister(e *waiter.Entry) { 51 } 52 53 // Readiness implements waiter.Waitable.Readiness. 54 func (fd *accelFD) Readiness(mask waiter.EventMask) waiter.EventMask { 55 return waiter.EventErr 56 } 57 58 // Epollable implements vfs.FileDescriptionImpl.Epollable. 59 func (fd *accelFD) Epollable() bool { 60 return true 61 } 62 63 // Ioctl implements vfs.FileDescriptionImpl.Ioctl. 64 func (fd *accelFD) Ioctl(ctx context.Context, uio usermem.IO, sysno uintptr, args arch.SyscallArguments) (uintptr, error) { 65 return 0, linuxerr.ENOSYS 66 }