登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
登录
注册
9月20日,Gitee × 模力方舟来成都了!聚焦 AI 应用在开发范式、算力架构、交互设计、硬件选型等跨场景创新实践,点击立即报名~
代码拉取完成,页面将自动刷新
开源项目
>
其他开源
>
操作系统
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
439
Star
1.6K
Fork
1.8K
GVP
openEuler
/
kernel
代码
Issues
1565
Pull Requests
2500
Wiki
统计
流水线
服务
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
更新失败,请稍后重试!
移除标识
内容风险标识
本任务被
标识为内容中包含有代码安全 Bug 、隐私泄露等敏感信息,仓库外成员不可访问
[openEuler 22.03] add kabi macros helpers derived from RHEL "include/linux/rh_kabi.h"
已完成
#I4K3S5
需求
Xie XiuQi
拥有者
创建于
2021-11-27 20:47
<!-- #请根据issue的类型在标题右侧下拉框中选择对应的选项(需求、缺陷或CVE等)--> <!-- #请根据issue相关的版本在里程碑中选择对应的节点,若是与版本无关,请选择“不关联里程碑”--> 维护 KABI 的兼容性是 openEuler kernel 的一项重要工作,为方便 KABI 结构预留与 KABI 接口兼容性适配,参考 RHEL "include/linux/rh_kabi.h", 引入常用的宏。 ``` /* SPDX-License-Identifier: GPL-2.0 */ /* * kabi.h - openEuler kABI abstraction header * * Copyright (c) 2014 Don Zickus * Copyright (c) 2015-2018 Jiri Benc * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa * Copyright (c) 2016-2018 Prarit Bhargava * Copyright (c) 2017 Paolo Abeni, Larry Woodman * Copyright (c) 2021 Xie XiuQi <xiexiuqi@huawei.com> * * This file is released under the GPLv2. * See the file COPYING for more details. * * These kabi macros hide the changes from the kabi checker and from the * process that computes the exported symbols' checksums. * They have 2 variants: one (defined under __GENKSYMS__) used when * generating the checksums, and the other used when building the kernel's * binaries. * * The use of these macros does not guarantee that the usage and modification * of code is correct. As with all openEuler only changes, an engineer must * explain why the use of the macro is valid in the patch containing the * changes. * * The macro helpers are derived from Red Hat "include/linux/rh_kabi.h" * Mostly debrand from RHEL. */ #ifndef _LINUX_KABI_H #define _LINUX_KABI_H #include <linux/compiler.h> #include <linux/stringify.h> /* * NOTE * Unless indicated otherwise, don't use ';' after these macros as it * messes up the kABI checker by changing what the resulting token string * looks like. Instead let the macros add the ';' so it can be properly * hidden from the kABI checker (mainly for KABI_EXTEND, but applied to * most macros for uniformity). * * KABI_CONST * Adds a new const modifier to a function parameter preserving the old * checksum. * * KABI_ADD_MODIFIER * Adds a new modifier to a function parameter or a typedef, preserving * the old checksum. Useful e.g. for adding rcu annotations or changing * int to unsigned. Beware that this may change the semantics; if you're * sure this is safe, always explain why binary compatibility with 3rd * party modules is retained. * * KABI_DEPRECATE * Marks the element as deprecated and make it unusable by modules while * keeping a hole in its place to preserve binary compatibility. * * # define RH_KABI_BROKEN_INSERT_ENUM(_new) _new, * # define RH_KABI_BROKEN_REMOVE_ENUM(_orig) * KABI_DEPRECATE_FN * Marks the function pointer as deprecated and make it unusable by modules * while keeping a hole in its place to preserve binary compatibility. * * KABI_EXTEND * Adds a new field to a struct. This must always be added to the end of * the struct. Before using this macro, make sure this is actually safe * to do - there is a number of conditions under which it is *not* safe. * In particular (but not limited to), this macro cannot be used: * - if the struct in question is embedded in another struct, or * - if the struct is allocated by drivers either statically or * dynamically, or * - if the struct is allocated together with driver data (an example of * such behavior is struct net_device or struct request). * * KABI_EXTEND_WITH_SIZE * Adds a new element (usually a struct) to a struct and reserves extra * space for the new element. The provided 'size' is the total space to * be added in longs (i.e. it's 8 * 'size' bytes), including the size of * the added element. It is automatically checked that the new element * does not overflow the reserved space, now nor in the future. However, * no attempt is done to check the content of the added element (struct) * for kABI conformance - kABI checking inside the added element is * effectively switched off. * For any struct being added by KABI_EXTEND_WITH_SIZE, it is * recommended its content to be documented as not covered by kABI * guarantee. * * KABI_FILL_HOLE * Fills a hole in a struct. * * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. * * KABI_RENAME * Renames an element without changing its type. This macro can be used in * bitfields, for example. * * NOTE: does not include the final ';' * * KABI_REPLACE * Replaces the _orig field by the _new field. The size of the occupied * space is preserved, it's fine if the _new field is smaller than the * _orig field. If a _new field is larger or has a different alignment, * compilation will abort. * * * KABI_HIDE_INCLUDE * Hides the given include file from kABI checksum computations. This is * used when a newly added #include makes a previously opaque struct * visible. * * Example usage: * #include KABI_HIDE_INCLUDE(<linux/poll.h>) * * KABI_FAKE_INCLUDE * Pretends inclusion of the given file for kABI checksum computations. * This is used when upstream removed a particular #include but that made * some structures opaque that were previously visible and is causing kABI * checker failures. * * Example usage: * #include KABI_FAKE_INCLUDE(<linux/rhashtable.h>) * * KABI_RESERVE * Adds a reserved field to a struct. This is done prior to kABI freeze * for structs that cannot be expanded later using KABI_EXTEND (for * example because they are embedded in another struct or because they are * allocated by drivers or because they use unusual memory layout). The * size of the reserved field is 'unsigned long' and is assumed to be * 8 bytes. * * The argument is a number unique for the given struct; usually, multiple * KABI_RESERVE macros are added to a struct with numbers starting from * one. * * Example usage: * struct foo { * int a; * KABI_RESERVE(1) * KABI_RESERVE(2) * }; * * KABI_USE * Simple wrappers to replace standard openEuler reserved elements. * * KABI_AUX_EMBED * KABI_AUX_PTR * Adds an extenstion of a struct in the form of "auxiliary structure". * This is done prior to kABI freeze for structs that cannot be expanded * later using KABI_EXTEND. See also KABI_RESERVED, these two * approaches can (and often are) combined. * * To use this for 'struct foo' (the "base structure"), define a new * structure called 'struct foo_rh'; this new struct is called "auxiliary * structure". Then add KABI_AUX_EMBED or KABI_AUX_PTR to the end * of the base structure. The argument is the name of the base structure, * without the 'struct' keyword. * * KABI_AUX_PTR stores a pointer to the aux structure in the base * struct. The lifecycle of the aux struct needs to be properly taken * care of. * * KABI_AUX_EMBED embeds the aux struct into the base struct. This * cannot be used when the base struct is itself embedded into another * struct, allocated in an array, etc. * * Both approaches (ptr and embed) work correctly even when the aux struct * is allocated by modules. To ensure this, the code responsible for * allocation/assignment of the aux struct has to properly set the size of * the aux struct; see the KABI_AUX_SET_SIZE and KABI_AUX_INIT_SIZE * macros. * * New fields can be later added to the auxiliary structure, always to its * end. Note the auxiliary structure cannot be shrunk in size later (i.e., * fields cannot be removed, only deprecated). Any code accessing fields * from the aux struct must guard the access using the KABI_AUX macro. * The access itself is then done via a '_rh' field in the base struct. * * The auxiliary structure is not guaranteed for access by modules unless * explicitly commented as such in the declaration of the aux struct * itself or some of its elements. * * Example: * * struct foo_rh { * int newly_added; * }; * * struct foo { * bool big_hammer; * KABI_AUX_PTR(foo) * }; * * void use(struct foo *f) * { * if (KABI_AUX(f, foo, newly_added)) * f->_rh->newly_added = 123; * else * // the field 'newly_added' is not present in the passed * // struct, fall back to old behavior * f->big_hammer = true; * } * * static struct foo_rh my_foo_rh { * .newly_added = 0; * } * * static struct foo my_foo = { * .big_hammer = false, * ._rh = &my_foo_rh, * KABI_AUX_INIT_SIZE(foo) * }; * * KABI_USE_AUX_PTR * Creates an auxiliary structure post kABI freeze. This works by using * two reserved fields (thus there has to be two reserved fields still * available) and converting them to KABI_AUX_PTR. * * Example: * * struct foo_rh { * }; * * struct foo { * int a; * KABI_RESERVE(1) * KABI_USE_AUX_PTR(2, 3, foo) * }; * * KABI_AUX_SET_SIZE * KABI_AUX_INIT_SIZE * Calculates and stores the size of the auxiliary structure. * * KABI_AUX_SET_SIZE is for dynamically allocated base structs, * KABI_AUX_INIT_SIZE is for statically allocated case structs. * * These macros must be called from the allocation (KABI_AUX_SET_SIZE) * or declaration (KABI_AUX_INIT_SIZE) site, regardless of whether * that happens in the kernel or in a module. Without calling one of * these macros, the aux struct will appear to have no fields to the * kernel. * * Note: since KABI_AUX_SET_SIZE is intended to be invoked outside of * a struct definition, it does not add the semicolon and must be * terminated by semicolon by the caller. * * KABI_AUX * Verifies that the given field exists in the given auxiliary structure. * This MUST be called prior to accessing that field; failing to do that * may lead to invalid memory access. * * The first argument is a pointer to the base struct, the second argument * is the name of the base struct (without the 'struct' keyword), the * third argument is the field name. * * This macro works for structs extended by either of KABI_AUX_EMBED, * KABI_AUX_PTR and KABI_USE_AUX_PTR. * * KABI_FORCE_CHANGE * Force change of the symbol checksum. The argument of the macro is a * version for cases we need to do this more than once. * * This macro does the opposite: it changes the symbol checksum without * actually changing anything about the exported symbol. It is useful for * symbols that are not whitelisted, we're changing them in an * incompatible way and want to prevent 3rd party modules to silently * corrupt memory. Instead, by changing the symbol checksum, such modules * won't be loaded by the kernel. This macro should only be used as a * last resort when all other KABI workarounds have failed. * * KABI_EXCLUDE * !!! WARNING: DANGEROUS, DO NOT USE unless you are aware of all the !!! * !!! implications. This should be used ONLY EXCEPTIONALLY and only !!! * !!! under specific circumstances. Very likely, this macro does not !!! * !!! do what you expect it to do. Note that any usage of this macro !!! * !!! MUST be paired with a KABI_FORCE_CHANGE annotation of !!! * !!! a suitable symbol (or an equivalent safeguard) and the commit !!! * !!! log MUST explain why the chosen solution is appropriate. !!! * * Exclude the element from checksum generation. Any such element is * considered not to be part of the kABI whitelist and may be changed at * will. Note however that it's the responsibility of the developer * changing the element to ensure 3rd party drivers using this element * won't panic, for example by not allowing them to be loaded. That can * be achieved by changing another, non-whitelisted symbol they use, * either by nature of the change or by using KABI_FORCE_CHANGE. * * Also note that any change to the element must preserve its size. Change * of the size is not allowed and would constitute a silent kABI breakage. * Beware that the KABI_EXCLUDE macro does not do any size checks. * * KABI_BROKEN_INSERT * KABI_BROKEN_REMOVE * Insert a field to the middle of a struct / delete a field from a struct. * Note that this breaks kABI! It can be done only when it's certain that * no 3rd party driver can validly reach into the struct. A typical * example is a struct that is: both (a) referenced only through a long * chain of pointers from another struct that is part of a whitelisted * symbol and (b) kernel internal only, it should have never been visible * to genksyms in the first place. * * Another example are structs that are explicitly exempt from kABI * guarantee but we did not have enough foresight to use KABI_EXCLUDE. * In this case, the warning for KABI_EXCLUDE applies. * * A detailed explanation of correctness of every KABI_BROKEN_* macro * use is especially important. * * KABI_BROKEN_INSERT_BLOCK * KABI_BROKEN_REMOVE_BLOCK * A version of KABI_BROKEN_INSERT / REMOVE that allows multiple fields * to be inserted or removed together. All fields need to be terminated * by ';' inside(!) the macro parameter. The macro itself must not be * terminated by ';'. * * KABI_BROKEN_REPLACE * Replace a field by a different one without doing any checking. This * allows replacing a field by another with a different size. Similarly * to other KABI_BROKEN macros, use of this indicates a kABI breakage. * * KABI_BROKEN_INSERT_ENUM * KABI_BROKEN_REMOVE_ENUM * Insert a field to the middle of an enumaration type / delete a field from * an enumaration type. Note that this can break kABI especially if the * number of enum fields is used in an array within a structure. It can be * done only when it is certain that no 3rd party driver will use the * enumeration type or a structure that embeds an array with size determined * by an enumeration type. * * KABI_EXTEND_ENUM * Adds a new field to an enumeration type. This must always be added to * the end of the enum. Before using this macro, make sure this is actually * safe to do. */ #ifdef __GENKSYMS__ # define KABI_CONST # define KABI_ADD_MODIFIER(_new) # define KABI_EXTEND(_new) # define KABI_FILL_HOLE(_new) # define KABI_FORCE_CHANGE(ver) __attribute__((kabi_change ## ver)) # define KABI_RENAME(_orig, _new) _orig # define KABI_HIDE_INCLUDE(_file) <linux/kabi.h> # define KABI_FAKE_INCLUDE(_file) _file # define KABI_BROKEN_INSERT(_new) # define KABI_BROKEN_REMOVE(_orig) _orig; # define KABI_BROKEN_INSERT_BLOCK(_new) # define KABI_BROKEN_REMOVE_BLOCK(_orig) _orig # define KABI_BROKEN_REPLACE(_orig, _new) _orig; # define KABI_BROKEN_INSERT_ENUM(_new) # define KABI_BROKEN_REMOVE_ENUM(_orig) _orig, # define KABI_EXTEND_ENUM(_new) # define _KABI_DEPRECATE(_type, _orig) _type _orig # define _KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args) # define _KABI_REPLACE(_orig, _new) _orig # define _KABI_EXCLUDE(_elem) #else # define KABI_ALIGN_WARNING ". Disable CONFIG_KABI_SIZE_ALIGN_CHECKS if debugging." # define KABI_CONST const # define KABI_ADD_MODIFIER(_new) _new # define KABI_EXTEND(_new) _new; # define KABI_FILL_HOLE(_new) _new; # define KABI_FORCE_CHANGE(ver) # define KABI_RENAME(_orig, _new) _new # define KABI_HIDE_INCLUDE(_file) _file # define KABI_FAKE_INCLUDE(_file) <linux/kabi.h> # define KABI_BROKEN_INSERT(_new) _new; # define KABI_BROKEN_REMOVE(_orig) # define KABI_BROKEN_INSERT_BLOCK(_new) _new # define KABI_BROKEN_REMOVE_BLOCK(_orig) # define KABI_BROKEN_REPLACE(_orig, _new) _new; # define KABI_BROKEN_INSERT_ENUM(_new) _new, # define KABI_BROKEN_REMOVE_ENUM(_orig) # define KABI_EXTEND_ENUM(_new) _new, #if IS_BUILTIN(CONFIG_KABI_SIZE_ALIGN_CHECKS) # define __KABI_CHECK_SIZE_ALIGN(_orig, _new) \ union { \ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) KABI_ALIGN_WARNING); \ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) KABI_ALIGN_WARNING); \ } # define __ABI_CHECK_SIZE(_item, _size) \ _Static_assert(sizeof(struct{_item;}) <= _size, \ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_item) " is larger than the reserved size (" __stringify(_size) " bytes)" RH_KABI_ALIGN_WARNING) #else # define __KABI_CHECK_SIZE_ALIGN(_orig, _new) # define __KABI_CHECK_SIZE(_item, _size) #endif # define _KABI_DEPRECATE(_type, _orig) _type kabi_reserved_##_orig # define _KABI_DEPRECATE_FN(_type, _orig, _args...) \ _type (* kabi_reserved_##_orig)(_args) # define _KABI_REPLACE(_orig, _new) \ union { \ _new; \ struct { \ _orig; \ } __UNIQUE_ID(kabi_hide); \ __KABI_CHECK_SIZE_ALIGN(_orig, _new); \ } # define _KABI_EXCLUDE(_elem) _elem #endif /* __GENKSYMS__ */ /* semicolon added wrappers for the KABI_REPLACE macros */ # define KABI_DEPRECATE(_type, _orig) _KABI_DEPRECATE(_type, _orig); # define KABI_DEPRECATE_FN(_type, _orig, _args...) \ _KABI_DEPRECATE_FN(_type, _orig, _args); # define KABI_REPLACE(_orig, _new) _KABI_REPLACE(_orig, _new); /* * Macro for breaking up a random element into two smaller chunks using an * anonymous struct inside an anonymous union. */ # define KABI_REPLACE2(orig, _new1, _new2) KABI_REPLACE(orig, struct{ _new1; _new2;}) /* * We tried to standardize on openEuler reserved names. These wrappers * leverage those common names making it easier to read and find in the * code. */ # define _KABI_RESERVE(n) unsigned long kabi_reserved##n # define KABI_RESERVE(n) _KABI_RESERVE(n); /* * Simple wrappers to replace standard openEuler reserved elements. */ # define KABI_USE(n, _new) KABI_REPLACE(_KABI_RESERVE(n), _new) /* * Macros for breaking up a reserved element into two smaller chunks using * an anonymous struct inside an anonymous union. */ # define KABI_USE2(n, _new1, _new2) KABI_REPLACE(_KABI_RESERVE(n), struct{ _new1; _new2; }) #define KABI_EXCLUDE(_elem) _KABI_EXCLUDE(_elem); #define KABI_EXTEND_WITH_SIZE(_new, _size) \ KABI_EXTEND(union { \ _new; \ unsigned long KABI_UNIQUE_ID[_size]; \ __KABI_CHECK_SIZE(_new, 8 * (_size)); \ }) #define _KABI_AUX_PTR(_struct) \ size_t _struct##_size_rh; \ _KABI_EXCLUDE(struct _struct##_rh *_rh) #define KABI_AUX_PTR(_struct) \ _KABI_AUX_PTR(_struct); #define _KABI_AUX_EMBED(_struct) \ size_t _struct##_size_rh; \ _KABI_EXCLUDE(struct _struct##_rh _rh) #define KABI_AUX_EMBED(_struct) \ _KABI_AUX_EMBED(_struct); #define KABI_USE_AUX_PTR(n1, n2, _struct) \ KABI_USE(n1, n2, \ struct { KABI_AUX_PTR(_struct) }) /* * KABI_AUX_SET_SIZE calculates and sets the size of the extended struct and * stores it in the size_rh field for structs that are dynamically allocated. * This macro MUST be called when expanding a base struct with * KABI_SIZE_AND_EXTEND, and it MUST be called from the allocation site * regardless of being allocated in the kernel or a module. * Note: since this macro is intended to be invoked outside of a struct, * a semicolon is necessary at the end of the line where it is invoked. */ #define KABI_AUX_SET_SIZE(_name, _struct) ({ \ (_name)->_struct##_size_rh = sizeof(struct _struct##_rh); \ }) /* * KABI_AUX_INIT_SIZE calculates and sets the size of the extended struct and * stores it in the size_rh field for structs that are statically allocated. * This macro MUST be called when expanding a base struct with * KABI_SIZE_AND_EXTEND, and it MUST be called from the declaration site * regardless of being allocated in the kernel or a module. */ #define KABI_AUX_INIT_SIZE(_struct) \ ._struct##_size_rh = sizeof(struct _struct##_rh), /* * KABI_AUX verifies allocated memory exists. This MUST be called to * verify that memory in the _rh struct is valid, and can be called * regardless if KABI_SIZE_AND_EXTEND or KABI_SIZE_AND_EXTEND_PTR is * used. */ #define KABI_AUX(_ptr, _struct, _field) ({ \ size_t __off = offsetof(struct _struct##_rh, _field); \ (_ptr)->_struct##_size_rh > __off ? true : false; \ }) #endif /* _LINUX_KABI_H */ ```
<!-- #请根据issue的类型在标题右侧下拉框中选择对应的选项(需求、缺陷或CVE等)--> <!-- #请根据issue相关的版本在里程碑中选择对应的节点,若是与版本无关,请选择“不关联里程碑”--> 维护 KABI 的兼容性是 openEuler kernel 的一项重要工作,为方便 KABI 结构预留与 KABI 接口兼容性适配,参考 RHEL "include/linux/rh_kabi.h", 引入常用的宏。 ``` /* SPDX-License-Identifier: GPL-2.0 */ /* * kabi.h - openEuler kABI abstraction header * * Copyright (c) 2014 Don Zickus * Copyright (c) 2015-2018 Jiri Benc * Copyright (c) 2015 Sabrina Dubroca, Hannes Frederic Sowa * Copyright (c) 2016-2018 Prarit Bhargava * Copyright (c) 2017 Paolo Abeni, Larry Woodman * Copyright (c) 2021 Xie XiuQi <xiexiuqi@huawei.com> * * This file is released under the GPLv2. * See the file COPYING for more details. * * These kabi macros hide the changes from the kabi checker and from the * process that computes the exported symbols' checksums. * They have 2 variants: one (defined under __GENKSYMS__) used when * generating the checksums, and the other used when building the kernel's * binaries. * * The use of these macros does not guarantee that the usage and modification * of code is correct. As with all openEuler only changes, an engineer must * explain why the use of the macro is valid in the patch containing the * changes. * * The macro helpers are derived from Red Hat "include/linux/rh_kabi.h" * Mostly debrand from RHEL. */ #ifndef _LINUX_KABI_H #define _LINUX_KABI_H #include <linux/compiler.h> #include <linux/stringify.h> /* * NOTE * Unless indicated otherwise, don't use ';' after these macros as it * messes up the kABI checker by changing what the resulting token string * looks like. Instead let the macros add the ';' so it can be properly * hidden from the kABI checker (mainly for KABI_EXTEND, but applied to * most macros for uniformity). * * KABI_CONST * Adds a new const modifier to a function parameter preserving the old * checksum. * * KABI_ADD_MODIFIER * Adds a new modifier to a function parameter or a typedef, preserving * the old checksum. Useful e.g. for adding rcu annotations or changing * int to unsigned. Beware that this may change the semantics; if you're * sure this is safe, always explain why binary compatibility with 3rd * party modules is retained. * * KABI_DEPRECATE * Marks the element as deprecated and make it unusable by modules while * keeping a hole in its place to preserve binary compatibility. * * # define RH_KABI_BROKEN_INSERT_ENUM(_new) _new, * # define RH_KABI_BROKEN_REMOVE_ENUM(_orig) * KABI_DEPRECATE_FN * Marks the function pointer as deprecated and make it unusable by modules * while keeping a hole in its place to preserve binary compatibility. * * KABI_EXTEND * Adds a new field to a struct. This must always be added to the end of * the struct. Before using this macro, make sure this is actually safe * to do - there is a number of conditions under which it is *not* safe. * In particular (but not limited to), this macro cannot be used: * - if the struct in question is embedded in another struct, or * - if the struct is allocated by drivers either statically or * dynamically, or * - if the struct is allocated together with driver data (an example of * such behavior is struct net_device or struct request). * * KABI_EXTEND_WITH_SIZE * Adds a new element (usually a struct) to a struct and reserves extra * space for the new element. The provided 'size' is the total space to * be added in longs (i.e. it's 8 * 'size' bytes), including the size of * the added element. It is automatically checked that the new element * does not overflow the reserved space, now nor in the future. However, * no attempt is done to check the content of the added element (struct) * for kABI conformance - kABI checking inside the added element is * effectively switched off. * For any struct being added by KABI_EXTEND_WITH_SIZE, it is * recommended its content to be documented as not covered by kABI * guarantee. * * KABI_FILL_HOLE * Fills a hole in a struct. * * Warning: only use if a hole exists for _all_ arches. Use pahole to verify. * * KABI_RENAME * Renames an element without changing its type. This macro can be used in * bitfields, for example. * * NOTE: does not include the final ';' * * KABI_REPLACE * Replaces the _orig field by the _new field. The size of the occupied * space is preserved, it's fine if the _new field is smaller than the * _orig field. If a _new field is larger or has a different alignment, * compilation will abort. * * * KABI_HIDE_INCLUDE * Hides the given include file from kABI checksum computations. This is * used when a newly added #include makes a previously opaque struct * visible. * * Example usage: * #include KABI_HIDE_INCLUDE(<linux/poll.h>) * * KABI_FAKE_INCLUDE * Pretends inclusion of the given file for kABI checksum computations. * This is used when upstream removed a particular #include but that made * some structures opaque that were previously visible and is causing kABI * checker failures. * * Example usage: * #include KABI_FAKE_INCLUDE(<linux/rhashtable.h>) * * KABI_RESERVE * Adds a reserved field to a struct. This is done prior to kABI freeze * for structs that cannot be expanded later using KABI_EXTEND (for * example because they are embedded in another struct or because they are * allocated by drivers or because they use unusual memory layout). The * size of the reserved field is 'unsigned long' and is assumed to be * 8 bytes. * * The argument is a number unique for the given struct; usually, multiple * KABI_RESERVE macros are added to a struct with numbers starting from * one. * * Example usage: * struct foo { * int a; * KABI_RESERVE(1) * KABI_RESERVE(2) * }; * * KABI_USE * Simple wrappers to replace standard openEuler reserved elements. * * KABI_AUX_EMBED * KABI_AUX_PTR * Adds an extenstion of a struct in the form of "auxiliary structure". * This is done prior to kABI freeze for structs that cannot be expanded * later using KABI_EXTEND. See also KABI_RESERVED, these two * approaches can (and often are) combined. * * To use this for 'struct foo' (the "base structure"), define a new * structure called 'struct foo_rh'; this new struct is called "auxiliary * structure". Then add KABI_AUX_EMBED or KABI_AUX_PTR to the end * of the base structure. The argument is the name of the base structure, * without the 'struct' keyword. * * KABI_AUX_PTR stores a pointer to the aux structure in the base * struct. The lifecycle of the aux struct needs to be properly taken * care of. * * KABI_AUX_EMBED embeds the aux struct into the base struct. This * cannot be used when the base struct is itself embedded into another * struct, allocated in an array, etc. * * Both approaches (ptr and embed) work correctly even when the aux struct * is allocated by modules. To ensure this, the code responsible for * allocation/assignment of the aux struct has to properly set the size of * the aux struct; see the KABI_AUX_SET_SIZE and KABI_AUX_INIT_SIZE * macros. * * New fields can be later added to the auxiliary structure, always to its * end. Note the auxiliary structure cannot be shrunk in size later (i.e., * fields cannot be removed, only deprecated). Any code accessing fields * from the aux struct must guard the access using the KABI_AUX macro. * The access itself is then done via a '_rh' field in the base struct. * * The auxiliary structure is not guaranteed for access by modules unless * explicitly commented as such in the declaration of the aux struct * itself or some of its elements. * * Example: * * struct foo_rh { * int newly_added; * }; * * struct foo { * bool big_hammer; * KABI_AUX_PTR(foo) * }; * * void use(struct foo *f) * { * if (KABI_AUX(f, foo, newly_added)) * f->_rh->newly_added = 123; * else * // the field 'newly_added' is not present in the passed * // struct, fall back to old behavior * f->big_hammer = true; * } * * static struct foo_rh my_foo_rh { * .newly_added = 0; * } * * static struct foo my_foo = { * .big_hammer = false, * ._rh = &my_foo_rh, * KABI_AUX_INIT_SIZE(foo) * }; * * KABI_USE_AUX_PTR * Creates an auxiliary structure post kABI freeze. This works by using * two reserved fields (thus there has to be two reserved fields still * available) and converting them to KABI_AUX_PTR. * * Example: * * struct foo_rh { * }; * * struct foo { * int a; * KABI_RESERVE(1) * KABI_USE_AUX_PTR(2, 3, foo) * }; * * KABI_AUX_SET_SIZE * KABI_AUX_INIT_SIZE * Calculates and stores the size of the auxiliary structure. * * KABI_AUX_SET_SIZE is for dynamically allocated base structs, * KABI_AUX_INIT_SIZE is for statically allocated case structs. * * These macros must be called from the allocation (KABI_AUX_SET_SIZE) * or declaration (KABI_AUX_INIT_SIZE) site, regardless of whether * that happens in the kernel or in a module. Without calling one of * these macros, the aux struct will appear to have no fields to the * kernel. * * Note: since KABI_AUX_SET_SIZE is intended to be invoked outside of * a struct definition, it does not add the semicolon and must be * terminated by semicolon by the caller. * * KABI_AUX * Verifies that the given field exists in the given auxiliary structure. * This MUST be called prior to accessing that field; failing to do that * may lead to invalid memory access. * * The first argument is a pointer to the base struct, the second argument * is the name of the base struct (without the 'struct' keyword), the * third argument is the field name. * * This macro works for structs extended by either of KABI_AUX_EMBED, * KABI_AUX_PTR and KABI_USE_AUX_PTR. * * KABI_FORCE_CHANGE * Force change of the symbol checksum. The argument of the macro is a * version for cases we need to do this more than once. * * This macro does the opposite: it changes the symbol checksum without * actually changing anything about the exported symbol. It is useful for * symbols that are not whitelisted, we're changing them in an * incompatible way and want to prevent 3rd party modules to silently * corrupt memory. Instead, by changing the symbol checksum, such modules * won't be loaded by the kernel. This macro should only be used as a * last resort when all other KABI workarounds have failed. * * KABI_EXCLUDE * !!! WARNING: DANGEROUS, DO NOT USE unless you are aware of all the !!! * !!! implications. This should be used ONLY EXCEPTIONALLY and only !!! * !!! under specific circumstances. Very likely, this macro does not !!! * !!! do what you expect it to do. Note that any usage of this macro !!! * !!! MUST be paired with a KABI_FORCE_CHANGE annotation of !!! * !!! a suitable symbol (or an equivalent safeguard) and the commit !!! * !!! log MUST explain why the chosen solution is appropriate. !!! * * Exclude the element from checksum generation. Any such element is * considered not to be part of the kABI whitelist and may be changed at * will. Note however that it's the responsibility of the developer * changing the element to ensure 3rd party drivers using this element * won't panic, for example by not allowing them to be loaded. That can * be achieved by changing another, non-whitelisted symbol they use, * either by nature of the change or by using KABI_FORCE_CHANGE. * * Also note that any change to the element must preserve its size. Change * of the size is not allowed and would constitute a silent kABI breakage. * Beware that the KABI_EXCLUDE macro does not do any size checks. * * KABI_BROKEN_INSERT * KABI_BROKEN_REMOVE * Insert a field to the middle of a struct / delete a field from a struct. * Note that this breaks kABI! It can be done only when it's certain that * no 3rd party driver can validly reach into the struct. A typical * example is a struct that is: both (a) referenced only through a long * chain of pointers from another struct that is part of a whitelisted * symbol and (b) kernel internal only, it should have never been visible * to genksyms in the first place. * * Another example are structs that are explicitly exempt from kABI * guarantee but we did not have enough foresight to use KABI_EXCLUDE. * In this case, the warning for KABI_EXCLUDE applies. * * A detailed explanation of correctness of every KABI_BROKEN_* macro * use is especially important. * * KABI_BROKEN_INSERT_BLOCK * KABI_BROKEN_REMOVE_BLOCK * A version of KABI_BROKEN_INSERT / REMOVE that allows multiple fields * to be inserted or removed together. All fields need to be terminated * by ';' inside(!) the macro parameter. The macro itself must not be * terminated by ';'. * * KABI_BROKEN_REPLACE * Replace a field by a different one without doing any checking. This * allows replacing a field by another with a different size. Similarly * to other KABI_BROKEN macros, use of this indicates a kABI breakage. * * KABI_BROKEN_INSERT_ENUM * KABI_BROKEN_REMOVE_ENUM * Insert a field to the middle of an enumaration type / delete a field from * an enumaration type. Note that this can break kABI especially if the * number of enum fields is used in an array within a structure. It can be * done only when it is certain that no 3rd party driver will use the * enumeration type or a structure that embeds an array with size determined * by an enumeration type. * * KABI_EXTEND_ENUM * Adds a new field to an enumeration type. This must always be added to * the end of the enum. Before using this macro, make sure this is actually * safe to do. */ #ifdef __GENKSYMS__ # define KABI_CONST # define KABI_ADD_MODIFIER(_new) # define KABI_EXTEND(_new) # define KABI_FILL_HOLE(_new) # define KABI_FORCE_CHANGE(ver) __attribute__((kabi_change ## ver)) # define KABI_RENAME(_orig, _new) _orig # define KABI_HIDE_INCLUDE(_file) <linux/kabi.h> # define KABI_FAKE_INCLUDE(_file) _file # define KABI_BROKEN_INSERT(_new) # define KABI_BROKEN_REMOVE(_orig) _orig; # define KABI_BROKEN_INSERT_BLOCK(_new) # define KABI_BROKEN_REMOVE_BLOCK(_orig) _orig # define KABI_BROKEN_REPLACE(_orig, _new) _orig; # define KABI_BROKEN_INSERT_ENUM(_new) # define KABI_BROKEN_REMOVE_ENUM(_orig) _orig, # define KABI_EXTEND_ENUM(_new) # define _KABI_DEPRECATE(_type, _orig) _type _orig # define _KABI_DEPRECATE_FN(_type, _orig, _args...) _type (*_orig)(_args) # define _KABI_REPLACE(_orig, _new) _orig # define _KABI_EXCLUDE(_elem) #else # define KABI_ALIGN_WARNING ". Disable CONFIG_KABI_SIZE_ALIGN_CHECKS if debugging." # define KABI_CONST const # define KABI_ADD_MODIFIER(_new) _new # define KABI_EXTEND(_new) _new; # define KABI_FILL_HOLE(_new) _new; # define KABI_FORCE_CHANGE(ver) # define KABI_RENAME(_orig, _new) _new # define KABI_HIDE_INCLUDE(_file) _file # define KABI_FAKE_INCLUDE(_file) <linux/kabi.h> # define KABI_BROKEN_INSERT(_new) _new; # define KABI_BROKEN_REMOVE(_orig) # define KABI_BROKEN_INSERT_BLOCK(_new) _new # define KABI_BROKEN_REMOVE_BLOCK(_orig) # define KABI_BROKEN_REPLACE(_orig, _new) _new; # define KABI_BROKEN_INSERT_ENUM(_new) _new, # define KABI_BROKEN_REMOVE_ENUM(_orig) # define KABI_EXTEND_ENUM(_new) _new, #if IS_BUILTIN(CONFIG_KABI_SIZE_ALIGN_CHECKS) # define __KABI_CHECK_SIZE_ALIGN(_orig, _new) \ union { \ _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}), \ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_new) " is larger than " __stringify(_orig) KABI_ALIGN_WARNING); \ _Static_assert(__alignof__(struct{_new;}) <= __alignof__(struct{_orig;}), \ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_orig) " is not aligned the same as " __stringify(_new) KABI_ALIGN_WARNING); \ } # define __ABI_CHECK_SIZE(_item, _size) \ _Static_assert(sizeof(struct{_item;}) <= _size, \ __FILE__ ":" __stringify(__LINE__) ": " __stringify(_item) " is larger than the reserved size (" __stringify(_size) " bytes)" RH_KABI_ALIGN_WARNING) #else # define __KABI_CHECK_SIZE_ALIGN(_orig, _new) # define __KABI_CHECK_SIZE(_item, _size) #endif # define _KABI_DEPRECATE(_type, _orig) _type kabi_reserved_##_orig # define _KABI_DEPRECATE_FN(_type, _orig, _args...) \ _type (* kabi_reserved_##_orig)(_args) # define _KABI_REPLACE(_orig, _new) \ union { \ _new; \ struct { \ _orig; \ } __UNIQUE_ID(kabi_hide); \ __KABI_CHECK_SIZE_ALIGN(_orig, _new); \ } # define _KABI_EXCLUDE(_elem) _elem #endif /* __GENKSYMS__ */ /* semicolon added wrappers for the KABI_REPLACE macros */ # define KABI_DEPRECATE(_type, _orig) _KABI_DEPRECATE(_type, _orig); # define KABI_DEPRECATE_FN(_type, _orig, _args...) \ _KABI_DEPRECATE_FN(_type, _orig, _args); # define KABI_REPLACE(_orig, _new) _KABI_REPLACE(_orig, _new); /* * Macro for breaking up a random element into two smaller chunks using an * anonymous struct inside an anonymous union. */ # define KABI_REPLACE2(orig, _new1, _new2) KABI_REPLACE(orig, struct{ _new1; _new2;}) /* * We tried to standardize on openEuler reserved names. These wrappers * leverage those common names making it easier to read and find in the * code. */ # define _KABI_RESERVE(n) unsigned long kabi_reserved##n # define KABI_RESERVE(n) _KABI_RESERVE(n); /* * Simple wrappers to replace standard openEuler reserved elements. */ # define KABI_USE(n, _new) KABI_REPLACE(_KABI_RESERVE(n), _new) /* * Macros for breaking up a reserved element into two smaller chunks using * an anonymous struct inside an anonymous union. */ # define KABI_USE2(n, _new1, _new2) KABI_REPLACE(_KABI_RESERVE(n), struct{ _new1; _new2; }) #define KABI_EXCLUDE(_elem) _KABI_EXCLUDE(_elem); #define KABI_EXTEND_WITH_SIZE(_new, _size) \ KABI_EXTEND(union { \ _new; \ unsigned long KABI_UNIQUE_ID[_size]; \ __KABI_CHECK_SIZE(_new, 8 * (_size)); \ }) #define _KABI_AUX_PTR(_struct) \ size_t _struct##_size_rh; \ _KABI_EXCLUDE(struct _struct##_rh *_rh) #define KABI_AUX_PTR(_struct) \ _KABI_AUX_PTR(_struct); #define _KABI_AUX_EMBED(_struct) \ size_t _struct##_size_rh; \ _KABI_EXCLUDE(struct _struct##_rh _rh) #define KABI_AUX_EMBED(_struct) \ _KABI_AUX_EMBED(_struct); #define KABI_USE_AUX_PTR(n1, n2, _struct) \ KABI_USE(n1, n2, \ struct { KABI_AUX_PTR(_struct) }) /* * KABI_AUX_SET_SIZE calculates and sets the size of the extended struct and * stores it in the size_rh field for structs that are dynamically allocated. * This macro MUST be called when expanding a base struct with * KABI_SIZE_AND_EXTEND, and it MUST be called from the allocation site * regardless of being allocated in the kernel or a module. * Note: since this macro is intended to be invoked outside of a struct, * a semicolon is necessary at the end of the line where it is invoked. */ #define KABI_AUX_SET_SIZE(_name, _struct) ({ \ (_name)->_struct##_size_rh = sizeof(struct _struct##_rh); \ }) /* * KABI_AUX_INIT_SIZE calculates and sets the size of the extended struct and * stores it in the size_rh field for structs that are statically allocated. * This macro MUST be called when expanding a base struct with * KABI_SIZE_AND_EXTEND, and it MUST be called from the declaration site * regardless of being allocated in the kernel or a module. */ #define KABI_AUX_INIT_SIZE(_struct) \ ._struct##_size_rh = sizeof(struct _struct##_rh), /* * KABI_AUX verifies allocated memory exists. This MUST be called to * verify that memory in the _rh struct is valid, and can be called * regardless if KABI_SIZE_AND_EXTEND or KABI_SIZE_AND_EXTEND_PTR is * used. */ #define KABI_AUX(_ptr, _struct, _field) ({ \ size_t __off = offsetof(struct _struct##_rh, _field); \ (_ptr)->_struct##_size_rh > __off ? true : false; \ }) #endif /* _LINUX_KABI_H */ ```
评论 (
2
)
登录
后才可以发表评论
状态
已完成
新建
已接纳
已挂起
设计中
开发中
已完成
已验收
已拒绝
负责人
未设置
标签
sig/Kernel
未设置
项目
未立项任务
未立项任务
里程碑
openEuler-22.03-LTS-Kernel
未关联里程碑
Pull Requests
未关联
未关联
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
未关联
分支 (15)
标签 (1838)
openEuler-1.0-LTS
OLK-6.6
OLK-5.10
oe_txgbe
merge_txgbe_66
openEuler-25.03
openEuler-22.03-LTS-SP1
openEuler-23.09
openEuler-22.03-LTS-SP2
openEuler-22.03-LTS
openEuler-22.09
master
openEuler-21.09
openEuler-21.03
openEuler-20.09
4.19.90-2509.4.0
6.6.0-109.0.0
5.10.0-281.0.0
4.19.90-2509.3.0
4.19.90-2509.2.0
4.19.90-2509.1.0
6.6.0-108.0.0
5.10.0-280.0.0
4.19.90-2508.3.0
6.6.0-107.0.0
5.10.0-279.0.0
4.19.90-2508.2.0
5.10.0-278.0.0
6.6.0-106.0.0
5.10.0-277.0.0
4.19.90-2508.1.0
6.6.0-105.0.0
6.6.0-104.0.0
5.10.0-276.0.0
4.19.90-2507.5.0
6.6.0-103.0.0
5.10.0-275.0.0
v6.16
4.19.90-2507.4.0
5.10.0-274.0.0
6.6.0-102.0.0
6.6.0-101.0.0
4.19.90-2507.3.0
5.10.0-273.0.0
openEuler-22.03-LTS-SP4
openEuler-22.03-LTS-SP3
openEuler-22.03-LTS-SP2
openEuler-22.03-LTS-SP1
openEuler-22.03-LTS
openEuler-24.03-LTS-SP2
openEuler-24.03-LTS-SP1
openEuler-24.03-LTS
6.6.0-100.0.0
5.10.0-272.0.0
5.10.0-271.0.0
4.19.90-2507.2.0
6.6.0-99.0.0
5.10.0-270.0.0
4.19.90-2507.1.0
4.19.90-2506.4.0
5.10.0-269.0.0
6.6.0-98.0.0
4.19.90-2506.3.0
5.10.0-268.0.0
6.6.0-97.0.0
6.6.0-96.0.0
4.19.90-2506.2.0
5.10.0-267.0.0
v6.12.33
v6.12.32
6.6.0-95.0.0
4.19.90-2506.1.0
5.10.0-266.0.0
6.6.0-94.0.0
v6.12.31
6.6.0-93.0.0
4.19.90-2505.5.0
5.10.0-265.0.0
v6.15
v6.12.30
6.6.0-92.0.0
6.6.0-91.0.0
4.19.90-2505.4.0
5.10.0-264.0.0
6.6.0-90.0.0
4.19.90-2505.3.0
5.10.0-263.0.0
4.19.90-2505.2.0
6.6.0-89.0.0
4.19.90-2505.1.0
5.10.0-262.0.0
6.6.0-88.0.0
6.6.0-87.0.0
4.19.90-2504.4.0
5.10.0-261.0.0
4.19.90-2504.3.0
5.10.0-260.0.0
6.6.0-86.0.0
4.19.90-2504.2.0
5.10.0-259.0.0
6.6.0-85.0.0
4.19.90-2504.1.0
5.10.0-258.0.0
5.10.0-257.0.0
4.19.90-2503.5.0
5.10.0-256.0.0
6.6.0-84.0.0
v6.14
6.6.0-72.6.0
5.10.0-255.0.0
4.19.90-2503.4.0
6.6.0-83.0.0
6.6.0-72.5.0
6.6.0-72.4.0
5.10.0-254.0.0
4.19.90-2503.3.0
6.6.0-82.0.0
6.6.0-81.0.0
5.10.0-253.0.0
4.19.90-2503.2.0
6.6.0-72.3.0
6.6.0-72.2.0
4.19.90-2503.1.0
6.6.0-80.0.0
5.10.0-252.0.0
6.6.0-79.0.0
4.19.90-2502.4.0
5.10.0-251.0.0
5.10.0-250.0.0
6.6.0-78.0.0
4.19.90-2502.3.0
6.6.0-77.0.0
4.19.90-2502.2.0
5.10.0-249.0.0
6.6.0-72.1.0
4.19.90-2502.1.0
6.6.0-76.0.0
5.10.0-248.0.0
5.10.0-247.0.0
4.19.90-2501.4.0
6.6.0-75.0.0
v6.13
6.6.0-74.0.0
5.10.0-246.0.0
4.19.90-2501.3.0
4.19.90-2501.2.0
5.10.0-245.0.0
5.10.0-136.108.0
4.19.90-2501.1.0
6.6.0-73.0.0
4.19.90-2412.5.0
5.10.0-244.0.0
5.10.0-136.107.0
5.10.0-243.0.0
4.19.90-2412.4.0
6.6.0-72.0.0
6.6.0-71.0.0
6.6.0-70.0.0
6.6.0-69.0.0
5.10.0-242.0.0
4.19.90-2412.3.0
5.10.0-241.0.0
5.10.0-136.106.0
6.6.0-68.0.0
6.6.0-67.0.0
6.6.0-66.0.0
6.6.0-65.0.0
4.19.90-2412.2.0
5.10.0-136.105.0
5.10.0-240.0.0
6.6.0-64.0.0
6.6.0-63.0.0
6.6.0-62.0.0
6.6.0-61.0.0
4.19.90-2412.1.0
5.10.0-239.0.0
5.10.0-136.104.0
6.6.0-60.0.0
6.6.0-59.0.0
6.6.0-58.0.0
6.6.0-57.0.0
5.10.0-136.103.0
5.10.0-238.0.0
4.19.90-2411.5.0
6.6.0-56.0.0
5.10.0-237.0.0
5.10.0-136.102.0
4.19.90-2411.4.0
6.6.0-55.0.0
v6.12
6.6.0-54.0.0
5.10.0-236.0.0
5.10.0-136.101.0
4.19.90-2411.3.0
6.6.0-53.0.0
6.6.0-52.0.0
6.6.0-51.0.0
4.19.90-2411.2.0
6.6.0-50.0.0
5.10.0-235.0.0
5.10.0-136.100.0
6.6.0-49.0.0
5.10.0-136.99.0
6.6.0-48.0.0
5.10.0-234.0.0
4.19.90-2411.1.0
5.10.0-233.0.0
6.6.0-47.0.0
5.10.0-136.98.0
4.19.90-2410.3.0
4.19.90-2410.2.0
5.10.0-232.0.0
5.10.0-136.97.0
5.10.0-136.96.0
5.10.0-231.0.0
6.6.0-46.0.0
4.19.90-2410.1.0
6.6.0-45.0.0
4.19.90-2409.6.0
6.6.0-44.0.0
5.10.0-230.0.0
4.19.90-2409.5.0
5.10.0-136.95.0
6.6.0-43.0.0
5.10.0-229.0.0
5.10.0-136.94.0
6.6.0-42.0.0
4.19.90-2409.4.0
5.10.0-136.93.0
5.10.0-228.0.0
4.19.90-2409.3.0
5.10.0-227.0.0
6.6.0-41.0.0
4.19.90-2409.2.0
5.10.0-136.92.0
5.10.0-226.0.0
4.19.90-2409.1.0
6.6.0-40.0.0
4.19.90-2408.5.0
5.10.0-225.0.0
5.10.0-136.91.0
6.6.0-39.0.0
4.19.90-2408.4.0
5.10.0-136.90.0
5.10.0-224.0.0
5.10.0-223.0.0
5.10.0-136.89.0
4.19.90-2408.3.0
6.6.0-38.0.0
6.6.0-37.0.0
5.10.0-222.0.0
5.10.0-136.88.0
4.19.90-2408.2.0
6.6.0-36.0.0
5.10.0-221.0.0
5.10.0-136.87.0
4.19.90-2408.1.0
5.10.0-136.86.0
5.10.0-220.0.0
6.6.0-35.0.0
4.19.90-2407.5.0
5.10.0-136.85.0
5.10.0-219.0.0
6.6.0-34.0.0
4.19.90-2407.4.0
5.10.0-218.0.0
5.10.0-136.84.0
6.6.0-33.0.0
4.19.90-2407.3.0
4.19.90-2407.2.0
6.6.0-32.0.0
5.10.0-136.83.0
5.10.0-217.0.0
4.19.90-2407.1.0
5.10.0-216.0.0
5.10.0-136.82.0
4.19.90-2406.4.0
5.10.0-136.81.0
5.10.0-215.0.0
6.6.0-31.0.0
5.10.0-214.0.0
5.10.0-213.0.0
5.10.0-212.0.0
5.10.0-211.0.0
5.10.0-210.0.0
5.10.0-136.80.0
5.10.0-209.0.0
6.6.0-30.0.0
4.19.90-2406.3.0
5.10.0-208.0.0
6.6.0-28.0.0.34.oe2403
5.10.0-136.79.0
5.10.0-207.0.0
4.19.90-2406.2.0
5.10.0-206.0.0
5.10.0-205.0.0
5.10.0-204.0.0
5.10.0-203.0.0
5.10.0-136.78.0
5.10.0-202.0.0
4.19.90-2406.1.0
6.6.0-29.0.0
5.10.0-60.139.0
5.10.0-136.77.0
5.10.0-153.56.0
5.10.0-201.0.0
4.19.90-2405.5.0
6.6.0-28.0.0
5.10.0-153.55.0
5.10.0-136.76.0
5.10.0-60.138.0
5.10.0-200.0.0
4.19.90-2405.4.0
6.6.0-27.0.0
5.10.0-153.54.0
5.10.0-136.75.0
5.10.0-60.137.0
5.10.0-199.0.0
4.19.90-2405.3.0
6.6.0-26.0.0
4.19.90-2405.2.0
5.10.0-60.18.0.50.oe2203
6.6.0-25.0.0
6.6.0-24.0.0
5.10.0-153.53.0
5.10.0-136.74.0
5.10.0-60.136.0
5.10.0-198.0.0
4.19.90-2405.1.0
6.6.0-23.0.0
6.6.0-22.0.0
5.10.0-153.52.0
5.10.0-136.73.0
5.10.0-60.135.0
4.19.90-2404.3.0
5.10.0-197.0.0
6.6.0-21.0.0
5.10.0-153.51.0
5.10.0-136.72.0
5.10.0-60.134.0
4.19.90-2404.2.0
5.10.0-196.0.0
6.6.0-20.0.0
5.10.0-153.50.0
5.10.0-136.71.0
5.10.0-60.133.0
6.6.0-19.0.0
5.10.0-195.0.0
4.19.90-2404.1.0
6.6.0-18.0.0
6.6.0-17.0.0
6.6.0-16.0.0
5.10.0-194.0.0
5.10.0-153.49.0
5.10.0-136.70.0
5.10.0-60.132.0
6.6.0-15.0.0
6.6.0-14.0.0
5.10.0-193.0.0
5.10.0-153.48.0
5.10.0-136.69.0
5.10.0-60.131.0
4.19.90-2403.4.0
6.6.0-13.0.0
5.10.0-192.0.0
5.10.0-153.47.0
5.10.0-136.68.0
5.10.0-60.130.0
4.19.90-2403.3.0
6.6.0-12.0.0
5.10.0-191.0.0
5.10.0-153.46.0
5.10.0-136.67.0
5.10.0-60.129.0
6.6.0-11.0.0
4.19.90-2403.2.0
5.10.0-190.0.0
5.10.0-153.45.0
5.10.0-136.66.0
5.10.0-60.128.0
4.19.90-2403.1.0
4.19.90-2402.6.0
5.10.0-189.0.0
5.10.0-153.44.0
5.10.0-136.65.0
5.10.0-60.127.0
6.6.0-10.0.0
5.10.0-188.0.0
5.10.0-153.43.0
5.10.0-136.64.0
5.10.0-60.126.0
4.19.90-2402.5.0
6.6.0-9.0.0
5.10.0-187.0.0
5.10.0-153.42.0
5.10.0-136.63.0
5.10.0-60.125.0
6.6.0-8.0.0
4.19.90-2402.4.0
4.19.90-2402.3.0
4.19.90-2402.2.0
5.10.0-186.0.0
5.10.0-153.41.0
5.10.0-136.62.0
5.10.0-60.124.0
4.19.90-2402.1.0
6.6.0-7.0.0
5.10.0-185.0.0
5.10.0-153.40.0
5.10.0-136.61.0
5.10.0-60.123.0
4.19.90-2401.5.0
6.6.0-6.0.0
5.10.0-184.0.0
5.10.0-153.39.0
5.10.0-136.60.0
5.10.0-60.122.0
4.19.90-2401.4.0
6.6.0-5.0.0
5.10.0-183.0.0
5.10.0-153.38.0
5.10.0-136.59.0
5.10.0-60.121.0
4.19.90-2401.3.0
4.19.90-2401.2.0
6.6.0-4.0.0
4.19.90-2401.1.0
5.10.0-153.37.0
5.10.0-136.58.0
5.10.0-60.120.0
4.19.90-2312.6.0
4.19.90-2312.5.0
6.6.0-3.0.0
5.10.0-182.0.0
5.10.0-181.0.0
5.10.0-180.0.0
5.10.0-153.36.0
4.19.90-2312.4.0
5.10.0-179.0.0
6.6.0-2.0.0
5.10.0-178.0.0
5.10.0-177.0.0
4.19.90-2312.3.0
4.19.90-2312.2.0
5.10.0-176.0.0
5.10.0-175.0.0
4.19.90-2312.1.0
5.10.0-174.0.0
5.10.0-153.35.0
5.10.0-136.57.0
5.10.0-60.119.0
6.6.0-1.0.0
5.10.0-173.0.0
5.10.0-153.34.0
5.10.0-136.56.0
5.10.0-60.118.0
4.19.90-2311.5.0
5.10.0-172.0.0
5.10.0-171.0.0
4.19.90-2311.4.0
5.10.0-170.0.0
5.10.0-169.0.0
5.10.0-168.0.0
5.10.0-153.33.0
5.10.0-136.55.0
5.10.0-60.117.0
4.19.90-2311.3.0
5.10.0-167.0.0
5.10.0-153.32.0
5.10.0-136.54.0
5.10.0-60.116.0
4.19.90-2311.2.0
5.10.0-166.0.0
4.19.90-2311.1.0
5.10.0-165.0.0
5.10.0-153.31.0
5.10.0-136.53.0
5.10.0-60.115.0
v6.6
5.10.0-164.0.0
4.19.90-2310.4.0
4.19.90-2310.3.0
5.10.0-163.0.0
5.10.0-153.30.0
5.10.0-136.52.0
5.10.0-60.114.0
5.10.0-162.0.0
5.10.0-153.29.0
5.10.0-136.51.0
5.10.0-60.113.0
4.19.90-2310.2.0
4.19.90-2310.1.0
4.19.90-2309.5.0
6.4.0-10.1.0
5.10.0-161.0.0
6.4.0-7.0.1
6.4.0-10.0.0
6.4.0-6.0.6
6.4.0-6.0.5
6.4.0-6.0.4
6.4.0-6.0.3
6.4.0-6.0.2
6.4.0-6.0.1
5.10.0-153.28.0
5.10.0-136.50.0
5.10.0-60.112.0
4.19.90-2309.4.0
6.4.0-9.0.0
5.10.0-153.27.0
5.10.0-136.49.0
5.10.0-60.111.0
6.4.0-8.0.0
4.19.90-2309.3.0
6.4.0-7.0.0
4.19.90-2309.2.0
5.10.0-160.0.0
6.4.0-6.0.0
5.10.0-153.26.0
5.10.0-136.48.0
5.10.0-60.110.0
4.19.90-2309.1.0
6.4.0-5.0.0
6.4.0-4.0.0
6.4.0-3.0.0
4.19.90-2308.5.0
6.4.0-2.0.0
5.10.0-153.25.0
5.10.0-136.47.0
5.10.0-60.109.0
5.10.0-159.0.0
6.4.0-1.0.2
4.19.90-2308.4.0
5.10.0-153.24.0
5.10.0-136.46.0
5.10.0-60.108.0
4.19.90-2308.3.0
5.10.0-153.23.0
5.10.0-136.45.0
5.10.0-60.107.0
5.10.0-158.0.0
5.10.0-153.22.0
5.10.0-60.106.0
5.10.0-136.44.0
4.19.90-2308.2.0
5.10.0-153.21.0
5.10.0-60.105.0
5.10.0-136.43.0
4.19.90-2308.1.0
6.4.0-1.0.1
5.10.0-157.0.0
4.19.90-2307.5.0
5.10.0-153.20.0
5.10.0-60.104.0
5.10.0-136.42.0
5.10.0-153.19.0
5.10.0-60.103.0
5.10.0-136.41.0
4.19.90-2307.4.0
5.10.0-156.0.0
4.19.90-2307.3.0
5.10.0-153.18.0
5.10.0-60.102.0
5.10.0-136.40.0
6.4.0-1.0.0
4.19.90-2307.2.0
4.19.90-2307.1.0
5.10.0-60.101.0
5.10.0-153.17.0
5.10.0-136.39.0
4.19.90-2306.7.0
4.19.90-2306.6.0
5.10.0-155.0.0
5.10.0-153.16.0
4.19.90-2306.5.0
5.10.0-136.38.0
5.10.0-60.100.0
v6.4
5.10.0-153.12.0
5.10.0-153.10.0
5.10.0-60.99.0
5.10.0-136.37.0
4.19.90-2306.4.0
5.10.0-153.9.0
5.10.0-153.8.0
5.10.0-60.98.0
5.10.0-136.36.0
4.19.90-2306.3.0
5.10.0-153.6.0
5.10.0-153.5.0
5.10.0-154.0.0
5.10.0-153.4.0
4.19.90-2306.2.0
5.10.0-153.3.0
5.10.0-60.97.0
5.10.0-136.35.0
4.19.90-2306.1.0
5.10.0-153.2.0
5.10.0-153.1.0
5.10.0-60.96.0
5.10.0-136.34.0
4.19.90-2305.4.0
5.10.0-153.0.0
v6.4-rc4
5.10.0-152.0.0
4.19.90-2305.3.0
5.10.0-60.95.0
5.10.0-136.33.0
5.10.0-151.0.0
5.10.0-150.0.0
5.10.0-149.0.0
5.10.0-136.32.0
5.10.0-60.94.0
4.19.90-2305.2.0
5.10.0-60.93.0
5.10.0-136.31.0
4.19.90-2305.1.0
5.10.0-148.0.0
5.10.0-136.30.0
5.10.0-60.92.0
4.19.90-2304.5.0
v6.3
5.10.0-136.29.0
5.10.0-60.91.0
4.19.90-2304.4.0
5.10.0-136.28.0
5.10.0-60.90.0
4.19.90-2304.3.0
4.19.90-2304.2.0
5.10.0-147.0.0
4.19.90-2304.1.0
5.10.0-136.27.0
5.10.0-60.89.0
5.10.0-146.0.0
5.10.0-136.26.0
5.10.0-60.88.0
4.19.90-2303.6.0
5.10.0-60.87.0
5.10.0-136.25.0
4.19.90-2303.5.0
5.10.0-145.0.0
5.10.0-60.86.0
5.10.0-136.24.0
4.19.90-2303.4.0
5.10.0-136.23.0
5.10.0-60.85.0
4.19.90-2303.3.0
v6.1.19
4.19.90-2303.2.0
5.10.0-144.0.0
5.10.0-136.22.0
5.10.0-60.84.0
4.19.90-2303.1.0
5.10.0-60.83.0
5.10.0-136.21.0
4.19.90-2302.5.0
v6.1.14
5.10.0-143.0.0
5.10.0-60.82.0
5.10.0-136.20.0
4.19.90-2302.4.0
5.10.0-60.81.0
5.10.0-136.19.0
4.19.90-2302.3.0
5.10.0-142.0.0
4.19.90-2302.2.0
5.10.0-136.18.0
5.10.0-60.80.0
4.19.90-2302.1.0
5.10.0-60.79.0
5.10.0-136.17.0
4.19.90-2301.6.0
v6.1.8
v6.2-rc5
5.10.0-141.0.0
v6.1.7
5.10.0-136.16.0
5.10.0-60.78.0
4.19.90-2301.5.0
v6.2-rc4
v6.1.6
6.1.0-1.0.0
v6.1.5
4.19.90-2301.4.0
5.10.0-60.77.0
5.10.0-136.15.0
4.19.90-2301.3.0
4.19.90-2301.2.0
4.19.90-2301.1.0
5.10.0-136.14.2
5.10.0-60.76.0
5.10.0-140.0.0
5.10.0-136.13.2
5.10.0-60.75.0
5.10.0-60.74.0
5.10.0-136.12.2
4.19.90-2212.4.0
5.10.0-136.12.0
5.10.0-136.10.0
4.19.90-2212.3.0
5.10.0-136.8.0
5.10.0-136.7.0
5.10.0-139.0.0
5.10.0-136.6.0
5.10.0-136.5.0
5.10.0-60.73.0
5.10.0-136.4.0
5.10.0-136.3.0
5.10.0-138.0.0
5.10.0-136.2.0
5.10.0-60.72.0
5.10.0-60.71.0
5.10.0-137.0.0
5.10.0-136.1.0
v6.1
5.10.0-136.0.0
5.10.0-135.0.0
5.10.0-134.0.0
4.19.90-2212.2.0
5.10.0-133.0.0
5.10.0-60.70.0
4.19.90-2212.1.0
5.10.0-60.69.0
5.10.0-132.0.0
5.10.0-131.0.0
5.10.0-130.0.0
4.19.90-2211.6.0
5.10.0-129.0.0
5.10.0-60.68.0
4.19.90-2211.5.0
5.10.0-128.0.0
5.10.0-60.67.0
5.10.0-127.0.0
4.19.90-2211.4.0
5.10.0-60.66.0
5.10.0-126.0.0
4.19.90-2211.3.0
4.19.90-2211.2.0
5.10.0-125.0.0
5.10.0-60.65.0
5.10.0-60.64.0
4.19.90-2211.1.0
4.19.90-2210.5.0
5.10.0-123.0.0
5.10.0-60.63.0
5.10.0-60.62.0
4.19.90-2210.4.0
5.10.0-121.0.0
5.10.0-60.61.0
4.19.90-2210.3.0
5.10.0-60.60.0
5.10.0-120.0.0
5.10.0-60.59.0
5.10.0-119.0.0
4.19.90-2210.2.0
4.19.90-2210.1.0
5.10.0-118.0.0
5.10.0-106.19.0
5.10.0-60.58.0
4.19.90-2209.6.0
5.10.0-106.18.0
5.10.0-106.17.0
5.10.0-106.16.0
5.10.0-106.15.0
5.10.0-117.0.0
5.10.0-60.57.0
5.10.0-116.0.0
5.10.0-106.14.0
5.10.0-106.13.0
4.19.90-2209.5.0
4.19.90-2209.4.0
5.10.0-60.56.0
4.19.90-2209.3.0
5.10.0-106.12.0
5.10.0-106.10.0
5.10.0-106.11.0
5.10.0-60.55.0
4.19.90-2209.2.0
5.10.0-114.0.0
5.10.0-106.9.0
5.10.0-60.54.0
4.19.90-2209.1.0
5.10.0-113.0.0
5.10.0-60.53.0
5.10.0-106.8.0
4.19.90-2208.6.0
5.10.0-106.7.0
4.19.90-2208.5.0
5.10.0-112.0.0
5.10.0-106.6.0
5.10.0-60.52.0
5.10.0-60.51.0
5.10.0-106.3.1
4.19.90-2208.4.0
5.10.0-106.5.0
5.10.0-110.0.0
5.10.0-60.50.0
5.10.0-106.4.0
5.10.0-109.0.0
5.10.0-60.49.0
4.19.90-2208.3.0
4.19.90-2208.2.0
5.10.0-108.0.0
5.10.0-106.3.0
5.10.0-60.48.0
4.19.90-2208.1.0
5.10.0-106.2.0
5.10.0-107.0.0
5.10.0-60.47.0
4.19.90-2207.4.0
5.10.0-106.1.0
5.10.0-106.0.0
5.10.0-60.46.0
4.19.90-2207.3.0
5.10.0-105.0.0
5.10.0-60.45.0
5.10.0-60.44.0
5.10.0-104.0.0
5.10.0-103.0.0
5.10.0-60.43.0
4.19.90-2207.2.0
5.10.0-102.0.0
5.10.0-60.42.0
4.19.90-2207.1.0
5.10.0-101.0.0
5.10.0-60.41.0
5.10.0-100.0.0
4.19.90-2206.4.0
5.10.0-60.40.0
5.10.0-99.0.0
5.10.0-60.39.0
4.19.90-2206.3.0
5.10.0-98.0.0
5.10.0-60.38.0
4.19.90-2206.2.0
5.10.0-60.37.0
5.10.0-97.0.0
4.19.90-2206.1.0
5.10.0-60.36.0
5.10.0-96.0.0
4.19.90-2205.6.0
5.10.0-60.35.0
5.10.0-95.0.0
5.10.0-60.34.0
5.10.0-94.0.0
5.10.0-60.33.0
4.19.90-2205.5.0
5.10.0-93.0.0
5.10.0-60.32.0
5.10.0-92.0.0
5.10.0-91.0.0
5.10.0-60.31.0
5.10.0-90.0.0
5.10.0-60.30.0
4.19.90-2205.4.0
5.10.0-60.29.0
5.10.0-89.0.0
5.10.0-88.0.0
5.10.0-60.28.0
4.19.90-2205.3.0
4.19.90-2205.2.0
4.19.90-2205.1.0
5.10.0-87.0.0
5.10.0-86.0.0
5.10.0-60.27.0
5.10.0-60.26.0
5.10.0-85.0.0
5.10.0-60.25.0
5.10.0-60.24.0
5.10.0-84.0.0
4.19.90-2204.4.0
5.10.0-60.23.0
5.10.0-83.0.0
5.10.0-82.0.0
5.10.0-60.22.0
5.10.0-81.0.0
5.10.0-60.21.0
4.19.90-2204.3.0
5.10.0-80.0.0
5.10.0-60.20.0
5.10.0-60.19.0
4.19.90-2204.2.0
5.10.0-79.0.0
4.19.90-2204.1.0
4.19.90-2203.5.0
5.10.0-78.0.0
5.10.0-77.0.0
5.10.0-60.18.0
5.10.0-60.17.0
5.10.0-60.16.0
5.10.0-76.0.0
4.19.90-2203.4.0
5.10.0-75.0.0
5.10.0-60.15.0
5.10.0-74.0.0
5.10.0-60.14.0
5.10.0-73.0.0
5.10.0-60.13.0
5.10.0-60.12.0
5.10.0-72.0.0
5.10.0-60.11.0
5.10.0-71.0.0
5.10.0-70.0.0
5.10.0-60.10.0
4.19.90-2203.3.0
5.10.0-69.0.0
5.10.0-68.0.0
5.10.0-60.9.0
5.10.0-60.8.0
5.10.0-60.7.0
5.10.0-67.0.0
5.10.0-5.10.1
5.10.0-5.12.0
5.10.0-66.0.0
5.10.0-60.6.0
5.10.0-65.0.0
5.10.0-60.5.0
5.10.0-60.4.0
5.10.0-63.0.0
5.10.0-60.3.0
4.19.90-2203.2.0
5.10.0-60.2.0
5.10.0-62.0.0
5.10.0-61.0.0
5.10.0-60.1.0
5.10.0-60.0.0
4.19.90-2203.1.0
5.10.0-59.0.0
5.10.0-58.0.0
5.10.0-57.0.0
4.19.90-2202.4.0
5.10.0-56.0.0
4.19.90-2202.3.0
5.10.0-55.0.0
5.10.0-54.0.0
4.19.90-2202.2.0
4.19.90-2202.1.0
5.10.0-53.0.0
5.10.0-52.0.0
5.10.0-51.0.0
5.10.0-50.0.0
5.10.0-49.0.0
5.10.0-48.0.0
5.10.0-47.0.0
5.10.0-46.0.0
5.10.0-45.0.0
4.19.90-2201.4.0
5.10.0-44.0.0
5.10.0-43.0.0
5.10.0-42.0.0
4.19.90-2201.3.0
5.10.0-41.0.0
5.10.0-40.0.0
5.10.0-39.0.0
4.19.90-2201.2.0
5.10.0-38.0.0
5.10.0-37.0.0
5.10.0-36.0.0
5.10.0-35.0.0
5.10.0-34.0.0
5.10.0-33.0.0
4.19.90-2201.1.0
5.10.0-32.0.0
5.10.0-31.0.0
5.10.0-30.0.0
4.19.90-2112.8.0
4.19.90-2112.7.0
5.10.0-29.0.0
4.19.90-2112.6.0
5.10.0-28.0.0
5.10.0-27.0.0
4.19.90-2112.5.0
4.19.90-2112.4.0
4.19.90-2112.3.0
5.10.0-26.0.0
4.19.90-2112.2.0
4.19.90-2112.1.0
5.10.0-25.0.0
5.10.0-24.0.0
5.10.0-23.0.0
4.19.90-2111.7.0
5.10.0-22.0.0
5.10.0-21.0.0
4.19.90-2111.6.0
5.10.0-20.0.0
4.19.90-2111.5.0
5.10.0-19.0.0
4.19.90-2111.4.0
5.10.0-18.0.0
5.10.0-17.0.0
4.19.90-2111.3.0
4.19.90-2111.2.0
4.19.208-2111.1.0
4.19.90-2111.1.0
5.10.0-16.0.0
5.10.0-4.25.0
4.19.90-2110.8.0
4.19.90-2110.7.0
5.10.0-15.0.0
5.10.0-4.24.0
5.10.0-14.0.0
4.19.90-2110.6.0
4.19.90-2110.5.0
4.19.90-2110.4.0
5.10.0-13.0.0
5.10.0-12.0.0
5.10.0-11.0.0
4.19.90-2110.3.0
5.10.0-10.0.0
4.19.90-2110.2.0
5.10.0-9.0.0
4.19.90-2110.1.0
5.10.0-8.0.0
5.10.0-5.11.0
4.19.90-2109.8.0
5.10.0-7.0.0
4.19.90-2109.7.0
4.19.90-2109.6.0
4.19.90-2109.5.0
5.10.0-5.10.0
4.19.90-2109.4.0
4.19.90-2109.3.0
4.19.90-2109.2.0
5.10.0-5.9.0
5.10.0-6.0.0
4.19.90-2109.1.0
4.19.90-2108.9.0
5.10.0-5.8.0
5.10.0-5.7.0
4.19.90-2108.8.0
4.19.90-2108.7.0
5.10.0-5.6.0
5.10.0-5.5.0
5.10.0-5.4.0
5.10.0-4.23.0
4.19.90-2108.6.0
4.19.90-2108.5.0
5.10.0-5.3.0
4.19.201-2108.1.0
4.19.90-2108.4.0
4.19.90-2108.3.0
5.10.0-5.2.0
4.19.90-2108.2.0
4.19.90-2108.1.0
5.10.0-5.1.0
4.19.90-2107.5.0
5.10.0-4.22.0
4.19.90-2107.4.0
4.19.90-2107.3.0
4.19.90-2107.2.0
5.10.0-5.0.0
4.19.90-2107.1.0
5.10.0-4.21.0
4.19.90-2106.3.0
4.19.90-2106.2.0
4.19.90-2106.1.0
4.19.194-2106.1.0
4.19.90-2105.9.0
4.19.90-2105.8.0
4.19.90-2105.7.0
4.19.90-2105.6.0
4.19.90-2105.5.0
4.19.90-2105.4.0
4.19.90-2105.3.0
4.19.90-2105.2.0
4.19.90-2105.1.0
4.19.189-2104.7.0
4.19.90-2104.26.0
4.19.189-2104.6.0
4.19.189-2104.5.0
4.19.90-2104.25.0
4.19.90-2104.24.0
4.19.90-2104.23.0
4.19.90-2104.22.0
4.19.90-2104.21.0
4.19.90-2104.20.0
5.10.0-4.20.0
4.19.188-2104.4.0
4.19.188-2104.3.0
4.19.90-2104.19.0
4.19.90-2104.18.0
4.19.90-2104.17.0
5.10.0-4.19.0
4.19.90-2104.16.0
4.19.90-2104.15.0
4.19.90-2104.14.0
4.19.90-2104.13.0
4.19.90-2104.12.0
4.19.90-2104.11.0
4.19.90-2104.10.0
4.19.90-2104.9.0
4.19.90-2104.8.0
4.19.90-2104.7.0
4.19.90-2104.6.0
4.19.90-2104.5.0
4.19.90-2104.4.0
4.19.90-2104.3.0
4.19.90-2104.2.0
4.19.183-2104.2.0
4.19.183-2104.1.0
4.19.140-2104.1.0
4.19.90-2104.1.0
4.19.90-2103.4.0
5.10.0-4.18.0
5.10.0-4.17.0
4.19.90-2103.3.0
5.10.0-4.16.0
5.10.0-4.15.0
5.10.0-4.14.0
5.10.0-4.13.0
4.19.140-2103.1.0
4.19.90-2103.2.0
5.10.0-4.12.0
5.10.0-4.11.0
5.10.0-4.10.0
4.19.90-2103.1.0
5.10.0-4.9.0
5.10.0-4.8.0
5.10.0-4.7.0
5.10.0-4.6.0
5.10.0-4.5.0
5.10.0-4.4.0
5.10.0-4.3.0
5.10.0-4.2.0
4.19.90-2102.3.0
5.10.0-4.1.0
4.19.90-2102.2.0
5.10.0-4.0.0
4.19.140-2102.1.0
4.19.90-2102.1.0
5.10.0-3.0.0
5.10.0-2.0.0
5.10.0-1.0.0
4.19.140-2101.1.0
4.19.90-2101.1.0
4.19.90-2012.5.0
4.19.90-2012.4.0
4.19.140-2012.2.0
4.19.90-2012.3.0
4.19.90-2012.2.0
v5.10
4.19.140-2012.1.0
4.19.90-2012.1.0
v5.10-rc7
v5.10-rc6
4.19.90-2011.6.0
4.19.90-2011.5.0
4.19.90-2011.4.0
v5.10-rc5
4.19.140-2011.2.0
4.19.90-2011.3.0
4.19.90-2011.2.0
v5.10-rc4
v5.10-rc3
4.19.140-2011.1.0
v5.10-rc2
4.19.90-2010.2.0
v5.10-rc1
v5.9
4.19.148-2009.1.0
v5.9-rc8
v5.9-rc7
4.19.140-2009.4.0
4.19.90-2009.1.0
4.19.90-2009.2.0
4.19.90-2009.3.0
4.19.140-2009.3.0
v5.9-rc6
4.19.140-2009.2.0
v5.9-rc5
4.19.140-2009.1.0
v5.9-rc4
4.19.90-2008.6.0
v5.9-rc3
4.19.140-2008.3.0
4.19.140-2008.2.0
v5.9-rc2
4.19.90-2008.3.0
4.19.90-2008.2.0
v5.9-rc1
4.19.138-2008.1.0
v5.8
4.19.90-2007.2.0
v5.8-rc7
v5.8-rc6
v5.8-rc5
v5.8-rc4
v5.8-rc3
v5.8-rc2
v5.8-rc1
4.19.128-2006.1.0
v5.7
4.19.90-2005.2.0
v5.7-rc7
v5.7-rc6
4.19.90-2005.1.0
v5.7-rc5
v5.7-rc4
4.19.90-2004.1.0
v5.7-rc3
v5.7-rc2
v5.7-rc1
v5.6
v5.6-rc7
4.19.90-2003.4.0
4.19.90-2003.3.0
4.19.90-2003.2.0
v5.6-rc6
4.19.90-2003.1.1
4.19.90-2003.1.0
v5.6-rc5
v5.6-rc4
v5.6-rc3
v5.6-rc2
v5.6-rc1
v5.5
v5.5-rc7
4.19.90-2001.1.0
v5.5-rc6
v5.5-rc5
v5.5-rc4
v5.5-rc3
v5.5-rc2
v5.5-rc1
v5.4
v5.4-rc8
v5.4-rc7
v5.4-rc6
v5.4-rc5
v5.4-rc4
v5.4-rc3
v5.4-rc2
v5.4-rc1
v5.3
v5.3-rc8
v5.3-rc7
v5.3-rc6
v5.3-rc5
v5.3-rc4
v5.3-rc3
v5.3-rc2
v5.3-rc1
v5.2
v5.2-rc7
v5.2-rc6
v5.2-rc5
v5.2-rc4
v5.2-rc3
v5.2-rc2
v5.2-rc1
v5.1
v5.1-rc7
v5.1-rc6
v5.1-rc5
v5.1-rc4
v5.1-rc3
v5.1-rc2
v5.1-rc1
v5.0
v5.0-rc8
v5.0-rc7
v5.0-rc6
v5.0-rc5
v5.0-rc4
v5.0-rc3
v5.0-rc2
v5.0-rc1
v4.20
v4.20-rc7
v4.20-rc6
v4.20-rc5
v4.20-rc4
v4.20-rc3
v4.20-rc2
v4.20-rc1
v4.19
v4.19-rc8
v4.19-rc7
v4.19-rc6
v4.19-rc5
v4.19-rc4
v4.19-rc3
v4.19-rc2
v4.19-rc1
v4.18
v4.18-rc8
v4.18-rc7
v4.18-rc6
v4.18-rc5
v4.18-rc4
v4.18-rc3
v4.18-rc2
v4.18-rc1
v4.17
v4.17-rc7
v4.17-rc6
v4.17-rc5
v4.17-rc4
v4.17-rc3
v4.17-rc2
v4.17-rc1
v4.16
v4.16-rc7
v4.16-rc6
v4.16-rc5
v4.16-rc4
v4.16-rc3
v4.16-rc2
v4.16-rc1
v4.15
v4.15-rc9
v4.15-rc8
v4.15-rc7
v4.15-rc6
v4.15-rc5
v4.15-rc4
v4.15-rc3
v4.15-rc2
v4.15-rc1
v4.14
v4.14-rc8
v4.14-rc7
v4.14-rc6
v4.14-rc5
v4.14-rc4
v4.14-rc3
v4.14-rc2
v4.14-rc1
v4.13
v4.13-rc7
v4.13-rc6
v4.13-rc5
v4.13-rc4
v4.13-rc3
v4.13-rc2
v4.13-rc1
v4.12
v4.12-rc7
v4.12-rc6
v4.12-rc5
v4.12-rc4
v4.12-rc3
v4.12-rc2
v4.12-rc1
v4.11
v4.11-rc8
v4.11-rc7
v4.11-rc6
v4.11-rc5
v4.11-rc4
v4.11-rc3
v4.11-rc2
v4.11-rc1
v4.10
v4.10-rc8
v4.10-rc7
v4.10-rc6
v4.10-rc5
v4.10-rc4
v4.10-rc3
v4.10-rc2
v4.10-rc1
v4.9
v4.9-rc8
v4.9-rc7
v4.9-rc6
v4.9-rc5
v4.9-rc4
v4.9-rc3
v4.9-rc2
v4.9-rc1
v4.8
v4.8-rc8
v4.8-rc7
v4.8-rc6
v4.8-rc5
v4.8-rc4
v4.8-rc3
v4.8-rc2
v4.8-rc1
v4.7
v4.7-rc7
v4.7-rc6
v4.7-rc5
v4.7-rc4
v4.7-rc3
v4.7-rc2
v4.7-rc1
v4.6
v4.6-rc7
v4.6-rc6
v4.6-rc5
v4.6-rc4
v4.6-rc3
v4.6-rc2
v4.6-rc1
v4.5
v4.5-rc7
v4.5-rc6
v4.5-rc5
v4.5-rc4
v4.5-rc3
v4.5-rc2
v4.5-rc1
v4.4
v4.4-rc8
v4.4-rc7
v4.4-rc6
v4.4-rc5
v4.4-rc4
v4.4-rc3
v4.4-rc2
v4.4-rc1
v4.3
v4.3-rc7
v4.3-rc6
v4.3-rc5
v4.3-rc4
v4.3-rc3
v4.3-rc2
v4.3-rc1
v4.2
v4.2-rc8
v4.2-rc7
v4.2-rc6
v4.2-rc5
v4.2-rc4
v4.2-rc3
v4.2-rc2
v4.2-rc1
v4.1
v4.1-rc8
v4.1-rc7
v4.1-rc6
v4.1-rc5
v4.1-rc4
v4.1-rc3
v4.1-rc2
v4.1-rc1
v4.0
v4.0-rc7
v4.0-rc6
v4.0-rc5
v4.0-rc4
v4.0-rc3
v4.0-rc2
v4.0-rc1
v3.19
v3.19-rc7
v3.19-rc6
v3.19-rc5
v3.19-rc4
v3.19-rc3
v3.19-rc2
v3.19-rc1
v3.18
v3.18-rc7
v3.18-rc6
v3.18-rc5
v3.18-rc4
v3.18-rc3
v3.18-rc2
v3.18-rc1
v3.17
v3.17-rc7
v3.17-rc6
v3.17-rc5
v3.17-rc4
v3.17-rc3
v3.17-rc2
v3.17-rc1
v3.16
v3.16-rc7
v3.16-rc6
v3.16-rc5
v3.16-rc4
v3.16-rc3
v3.16-rc2
v3.16-rc1
v3.15
v3.15-rc8
v3.15-rc7
v3.15-rc6
v3.15-rc5
v3.15-rc4
v3.15-rc3
v3.15-rc2
v3.15-rc1
v3.14
v3.14-rc8
v3.14-rc7
v3.14-rc6
v3.14-rc5
v3.14-rc4
v3.14-rc3
v3.14-rc2
v3.14-rc1
v3.13
v3.13-rc8
v3.13-rc7
v3.13-rc6
v3.13-rc5
v3.13-rc4
v3.13-rc3
v3.13-rc2
v3.13-rc1
v3.12
v3.12-rc7
v3.12-rc6
v3.12-rc5
v3.12-rc4
v3.12-rc3
v3.12-rc2
v3.12-rc1
v3.11
v3.11-rc7
v3.11-rc6
v3.11-rc5
v3.11-rc4
v3.11-rc3
v3.11-rc2
v3.11-rc1
v3.10
v3.10-rc7
v3.10-rc6
v3.10-rc5
v3.10-rc4
v3.10-rc3
v3.10-rc2
v3.10-rc1
v3.9
v3.9-rc8
v3.9-rc7
v3.9-rc6
v3.9-rc5
v3.9-rc4
v3.9-rc3
v3.9-rc2
v3.9-rc1
v3.8
v3.9-kvm-arm
v3.8-rc7
v3.8-rc6
v3.8-rc5
v3.8-rc4
v3.8-rc3
v3.8-rc2
v3.8-rc1
v3.7
v3.7-rc8
v3.7-rc7
v3.7-rc6
v3.7-rc5
v3.7-rc4
v3.7-rc3
v3.7-rc2
v3.7-rc1
v3.6
v3.6-rc7
v3.6-rc6
v3.6-rc5
v3.6-rc4
v3.6-rc3
v3.6-rc2
v3.6-rc1
v3.5
v3.5-rc7
v3.5-rc6
v3.5-rc5
v3.5-rc4
v3.5-rc3
v3.5-rc2
v3.5-rc1
v3.4
v3.4-rc7
v3.4-rc6
v3.4-rc5
v3.4-rc4
v3.4-rc3
v3.4-rc2
v3.4-rc1
v3.3
v3.3-rc7
v3.3-rc6
v3.3-rc5
v3.3-rc4
v3.3-rc3
v3.3-rc2
v3.3-rc1
v3.2
v3.2-rc7
v3.2-rc6
v3.2-rc5
v3.2-rc4
v3.2-rc3
v3.2-rc2
v3.2-rc1
v3.1
v3.1-rc10
v3.1-rc9
v3.1-rc8
v3.1-rc7
v3.1-rc6
v3.1-rc5
v3.1-rc4
v3.1-rc3
v3.1-rc2
v3.1-rc1
v3.0
v3.0-rc7
v3.0-rc6
v3.0-rc5
v3.0-rc4
v3.0-rc3
v3.0-rc2
v3.0-rc1
v2.6.39
v2.6.39-rc7
v2.6.39-rc6
v2.6.39-rc5
v2.6.39-rc4
v2.6.39-rc3
v2.6.39-rc2
v2.6.39-rc1
v2.6.38
v2.6.38-rc8
v2.6.38-rc7
v2.6.38-rc6
v2.6.38-rc5
v2.6.38-rc4
v2.6.38-rc3
v2.6.38-rc2
v2.6.38-rc1
v2.6.37
v2.6.37-rc8
v2.6.37-rc7
v2.6.37-rc6
v2.6.37-rc5
v2.6.37-rc4
v2.6.37-rc3
v2.6.37-rc2
v2.6.37-rc1
v2.6.36
v2.6.36-rc8
v2.6.36-rc7
v2.6.36-rc6
v2.6.36-rc5
v2.6.36-rc4
v2.6.36-rc3
v2.6.36-rc2
v2.6.36-rc1
v2.6.35
v2.6.35-rc6
v2.6.35-rc5
v2.6.35-rc4
v2.6.35-rc3
v2.6.35-rc2
v2.6.35-rc1
v2.6.34
v2.6.34-rc7
v2.6.34-rc6
v2.6.34-rc5
v2.6.34-rc4
v2.6.34-rc3
v2.6.34-rc2
v2.6.34-rc1
v2.6.33
v2.6.33-rc8
v2.6.33-rc7
v2.6.33-rc6
v2.6.33-rc5
v2.6.33-rc4
v2.6.33-rc3
v2.6.33-rc2
v2.6.33-rc1
v2.6.32
v2.6.32-rc8
v2.6.32-rc7
v2.6.32-rc6
v2.6.32-rc5
v2.6.32-rc4
v2.6.32-rc3
v2.6.32-rc1
v2.6.32-rc2
v2.6.31
v2.6.31-rc9
v2.6.31-rc8
v2.6.31-rc7
v2.6.31-rc6
v2.6.31-rc5
v2.6.31-rc4
v2.6.31-rc3
v2.6.31-rc2
v2.6.31-rc1
v2.6.30
v2.6.30-rc8
v2.6.30-rc7
v2.6.30-rc6
v2.6.30-rc5
v2.6.30-rc4
v2.6.30-rc3
v2.6.30-rc2
v2.6.30-rc1
v2.6.29
v2.6.29-rc8
v2.6.29-rc7
v2.6.29-rc6
v2.6.29-rc5
v2.6.29-rc4
v2.6.29-rc3
v2.6.29-rc2
v2.6.29-rc1
v2.6.28
v2.6.28-rc9
v2.6.28-rc8
v2.6.28-rc7
v2.6.28-rc6
v2.6.28-rc5
v2.6.28-rc4
v2.6.28-rc3
v2.6.28-rc2
v2.6.28-rc1
v2.6.27
v2.6.27-rc9
v2.6.27-rc8
v2.6.27-rc7
v2.6.27-rc6
v2.6.27-rc5
v2.6.27-rc4
v2.6.27-rc3
v2.6.27-rc2
v2.6.27-rc1
v2.6.26
v2.6.26-rc9
v2.6.26-rc8
v2.6.26-rc7
v2.6.26-rc6
v2.6.26-rc5
v2.6.26-rc4
v2.6.26-rc3
v2.6.26-rc2
v2.6.26-rc1
v2.6.25
v2.6.25-rc9
v2.6.25-rc8
v2.6.25-rc7
v2.6.25-rc6
v2.6.25-rc5
v2.6.25-rc4
v2.6.25-rc3
v2.6.25-rc2
v2.6.25-rc1
v2.6.24
v2.6.24-rc8
v2.6.24-rc7
v2.6.24-rc6
v2.6.24-rc5
v2.6.24-rc4
v2.6.24-rc3
v2.6.24-rc2
v2.6.24-rc1
v2.6.23
v2.6.23-rc9
v2.6.23-rc8
v2.6.23-rc7
v2.6.23-rc6
v2.6.23-rc5
v2.6.23-rc4
v2.6.23-rc3
v2.6.23-rc2
v2.6.23-rc1
v2.6.22
v2.6.22-rc7
v2.6.22-rc6
v2.6.22-rc5
v2.6.22-rc4
v2.6.22-rc3
v2.6.22-rc2
v2.6.22-rc1
v2.6.21
v2.6.21-rc7
v2.6.21-rc6
v2.6.21-rc5
v2.6.21-rc4
v2.6.21-rc3
v2.6.21-rc2
v2.6.21-rc1
v2.6.20
v2.6.20-rc7
v2.6.20-rc6
v2.6.20-rc5
v2.6.20-rc4
v2.6.20-rc3
v2.6.20-rc2
v2.6.20-rc1
v2.6.19
v2.6.19-rc6
v2.6.19-rc5
v2.6.19-rc4
v2.6.19-rc3
v2.6.19-rc2
v2.6.19-rc1
v2.6.18
v2.6.18-rc7
v2.6.18-rc6
v2.6.18-rc5
v2.6.18-rc4
v2.6.18-rc3
v2.6.18-rc2
v2.6.18-rc1
v2.6.17
v2.6.17-rc6
v2.6.17-rc5
v2.6.17-rc4
v2.6.17-rc3
v2.6.17-rc2
v2.6.17-rc1
v2.6.16
v2.6.16-rc6
v2.6.16-rc5
v2.6.16-rc4
v2.6.16-rc3
v2.6.16-rc2
v2.6.16-rc1
v2.6.15
v2.6.15-rc7
v2.6.15-rc6
v2.6.15-rc5
v2.6.15-rc4
v2.6.15-rc3
v2.6.15-rc2
v2.6.15-rc1
v2.6.14
v2.6.14-rc5
v2.6.14-rc4
v2.6.14-rc3
v2.6.14-rc2
v2.6.14-rc1
v2.6.13
v2.6.13-rc7
v2.6.13-rc6
v2.6.13-rc5
v2.6.13-rc4
v2.6.11
v2.6.11-tree
v2.6.12
v2.6.12-rc2
v2.6.12-rc3
v2.6.12-rc4
v2.6.12-rc5
v2.6.12-rc6
v2.6.13-rc1
v2.6.13-rc2
v2.6.13-rc3
开始日期   -   截止日期
-
置顶选项
不置顶
置顶等级:高
置顶等级:中
置顶等级:低
优先级
不指定
严重
主要
次要
不重要
预计工期
(小时)
参与者(1)
C
1
https://gitee.com/openeuler/kernel.git
git@gitee.com:openeuler/kernel.git
openeuler
kernel
kernel
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册