Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6: modules: do not try to add sysfs attributes if !CONFIG_SYSFS POWERPC: fix typo in pseries/power.c PM: Remove unbalanced mutex_unlock() from dpm_resume() UIO: fix Greg's stupid changes stable_kernel_rules: fix must already be in mainline ide: mark "ide=reverse" option as obsolete Driver core: Fix error handling in bus_add_driver(). driver-core: fix kernel-doc function parameters cpufreq: fix kobject reference count handling slabinfo: fall back from /sys/kernel/slab to /sys/slab Fix broken utf-8 encodings in ja_JP translation of stable_kernel_rules.txt
This commit is contained in:
Коммит
e6364cd3a1
|
@ -11,69 +11,69 @@ comment or update of this file, please try to update Original(English)
|
||||||
file at first.
|
file at first.
|
||||||
|
|
||||||
==================================
|
==================================
|
||||||
ããã¯ã
|
これは、
|
||||||
linux-2.6.24/Documentation/stable_kernel_rules.txt
|
linux-2.6.24/Documentation/stable_kernel_rules.txt
|
||||||
ã®å訳ã§ãã
|
の和訳です。
|
||||||
|
|
||||||
翻訳å£ä½ï¼ JF ããã¸ã§ã¯ã < http://www.linux.or.jp/JF/ >
|
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
|
||||||
翻訳æ¥ï¼ 2007/12/30
|
翻訳日: 2007/12/30
|
||||||
翻訳è
ï¼ Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
|
翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
|
||||||
æ ¡æ£è
ï¼ æ¦äºä¼¸å
ããã<takei at webmasters dot gr dot jp>
|
校正者: 武井伸光さん、<takei at webmasters dot gr dot jp>
|
||||||
ããããã (Seiji Kaneko) <skaneko at a2 dot mbn dot or dot jp>
|
かねこさん (Seiji Kaneko) <skaneko at a2 dot mbn dot or dot jp>
|
||||||
å°æ é
å
¸ãã (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp>
|
小林 雅典さん (Masanori Kobayasi) <zap03216 at nifty dot ne dot jp>
|
||||||
éå£ãã (Kenji Noguchi) <tokyo246 at gmail dot com>
|
野口さん (Kenji Noguchi) <tokyo246 at gmail dot com>
|
||||||
ç¥å®®ä¿¡å¤ªéãã <jin at libjingu dot jp>
|
神宮信太郎さん <jin at libjingu dot jp>
|
||||||
==================================
|
==================================
|
||||||
|
|
||||||
ãã£ã¨ç¥ãããã£ã Linux 2.6 -stable ãªãªã¼ã¹ã®å
¨ã¦
|
ずっと知りたかった Linux 2.6 -stable リリースの全て
|
||||||
|
|
||||||
"-stable" ããªã¼ã«ã©ã®ãããªç¨®é¡ã®ããããåãå
¥ããããããã©ã®ãããª
|
"-stable" ツリーにどのような種類のパッチが受け入れられるか、どのような
|
||||||
ãã®ãåãå
¥ããããªãããã«ã¤ãã¦ã®è¦å-
|
ものが受け入れられないか、についての規則-
|
||||||
|
|
||||||
- æããã«æ£ããããã¹ãããã¦ãããã®ã§ãªããã°ãªããªãã
|
- 明らかに正しく、テストされているものでなければならない。
|
||||||
- æè(å¤æ´è¡ã®åå¾)ãå«ã㦠100 è¡ãã大ããã¦ã¯ãããªãã
|
- 文脈(変更行の前後)を含めて 100 行より大きくてはいけない。
|
||||||
- ãã ä¸åã®ãã¨ã ããä¿®æ£ãã¦ããã¹ãã
|
- ただ一個のことだけを修正しているべき。
|
||||||
- çãæ©ã¾ãã¦ããæ¬ç©ã®ãã°ãä¿®æ£ããªããã°ãªããªãã("ããã¯ãã°ã§
|
- 皆を悩ませている本物のバグを修正しなければならない。("これはバグで
|
||||||
ãããããããªãã..." ã®ãããªãã®ã§ã¯ãªã)
|
あるかもしれないが..." のようなものではない)
|
||||||
- ãã«ãã¨ã©ã¼(CONFIG_BROKENã«ãªã£ã¦ãããã®ãé¤ã), oops, ãã³ã°ããã¼
|
- ビルドエラー(CONFIG_BROKENになっているものを除く), oops, ハング、デー
|
||||||
ã¿ç ´å£ãç¾å®ã®ã»ãã¥ãªãã£åé¡ããã®ä» "ãããããã¯ãã¡ã ã"ã¨ãã
|
タ破壊、現実のセキュリティ問題、その他 "ああ、これはダメだね"という
|
||||||
ãããªãã®ãä¿®æ£ããªããã°ãªããªããçãè¨ãã°ãé大ãªåé¡ã
|
ようなものを修正しなければならない。短く言えば、重大な問題。
|
||||||
- ã©ã®ããã«ç«¶åç¶æ
ãçºçãããã®èª¬æãä¸ç·ã«æ¸ããã¦ããªãéãã
|
- どのように競合状態が発生するかの説明も一緒に書かれていない限り、
|
||||||
"çè«çã«ã¯ç«¶åç¶æ
ã«ãªã"ãããªãã®ã¯ä¸å¯ã
|
"理論的には競合状態になる"ようなものは不可。
|
||||||
- ãããªãäºç´°ãªä¿®æ£ãå«ãããã¨ã¯ã§ããªãã(ã¹ãã«ã®ä¿®æ£ã空ç½ã®ã¯ãªã¼
|
- いかなる些細な修正も含めることはできない。(スペルの修正、空白のクリー
|
||||||
ã³ã¢ãããªã©)
|
ンアップなど)
|
||||||
- 対å¿ãããµãã·ã¹ãã ã¡ã³ãããåãå
¥ãããã®ã§ãªããã°ãªããªãã
|
- 対応するサブシステムメンテナが受け入れたものでなければならない。
|
||||||
- Documentation/SubmittingPatches ã®è¦åã«å¾ã£ããã®ã§ãªããã°ãªããªãã
|
- Documentation/SubmittingPatches の規則に従ったものでなければならない。
|
||||||
|
|
||||||
-stable ããªã¼ã«ããããéä»ããæç¶ã-
|
-stable ツリーにパッチを送付する手続き-
|
||||||
|
|
||||||
- ä¸è¨ã®è¦åã«å¾ã£ã¦ãããã確èªããå¾ã«ãstable@kernel.org ã«ããã
|
- 上記の規則に従っているかを確認した後に、stable@kernel.org にパッチ
|
||||||
ãéãã
|
を送る。
|
||||||
- éä¿¡è
ã¯ãããããã¥ã¼ã«åãä»ããããéã«ã¯ ACK ããå´ä¸ãããå ´å
|
- 送信者はパッチがキューに受け付けられた際には ACK を、却下された場合
|
||||||
ã«ã¯ NAK ãåãåãããã®åå¿ã¯éçºè
ãã¡ã®ã¹ã±ã¸ã¥ã¼ã«ã«ãã£ã¦ãæ°
|
には NAK を受け取る。この反応は開発者たちのスケジュールによって、数
|
||||||
æ¥ãããå ´åãããã
|
日かかる場合がある。
|
||||||
- ããåãåããããããããã¯ä»ã®éçºè
ãã¡ã®ã¬ãã¥ã¼ã®ããã«
|
- もし受け取られたら、パッチは他の開発者たちのレビューのために
|
||||||
-stable ãã¥ã¼ã«è¿½å ãããã
|
-stable キューに追加される。
|
||||||
- ã»ãã¥ãªãã£ãããã¯ãã®ã¨ã¤ãªã¢ã¹ (stable@kernel.org) ã«éãããã¹
|
- セキュリティパッチはこのエイリアス (stable@kernel.org) に送られるべ
|
||||||
ãã§ã¯ãªãã代ããã« security@kernel.org ã®ã¢ãã¬ã¹ã«éãããã
|
きではなく、代わりに security@kernel.org のアドレスに送られる。
|
||||||
|
|
||||||
ã¬ãã¥ã¼ãµã¤ã¯ã«-
|
レビューサイクル-
|
||||||
|
|
||||||
- -stable ã¡ã³ãããã¬ãã¥ã¼ãµã¤ã¯ã«ã決ããã¨ãããããã¯ã¬ãã¥ã¼å§
|
- -stable メンテナがレビューサイクルを決めるとき、パッチはレビュー委
|
||||||
å¡ä¼ã¨ããããå½±é¿ããé åã®ã¡ã³ãã(æä¾è
ããã®é åã®ã¡ã³ããã§ç¡
|
員会とパッチが影響する領域のメンテナ(提供者がその領域のメンテナで無
|
||||||
ãéã)ã«éãããlinux-kernel ã¡ã¼ãªã³ã°ãªã¹ãã«CCãããã
|
い限り)に送られ、linux-kernel メーリングリストにCCされる。
|
||||||
- ã¬ãã¥ã¼å§å¡ä¼ã¯ 48æéã®éã« ACK ã NAK ãåºãã
|
- レビュー委員会は 48時間の間に ACK か NAK を出す。
|
||||||
- ããããããå§å¡ä¼ã®ã¡ã³ãããå´ä¸ããããã¡ã³ããéãã¡ã³ããæ°ä»
|
- もしパッチが委員会のメンバから却下されるか、メンテナ達やメンバが気付
|
||||||
ããªãã£ãåé¡ãæã¡ããããlinux-kernel ã¡ã³ãããããã«ç°è°ãå±ã
|
かなかった問題が持ちあがり、linux-kernel メンバがパッチに異議を唱え
|
||||||
ãå ´åã«ã¯ããããã¯ãã¥ã¼ããåé¤ãããã
|
た場合には、パッチはキューから削除される。
|
||||||
- ã¬ãã¥ã¼ãµã¤ã¯ã«ã®æå¾ã«ãACK ãåãããããã¯ææ°ã® -stable ãªãªã¼
|
- レビューサイクルの最後に、ACK を受けたパッチは最新の -stable リリー
|
||||||
ã¹ã«è¿½å ããããã®å¾ã«æ°ãã -stable ãªãªã¼ã¹ãè¡ãããã
|
スに追加され、その後に新しい -stable リリースが行われる。
|
||||||
- ã»ãã¥ãªãã£ãããã¯ãé常ã®ã¬ãã¥ã¼ãµã¤ã¯ã«ãéãããã»ãã¥ãªãã£
|
- セキュリティパッチは、通常のレビューサイクルを通らず、セキュリティ
|
||||||
ã«ã¼ãã«ãã¼ã ããç´æ¥ -stable ããªã¼ã«åãä»ããããã
|
カーネルチームから直接 -stable ツリーに受け付けられる。
|
||||||
ãã®æç¶ãã®è©³ç´°ã«ã¤ãã¦ã¯ kernel security ãã¼ã ã«åãåããããã¨ã
|
この手続きの詳細については kernel security チームに問い合わせること。
|
||||||
|
|
||||||
ã¬ãã¥ã¼å§å¡ä¼-
|
レビュー委員会-
|
||||||
|
|
||||||
- ãã®å§å¡ä¼ã¯ããã®ã¿ã¹ã¯ã«ã¤ãã¦æ´»åããå¤ãã®ãã©ã³ãã£ã¢ã¨ãå°æ°ã®
|
- この委員会は、このタスクについて活動する多くのボランティアと、少数の
|
||||||
éãã©ã³ãã£ã¢ã®ã«ã¼ãã«éçºè
éã§æ§æããã¦ããã
|
非ボランティアのカーネル開発者達で構成されている。
|
||||||
|
|
||||||
|
|
|
@ -16,8 +16,9 @@ Rules on what kind of patches are accepted, and which ones are not, into the
|
||||||
race can be exploited is also provided.
|
race can be exploited is also provided.
|
||||||
- It cannot contain any "trivial" fixes in it (spelling changes,
|
- It cannot contain any "trivial" fixes in it (spelling changes,
|
||||||
whitespace cleanups, etc).
|
whitespace cleanups, etc).
|
||||||
- It must be accepted by the relevant subsystem maintainer.
|
|
||||||
- It must follow the Documentation/SubmittingPatches rules.
|
- It must follow the Documentation/SubmittingPatches rules.
|
||||||
|
- It or an equivalent fix must already exist in Linus' tree. Quote the
|
||||||
|
respective commit ID in Linus' tree in your patch submission to -stable.
|
||||||
|
|
||||||
|
|
||||||
Procedure for submitting patches to the -stable tree:
|
Procedure for submitting patches to the -stable tree:
|
||||||
|
@ -28,7 +29,9 @@ Procedure for submitting patches to the -stable tree:
|
||||||
queue, or a NAK if the patch is rejected. This response might take a few
|
queue, or a NAK if the patch is rejected. This response might take a few
|
||||||
days, according to the developer's schedules.
|
days, according to the developer's schedules.
|
||||||
- If accepted, the patch will be added to the -stable queue, for review by
|
- If accepted, the patch will be added to the -stable queue, for review by
|
||||||
other developers.
|
other developers and by the relevant subsystem maintainer.
|
||||||
|
- If the stable@kernel.org address is added to a patch, when it goes into
|
||||||
|
Linus's tree it will automatically be emailed to the stable team.
|
||||||
- Security patches should not be sent to this alias, but instead to the
|
- Security patches should not be sent to this alias, but instead to the
|
||||||
documented security@kernel.org address.
|
documented security@kernel.org address.
|
||||||
|
|
||||||
|
|
|
@ -1123,7 +1123,7 @@ void read_slab_dir(void)
|
||||||
char *t;
|
char *t;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if (chdir("/sys/kernel/slab"))
|
if (chdir("/sys/kernel/slab") && chdir("/sys/slab"))
|
||||||
fatal("SYSFS support for SLUB not active\n");
|
fatal("SYSFS support for SLUB not active\n");
|
||||||
|
|
||||||
dir = opendir(".");
|
dir = opendir(".");
|
||||||
|
|
|
@ -658,9 +658,10 @@ int bus_add_driver(struct device_driver *drv)
|
||||||
pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name);
|
pr_debug("bus: '%s': add driver %s\n", bus->name, drv->name);
|
||||||
|
|
||||||
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
|
||||||
if (!priv)
|
if (!priv) {
|
||||||
return -ENOMEM;
|
error = -ENOMEM;
|
||||||
|
goto out_put_bus;
|
||||||
|
}
|
||||||
klist_init(&priv->klist_devices, NULL, NULL);
|
klist_init(&priv->klist_devices, NULL, NULL);
|
||||||
priv->driver = drv;
|
priv->driver = drv;
|
||||||
drv->p = priv;
|
drv->p = priv;
|
||||||
|
@ -668,7 +669,7 @@ int bus_add_driver(struct device_driver *drv)
|
||||||
error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
|
error = kobject_init_and_add(&priv->kobj, &driver_ktype, NULL,
|
||||||
"%s", drv->name);
|
"%s", drv->name);
|
||||||
if (error)
|
if (error)
|
||||||
goto out_put_bus;
|
goto out_unregister;
|
||||||
|
|
||||||
if (drv->bus->p->drivers_autoprobe) {
|
if (drv->bus->p->drivers_autoprobe) {
|
||||||
error = driver_attach(drv);
|
error = driver_attach(drv);
|
||||||
|
|
|
@ -120,6 +120,9 @@ EXPORT_SYMBOL_GPL(driver_remove_file);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* driver_add_kobj - add a kobject below the specified driver
|
* driver_add_kobj - add a kobject below the specified driver
|
||||||
|
* @drv: requesting device driver
|
||||||
|
* @kobj: kobject to add below this driver
|
||||||
|
* @fmt: format string that names the kobject
|
||||||
*
|
*
|
||||||
* You really don't want to do this, this is only here due to one looney
|
* You really don't want to do this, this is only here due to one looney
|
||||||
* iseries driver, go poke those developers if you are annoyed about
|
* iseries driver, go poke those developers if you are annoyed about
|
||||||
|
|
|
@ -479,7 +479,6 @@ static int dpm_suspend(pm_message_t state)
|
||||||
mutex_lock(&dpm_list_mtx);
|
mutex_lock(&dpm_list_mtx);
|
||||||
if (list_empty(&dev->power.entry))
|
if (list_empty(&dev->power.entry))
|
||||||
list_add(&dev->power.entry, &dpm_locked);
|
list_add(&dev->power.entry, &dpm_locked);
|
||||||
mutex_unlock(&dpm_list_mtx);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
mutex_lock(&dpm_list_mtx);
|
mutex_lock(&dpm_list_mtx);
|
||||||
|
@ -523,6 +522,7 @@ static void lock_all_devices(void)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* device_suspend - Save state and stop all devices in system.
|
* device_suspend - Save state and stop all devices in system.
|
||||||
|
* @state: new power management state
|
||||||
*
|
*
|
||||||
* Prevent new devices from being registered, then lock all devices
|
* Prevent new devices from being registered, then lock all devices
|
||||||
* and suspend them.
|
* and suspend them.
|
||||||
|
|
|
@ -1006,14 +1006,6 @@ static int __cpufreq_remove_dev (struct sys_device * sys_dev)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
if (!kobject_get(&data->kobj)) {
|
|
||||||
spin_unlock_irqrestore(&cpufreq_driver_lock, flags);
|
|
||||||
cpufreq_debug_enable_ratelimit();
|
|
||||||
unlock_policy_rwsem_write(cpu);
|
|
||||||
return -EFAULT;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
|
|
|
@ -1229,7 +1229,7 @@ static int __init ide_setup(char *s)
|
||||||
if (!strcmp(s, "ide=reverse")) {
|
if (!strcmp(s, "ide=reverse")) {
|
||||||
ide_scan_direction = 1;
|
ide_scan_direction = 1;
|
||||||
printk(" : Enabled support for IDE inverse scan order.\n");
|
printk(" : Enabled support for IDE inverse scan order.\n");
|
||||||
return 1;
|
goto obsolete_option;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -57,29 +57,29 @@ struct uio_map {
|
||||||
};
|
};
|
||||||
#define to_map(map) container_of(map, struct uio_map, kobj)
|
#define to_map(map) container_of(map, struct uio_map, kobj)
|
||||||
|
|
||||||
|
static ssize_t map_addr_show(struct uio_mem *mem, char *buf)
|
||||||
static ssize_t map_attr_show(struct kobject *kobj, struct kobj_attribute *attr,
|
|
||||||
char *buf)
|
|
||||||
{
|
{
|
||||||
struct uio_map *map = to_map(kobj);
|
return sprintf(buf, "0x%lx\n", mem->addr);
|
||||||
struct uio_mem *mem = map->mem;
|
|
||||||
|
|
||||||
if (strncmp(attr->attr.name, "addr", 4) == 0)
|
|
||||||
return sprintf(buf, "0x%lx\n", mem->addr);
|
|
||||||
|
|
||||||
if (strncmp(attr->attr.name, "size", 4) == 0)
|
|
||||||
return sprintf(buf, "0x%lx\n", mem->size);
|
|
||||||
|
|
||||||
return -ENODEV;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct kobj_attribute attr_attribute =
|
static ssize_t map_size_show(struct uio_mem *mem, char *buf)
|
||||||
__ATTR(addr, S_IRUGO, map_attr_show, NULL);
|
{
|
||||||
static struct kobj_attribute size_attribute =
|
return sprintf(buf, "0x%lx\n", mem->size);
|
||||||
__ATTR(size, S_IRUGO, map_attr_show, NULL);
|
}
|
||||||
|
|
||||||
|
struct uio_sysfs_entry {
|
||||||
|
struct attribute attr;
|
||||||
|
ssize_t (*show)(struct uio_mem *, char *);
|
||||||
|
ssize_t (*store)(struct uio_mem *, const char *, size_t);
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct uio_sysfs_entry addr_attribute =
|
||||||
|
__ATTR(addr, S_IRUGO, map_addr_show, NULL);
|
||||||
|
static struct uio_sysfs_entry size_attribute =
|
||||||
|
__ATTR(size, S_IRUGO, map_size_show, NULL);
|
||||||
|
|
||||||
static struct attribute *attrs[] = {
|
static struct attribute *attrs[] = {
|
||||||
&attr_attribute.attr,
|
&addr_attribute.attr,
|
||||||
&size_attribute.attr,
|
&size_attribute.attr,
|
||||||
NULL, /* need to NULL terminate the list of attributes */
|
NULL, /* need to NULL terminate the list of attributes */
|
||||||
};
|
};
|
||||||
|
@ -90,8 +90,28 @@ static void map_release(struct kobject *kobj)
|
||||||
kfree(map);
|
kfree(map);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ssize_t map_type_show(struct kobject *kobj, struct attribute *attr,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
struct uio_map *map = to_map(kobj);
|
||||||
|
struct uio_mem *mem = map->mem;
|
||||||
|
struct uio_sysfs_entry *entry;
|
||||||
|
|
||||||
|
entry = container_of(attr, struct uio_sysfs_entry, attr);
|
||||||
|
|
||||||
|
if (!entry->show)
|
||||||
|
return -EIO;
|
||||||
|
|
||||||
|
return entry->show(mem, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct sysfs_ops uio_sysfs_ops = {
|
||||||
|
.show = map_type_show,
|
||||||
|
};
|
||||||
|
|
||||||
static struct kobj_type map_attr_type = {
|
static struct kobj_type map_attr_type = {
|
||||||
.release = map_release,
|
.release = map_release,
|
||||||
|
.sysfs_ops = &uio_sysfs_ops,
|
||||||
.default_attrs = attrs,
|
.default_attrs = attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -987,12 +987,11 @@ static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* /sys/module/foo/sections stuff
|
* /sys/module/foo/sections stuff
|
||||||
* J. Corbet <corbet@lwn.net>
|
* J. Corbet <corbet@lwn.net>
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_KALLSYMS
|
#if defined(CONFIG_KALLSYMS) && defined(CONFIG_SYSFS)
|
||||||
static ssize_t module_sect_show(struct module_attribute *mattr,
|
static ssize_t module_sect_show(struct module_attribute *mattr,
|
||||||
struct module *mod, char *buf)
|
struct module *mod, char *buf)
|
||||||
{
|
{
|
||||||
|
@ -1188,7 +1187,7 @@ static inline void add_notes_attrs(struct module *mod, unsigned int nsect,
|
||||||
static inline void remove_notes_attrs(struct module *mod)
|
static inline void remove_notes_attrs(struct module *mod)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_KALLSYMS */
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SYSFS
|
#ifdef CONFIG_SYSFS
|
||||||
int module_add_modinfo_attrs(struct module *mod)
|
int module_add_modinfo_attrs(struct module *mod)
|
||||||
|
@ -1231,9 +1230,7 @@ void module_remove_modinfo_attrs(struct module *mod)
|
||||||
}
|
}
|
||||||
kfree(mod->modinfo_attrs);
|
kfree(mod->modinfo_attrs);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SYSFS
|
|
||||||
int mod_sysfs_init(struct module *mod)
|
int mod_sysfs_init(struct module *mod)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче