]> Git Repo - linux.git/commitdiff
Merge tag 'docs-4.12' of git://git.lwn.net/linux
authorLinus Torvalds <[email protected]>
Tue, 2 May 2017 17:21:17 +0000 (10:21 -0700)
committerLinus Torvalds <[email protected]>
Tue, 2 May 2017 17:21:17 +0000 (10:21 -0700)
Pull documentation update from Jonathan Corbet:
 "A reasonably busy cycle for documentation this time around. There is a
  new guide for user-space API documents, rather sparsely populated at
  the moment, but it's a start. Markus improved the infrastructure for
  converting diagrams. Mauro has converted much of the USB documentation
  over to RST. Plus the usual set of fixes, improvements, and tweaks.

  There's a bit more than the usual amount of reaching out of
  Documentation/ to fix comments elsewhere in the tree; I have acks for
  those where I could get them"

* tag 'docs-4.12' of git://git.lwn.net/linux: (74 commits)
  docs: Fix a couple typos
  docs: Fix a spelling error in vfio-mediated-device.txt
  docs: Fix a spelling error in ioctl-number.txt
  MAINTAINERS: update file entry for HSI subsystem
  Documentation: allow installing man pages to a user defined directory
  Doc/PM: Sync with intel_powerclamp code behavior
  zr364xx.rst: usb/devices is now at /sys/kernel/debug/
  usb.rst: move documentation from proc_usb_info.txt to USB ReST book
  convert philips.txt to ReST and add to media docs
  docs-rst: usb: update old usbfs-related documentation
  arm: Documentation: update a path name
  docs: process/4.Coding.rst: Fix a couple of document refs
  docs-rst: fix usb cross-references
  usb: gadget.h: be consistent at kernel doc macros
  usb: composite.h: fix two warnings when building docs
  usb: get rid of some ReST doc build errors
  usb.rst: get rid of some Sphinx errors
  usb/URB.txt: convert to ReST and update it
  usb/persist.txt: convert to ReST and add to driver-api book
  usb/hotplug.txt: convert to ReST and add to driver-api book
  ...

1  2 
Documentation/admin-guide/kernel-parameters.rst
MAINTAINERS
Makefile
block/genhd.c
lib/Kconfig.debug
mm/page_alloc.c
mm/vmalloc.c

index c74933ccf7c9f9d6446c3f4a450894faef375d8b,33b90e273489e335b5cb1dc04dd7987c3d68fe68..d76ab3907e2bd3b07cba39de90434f6e0490d0e7
@@@ -1,3 -1,5 +1,5 @@@
+ .. _kernelparameters:
  The kernel's command-line parameters
  ====================================
  
@@@ -86,6 -88,7 +88,6 @@@ parameter is applicable:
        APIC    APIC support is enabled.
        APM     Advanced Power Management support is enabled.
        ARM     ARM architecture is enabled.
 -      AVR32   AVR32 architecture is enabled.
        AX25    Appropriate AX.25 support is enabled.
        BLACKFIN Blackfin architecture is enabled.
        CLK     Common clock infrastructure is enabled.
@@@ -196,7 -199,7 +198,7 @@@ and is between 256 and 4096 characters
  
  Finally, the [KMG] suffix is commonly described after a number of kernel
  parameter values. These 'K', 'M', and 'G' letters represent the _binary_
- multipliers 'Kilo', 'Mega', and 'Giga', equalling 2^10, 2^20, and 2^30
+ multipliers 'Kilo', 'Mega', and 'Giga', equaling 2^10, 2^20, and 2^30
  bytes respectively. Such letter suffixes can also be entirely omitted:
  
  .. include:: kernel-parameters.txt
diff --combined MAINTAINERS
index 5f91365ebc0d8d0d91a5b896fc21582b89feabe7,8b2a6eddd79c6002ec567e92fd5a7db0b0f257c8..24f894eb2a7f8252ae5b599232dcd4e02b915e2f
@@@ -2327,6 -2327,21 +2327,6 @@@ S:     Maintaine
  F:    drivers/auxdisplay/
  F:    include/linux/cfag12864b.h
  
 -AVR32 ARCHITECTURE
 -M:    Haavard Skinnemoen <[email protected]>
 -M:    Hans-Christian Egtvedt <[email protected]>
 -W:    http://www.atmel.com/products/AVR32/
 -W:    http://mirror.egtvedt.no/avr32linux.org/
 -W:    http://avrfreaks.net/
 -S:    Maintained
 -F:    arch/avr32/
 -
 -AVR32/AT32AP MACHINE SUPPORT
 -M:    Haavard Skinnemoen <[email protected]>
 -M:    Hans-Christian Egtvedt <[email protected]>
 -S:    Maintained
 -F:    arch/avr32/mach-at32ap/
 -
  AX.25 NETWORK LAYER
  M:    Ralf Baechle <[email protected]>
  L:    [email protected]
@@@ -2529,14 -2544,6 +2529,14 @@@ F:    block
  F:    kernel/trace/blktrace.c
  F:    lib/sbitmap.c
  
 +BFQ I/O SCHEDULER
 +M:    Paolo Valente <[email protected]>
 +M:    Jens Axboe <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    block/bfq-*
 +F:    Documentation/block/bfq-iosched.txt
 +
  BLOCK2MTD DRIVER
  M:    Joern Engel <[email protected]>
  L:    [email protected]
@@@ -2578,26 -2585,12 +2578,26 @@@ F:   include/uapi/linux/if_bonding.
  
  BPF (Safe dynamic programs and tools)
  M:    Alexei Starovoitov <[email protected]>
 +M:    Daniel Borkmann <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
 +F:    arch/x86/net/bpf_jit*
 +F:    Documentation/networking/filter.txt
 +F:    include/linux/bpf*
 +F:    include/linux/filter.h
 +F:    include/uapi/linux/bpf*
 +F:    include/uapi/linux/filter.h
  F:    kernel/bpf/
 -F:    tools/testing/selftests/bpf/
 +F:    kernel/trace/bpf_trace.c
  F:    lib/test_bpf.c
 +F:    net/bpf/
 +F:    net/core/filter.c
 +F:    net/sched/act_bpf.c
 +F:    net/sched/cls_bpf.c
 +F:    samples/bpf/
 +F:    tools/net/bpf*
 +F:    tools/testing/selftests/bpf/
  
  BROADCOM B44 10/100 ETHERNET DRIVER
  M:    Michael Chan <[email protected]>
@@@ -3223,6 -3216,7 +3223,6 @@@ F:      drivers/platform/chrome
  
  CISCO VIC ETHERNET NIC DRIVER
  M:    Christian Benvenuti <[email protected]>
 -M:    Sujith Sankar <[email protected]>
  M:    Govindarajulu Varadarajan <[email protected]>
  M:    Neel Patel <[email protected]>
  S:    Supported
@@@ -3456,7 -3450,6 +3456,7 @@@ T:      git git://git.kernel.org/pub/scm/lin
  T:    git git://git.linaro.org/people/vireshk/linux.git (For ARM Updates)
  B:    https://bugzilla.kernel.org
  F:    Documentation/cpu-freq/
 +F:    Documentation/devicetree/bindings/cpufreq/
  F:    drivers/cpufreq/
  F:    include/linux/cpufreq.h
  F:    tools/testing/selftests/cpufreq/
@@@ -4125,13 -4118,14 +4125,13 @@@ F:   drivers/block/drbd
  F:    lib/lru_cache.c
  F:    Documentation/blockdev/drbd/
  
 -DRIVER CORE, KOBJECTS, DEBUGFS, KERNFS AND SYSFS
 +DRIVER CORE, KOBJECTS, DEBUGFS AND SYSFS
  M:    Greg Kroah-Hartman <[email protected]>
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
  S:    Supported
  F:    Documentation/kobject.txt
  F:    drivers/base/
  F:    fs/debugfs/
 -F:    fs/kernfs/
  F:    fs/sysfs/
  F:    include/linux/debugfs.h
  F:    include/linux/kobj*
@@@ -4701,7 -4695,6 +4701,7 @@@ L:      [email protected]
  L:    [email protected]
  S:    Supported
  F:    drivers/edac/octeon_edac*
 +F:    drivers/edac/thunderx_edac*
  
  EDAC-E752X
  M:    Mark Gross <[email protected]>
  S:    Maintained
  F:    drivers/edac/mpc85xx_edac.[ch]
  
 +EDAC-PND2
 +M:    Tony Luck <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/edac/pnd2_edac.[ch]
 +
  EDAC-PASEMI
  M:    Egor Martovetsky <[email protected]>
  L:    [email protected]
@@@ -4936,7 -4923,6 +4936,7 @@@ F:      include/linux/netfilter_bridge
  F:    net/bridge/
  
  ETHERNET PHY LIBRARY
 +M:    Andrew Lunn <[email protected]>
  M:    Florian Fainelli <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -5415,23 -5401,6 +5415,23 @@@ F:    fs/fuse
  F:    include/uapi/linux/fuse.h
  F:    Documentation/filesystems/fuse.txt
  
 +FUTEX SUBSYSTEM
 +M:    Thomas Gleixner <[email protected]>
 +M:    Ingo Molnar <[email protected]>
 +R:    Peter Zijlstra <[email protected]>
 +R:    Darren Hart <[email protected]>
 +L:    [email protected]
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git locking/core
 +S:    Maintained
 +F:    kernel/futex.c
 +F:    kernel/futex_compat.c
 +F:    include/asm-generic/futex.h
 +F:    include/linux/futex.h
 +F:    include/uapi/linux/futex.h
 +F:    tools/testing/selftests/futex/
 +F:    tools/perf/bench/futex*
 +F:    Documentation/*futex*
 +
  FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
  M:    Rik Faith <[email protected]>
  L:    [email protected]
@@@ -6036,7 -6005,7 +6036,7 @@@ M:      Sebastian Reichel <[email protected]
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git
  S:    Maintained
  F:    Documentation/ABI/testing/sysfs-bus-hsi
- F:    Documentation/device-drivers/serial-interfaces.rst
+ F:    Documentation/driver-api/hsi.rst
  F:    drivers/hsi/
  F:    include/linux/hsi/
  F:    include/uapi/linux/hsi/
@@@ -7115,9 -7084,9 +7115,9 @@@ S:      Maintaine
  F:    fs/autofs4/
  
  KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
 +M:    Masahiro Yamada <[email protected]>
  M:    Michal Marek <[email protected]>
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git for-next
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild.git rc-fixes
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git
  L:    [email protected]
  S:    Maintained
  F:    Documentation/kbuild/
@@@ -7201,7 -7170,6 +7201,7 @@@ S:      Supporte
  F:    Documentation/s390/kvm.txt
  F:    arch/s390/include/asm/kvm*
  F:    arch/s390/kvm/
 +F:    arch/s390/mm/gmap.c
  
  KERNEL VIRTUAL MACHINE (KVM) FOR ARM
  M:    Christoffer Dall <[email protected]>
@@@ -7235,14 -7203,6 +7235,14 @@@ F:    arch/mips/include/uapi/asm/kvm
  F:    arch/mips/include/asm/kvm*
  F:    arch/mips/kvm/
  
 +KERNFS
 +M:    Greg Kroah-Hartman <[email protected]>
 +M:    Tejun Heo <[email protected]>
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git
 +S:    Supported
 +F:    include/linux/kernfs.h
 +F:    fs/kernfs/
 +
  KEXEC
  M:    Eric Biederman <[email protected]>
  W:    http://kernel.org/pub/linux/utils/kernel/kexec/
@@@ -7814,6 -7774,13 +7814,6 @@@ F:     include/net/mac80211.
  F:    net/mac80211/
  F:    drivers/net/wireless/mac80211_hwsim.[ch]
  
 -MACVLAN DRIVER
 -M:    Patrick McHardy <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    drivers/net/macvlan.c
 -F:    include/linux/if_macvlan.h
 -
  MAILBOX API
  M:    Jassi Brar <[email protected]>
  L:    [email protected]
@@@ -7886,8 -7853,6 +7886,8 @@@ F:      drivers/net/ethernet/marvell/mvneta.
  MARVELL MWIFIEX WIRELESS DRIVER
  M:    Amitkumar Karwar <[email protected]>
  M:    Nishant Sarmukadam <[email protected]>
 +M:    Ganapathi Bhat <[email protected]>
 +M:    Xinming Hu <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    drivers/net/wireless/marvell/mwifiex/
@@@ -8342,6 -8307,7 +8342,6 @@@ M:      Richard Leitner <richard.leitner@ski
  L:    [email protected]
  S:    Maintained
  F:    drivers/usb/misc/usb251xb.c
 -F:    include/linux/platform_data/usb251xb.h
  F:    Documentation/devicetree/bindings/usb/usb251xb.txt
  
  MICROSOFT SURFACE PRO 3 BUTTON DRIVER
@@@ -8788,7 -8754,6 +8788,7 @@@ W:      http://www.linuxfoundation.org/en/Ne
  Q:    http://patchwork.ozlabs.org/project/netdev/list/
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net.git
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git
 +B:    mailto:[email protected]
  S:    Maintained
  F:    net/
  F:    include/net/
@@@ -10850,7 -10815,6 +10850,7 @@@ F:   drivers/s390/block/dasd
  F:    block/partitions/ibm.c
  
  S390 NETWORK DRIVERS
 +M:    Julian Wiedmann <[email protected]>
  M:    Ursula Braun <[email protected]>
  L:    [email protected]
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -10881,7 -10845,6 +10881,7 @@@ S:   Supporte
  F:    drivers/s390/scsi/zfcp_*
  
  S390 IUCV NETWORK LAYER
 +M:    Julian Wiedmann <[email protected]>
  M:    Ursula Braun <[email protected]>
  L:    [email protected]
  W:    http://www.ibm.com/developerworks/linux/linux390/
@@@ -10897,16 -10860,6 +10897,16 @@@ W: http://www.ibm.com/developerworks/li
  S:    Supported
  F:    drivers/iommu/s390-iommu.c
  
 +S390 VFIO-CCW DRIVER
 +M:    Cornelia Huck <[email protected]>
 +M:    Dong Jia Shi <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/s390/cio/vfio_ccw*
 +F:    Documentation/s390/vfio-ccw.txt
 +F:    include/uapi/linux/vfio_ccw.h
 +
  S3C24XX SD/MMC Driver
  M:    Ben Dooks <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -11147,7 -11100,6 +11147,7 @@@ F:   drivers/power/supply/bq27xxx_battery
  TIMEKEEPING, CLOCKSOURCE CORE, NTP, ALARMTIMER
  M:    John Stultz <[email protected]>
  M:    Thomas Gleixner <[email protected]>
 +R:    Stephen Boyd <[email protected]>
  L:    [email protected]
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers/core
  S:    Supported
@@@ -12503,6 -12455,7 +12503,6 @@@ F:   drivers/clk/ti
  F:    include/linux/clk/ti.h
  
  TI ETHERNET SWITCH DRIVER (CPSW)
 -M:    Mugunthan V N <[email protected]>
  R:    Grygorii Strashko <[email protected]>
  L:    [email protected]
  L:    [email protected]
@@@ -13343,7 -13296,7 +13343,7 @@@ F:   drivers/virtio
  F:    tools/virtio/
  F:    drivers/net/virtio_net.c
  F:    drivers/block/virtio_blk.c
 -F:    include/linux/virtio_*.h
 +F:    include/linux/virtio*.h
  F:    include/uapi/linux/virtio_*.h
  F:    drivers/crypto/virtio/
  
@@@ -13431,6 -13384,14 +13431,6 @@@ W:  https://linuxtv.or
  S:    Maintained
  F:    drivers/media/platform/vivid/*
  
 -VLAN (802.1Q)
 -M:    Patrick McHardy <[email protected]>
 -L:    [email protected]
 -S:    Maintained
 -F:    drivers/net/macvlan.c
 -F:    include/linux/if_*vlan.h
 -F:    net/8021q/
 -
  VLYNQ BUS
  M:    Florian Fainelli <[email protected]>
  L:    [email protected] (subscribers-only)
diff --combined Makefile
index 4b074a904106fa91e75d52c6ea459a2b084acc34,0e66ca4562a13fb5c8448560a901d004d24d0d62..43534cca1de92262a68cb8aebe686c45067a0330
+++ b/Makefile
@@@ -1,7 -1,7 +1,7 @@@
  VERSION = 4
  PATCHLEVEL = 11
  SUBLEVEL = 0
 -EXTRAVERSION = -rc1
 +EXTRAVERSION =
  NAME = Fearless Coyote
  
  # *DOCUMENTATION*
@@@ -172,8 -172,8 +172,8 @@@ MAKEFLAGS += --no-print-director
  # Use 'make C=2' to enable checking of *all* source files, regardless
  # of whether they are re-compiled or not.
  #
- # See the file "Documentation/sparse.txt" for more details, including
- # where to get the "sparse" utility.
+ # See the file "Documentation/dev-tools/sparse.rst" for more details,
+ # including where to get the "sparse" utility.
  
  ifeq ("$(origin C)", "command line")
    KBUILD_CHECKSRC = $(C)
@@@ -372,7 -372,7 +372,7 @@@ LDFLAGS_MODULE  
  CFLAGS_KERNEL =
  AFLAGS_KERNEL =
  LDFLAGS_vmlinux =
 -CFLAGS_GCOV   = -fprofile-arcs -ftest-coverage -fno-tree-loop-im -Wno-maybe-uninitialized
 +CFLAGS_GCOV   := -fprofile-arcs -ftest-coverage -fno-tree-loop-im $(call cc-disable-warning,maybe-uninitialized,)
  CFLAGS_KCOV   := $(call cc-option,-fsanitize-coverage=trace-pc,)
  
  
@@@ -653,12 -653,6 +653,12 @@@ KBUILD_CFLAGS += $(call cc-ifversion, -
  # Tell gcc to never replace conditional load with a non-conditional one
  KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0)
  
 +# check for 'asm goto'
 +ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
 +      KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
 +      KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
 +endif
 +
  include scripts/Makefile.gcc-plugins
  
  ifdef CONFIG_READABLE_ASM
@@@ -804,6 -798,12 +804,6 @@@ KBUILD_CFLAGS   += $(call cc-option,-We
  # use the deterministic mode of AR if available
  KBUILD_ARFLAGS := $(call ar-option,D)
  
 -# check for 'asm goto'
 -ifeq ($(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-goto.sh $(CC) $(KBUILD_CFLAGS)), y)
 -      KBUILD_CFLAGS += -DCC_HAVE_ASM_GOTO
 -      KBUILD_AFLAGS += -DCC_HAVE_ASM_GOTO
 -endif
 -
  include scripts/Makefile.kasan
  include scripts/Makefile.extrawarn
  include scripts/Makefile.ubsan
diff --combined block/genhd.c
index 9a2d01abfa3b453058dd1c44f36cf4647757d7c4,a53bfd19a0ec037f19ece37662ac2f28d2c5aedd..d252d29fe837322142d1ec26270a5eea861dd092
@@@ -271,16 -271,17 +271,17 @@@ void blkdev_show(struct seq_file *seqf
  /**
   * register_blkdev - register a new block device
   *
-  * @major: the requested major device number [1..255]. If @major=0, try to
+  * @major: the requested major device number [1..255]. If @major = 0, try to
   *         allocate any unused major number.
   * @name: the name of the new block device as a zero terminated string
   *
   * The @name must be unique within the system.
   *
-  * The return value depends on the @major input parameter.
+  * The return value depends on the @major input parameter:
+  *
   *  - if a major device number was requested in range [1..255] then the
   *    function returns zero on success, or a negative error code
-  *  - if any unused major number was requested with @major=0 parameter
+  *  - if any unused major number was requested with @major = 0 parameter
   *    then the return value is the allocated major number in range
   *    [1..255] or a negative error code otherwise
   */
@@@ -572,6 -573,20 +573,6 @@@ exit
        disk_part_iter_exit(&piter);
  }
  
 -void put_disk_devt(struct disk_devt *disk_devt)
 -{
 -      if (disk_devt && atomic_dec_and_test(&disk_devt->count))
 -              disk_devt->release(disk_devt);
 -}
 -EXPORT_SYMBOL(put_disk_devt);
 -
 -void get_disk_devt(struct disk_devt *disk_devt)
 -{
 -      if (disk_devt)
 -              atomic_inc(&disk_devt->count);
 -}
 -EXPORT_SYMBOL(get_disk_devt);
 -
  /**
   * device_add_disk - add partitioning information to kernel list
   * @parent: parent device for the disk
@@@ -612,6 -627,13 +613,6 @@@ void device_add_disk(struct device *par
  
        disk_alloc_events(disk);
  
 -      /*
 -       * Take a reference on the devt and assign it to queue since it
 -       * must not be reallocated while the bdi is registered
 -       */
 -      disk->queue->disk_devt = disk->disk_devt;
 -      get_disk_devt(disk->disk_devt);
 -
        /* Register BDI before referencing it from bdev */
        bdi = disk->queue->backing_dev_info;
        bdi_register_owner(bdi, disk_to_dev(disk));
@@@ -660,16 -682,12 +661,16 @@@ void del_gendisk(struct gendisk *disk
        disk->flags &= ~GENHD_FL_UP;
  
        sysfs_remove_link(&disk_to_dev(disk)->kobj, "bdi");
 -      /*
 -       * Unregister bdi before releasing device numbers (as they can get
 -       * reused and we'd get clashes in sysfs).
 -       */
 -      bdi_unregister(disk->queue->backing_dev_info);
 -      blk_unregister_queue(disk);
 +      if (disk->queue) {
 +              /*
 +               * Unregister bdi before releasing device numbers (as they can
 +               * get reused and we'd get clashes in sysfs).
 +               */
 +              bdi_unregister(disk->queue->backing_dev_info);
 +              blk_unregister_queue(disk);
 +      } else {
 +              WARN_ON(1);
 +      }
        blk_unregister_region(disk_devt(disk), disk->minors);
  
        part_stat_set_all(&disk->part0, 0);
@@@ -1060,19 -1078,8 +1061,19 @@@ static struct attribute *disk_attrs[] 
        NULL
  };
  
 +static umode_t disk_visible(struct kobject *kobj, struct attribute *a, int n)
 +{
 +      struct device *dev = container_of(kobj, typeof(*dev), kobj);
 +      struct gendisk *disk = dev_to_disk(dev);
 +
 +      if (a == &dev_attr_badblocks.attr && !disk->bb)
 +              return 0;
 +      return a->mode;
 +}
 +
  static struct attribute_group disk_attr_group = {
        .attrs = disk_attrs,
 +      .is_visible = disk_visible,
  };
  
  static const struct attribute_group *disk_attr_groups[] = {
@@@ -1363,7 -1370,7 +1364,7 @@@ struct kobject *get_disk(struct gendis
        owner = disk->fops->owner;
        if (owner && !try_module_get(owner))
                return NULL;
 -      kobj = kobject_get(&disk_to_dev(disk)->kobj);
 +      kobj = kobject_get_unless_zero(&disk_to_dev(disk)->kobj);
        if (kobj == NULL) {
                module_put(owner);
                return NULL;
diff --combined lib/Kconfig.debug
index 2598a32d2db188635c873d27b8e94d8a82a9b904,22c75bcfb49882b5353200c83a96d01f7d75b1df..e2a617e09ab78c33e7512c5d6e09d477e6a193e8
@@@ -130,7 -130,8 +130,8 @@@ config DYNAMIC_DEBU
                nullarbor:~ # echo -n 'func svc_process -p' >
                                                <debugfs>/dynamic_debug/control
  
-         See Documentation/dynamic-debug-howto.txt for additional information.
+         See Documentation/admin-guide/dynamic-debug-howto.rst for additional
+         information.
  
  endmenu # "printk and dmesg options"
  
@@@ -356,7 -357,7 +357,7 @@@ config FRAME_POINTE
        bool "Compile the kernel with frame pointers"
        depends on DEBUG_KERNEL && \
                (CRIS || M68K || FRV || UML || \
 -               AVR32 || SUPERH || BLACKFIN || MN10300 || METAG) || \
 +               SUPERH || BLACKFIN || MN10300 || METAG) || \
                ARCH_WANT_FRAME_POINTERS
        default y if (DEBUG_INFO && UML) || ARCH_WANT_FRAME_POINTERS
        help
@@@ -404,8 -405,8 +405,8 @@@ config MAGIC_SYSR
          by pressing various keys while holding SysRq (Alt+PrintScreen). It
          also works on a serial console (on PC hardware at least), if you
          send a BREAK and then within 5 seconds a command keypress. The
-         keys are documented in <file:Documentation/sysrq.txt>. Don't say Y
-         unless you really know what this hack does.
+         keys are documented in <file:Documentation/admin-guide/sysrq.rst>.
+         Don't say Y unless you really know what this hack does.
  
  config MAGIC_SYSRQ_DEFAULT_ENABLE
        hex "Enable magic SysRq key functions by default"
        help
          Specifies which SysRq key functions are enabled by default.
          This may be set to 1 or 0 to enable or disable them all, or
-         to a bitmask as described in Documentation/sysrq.txt.
+         to a bitmask as described in Documentation/admin-guide/sysrq.rst.
  
  config MAGIC_SYSRQ_SERIAL
        bool "Enable magic SysRq key over serial"
@@@ -1103,6 -1104,9 +1104,6 @@@ config PROVE_LOCKIN
  
         For more details, see Documentation/locking/lockdep-design.txt.
  
 -config PROVE_LOCKING_SMALL
 -      bool
 -
  config LOCKDEP
        bool
        depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
        select KALLSYMS
        select KALLSYMS_ALL
  
 +config LOCKDEP_SMALL
 +      bool
 +
  config LOCK_STAT
        bool "Lock usage statistics"
        depends on DEBUG_KERNEL && TRACE_IRQFLAGS_SUPPORT && STACKTRACE_SUPPORT && LOCKDEP_SUPPORT
diff --combined mm/page_alloc.c
index 07efbc3a86567676986105005f77c64f9f99597a,c1b68edaf106c0e3773b849cd7cdb7cc7f8b1feb..bd01501efab9141f9071dc741abf17719de7b027
@@@ -873,8 -873,7 +873,8 @@@ done_merging
                higher_page = page + (combined_pfn - pfn);
                buddy_pfn = __find_buddy_pfn(combined_pfn, order + 1);
                higher_buddy = higher_page + (buddy_pfn - combined_pfn);
 -              if (page_is_buddy(higher_page, higher_buddy, order + 1)) {
 +              if (pfn_valid_within(buddy_pfn) &&
 +                  page_is_buddy(higher_page, higher_buddy, order + 1)) {
                        list_add_tail(&page->lru,
                                &zone->free_area[order].free_list[migratetype]);
                        goto out;
@@@ -1090,10 -1089,10 +1090,10 @@@ static void free_pcppages_bulk(struct z
  {
        int migratetype = 0;
        int batch_free = 0;
 -      unsigned long nr_scanned, flags;
 +      unsigned long nr_scanned;
        bool isolated_pageblocks;
  
 -      spin_lock_irqsave(&zone->lock, flags);
 +      spin_lock(&zone->lock);
        isolated_pageblocks = has_isolate_pageblock(zone);
        nr_scanned = node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED);
        if (nr_scanned)
                        trace_mm_page_pcpu_drain(page, 0, mt);
                } while (--count && --batch_free && !list_empty(list));
        }
 -      spin_unlock_irqrestore(&zone->lock, flags);
 +      spin_unlock(&zone->lock);
  }
  
  static void free_one_page(struct zone *zone,
                                unsigned int order,
                                int migratetype)
  {
 -      unsigned long nr_scanned, flags;
 -      spin_lock_irqsave(&zone->lock, flags);
 -      __count_vm_events(PGFREE, 1 << order);
 +      unsigned long nr_scanned;
 +      spin_lock(&zone->lock);
        nr_scanned = node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED);
        if (nr_scanned)
                __mod_node_page_state(zone->zone_pgdat, NR_PAGES_SCANNED, -nr_scanned);
                migratetype = get_pfnblock_migratetype(page, pfn);
        }
        __free_one_page(page, pfn, zone, order, migratetype);
 -      spin_unlock_irqrestore(&zone->lock, flags);
 +      spin_unlock(&zone->lock);
  }
  
  static void __meminit __init_single_page(struct page *page, unsigned long pfn,
@@@ -1239,7 -1239,6 +1239,7 @@@ void __meminit reserve_bootmem_region(p
  
  static void __free_pages_ok(struct page *page, unsigned int order)
  {
 +      unsigned long flags;
        int migratetype;
        unsigned long pfn = page_to_pfn(page);
  
                return;
  
        migratetype = get_pfnblock_migratetype(page, pfn);
 +      local_irq_save(flags);
 +      __count_vm_events(PGFREE, 1 << order);
        free_one_page(page_zone(page), page, pfn, order, migratetype);
 +      local_irq_restore(flags);
  }
  
  static void __init __free_pages_boot_core(struct page *page, unsigned int order)
@@@ -2222,8 -2218,9 +2222,8 @@@ static int rmqueue_bulk(struct zone *zo
                        int migratetype, bool cold)
  {
        int i, alloced = 0;
 -      unsigned long flags;
  
 -      spin_lock_irqsave(&zone->lock, flags);
 +      spin_lock(&zone->lock);
        for (i = 0; i < count; ++i) {
                struct page *page = __rmqueue(zone, order, migratetype);
                if (unlikely(page == NULL))
         * pages added to the pcp list.
         */
        __mod_zone_page_state(zone, NR_FREE_PAGES, -(i << order));
 -      spin_unlock_irqrestore(&zone->lock, flags);
 +      spin_unlock(&zone->lock);
        return alloced;
  }
  
@@@ -2375,13 -2372,6 +2375,13 @@@ void drain_all_pages(struct zone *zone
         */
        static cpumask_t cpus_with_pcps;
  
 +      /*
 +       * Make sure nobody triggers this path before mm_percpu_wq is fully
 +       * initialized.
 +       */
 +      if (WARN_ON_ONCE(!mm_percpu_wq))
 +              return;
 +
        /* Workqueues cannot recurse */
        if (current->flags & PF_WQ_WORKER)
                return;
        for_each_cpu(cpu, &cpus_with_pcps) {
                struct work_struct *work = per_cpu_ptr(&pcpu_drain, cpu);
                INIT_WORK(work, drain_local_pages_wq);
 -              schedule_work_on(cpu, work);
 +              queue_work_on(cpu, mm_percpu_wq, work);
        }
        for_each_cpu(cpu, &cpus_with_pcps)
                flush_work(per_cpu_ptr(&pcpu_drain, cpu));
@@@ -2487,17 -2477,20 +2487,17 @@@ void free_hot_cold_page(struct page *pa
  {
        struct zone *zone = page_zone(page);
        struct per_cpu_pages *pcp;
 +      unsigned long flags;
        unsigned long pfn = page_to_pfn(page);
        int migratetype;
  
 -      if (in_interrupt()) {
 -              __free_pages_ok(page, 0);
 -              return;
 -      }
 -
        if (!free_pcp_prepare(page))
                return;
  
        migratetype = get_pfnblock_migratetype(page, pfn);
        set_pcppage_migratetype(page, migratetype);
 -      preempt_disable();
 +      local_irq_save(flags);
 +      __count_vm_event(PGFREE);
  
        /*
         * We only track unmovable, reclaimable and movable on pcp lists.
                migratetype = MIGRATE_MOVABLE;
        }
  
 -      __count_vm_event(PGFREE);
        pcp = &this_cpu_ptr(zone->pageset)->pcp;
        if (!cold)
                list_add(&page->lru, &pcp->lists[migratetype]);
        }
  
  out:
 -      preempt_enable();
 +      local_irq_restore(flags);
  }
  
  /*
@@@ -2652,6 -2646,8 +2652,6 @@@ static struct page *__rmqueue_pcplist(s
  {
        struct page *page;
  
 -      VM_BUG_ON(in_interrupt());
 -
        do {
                if (list_empty(list)) {
                        pcp->count += rmqueue_bulk(zone, 0,
@@@ -2682,9 -2678,8 +2682,9 @@@ static struct page *rmqueue_pcplist(str
        struct list_head *list;
        bool cold = ((gfp_flags & __GFP_COLD) != 0);
        struct page *page;
 +      unsigned long flags;
  
 -      preempt_disable();
 +      local_irq_save(flags);
        pcp = &this_cpu_ptr(zone->pageset)->pcp;
        list = &pcp->lists[migratetype];
        page = __rmqueue_pcplist(zone,  migratetype, cold, pcp, list);
                __count_zid_vm_events(PGALLOC, page_zonenum(page), 1 << order);
                zone_statistics(preferred_zone, zone);
        }
 -      preempt_enable();
 +      local_irq_restore(flags);
        return page;
  }
  
@@@ -2708,7 -2703,7 +2708,7 @@@ struct page *rmqueue(struct zone *prefe
        unsigned long flags;
        struct page *page;
  
 -      if (likely(order == 0) && !in_interrupt()) {
 +      if (likely(order == 0)) {
                page = rmqueue_pcplist(preferred_zone, zone, order,
                                gfp_flags, migratetype);
                goto out;
@@@ -4247,7 -4242,8 +4247,8 @@@ EXPORT_SYMBOL(free_pages_exact)
   * nr_free_zone_pages() counts the number of counts pages which are beyond the
   * high watermark within all zones at or below a given zone index.  For each
   * zone, the number of pages is calculated as:
-  *     managed_pages - high_pages
+  *
+  *     nr_free_zone_pages = managed_pages - high_pages
   */
  static unsigned long nr_free_zone_pages(int offset)
  {
@@@ -4523,13 -4519,13 +4524,13 @@@ void show_free_areas(unsigned int filte
                        K(node_page_state(pgdat, NR_FILE_MAPPED)),
                        K(node_page_state(pgdat, NR_FILE_DIRTY)),
                        K(node_page_state(pgdat, NR_WRITEBACK)),
 +                      K(node_page_state(pgdat, NR_SHMEM)),
  #ifdef CONFIG_TRANSPARENT_HUGEPAGE
                        K(node_page_state(pgdat, NR_SHMEM_THPS) * HPAGE_PMD_NR),
                        K(node_page_state(pgdat, NR_SHMEM_PMDMAPPED)
                                        * HPAGE_PMD_NR),
                        K(node_page_state(pgdat, NR_ANON_THPS) * HPAGE_PMD_NR),
  #endif
 -                      K(node_page_state(pgdat, NR_SHMEM)),
                        K(node_page_state(pgdat, NR_WRITEBACK_TEMP)),
                        K(node_page_state(pgdat, NR_UNSTABLE_NFS)),
                        node_page_state(pgdat, NR_PAGES_SCANNED),
diff --combined mm/vmalloc.c
index 0b057628a7ba5c45d722710082ce32df3f7e8e13,c24db06f15c4cd337b2c06b620f42cd77c3d79ff..b52aeed3f58eb735709578b7c557dad1fe8403e0
@@@ -86,12 -86,12 +86,12 @@@ static void vunmap_pmd_range(pud_t *pud
        } while (pmd++, addr = next, addr != end);
  }
  
 -static void vunmap_pud_range(pgd_t *pgd, unsigned long addr, unsigned long end)
 +static void vunmap_pud_range(p4d_t *p4d, unsigned long addr, unsigned long end)
  {
        pud_t *pud;
        unsigned long next;
  
 -      pud = pud_offset(pgd, addr);
 +      pud = pud_offset(p4d, addr);
        do {
                next = pud_addr_end(addr, end);
                if (pud_clear_huge(pud))
        } while (pud++, addr = next, addr != end);
  }
  
 +static void vunmap_p4d_range(pgd_t *pgd, unsigned long addr, unsigned long end)
 +{
 +      p4d_t *p4d;
 +      unsigned long next;
 +
 +      p4d = p4d_offset(pgd, addr);
 +      do {
 +              next = p4d_addr_end(addr, end);
 +              if (p4d_clear_huge(p4d))
 +                      continue;
 +              if (p4d_none_or_clear_bad(p4d))
 +                      continue;
 +              vunmap_pud_range(p4d, addr, next);
 +      } while (p4d++, addr = next, addr != end);
 +}
 +
  static void vunmap_page_range(unsigned long addr, unsigned long end)
  {
        pgd_t *pgd;
                next = pgd_addr_end(addr, end);
                if (pgd_none_or_clear_bad(pgd))
                        continue;
 -              vunmap_pud_range(pgd, addr, next);
 +              vunmap_p4d_range(pgd, addr, next);
        } while (pgd++, addr = next, addr != end);
  }
  
@@@ -176,13 -160,13 +176,13 @@@ static int vmap_pmd_range(pud_t *pud, u
        return 0;
  }
  
 -static int vmap_pud_range(pgd_t *pgd, unsigned long addr,
 +static int vmap_pud_range(p4d_t *p4d, unsigned long addr,
                unsigned long end, pgprot_t prot, struct page **pages, int *nr)
  {
        pud_t *pud;
        unsigned long next;
  
 -      pud = pud_alloc(&init_mm, pgd, addr);
 +      pud = pud_alloc(&init_mm, p4d, addr);
        if (!pud)
                return -ENOMEM;
        do {
        return 0;
  }
  
 +static int vmap_p4d_range(pgd_t *pgd, unsigned long addr,
 +              unsigned long end, pgprot_t prot, struct page **pages, int *nr)
 +{
 +      p4d_t *p4d;
 +      unsigned long next;
 +
 +      p4d = p4d_alloc(&init_mm, pgd, addr);
 +      if (!p4d)
 +              return -ENOMEM;
 +      do {
 +              next = p4d_addr_end(addr, end);
 +              if (vmap_pud_range(p4d, addr, next, prot, pages, nr))
 +                      return -ENOMEM;
 +      } while (p4d++, addr = next, addr != end);
 +      return 0;
 +}
 +
  /*
   * Set up page tables in kva (addr, end). The ptes shall have prot "prot", and
   * will have pfns corresponding to the "pages" array.
@@@ -229,7 -196,7 +229,7 @@@ static int vmap_page_range_noflush(unsi
        pgd = pgd_offset_k(addr);
        do {
                next = pgd_addr_end(addr, end);
 -              err = vmap_pud_range(pgd, addr, next, prot, pages, &nr);
 +              err = vmap_p4d_range(pgd, addr, next, prot, pages, &nr);
                if (err)
                        return err;
        } while (pgd++, addr = next, addr != end);
@@@ -270,10 -237,6 +270,10 @@@ struct page *vmalloc_to_page(const voi
        unsigned long addr = (unsigned long) vmalloc_addr;
        struct page *page = NULL;
        pgd_t *pgd = pgd_offset_k(addr);
 +      p4d_t *p4d;
 +      pud_t *pud;
 +      pmd_t *pmd;
 +      pte_t *ptep, pte;
  
        /*
         * XXX we might need to change this if we add VIRTUAL_BUG_ON for
         */
        VIRTUAL_BUG_ON(!is_vmalloc_or_module_addr(vmalloc_addr));
  
 -      if (!pgd_none(*pgd)) {
 -              pud_t *pud = pud_offset(pgd, addr);
 -              if (!pud_none(*pud)) {
 -                      pmd_t *pmd = pmd_offset(pud, addr);
 -                      if (!pmd_none(*pmd)) {
 -                              pte_t *ptep, pte;
 -
 -                              ptep = pte_offset_map(pmd, addr);
 -                              pte = *ptep;
 -                              if (pte_present(pte))
 -                                      page = pte_page(pte);
 -                              pte_unmap(ptep);
 -                      }
 -              }
 -      }
 +      if (pgd_none(*pgd))
 +              return NULL;
 +      p4d = p4d_offset(pgd, addr);
 +      if (p4d_none(*p4d))
 +              return NULL;
 +      pud = pud_offset(p4d, addr);
 +      if (pud_none(*pud))
 +              return NULL;
 +      pmd = pmd_offset(pud, addr);
 +      if (pmd_none(*pmd))
 +              return NULL;
 +
 +      ptep = pte_offset_map(pmd, addr);
 +      pte = *ptep;
 +      if (pte_present(pte))
 +              page = pte_page(pte);
 +      pte_unmap(ptep);
        return page;
  }
  EXPORT_SYMBOL(vmalloc_to_page);
@@@ -1579,7 -1540,7 +1579,7 @@@ void vfree_atomic(const void *addr
   *    have CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG, but making the calling
   *    conventions for vfree() arch-depenedent would be a really bad idea)
   *
-  *    NOTE: assumes that the object at *addr has a size >= sizeof(llist_node)
+  *    NOTE: assumes that the object at @addr has a size >= sizeof(llist_node)
   */
  void vfree(const void *addr)
  {
@@@ -1683,7 -1644,7 +1683,7 @@@ static void *__vmalloc_area_node(struc
  
                if (fatal_signal_pending(current)) {
                        area->nr_pages = i;
 -                      goto fail;
 +                      goto fail_no_warn;
                }
  
                if (node == NUMA_NO_NODE)
@@@ -1709,7 -1670,6 +1709,7 @@@ fail
        warn_alloc(gfp_mask, NULL,
                          "vmalloc: allocation failure, allocated %ld of %ld bytes",
                          (area->nr_pages*PAGE_SIZE), area->size);
 +fail_no_warn:
        vfree(area->addr);
        return NULL;
  }
This page took 0.211007 seconds and 4 git commands to generate.