Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'driver-core-3.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core

Pull driver core fixes from Greg KH:
"Here are some driver core fixes for 3.15-rc2. Also in here are some
documentation updates, as well as an API removal that had to wait for
after -rc1 due to the cleanups coming into you from multiple developer
trees (this one and the PPC tree.)

All have been in linux next successfully"

* tag 'driver-core-3.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core:
drivers/base/dd.c incorrect pr_debug() parameters
Documentation: Update stable address in Chinese and Japanese translations
topology: Fix compilation warning when not in SMP
Chinese: add translation of io_ordering.txt
stable_kernel_rules: spelling/word usage
sysfs, driver-core: remove unused {sysfs|device}_schedule_callback_owner()
kernfs: protect lazy kernfs_iattrs allocation with mutex
fs: Don't return 0 from get_anon_bdev

+92 -160
+1 -1
Documentation/ja_JP/HOWTO
··· 315 315 もし、3.x.y カーネルが存在しない場合には、番号が一番大きい 3.x が 316 316 最新の安定版カーネルです。 317 317 318 - 3.x.y は "stable" チーム <stable@kernel.org> でメンテされており、必 318 + 3.x.y は "stable" チーム <stable@vger.kernel.org> でメンテされており、必 319 319 要に応じてリリースされます。通常のリリース期間は 2週間毎ですが、差し迫っ 320 320 た問題がなければもう少し長くなることもあります。セキュリティ関連の問題 321 321 の場合はこれに対してだいたいの場合、すぐにリリースがされます。
+3 -3
Documentation/ja_JP/stable_kernel_rules.txt
··· 50 50 51 51 -stable ツリーにパッチを送付する手続き- 52 52 53 - - 上記の規則に従っているかを確認した後に、stable@kernel.org にパッチ 53 + - 上記の規則に従っているかを確認した後に、stable@vger.kernel.org にパッチ 54 54 を送る。 55 55 - 送信者はパッチがキューに受け付けられた際には ACK を、却下された場合 56 56 には NAK を受け取る。この反応は開発者たちのスケジュールによって、数 57 57 日かかる場合がある。 58 58 - もし受け取られたら、パッチは他の開発者たちと関連するサブシステムの 59 59 メンテナーによるレビューのために -stable キューに追加される。 60 - - パッチに stable@kernel.org のアドレスが付加されているときには、それ 60 + - パッチに stable@vger.kernel.org のアドレスが付加されているときには、それ 61 61 が Linus のツリーに入る時に自動的に stable チームに email される。 62 - - セキュリティパッチはこのエイリアス (stable@kernel.org) に送られるべ 62 + - セキュリティパッチはこのエイリアス (stable@vger.kernel.org) に送られるべ 63 63 きではなく、代わりに security@kernel.org のアドレスに送られる。 64 64 65 65 レビューサイクル-
+1 -1
Documentation/stable_kernel_rules.txt
··· 39 39 the stable tree without anything else needing to be done by the author 40 40 or subsystem maintainer. 41 41 - If the patch requires other patches as prerequisites which can be 42 - cherry-picked than this can be specified in the following format in 42 + cherry-picked, then this can be specified in the following format in 43 43 the sign-off area: 44 44 45 45 Cc: <stable@vger.kernel.org> # 3.3.x: a1f84a3: sched: Check for idle
+1 -1
Documentation/zh_CN/HOWTO
··· 237 237 如果没有2.6.x.y版本内核存在,那么最新的2.6.x版本内核就相当于是当前的稳定 238 238 版内核。 239 239 240 - 2.6.x.y版本由“稳定版”小组(邮件地址<stable@kernel.org>)维护,一般隔周发 240 + 2.6.x.y版本由“稳定版”小组(邮件地址<stable@vger.kernel.org>)维护,一般隔周发 241 241 布新版本。 242 242 243 243 内核源码中的Documentation/stable_kernel_rules.txt文件具体描述了可被稳定
+67
Documentation/zh_CN/io_ordering.txt
··· 1 + Chinese translated version of Documentation/io_orderings.txt 2 + 3 + If you have any comment or update to the content, please contact the 4 + original document maintainer directly. However, if you have a problem 5 + communicating in English you can also ask the Chinese maintainer for 6 + help. Contact the Chinese maintainer if this translation is outdated 7 + or if there is a problem with the translation. 8 + 9 + Chinese maintainer: Lin Yongting <linyongting@gmail.com> 10 + --------------------------------------------------------------------- 11 + Documentation/io_ordering.txt 的中文翻译 12 + 13 + 如果想评论或更新本文的内容,请直接联系原文档的维护者。如果你使用英文 14 + 交流有困难的话,也可以向中文版维护者求助。如果本翻译更新不及时或者翻 15 + 译存在问题,请联系中文版维护者。 16 + 17 + 中文版维护者: 林永听 Lin Yongting <linyongting@gmail.com> 18 + 中文版翻译者: 林永听 Lin Yongting <linyongting@gmail.com> 19 + 中文版校译者: 林永听 Lin Yongting <linyongting@gmail.com> 20 + 21 + 22 + 以下为正文 23 + --------------------------------------------------------------------- 24 + 25 + 在某些平台上,所谓的内存映射I/O是弱顺序。在这些平台上,驱动开发者有责任 26 + 保证I/O内存映射地址的写操作按程序图意的顺序达到设备。通常读取一个“安全” 27 + 设备寄存器或桥寄存器,触发IO芯片清刷未处理的写操作到达设备后才处理读操作, 28 + 而达到保证目的。驱动程序通常在spinlock保护的临界区退出之前使用这种技术。 29 + 这也可以保证后面的写操作只在前面的写操作之后到达设备(这非常类似于内存 30 + 屏障操作,mb(),不过仅适用于I/O)。 31 + 32 + 假设一个设备驱动程的具体例子: 33 + 34 + ... 35 + CPU A: spin_lock_irqsave(&dev_lock, flags) 36 + CPU A: val = readl(my_status); 37 + CPU A: ... 38 + CPU A: writel(newval, ring_ptr); 39 + CPU A: spin_unlock_irqrestore(&dev_lock, flags) 40 + ... 41 + CPU B: spin_lock_irqsave(&dev_lock, flags) 42 + CPU B: val = readl(my_status); 43 + CPU B: ... 44 + CPU B: writel(newval2, ring_ptr); 45 + CPU B: spin_unlock_irqrestore(&dev_lock, flags) 46 + ... 47 + 48 + 上述例子中,设备可能会先接收到newval2的值,然后接收到newval的值,问题就 49 + 发生了。不过很容易通过下面方法来修复: 50 + 51 + ... 52 + CPU A: spin_lock_irqsave(&dev_lock, flags) 53 + CPU A: val = readl(my_status); 54 + CPU A: ... 55 + CPU A: writel(newval, ring_ptr); 56 + CPU A: (void)readl(safe_register); /* 配置寄存器?*/ 57 + CPU A: spin_unlock_irqrestore(&dev_lock, flags) 58 + ... 59 + CPU B: spin_lock_irqsave(&dev_lock, flags) 60 + CPU B: val = readl(my_status); 61 + CPU B: ... 62 + CPU B: writel(newval2, ring_ptr); 63 + CPU B: (void)readl(safe_register); /* 配置寄存器?*/ 64 + CPU B: spin_unlock_irqrestore(&dev_lock, flags) 65 + 66 + 在解决方案中,读取safe_register寄存器,触发IO芯片清刷未处理的写操作, 67 + 再处理后面的读操作,防止引发数据不一致问题。
+1 -1
Documentation/zh_CN/stable_kernel_rules.txt
··· 42 42 43 43 向稳定版代码树提交补丁的过程: 44 44 45 - - 在确认了补丁符合以上的规则后,将补丁发送到stable@kernel.org。 45 + - 在确认了补丁符合以上的规则后,将补丁发送到stable@vger.kernel.org。 46 46 - 如果补丁被接受到队列里,发送者会收到一个ACK回复,如果没有被接受,收 47 47 到的是NAK回复。回复需要几天的时间,这取决于开发者的时间安排。 48 48 - 被接受的补丁会被加到稳定版本队列里,等待其他开发者的审查。
-33
drivers/base/core.c
··· 614 614 } 615 615 EXPORT_SYMBOL_GPL(device_remove_bin_file); 616 616 617 - /** 618 - * device_schedule_callback_owner - helper to schedule a callback for a device 619 - * @dev: device. 620 - * @func: callback function to invoke later. 621 - * @owner: module owning the callback routine 622 - * 623 - * Attribute methods must not unregister themselves or their parent device 624 - * (which would amount to the same thing). Attempts to do so will deadlock, 625 - * since unregistration is mutually exclusive with driver callbacks. 626 - * 627 - * Instead methods can call this routine, which will attempt to allocate 628 - * and schedule a workqueue request to call back @func with @dev as its 629 - * argument in the workqueue's process context. @dev will be pinned until 630 - * @func returns. 631 - * 632 - * This routine is usually called via the inline device_schedule_callback(), 633 - * which automatically sets @owner to THIS_MODULE. 634 - * 635 - * Returns 0 if the request was submitted, -ENOMEM if storage could not 636 - * be allocated, -ENODEV if a reference to @owner isn't available. 637 - * 638 - * NOTE: This routine won't work if CONFIG_SYSFS isn't set! It uses an 639 - * underlying sysfs routine (since it is intended for use by attribute 640 - * methods), and if sysfs isn't available you'll get nothing but -ENOSYS. 641 - */ 642 - int device_schedule_callback_owner(struct device *dev, 643 - void (*func)(struct device *), struct module *owner) 644 - { 645 - return sysfs_schedule_callback(&dev->kobj, 646 - (void (*)(void *)) func, dev, owner); 647 - } 648 - EXPORT_SYMBOL_GPL(device_schedule_callback_owner); 649 - 650 617 static void klist_children_get(struct klist_node *n) 651 618 { 652 619 struct device_private *p = to_device_private_parent(n);
+2 -2
drivers/base/dd.c
··· 187 187 return; 188 188 } 189 189 190 - pr_debug("driver: '%s': %s: bound to device '%s'\n", dev_name(dev), 191 - __func__, dev->driver->name); 190 + pr_debug("driver: '%s': %s: bound to device '%s'\n", dev->driver->name, 191 + __func__, dev_name(dev)); 192 192 193 193 klist_add_tail(&dev->p->knode_driver, &dev->driver->p->klist_devices); 194 194
+1 -2
drivers/base/topology.c
··· 39 39 static ssize_t show_##name(struct device *dev, \ 40 40 struct device_attribute *attr, char *buf) \ 41 41 { \ 42 - unsigned int cpu = dev->id; \ 43 - return sprintf(buf, "%d\n", topology_##name(cpu)); \ 42 + return sprintf(buf, "%d\n", topology_##name(dev->id)); \ 44 43 } 45 44 46 45 #if defined(topology_thread_cpumask) || defined(topology_core_cpumask) || \
+10 -4
fs/kernfs/inode.c
··· 48 48 49 49 static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) 50 50 { 51 + static DEFINE_MUTEX(iattr_mutex); 52 + struct kernfs_iattrs *ret; 51 53 struct iattr *iattrs; 52 54 55 + mutex_lock(&iattr_mutex); 56 + 53 57 if (kn->iattr) 54 - return kn->iattr; 58 + goto out_unlock; 55 59 56 60 kn->iattr = kzalloc(sizeof(struct kernfs_iattrs), GFP_KERNEL); 57 61 if (!kn->iattr) 58 - return NULL; 62 + goto out_unlock; 59 63 iattrs = &kn->iattr->ia_iattr; 60 64 61 65 /* assign default attributes */ ··· 69 65 iattrs->ia_atime = iattrs->ia_mtime = iattrs->ia_ctime = CURRENT_TIME; 70 66 71 67 simple_xattrs_init(&kn->iattr->xattrs); 72 - 73 - return kn->iattr; 68 + out_unlock: 69 + ret = kn->iattr; 70 + mutex_unlock(&iattr_mutex); 71 + return ret; 74 72 } 75 73 76 74 static int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr)
+4 -1
fs/super.c
··· 800 800 801 801 static DEFINE_IDA(unnamed_dev_ida); 802 802 static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */ 803 - static int unnamed_dev_start = 0; /* don't bother trying below it */ 803 + /* Many userspace utilities consider an FSID of 0 invalid. 804 + * Always return at least 1 from get_anon_bdev. 805 + */ 806 + static int unnamed_dev_start = 1; 804 807 805 808 int get_anon_bdev(dev_t *p) 806 809 {
-92
fs/sysfs/file.c
··· 453 453 kernfs_remove_by_name(kobj->sd, attr->attr.name); 454 454 } 455 455 EXPORT_SYMBOL_GPL(sysfs_remove_bin_file); 456 - 457 - struct sysfs_schedule_callback_struct { 458 - struct list_head workq_list; 459 - struct kobject *kobj; 460 - void (*func)(void *); 461 - void *data; 462 - struct module *owner; 463 - struct work_struct work; 464 - }; 465 - 466 - static struct workqueue_struct *sysfs_workqueue; 467 - static DEFINE_MUTEX(sysfs_workq_mutex); 468 - static LIST_HEAD(sysfs_workq); 469 - static void sysfs_schedule_callback_work(struct work_struct *work) 470 - { 471 - struct sysfs_schedule_callback_struct *ss = container_of(work, 472 - struct sysfs_schedule_callback_struct, work); 473 - 474 - (ss->func)(ss->data); 475 - kobject_put(ss->kobj); 476 - module_put(ss->owner); 477 - mutex_lock(&sysfs_workq_mutex); 478 - list_del(&ss->workq_list); 479 - mutex_unlock(&sysfs_workq_mutex); 480 - kfree(ss); 481 - } 482 - 483 - /** 484 - * sysfs_schedule_callback - helper to schedule a callback for a kobject 485 - * @kobj: object we're acting for. 486 - * @func: callback function to invoke later. 487 - * @data: argument to pass to @func. 488 - * @owner: module owning the callback code 489 - * 490 - * sysfs attribute methods must not unregister themselves or their parent 491 - * kobject (which would amount to the same thing). Attempts to do so will 492 - * deadlock, since unregistration is mutually exclusive with driver 493 - * callbacks. 494 - * 495 - * Instead methods can call this routine, which will attempt to allocate 496 - * and schedule a workqueue request to call back @func with @data as its 497 - * argument in the workqueue's process context. @kobj will be pinned 498 - * until @func returns. 499 - * 500 - * Returns 0 if the request was submitted, -ENOMEM if storage could not 501 - * be allocated, -ENODEV if a reference to @owner isn't available, 502 - * -EAGAIN if a callback has already been scheduled for @kobj. 503 - */ 504 - int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *), 505 - void *data, struct module *owner) 506 - { 507 - struct sysfs_schedule_callback_struct *ss, *tmp; 508 - 509 - if (!try_module_get(owner)) 510 - return -ENODEV; 511 - 512 - mutex_lock(&sysfs_workq_mutex); 513 - list_for_each_entry_safe(ss, tmp, &sysfs_workq, workq_list) 514 - if (ss->kobj == kobj) { 515 - module_put(owner); 516 - mutex_unlock(&sysfs_workq_mutex); 517 - return -EAGAIN; 518 - } 519 - mutex_unlock(&sysfs_workq_mutex); 520 - 521 - if (sysfs_workqueue == NULL) { 522 - sysfs_workqueue = create_singlethread_workqueue("sysfsd"); 523 - if (sysfs_workqueue == NULL) { 524 - module_put(owner); 525 - return -ENOMEM; 526 - } 527 - } 528 - 529 - ss = kmalloc(sizeof(*ss), GFP_KERNEL); 530 - if (!ss) { 531 - module_put(owner); 532 - return -ENOMEM; 533 - } 534 - kobject_get(kobj); 535 - ss->kobj = kobj; 536 - ss->func = func; 537 - ss->data = data; 538 - ss->owner = owner; 539 - INIT_WORK(&ss->work, sysfs_schedule_callback_work); 540 - INIT_LIST_HEAD(&ss->workq_list); 541 - mutex_lock(&sysfs_workq_mutex); 542 - list_add_tail(&ss->workq_list, &sysfs_workq); 543 - mutex_unlock(&sysfs_workq_mutex); 544 - queue_work(sysfs_workqueue, &ss->work); 545 - return 0; 546 - } 547 - EXPORT_SYMBOL_GPL(sysfs_schedule_callback);
+1 -10
include/linux/device.h
··· 566 566 const struct bin_attribute *attr); 567 567 extern void device_remove_bin_file(struct device *dev, 568 568 const struct bin_attribute *attr); 569 - extern int device_schedule_callback_owner(struct device *dev, 570 - void (*func)(struct device *dev), struct module *owner); 571 - 572 - /* This is a macro to avoid include problems with THIS_MODULE */ 573 - #define device_schedule_callback(dev, func) \ 574 - device_schedule_callback_owner(dev, func, THIS_MODULE) 575 569 576 570 /* device resource management */ 577 571 typedef void (*dr_release_t)(struct device *dev, void *res); ··· 926 932 extern struct device *__root_device_register(const char *name, 927 933 struct module *owner); 928 934 929 - /* 930 - * This is a macro to avoid include problems with THIS_MODULE, 931 - * just as per what is done for device_schedule_callback() above. 932 - */ 935 + /* This is a macro to avoid include problems with THIS_MODULE */ 933 936 #define root_device_register(name) \ 934 937 __root_device_register(name, THIS_MODULE) 935 938
-9
include/linux/sysfs.h
··· 179 179 180 180 #ifdef CONFIG_SYSFS 181 181 182 - int sysfs_schedule_callback(struct kobject *kobj, void (*func)(void *), 183 - void *data, struct module *owner); 184 - 185 182 int __must_check sysfs_create_dir_ns(struct kobject *kobj, const void *ns); 186 183 void sysfs_remove_dir(struct kobject *kobj); 187 184 int __must_check sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name, ··· 251 254 } 252 255 253 256 #else /* CONFIG_SYSFS */ 254 - 255 - static inline int sysfs_schedule_callback(struct kobject *kobj, 256 - void (*func)(void *), void *data, struct module *owner) 257 - { 258 - return -ENOSYS; 259 - } 260 257 261 258 static inline int sysfs_create_dir_ns(struct kobject *kobj, const void *ns) 262 259 {