Linux-next rust

2021-03-19 03:45:06

这是Linux-next的草案。这条消息是故意裸露的骨头。它不是最终内容和Willbe重建的代表.co-beaudd-by:alex gaynor< [email protected]& gt;签名 - act-by:alex gaynor< [email protected]& gt; co-逐渐发展:Geoffrey Thomas< [email protected]& gt;签名 - 逐个:geoffrey thomas< [email protected]& gt;共同开发 - your ltic:finn behrens< [email protected]>签名 - 通过:Finn Behrens< [email protected]> co-socument-by:wedson almeida filho< [email protected]& gt;签名 - 逐个:wedson almeida filho< [email protected]& gt;共同发展 - 通过:adam bratschi-kaye< [email protected]& gt;签名 - youf-by:adam bratschi-kaye< [email protected]& gt;签名:miguel ojeda< ojeda @内核。 org>

+#目前,我们在这里打开旗帜。一些配置

+这些结构的#)。我们可能想重做克朗标志的追踪方式

+#在常规`makefile`中,即使是GCC构建,也类似于我们所做的

+ | grep -e' (t | r)' |削减-d' ' -f 3 | grep -e' ^(__ rust_ | _r)' \

+ //由于我们不需要绝大多数,因此我们避免了依赖

+ //我们可以通过提供自己的自定义[`核心',删除所有这些

+ //在任何情况下,所有这些符号都被削弱,以确保我们不覆盖

+ //解压缩与存档具有它们的对象文件。目前,

+ PUB FN __Rust_realloc(PTR:* mut U8,_old_size:Usize,_Align:Usize,New_size:Usize) - > * mut u8 {

+ // BINDGEN`生成的绑定使用这些类型来映射到C.

+ ///来自指针的数据,直到null终止器必须对读取有效

+ ///而不是突变所有`' a`。字符串的长度也必须少

+ ///当您需要避免时,旨在使用此关联函数

+ ///内核定义了基于C和C的一组整数泛型错误代码

+ ///常量版本,其中所有值都设置为`false`,即所有支持的字段都将

+ ///文件描述符可以同时从多个线程/进程中使用,因此您的类型必须是

+ ///注意,对象被移动,因此除非实施,否则将自动释放

+ ///最终可以转换回对象。这用于将对象存储为指针

+ //在内核中的生锈代码使用,并由所有内核共享。

+ //换句话说,内核中的所有RUST代码(例如内核

+ //如果您需要一个未移植或包裹的内核C API,那么

+ ///用于在加载模块或设置时设置参数值

+ ///八进制。其他任何东西都被解析为十进制。领先的`+`或`-`也是如此

+ //这些是内核中的生锈代码使用的最常用项目,用于

+ //此模块允许生锈代码使用内核' s [`struct wait_queue_head`]作为条件

+ ///暴露内核' s [`struct wait_queue_head`]作为条件变量。它允许来电者

+ ///原子上释放给定锁并睡觉。它在醒来时重新锁定锁。和

+ ///需要固定Condvar,因为它包含一个[`struct list_head`] + //安全性:“Condvar”仅使用“STRACT WAIT_QUEUE_HEAD”,在任何线程上都可以安全使用。 + //安全性:“Condvar”仅使用“struct wait_queue_head`”,这是在多个线程上使用的安全性 + ///原子上释放给定的锁定(卫士证明其所有权)并放置 + ///调用内核函数以使用给定标志通知适当数量的线程。 + ///唤醒单个服务员,如果有的话。 这不是'粘滞和#39; 在某种意义上,如果没有线程是 + ///等待,通知完全丢失(而不是自动唤醒

+ ///唤醒所有服务员,如果有的话。 这不是'粘滞和#39; 在某种意义上,如果没有线程是 + ///等待,通知完全丢失(而不是自动唤醒 + ///唤醒所有服务员。 如果他们被“epoll`”添加,他们也被从列表中删除 + ///服务员。 在清理可能等待的条件变量时,这非常有用 + // 该模块包含一个锁定护罩,可用于实现的任何锁定原语 + // ([锁定')特质。 它还包含特征的定义,可以利用 + ///后卫超出范围。 它还提供了访问数据的安全方便的方法

+ //安全性:当受锁保护的数据也同步时,Warge`也会同步。 这更多 + //安全性:呼叫者拥有锁定,因此可以安全地解释受保护的数据。 + //安全性:呼叫者拥有锁定,因此可以安全地解释受保护的数据。 + //安全:来电者拥有锁定,因此解锁它是安全的。 + /// [`Guard`]是写的,使得可以实现这种特质的任何相互排除原语可以 + // 此模块包含与已移植的同步相关的内核API或 + // 包裹在内核中的生锈代码用作使用,并由所有内核共享。

+ ///安全地初始化一个具有名称和锁定类的`init`函数的对象 + ///参数,这些示例是[`互斥议定书]和[whe spinlock`]。 他们每个人也提供了更多 + //安全:`Fruct Code直接使用的`Class`; 内核可能会改变它。 鼓励+ ///呼叫者使用[`init_with_lockdep`]宏,因为它会自动创建一个 + ///` key`必须指向有效的内存位置,因为内核将使用它。 + ///暴露内核' s [s struct mutex`]。 当多个线程尝试锁定相同的互斥锁时, + ///一次只允许一个人进度,其他人将阻止(睡觉)直到互斥锁

+ ///解锁,允许另一个线程唤醒并进行进度。 必须首先用呼叫[`互斥:: init`]之前首先初始化+ /// a [`互斥锁']。 这 提供+ /// [`umex_init`]宏被提供为自动为互斥锁实例分配新的锁定类。 + ///由于它可能会阻止,[`互斥锁]需要在原子背景下进行护理。 + ///互斥锁需要固定,因为它包含一个[`struct list_head`] + //安全性:“互斥锁”可以跨线程边界IFF传输IFF它保护的数据。 + //安全:`互斥级别序列,它提供的内部变形性,所以它是“同步”

+ ///锁定互斥锁并给出调用者访问受保护的数据。 只有一个帖子 + ///暴露内核' s [`spinclock_t`]。 当多个CPU尝试锁定相同的自旋锁时 + ///一次被允许进步,其他人将阻止(旋转)直到自旋锁定 必须首先用呼叫[`spinlock :: init`]之前初始化+ /// a [`spinlock`] + ///使用。 提供了[`spinclock_init`]宏,以自动为a为一个新的锁定类分配 + /// [`spinlock`]不管理中断状态,因此它只能在两种情况下使用:(a)何时 + ///呼叫者知道禁用中断,或(b)当呼叫者从未在中断中使用它时

+ /// Spinclocks是架构定义的。 因此,我们保守地要求他们固定以防万一 + //安全:`Spinlock`可以跨线程边界IFF传输IFF它保护的数据。 + //安全性:`Spinlock`序列化它提供的内部变形性,所以它是“同步”,只要 + ///锁定自旋锁并给出呼叫者访问受其保护的数据。 只有一个线程 + while!data.is_empty()&& (数据[0] == B'' ||数据[0] == B' \ T' ||数据[0] == B' \ n') { + //如果我们从文件开头以外的一些偏移量读取, + ///保证的字符串恰好恰好一个`nul`字节,这是

+ ///`dauda` *必须*以`nul`字节结束,只能只有一个单个 + ///与磁盘上的文件的内容)。 在场上, + ///从原始指针和长度以字节构建用户切片。 + ///您可以安全地使用的地方是使用一个`__user`指针 + ///用户切片或者如果地址目前没有指向映射, + //由于这不是我们程序中有效对象的指针, + ///用户切片或者如果地址目前没有指向映射,

+ //由于这不是我们程序中有效对象的指针,

+ //参数不需要锁定,因为它们仅被读取或未启用SYSF。

+ //安全性:不需要锁定参数,因为它们被读取,或者未启用SYSF。

+ //注意:为`__Param`部分生成静态结构的C宏

+ //要求它们是“对齐”(sizeof(void *))`。但是,这是

+ //撤消GCC的静态结构的静态结构的静态结构; 32字节。看来那是

+ // todo:重新审视这一点以确认上述评论并在发生时删除它

+ //安全性:“__this_module`是由内核构造的加载时间,并且在模块卸载之前不会释放。 + //安全性:“__this_module`是由内核构造的加载时间,并且在模块卸载之前不会释放。 + static this_module:kernel :: thatmodule =不安全{{kernel :: thatmodule :: from_ptr(& kernel ::绑定:: __ thine_module作为* const _为* mut _)};