Skip to content

Feat Request: Port RROS kernel onto Error of Linux 6.6 #64

@shannmu

Description

@shannmu

What we have done

We added some code in error.rs to enable RROS kernel
See

RROS/rust/kernel/error.rs

Lines 103 to 184 in a39ff9d

#[cfg(CONFIG_RROS)]
pub const EINVAL: Self = Error(-(bindings::EINVAL as i32));
/// Out of memory.
#[cfg(CONFIG_RROS)]
pub const ENOMEM: Self = Error(-(bindings::ENOMEM as i32));
/// Bad address.
#[cfg(CONFIG_RROS)]
pub const EFAULT: Self = Error(-(bindings::EFAULT as i32));
/// Illegal seek.
#[cfg(CONFIG_RROS)]
pub const ESPIPE: Self = Error(-(bindings::ESPIPE as i32));
/// Try again.
#[cfg(CONFIG_RROS)]
pub const EAGAIN: Self = Error(-(bindings::EAGAIN as i32));
/// Device or resource busy.
#[cfg(CONFIG_RROS)]
pub const EBUSY: Self = Error(-(bindings::EBUSY as i32));
/// Restart the system call.
#[cfg(CONFIG_RROS)]
pub const ERESTARTSYS: Self = Error(-(bindings::ERESTARTSYS as i32));
/// Operation not permitted.
#[cfg(CONFIG_RROS)]
pub const EPERM: Self = Error(-(bindings::EPERM as i32));
/// No such process.
#[cfg(CONFIG_RROS)]
pub const ESRCH: Self = Error(-(bindings::ESRCH as i32));
/// No such file or directory.
#[cfg(CONFIG_RROS)]
pub const ENOENT: Self = Error(-(bindings::ENOENT as i32));
/// Interrupted system call.
#[cfg(CONFIG_RROS)]
pub const EINTR: Self = Error(-(bindings::EINTR as i32));
/// Bad file number.
#[cfg(CONFIG_RROS)]
pub const EBADF: Self = Error(-(bindings::EBADF as i32));
/// Resource deadlock would occur
#[cfg(CONFIG_RROS)]
pub const EDEADLK: Self = Error(-(bindings::EDEADLK as i32));
/// Connection timed out
#[cfg(CONFIG_RROS)]
pub const ETIMEDOUT: Self = Error(-(bindings::ETIMEDOUT as i32));
/// Owner died
#[cfg(CONFIG_RROS)]
pub const EOWNERDEAD: Self = Error(-(bindings::EOWNERDEAD as i32));
/// Identifier removed
#[cfg(CONFIG_RROS)]
pub const EIDRM: Self = Error(-(bindings::EIDRM as i32));
/// Stale file handle
#[cfg(CONFIG_RROS)]
pub const ESTALE: Self = Error(-(bindings::ESTALE as i32));
/// Not a typewriter
#[cfg(CONFIG_RROS)]
pub const ENOTTY: Self = Error(-(bindings::ENOTTY as i32));
/// No such device or address
#[cfg(CONFIG_RROS)]
pub const ENXIO: Self = Error(-(bindings::ENXIO as i32));
/// File exists
#[cfg(CONFIG_RROS)]
pub const EEXIST: Self = Error(-(bindings::EEXIST as i32));
/// Poll cycles
#[cfg(CONFIG_RROS)]
pub const ELOOP: Self = Error(-(bindings::ELOOP as i32));

Wat we should do next

Remove the above code I mentioned and use new Error wrapper in RROS kernel
See

declare_err!(EPERM, "Operation not permitted.");
declare_err!(ENOENT, "No such file or directory.");
declare_err!(ESRCH, "No such process.");
declare_err!(EINTR, "Interrupted system call.");
declare_err!(EIO, "I/O error.");
declare_err!(ENXIO, "No such device or address.");
declare_err!(E2BIG, "Argument list too long.");
declare_err!(ENOEXEC, "Exec format error.");
declare_err!(EBADF, "Bad file number.");
declare_err!(ECHILD, "No child processes.");
declare_err!(EAGAIN, "Try again.");
declare_err!(ENOMEM, "Out of memory.");
declare_err!(EACCES, "Permission denied.");
declare_err!(EFAULT, "Bad address.");
declare_err!(ENOTBLK, "Block device required.");
declare_err!(EBUSY, "Device or resource busy.");
declare_err!(EEXIST, "File exists.");
declare_err!(EXDEV, "Cross-device link.");
declare_err!(ENODEV, "No such device.");
declare_err!(ENOTDIR, "Not a directory.");
declare_err!(EISDIR, "Is a directory.");
declare_err!(EINVAL, "Invalid argument.");
declare_err!(ENFILE, "File table overflow.");
declare_err!(EMFILE, "Too many open files.");
declare_err!(ENOTTY, "Not a typewriter.");
declare_err!(ETXTBSY, "Text file busy.");
declare_err!(EFBIG, "File too large.");
declare_err!(ENOSPC, "No space left on device.");
declare_err!(ESPIPE, "Illegal seek.");
declare_err!(EROFS, "Read-only file system.");
declare_err!(EMLINK, "Too many links.");
declare_err!(EPIPE, "Broken pipe.");
declare_err!(EDOM, "Math argument out of domain of func.");
declare_err!(ERANGE, "Math result not representable.");
declare_err!(ERESTARTSYS, "Restart the system call.");
declare_err!(ERESTARTNOINTR, "System call was interrupted by a signal and will be restarted.");
declare_err!(ERESTARTNOHAND, "Restart if no handler.");
declare_err!(ENOIOCTLCMD, "No ioctl command.");
declare_err!(ERESTART_RESTARTBLOCK, "Restart by calling sys_restart_syscall.");
declare_err!(EPROBE_DEFER, "Driver requests probe retry.");
declare_err!(EOPENSTALE, "Open found a stale dentry.");
declare_err!(ENOPARAM, "Parameter not supported.");
declare_err!(EBADHANDLE, "Illegal NFS file handle.");
declare_err!(ENOTSYNC, "Update synchronization mismatch.");
declare_err!(EBADCOOKIE, "Cookie is stale.");
declare_err!(ENOTSUPP, "Operation is not supported.");
declare_err!(ETOOSMALL, "Buffer or request is too small.");
declare_err!(ESERVERFAULT, "An untranslatable error occurred.");
declare_err!(EBADTYPE, "Type not supported by server.");
declare_err!(EJUKEBOX, "Request initiated, but will not complete before timeout.");
declare_err!(EIOCBQUEUED, "iocb queued, will get completion event.");
declare_err!(ERECALLCONFLICT, "Conflict with recalled state.");
declare_err!(ENOGRACE, "NFS file lock reclaim refused.");

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions