diff options
| -rw-r--r-- | Documentation/ABI/testing/sysfs-kernel-mm-swap | 10 | ||||
| -rw-r--r-- | drivers/base/node.c | 12 | ||||
| -rw-r--r-- | drivers/tty/tty_ldisc.c | 11 | ||||
| -rw-r--r-- | fs/binfmt_misc.c | 2 | ||||
| -rw-r--r-- | fs/block_dev.c | 6 | ||||
| -rw-r--r-- | fs/mpage.c | 14 | ||||
| -rw-r--r-- | include/linux/buffer_head.h | 1 | ||||
| -rw-r--r-- | include/linux/kernel.h | 90 | ||||
| -rw-r--r-- | include/linux/of.h | 10 | ||||
| -rw-r--r-- | include/linux/thread_info.h | 2 | ||||
| -rw-r--r-- | kernel/fork.c | 4 | ||||
| -rw-r--r-- | lib/Kconfig.debug | 143 | ||||
| -rw-r--r-- | mm/cma.c | 2 | ||||
| -rw-r--r-- | mm/madvise.c | 7 | ||||
| -rw-r--r-- | mm/mempolicy.c | 7 | ||||
| -rw-r--r-- | mm/migrate.c | 3 | ||||
| -rw-r--r-- | mm/page_vma_mapped.c | 28 | ||||
| -rw-r--r-- | mm/swap_state.c | 41 | ||||
| -rw-r--r-- | mm/vmalloc.c | 6 | ||||
| -rw-r--r-- | scripts/kallsyms.c | 2 | ||||
| -rw-r--r-- | tools/testing/selftests/vm/userfaultfd.c | 25 |
21 files changed, 245 insertions, 181 deletions
diff --git a/Documentation/ABI/testing/sysfs-kernel-mm-swap b/Documentation/ABI/testing/sysfs-kernel-mm-swap index 587db52084c7..94672016c268 100644 --- a/Documentation/ABI/testing/sysfs-kernel-mm-swap +++ b/Documentation/ABI/testing/sysfs-kernel-mm-swap | |||
| @@ -14,13 +14,3 @@ Description: Enable/disable VMA based swap readahead. | |||
| 14 | still used for tmpfs etc. other users. If set to | 14 | still used for tmpfs etc. other users. If set to |
| 15 | false, the global swap readahead algorithm will be | 15 | false, the global swap readahead algorithm will be |
| 16 | used for all swappable pages. | 16 | used for all swappable pages. |
| 17 | |||
| 18 | What: /sys/kernel/mm/swap/vma_ra_max_order | ||
| 19 | Date: August 2017 | ||
| 20 | Contact: Linux memory management mailing list <linux-mm@kvack.org> | ||
| 21 | Description: The max readahead size in order for VMA based swap readahead | ||
| 22 | |||
| 23 | VMA based swap readahead algorithm will readahead at | ||
| 24 | most 1 << max_order pages for each readahead. The | ||
| 25 | real readahead size for each readahead will be scaled | ||
| 26 | according to the estimation algorithm. | ||
diff --git a/drivers/base/node.c b/drivers/base/node.c index 3855902f2c5b..aae2402f3791 100644 --- a/drivers/base/node.c +++ b/drivers/base/node.c | |||
| @@ -27,13 +27,21 @@ static struct bus_type node_subsys = { | |||
| 27 | 27 | ||
| 28 | static ssize_t node_read_cpumap(struct device *dev, bool list, char *buf) | 28 | static ssize_t node_read_cpumap(struct device *dev, bool list, char *buf) |
| 29 | { | 29 | { |
| 30 | ssize_t n; | ||
| 31 | cpumask_var_t mask; | ||
| 30 | struct node *node_dev = to_node(dev); | 32 | struct node *node_dev = to_node(dev); |
| 31 | const struct cpumask *mask = cpumask_of_node(node_dev->dev.id); | ||
| 32 | 33 | ||
| 33 | /* 2008/04/07: buf currently PAGE_SIZE, need 9 chars per 32 bits. */ | 34 | /* 2008/04/07: buf currently PAGE_SIZE, need 9 chars per 32 bits. */ |
| 34 | BUILD_BUG_ON((NR_CPUS/32 * 9) > (PAGE_SIZE-1)); | 35 | BUILD_BUG_ON((NR_CPUS/32 * 9) > (PAGE_SIZE-1)); |
| 35 | 36 | ||
| 36 | return cpumap_print_to_pagebuf(list, buf, mask); | 37 | if (!alloc_cpumask_var(&mask, GFP_KERNEL)) |
| 38 | return 0; | ||
| 39 | |||
| 40 | cpumask_and(mask, cpumask_of_node(node_dev->dev.id), cpu_online_mask); | ||
| 41 | n = cpumap_print_to_pagebuf(list, buf, mask); | ||
| 42 | free_cpumask_var(mask); | ||
| 43 | |||
| 44 | return n; | ||
| 37 | } | 45 | } |
| 38 | 46 | ||
| 39 | static inline ssize_t node_read_cpumask(struct device *dev, | 47 | static inline ssize_t node_read_cpumask(struct device *dev, |
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c index 2fe216b276e2..84a8ac2a779f 100644 --- a/drivers/tty/tty_ldisc.c +++ b/drivers/tty/tty_ldisc.c | |||
| @@ -694,10 +694,8 @@ int tty_ldisc_reinit(struct tty_struct *tty, int disc) | |||
| 694 | tty_set_termios_ldisc(tty, disc); | 694 | tty_set_termios_ldisc(tty, disc); |
| 695 | retval = tty_ldisc_open(tty, tty->ldisc); | 695 | retval = tty_ldisc_open(tty, tty->ldisc); |
| 696 | if (retval) { | 696 | if (retval) { |
| 697 | if (!WARN_ON(disc == N_TTY)) { | 697 | tty_ldisc_put(tty->ldisc); |
| 698 | tty_ldisc_put(tty->ldisc); | 698 | tty->ldisc = NULL; |
| 699 | tty->ldisc = NULL; | ||
| 700 | } | ||
| 701 | } | 699 | } |
| 702 | return retval; | 700 | return retval; |
| 703 | } | 701 | } |
| @@ -752,8 +750,9 @@ void tty_ldisc_hangup(struct tty_struct *tty, bool reinit) | |||
| 752 | 750 | ||
| 753 | if (tty->ldisc) { | 751 | if (tty->ldisc) { |
| 754 | if (reinit) { | 752 | if (reinit) { |
| 755 | if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0) | 753 | if (tty_ldisc_reinit(tty, tty->termios.c_line) < 0 && |
| 756 | tty_ldisc_reinit(tty, N_TTY); | 754 | tty_ldisc_reinit(tty, N_TTY) < 0) |
| 755 | WARN_ON(tty_ldisc_reinit(tty, N_NULL) < 0); | ||
| 757 | } else | 756 | } else |
| 758 | tty_ldisc_kill(tty); | 757 | tty_ldisc_kill(tty); |
| 759 | } | 758 | } |
diff --git a/fs/binfmt_misc.c b/fs/binfmt_misc.c index 2a46762def31..a7c5a9861bef 100644 --- a/fs/binfmt_misc.c +++ b/fs/binfmt_misc.c | |||
| @@ -596,7 +596,7 @@ static void bm_evict_inode(struct inode *inode) | |||
| 596 | { | 596 | { |
| 597 | Node *e = inode->i_private; | 597 | Node *e = inode->i_private; |
| 598 | 598 | ||
| 599 | if (e->flags & MISC_FMT_OPEN_FILE) | 599 | if (e && e->flags & MISC_FMT_OPEN_FILE) |
| 600 | filp_close(e->interp_file, NULL); | 600 | filp_close(e->interp_file, NULL); |
| 601 | 601 | ||
| 602 | clear_inode(inode); | 602 | clear_inode(inode); |
diff --git a/fs/block_dev.c b/fs/block_dev.c index 93d088ffc05c..789f55e851ae 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
| @@ -716,10 +716,12 @@ int bdev_write_page(struct block_device *bdev, sector_t sector, | |||
| 716 | 716 | ||
| 717 | set_page_writeback(page); | 717 | set_page_writeback(page); |
| 718 | result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, true); | 718 | result = ops->rw_page(bdev, sector + get_start_sect(bdev), page, true); |
| 719 | if (result) | 719 | if (result) { |
| 720 | end_page_writeback(page); | 720 | end_page_writeback(page); |
| 721 | else | 721 | } else { |
| 722 | clean_page_buffers(page); | ||
| 722 | unlock_page(page); | 723 | unlock_page(page); |
| 724 | } | ||
| 723 | blk_queue_exit(bdev->bd_queue); | 725 | blk_queue_exit(bdev->bd_queue); |
| 724 | return result; | 726 | return result; |
| 725 | } | 727 | } |
diff --git a/fs/mpage.c b/fs/mpage.c index 37bb77c1302c..c991faec70b9 100644 --- a/fs/mpage.c +++ b/fs/mpage.c | |||
| @@ -468,6 +468,16 @@ static void clean_buffers(struct page *page, unsigned first_unmapped) | |||
| 468 | try_to_free_buffers(page); | 468 | try_to_free_buffers(page); |
| 469 | } | 469 | } |
| 470 | 470 | ||
| 471 | /* | ||
| 472 | * For situations where we want to clean all buffers attached to a page. | ||
| 473 | * We don't need to calculate how many buffers are attached to the page, | ||
| 474 | * we just need to specify a number larger than the maximum number of buffers. | ||
| 475 | */ | ||
| 476 | void clean_page_buffers(struct page *page) | ||
| 477 | { | ||
| 478 | clean_buffers(page, ~0U); | ||
| 479 | } | ||
| 480 | |||
| 471 | static int __mpage_writepage(struct page *page, struct writeback_control *wbc, | 481 | static int __mpage_writepage(struct page *page, struct writeback_control *wbc, |
| 472 | void *data) | 482 | void *data) |
| 473 | { | 483 | { |
| @@ -605,10 +615,8 @@ alloc_new: | |||
| 605 | if (bio == NULL) { | 615 | if (bio == NULL) { |
| 606 | if (first_unmapped == blocks_per_page) { | 616 | if (first_unmapped == blocks_per_page) { |
| 607 | if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9), | 617 | if (!bdev_write_page(bdev, blocks[0] << (blkbits - 9), |
| 608 | page, wbc)) { | 618 | page, wbc)) |
| 609 | clean_buffers(page, first_unmapped); | ||
| 610 | goto out; | 619 | goto out; |
| 611 | } | ||
| 612 | } | 620 | } |
| 613 | bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9), | 621 | bio = mpage_alloc(bdev, blocks[0] << (blkbits - 9), |
| 614 | BIO_MAX_PAGES, GFP_NOFS|__GFP_HIGH); | 622 | BIO_MAX_PAGES, GFP_NOFS|__GFP_HIGH); |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index c8dae555eccf..446b24cac67d 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
| @@ -232,6 +232,7 @@ int generic_write_end(struct file *, struct address_space *, | |||
| 232 | loff_t, unsigned, unsigned, | 232 | loff_t, unsigned, unsigned, |
| 233 | struct page *, void *); | 233 | struct page *, void *); |
| 234 | void page_zero_new_buffers(struct page *page, unsigned from, unsigned to); | 234 | void page_zero_new_buffers(struct page *page, unsigned from, unsigned to); |
| 235 | void clean_page_buffers(struct page *page); | ||
| 235 | int cont_write_begin(struct file *, struct address_space *, loff_t, | 236 | int cont_write_begin(struct file *, struct address_space *, loff_t, |
| 236 | unsigned, unsigned, struct page **, void **, | 237 | unsigned, unsigned, struct page **, void **, |
| 237 | get_block_t *, loff_t *); | 238 | get_block_t *, loff_t *); |
diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 0ad4c3044cf9..91189bb0c818 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h | |||
| @@ -44,6 +44,12 @@ | |||
| 44 | 44 | ||
| 45 | #define STACK_MAGIC 0xdeadbeef | 45 | #define STACK_MAGIC 0xdeadbeef |
| 46 | 46 | ||
| 47 | /** | ||
| 48 | * REPEAT_BYTE - repeat the value @x multiple times as an unsigned long value | ||
| 49 | * @x: value to repeat | ||
| 50 | * | ||
| 51 | * NOTE: @x is not checked for > 0xff; larger values produce odd results. | ||
| 52 | */ | ||
| 47 | #define REPEAT_BYTE(x) ((~0ul / 0xff) * (x)) | 53 | #define REPEAT_BYTE(x) ((~0ul / 0xff) * (x)) |
| 48 | 54 | ||
| 49 | /* @a is a power of 2 value */ | 55 | /* @a is a power of 2 value */ |
| @@ -57,6 +63,10 @@ | |||
| 57 | #define READ 0 | 63 | #define READ 0 |
| 58 | #define WRITE 1 | 64 | #define WRITE 1 |
| 59 | 65 | ||
| 66 | /** | ||
| 67 | * ARRAY_SIZE - get the number of elements in array @arr | ||
| 68 | * @arr: array to be sized | ||
| 69 | */ | ||
| 60 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) | 70 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr)) |
| 61 | 71 | ||
| 62 | #define u64_to_user_ptr(x) ( \ | 72 | #define u64_to_user_ptr(x) ( \ |
| @@ -76,7 +86,15 @@ | |||
| 76 | #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) | 86 | #define round_up(x, y) ((((x)-1) | __round_mask(x, y))+1) |
| 77 | #define round_down(x, y) ((x) & ~__round_mask(x, y)) | 87 | #define round_down(x, y) ((x) & ~__round_mask(x, y)) |
| 78 | 88 | ||
| 89 | /** | ||
| 90 | * FIELD_SIZEOF - get the size of a struct's field | ||
| 91 | * @t: the target struct | ||
| 92 | * @f: the target struct's field | ||
| 93 | * Return: the size of @f in the struct definition without having a | ||
| 94 | * declared instance of @t. | ||
| 95 | */ | ||
| 79 | #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) | 96 | #define FIELD_SIZEOF(t, f) (sizeof(((t*)0)->f)) |
| 97 | |||
| 80 | #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP | 98 | #define DIV_ROUND_UP __KERNEL_DIV_ROUND_UP |
| 81 | 99 | ||
| 82 | #define DIV_ROUND_DOWN_ULL(ll, d) \ | 100 | #define DIV_ROUND_DOWN_ULL(ll, d) \ |
| @@ -107,7 +125,7 @@ | |||
| 107 | /* | 125 | /* |
| 108 | * Divide positive or negative dividend by positive or negative divisor | 126 | * Divide positive or negative dividend by positive or negative divisor |
| 109 | * and round to closest integer. Result is undefined for negative | 127 | * and round to closest integer. Result is undefined for negative |
| 110 | * divisors if he dividend variable type is unsigned and for negative | 128 | * divisors if the dividend variable type is unsigned and for negative |
| 111 | * dividends if the divisor variable type is unsigned. | 129 | * dividends if the divisor variable type is unsigned. |
| 112 | */ | 130 | */ |
| 113 | #define DIV_ROUND_CLOSEST(x, divisor)( \ | 131 | #define DIV_ROUND_CLOSEST(x, divisor)( \ |
| @@ -247,13 +265,13 @@ extern int _cond_resched(void); | |||
| 247 | * @ep_ro: right open interval endpoint | 265 | * @ep_ro: right open interval endpoint |
| 248 | * | 266 | * |
| 249 | * Perform a "reciprocal multiplication" in order to "scale" a value into | 267 | * Perform a "reciprocal multiplication" in order to "scale" a value into |
| 250 | * range [0, ep_ro), where the upper interval endpoint is right-open. | 268 | * range [0, @ep_ro), where the upper interval endpoint is right-open. |
| 251 | * This is useful, e.g. for accessing a index of an array containing | 269 | * This is useful, e.g. for accessing a index of an array containing |
| 252 | * ep_ro elements, for example. Think of it as sort of modulus, only that | 270 | * @ep_ro elements, for example. Think of it as sort of modulus, only that |
| 253 | * the result isn't that of modulo. ;) Note that if initial input is a | 271 | * the result isn't that of modulo. ;) Note that if initial input is a |
| 254 | * small value, then result will return 0. | 272 | * small value, then result will return 0. |
| 255 | * | 273 | * |
| 256 | * Return: a result based on val in interval [0, ep_ro). | 274 | * Return: a result based on @val in interval [0, @ep_ro). |
| 257 | */ | 275 | */ |
| 258 | static inline u32 reciprocal_scale(u32 val, u32 ep_ro) | 276 | static inline u32 reciprocal_scale(u32 val, u32 ep_ro) |
| 259 | { | 277 | { |
| @@ -618,8 +636,8 @@ do { \ | |||
| 618 | * trace_printk - printf formatting in the ftrace buffer | 636 | * trace_printk - printf formatting in the ftrace buffer |
| 619 | * @fmt: the printf format for printing | 637 | * @fmt: the printf format for printing |
| 620 | * | 638 | * |
| 621 | * Note: __trace_printk is an internal function for trace_printk and | 639 | * Note: __trace_printk is an internal function for trace_printk() and |
| 622 | * the @ip is passed in via the trace_printk macro. | 640 | * the @ip is passed in via the trace_printk() macro. |
| 623 | * | 641 | * |
| 624 | * This function allows a kernel developer to debug fast path sections | 642 | * This function allows a kernel developer to debug fast path sections |
| 625 | * that printk is not appropriate for. By scattering in various | 643 | * that printk is not appropriate for. By scattering in various |
| @@ -629,7 +647,7 @@ do { \ | |||
| 629 | * This is intended as a debugging tool for the developer only. | 647 | * This is intended as a debugging tool for the developer only. |
| 630 | * Please refrain from leaving trace_printks scattered around in | 648 | * Please refrain from leaving trace_printks scattered around in |
| 631 | * your code. (Extra memory is used for special buffers that are | 649 | * your code. (Extra memory is used for special buffers that are |
| 632 | * allocated when trace_printk() is used) | 650 | * allocated when trace_printk() is used.) |
| 633 | * | 651 | * |
| 634 | * A little optization trick is done here. If there's only one | 652 | * A little optization trick is done here. If there's only one |
| 635 | * argument, there's no need to scan the string for printf formats. | 653 | * argument, there's no need to scan the string for printf formats. |
| @@ -681,7 +699,7 @@ int __trace_printk(unsigned long ip, const char *fmt, ...); | |||
| 681 | * the @ip is passed in via the trace_puts macro. | 699 | * the @ip is passed in via the trace_puts macro. |
| 682 | * | 700 | * |
| 683 | * This is similar to trace_printk() but is made for those really fast | 701 | * This is similar to trace_printk() but is made for those really fast |
| 684 | * paths that a developer wants the least amount of "Heisenbug" affects, | 702 | * paths that a developer wants the least amount of "Heisenbug" effects, |
| 685 | * where the processing of the print format is still too much. | 703 | * where the processing of the print format is still too much. |
| 686 | * | 704 | * |
| 687 | * This function allows a kernel developer to debug fast path sections | 705 | * This function allows a kernel developer to debug fast path sections |
| @@ -692,7 +710,7 @@ int __trace_printk(unsigned long ip, const char *fmt, ...); | |||
| 692 | * This is intended as a debugging tool for the developer only. | 710 | * This is intended as a debugging tool for the developer only. |
| 693 | * Please refrain from leaving trace_puts scattered around in | 711 | * Please refrain from leaving trace_puts scattered around in |
| 694 | * your code. (Extra memory is used for special buffers that are | 712 | * your code. (Extra memory is used for special buffers that are |
| 695 | * allocated when trace_puts() is used) | 713 | * allocated when trace_puts() is used.) |
| 696 | * | 714 | * |
| 697 | * Returns: 0 if nothing was written, positive # if string was. | 715 | * Returns: 0 if nothing was written, positive # if string was. |
| 698 | * (1 when __trace_bputs is used, strlen(str) when __trace_puts is used) | 716 | * (1 when __trace_bputs is used, strlen(str) when __trace_puts is used) |
| @@ -771,6 +789,12 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 771 | t2 min2 = (y); \ | 789 | t2 min2 = (y); \ |
| 772 | (void) (&min1 == &min2); \ | 790 | (void) (&min1 == &min2); \ |
| 773 | min1 < min2 ? min1 : min2; }) | 791 | min1 < min2 ? min1 : min2; }) |
| 792 | |||
| 793 | /** | ||
| 794 | * min - return minimum of two values of the same or compatible types | ||
| 795 | * @x: first value | ||
| 796 | * @y: second value | ||
| 797 | */ | ||
| 774 | #define min(x, y) \ | 798 | #define min(x, y) \ |
| 775 | __min(typeof(x), typeof(y), \ | 799 | __min(typeof(x), typeof(y), \ |
| 776 | __UNIQUE_ID(min1_), __UNIQUE_ID(min2_), \ | 800 | __UNIQUE_ID(min1_), __UNIQUE_ID(min2_), \ |
| @@ -781,12 +805,31 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 781 | t2 max2 = (y); \ | 805 | t2 max2 = (y); \ |
| 782 | (void) (&max1 == &max2); \ | 806 | (void) (&max1 == &max2); \ |
| 783 | max1 > max2 ? max1 : max2; }) | 807 | max1 > max2 ? max1 : max2; }) |
| 808 | |||
| 809 | /** | ||
| 810 | * max - return maximum of two values of the same or compatible types | ||
| 811 | * @x: first value | ||
| 812 | * @y: second value | ||
| 813 | */ | ||
| 784 | #define max(x, y) \ | 814 | #define max(x, y) \ |
| 785 | __max(typeof(x), typeof(y), \ | 815 | __max(typeof(x), typeof(y), \ |
| 786 | __UNIQUE_ID(max1_), __UNIQUE_ID(max2_), \ | 816 | __UNIQUE_ID(max1_), __UNIQUE_ID(max2_), \ |
| 787 | x, y) | 817 | x, y) |
| 788 | 818 | ||
| 819 | /** | ||
| 820 | * min3 - return minimum of three values | ||
| 821 | * @x: first value | ||
| 822 | * @y: second value | ||
| 823 | * @z: third value | ||
| 824 | */ | ||
| 789 | #define min3(x, y, z) min((typeof(x))min(x, y), z) | 825 | #define min3(x, y, z) min((typeof(x))min(x, y), z) |
| 826 | |||
| 827 | /** | ||
| 828 | * max3 - return maximum of three values | ||
| 829 | * @x: first value | ||
| 830 | * @y: second value | ||
| 831 | * @z: third value | ||
| 832 | */ | ||
| 790 | #define max3(x, y, z) max((typeof(x))max(x, y), z) | 833 | #define max3(x, y, z) max((typeof(x))max(x, y), z) |
| 791 | 834 | ||
| 792 | /** | 835 | /** |
| @@ -805,8 +848,8 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 805 | * @lo: lowest allowable value | 848 | * @lo: lowest allowable value |
| 806 | * @hi: highest allowable value | 849 | * @hi: highest allowable value |
| 807 | * | 850 | * |
| 808 | * This macro does strict typechecking of lo/hi to make sure they are of the | 851 | * This macro does strict typechecking of @lo/@hi to make sure they are of the |
| 809 | * same type as val. See the unnecessary pointer comparisons. | 852 | * same type as @val. See the unnecessary pointer comparisons. |
| 810 | */ | 853 | */ |
| 811 | #define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi) | 854 | #define clamp(val, lo, hi) min((typeof(val))max(val, lo), hi) |
| 812 | 855 | ||
| @@ -816,11 +859,24 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 816 | * | 859 | * |
| 817 | * Or not use min/max/clamp at all, of course. | 860 | * Or not use min/max/clamp at all, of course. |
| 818 | */ | 861 | */ |
| 862 | |||
| 863 | /** | ||
| 864 | * min_t - return minimum of two values, using the specified type | ||
| 865 | * @type: data type to use | ||
| 866 | * @x: first value | ||
| 867 | * @y: second value | ||
| 868 | */ | ||
| 819 | #define min_t(type, x, y) \ | 869 | #define min_t(type, x, y) \ |
| 820 | __min(type, type, \ | 870 | __min(type, type, \ |
| 821 | __UNIQUE_ID(min1_), __UNIQUE_ID(min2_), \ | 871 | __UNIQUE_ID(min1_), __UNIQUE_ID(min2_), \ |
| 822 | x, y) | 872 | x, y) |
| 823 | 873 | ||
| 874 | /** | ||
| 875 | * max_t - return maximum of two values, using the specified type | ||
| 876 | * @type: data type to use | ||
| 877 | * @x: first value | ||
| 878 | * @y: second value | ||
| 879 | */ | ||
| 824 | #define max_t(type, x, y) \ | 880 | #define max_t(type, x, y) \ |
| 825 | __max(type, type, \ | 881 | __max(type, type, \ |
| 826 | __UNIQUE_ID(min1_), __UNIQUE_ID(min2_), \ | 882 | __UNIQUE_ID(min1_), __UNIQUE_ID(min2_), \ |
| @@ -834,7 +890,7 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 834 | * @hi: maximum allowable value | 890 | * @hi: maximum allowable value |
| 835 | * | 891 | * |
| 836 | * This macro does no typechecking and uses temporary variables of type | 892 | * This macro does no typechecking and uses temporary variables of type |
| 837 | * 'type' to make all the comparisons. | 893 | * @type to make all the comparisons. |
| 838 | */ | 894 | */ |
| 839 | #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) | 895 | #define clamp_t(type, val, lo, hi) min_t(type, max_t(type, val, lo), hi) |
| 840 | 896 | ||
| @@ -845,15 +901,17 @@ static inline void ftrace_dump(enum ftrace_dump_mode oops_dump_mode) { } | |||
| 845 | * @hi: maximum allowable value | 901 | * @hi: maximum allowable value |
| 846 | * | 902 | * |
| 847 | * This macro does no typechecking and uses temporary variables of whatever | 903 | * This macro does no typechecking and uses temporary variables of whatever |
| 848 | * type the input argument 'val' is. This is useful when val is an unsigned | 904 | * type the input argument @val is. This is useful when @val is an unsigned |
| 849 | * type and min and max are literals that will otherwise be assigned a signed | 905 | * type and @lo and @hi are literals that will otherwise be assigned a signed |
| 850 | * integer type. | 906 | * integer type. |
| 851 | */ | 907 | */ |
| 852 | #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) | 908 | #define clamp_val(val, lo, hi) clamp_t(typeof(val), val, lo, hi) |
| 853 | 909 | ||
| 854 | 910 | ||
| 855 | /* | 911 | /** |
| 856 | * swap - swap value of @a and @b | 912 | * swap - swap values of @a and @b |
| 913 | * @a: first value | ||
| 914 | * @b: second value | ||
| 857 | */ | 915 | */ |
| 858 | #define swap(a, b) \ | 916 | #define swap(a, b) \ |
| 859 | do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) | 917 | do { typeof(a) __tmp = (a); (a) = (b); (b) = __tmp; } while (0) |
diff --git a/include/linux/of.h b/include/linux/of.h index cfc34117fc92..b240ed69dc96 100644 --- a/include/linux/of.h +++ b/include/linux/of.h | |||
| @@ -734,6 +734,16 @@ static inline struct device_node *of_get_cpu_node(int cpu, | |||
| 734 | return NULL; | 734 | return NULL; |
| 735 | } | 735 | } |
| 736 | 736 | ||
| 737 | static inline int of_n_addr_cells(struct device_node *np) | ||
| 738 | { | ||
| 739 | return 0; | ||
| 740 | |||
| 741 | } | ||
| 742 | static inline int of_n_size_cells(struct device_node *np) | ||
| 743 | { | ||
| 744 | return 0; | ||
| 745 | } | ||
| 746 | |||
| 737 | static inline int of_property_read_u64(const struct device_node *np, | 747 | static inline int of_property_read_u64(const struct device_node *np, |
| 738 | const char *propname, u64 *out_value) | 748 | const char *propname, u64 *out_value) |
| 739 | { | 749 | { |
diff --git a/include/linux/thread_info.h b/include/linux/thread_info.h index 905d769d8ddc..5f7eeab990fe 100644 --- a/include/linux/thread_info.h +++ b/include/linux/thread_info.h | |||
| @@ -42,7 +42,7 @@ enum { | |||
| 42 | #define THREAD_ALIGN THREAD_SIZE | 42 | #define THREAD_ALIGN THREAD_SIZE |
| 43 | #endif | 43 | #endif |
| 44 | 44 | ||
| 45 | #ifdef CONFIG_DEBUG_STACK_USAGE | 45 | #if IS_ENABLED(CONFIG_DEBUG_STACK_USAGE) || IS_ENABLED(CONFIG_DEBUG_KMEMLEAK) |
| 46 | # define THREADINFO_GFP (GFP_KERNEL_ACCOUNT | __GFP_NOTRACK | \ | 46 | # define THREADINFO_GFP (GFP_KERNEL_ACCOUNT | __GFP_NOTRACK | \ |
| 47 | __GFP_ZERO) | 47 | __GFP_ZERO) |
| 48 | #else | 48 | #else |
diff --git a/kernel/fork.c b/kernel/fork.c index e702cb9ffbd8..07cc743698d3 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -215,6 +215,10 @@ static unsigned long *alloc_thread_stack_node(struct task_struct *tsk, int node) | |||
| 215 | if (!s) | 215 | if (!s) |
| 216 | continue; | 216 | continue; |
| 217 | 217 | ||
| 218 | #ifdef CONFIG_DEBUG_KMEMLEAK | ||
| 219 | /* Clear stale pointers from reused stack. */ | ||
| 220 | memset(s->addr, 0, THREAD_SIZE); | ||
| 221 | #endif | ||
| 218 | tsk->stack_vm_area = s; | 222 | tsk->stack_vm_area = s; |
| 219 | return s->addr; | 223 | return s->addr; |
| 220 | } | 224 | } |
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 2689b7c50c52..c1e720a22c71 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -1590,6 +1590,54 @@ config LATENCYTOP | |||
| 1590 | 1590 | ||
| 1591 | source kernel/trace/Kconfig | 1591 | source kernel/trace/Kconfig |
| 1592 | 1592 | ||
| 1593 | config PROVIDE_OHCI1394_DMA_INIT | ||
| 1594 | bool "Remote debugging over FireWire early on boot" | ||
| 1595 | depends on PCI && X86 | ||
| 1596 | help | ||
| 1597 | If you want to debug problems which hang or crash the kernel early | ||
| 1598 | on boot and the crashing machine has a FireWire port, you can use | ||
| 1599 | this feature to remotely access the memory of the crashed machine | ||
| 1600 | over FireWire. This employs remote DMA as part of the OHCI1394 | ||
| 1601 | specification which is now the standard for FireWire controllers. | ||
| 1602 | |||
| 1603 | With remote DMA, you can monitor the printk buffer remotely using | ||
| 1604 | firescope and access all memory below 4GB using fireproxy from gdb. | ||
| 1605 | Even controlling a kernel debugger is possible using remote DMA. | ||
| 1606 | |||
| 1607 | Usage: | ||
| 1608 | |||
| 1609 | If ohci1394_dma=early is used as boot parameter, it will initialize | ||
| 1610 | all OHCI1394 controllers which are found in the PCI config space. | ||
| 1611 | |||
| 1612 | As all changes to the FireWire bus such as enabling and disabling | ||
| 1613 | devices cause a bus reset and thereby disable remote DMA for all | ||
| 1614 | devices, be sure to have the cable plugged and FireWire enabled on | ||
| 1615 | the debugging host before booting the debug target for debugging. | ||
| 1616 | |||
| 1617 | This code (~1k) is freed after boot. By then, the firewire stack | ||
| 1618 | in charge of the OHCI-1394 controllers should be used instead. | ||
| 1619 | |||
| 1620 | See Documentation/debugging-via-ohci1394.txt for more information. | ||
| 1621 | |||
| 1622 | config DMA_API_DEBUG | ||
| 1623 | bool "Enable debugging of DMA-API usage" | ||
| 1624 | depends on HAVE_DMA_API_DEBUG | ||
| 1625 | help | ||
| 1626 | Enable this option to debug the use of the DMA API by device drivers. | ||
| 1627 | With this option you will be able to detect common bugs in device | ||
| 1628 | drivers like double-freeing of DMA mappings or freeing mappings that | ||
| 1629 | were never allocated. | ||
| 1630 | |||
| 1631 | This also attempts to catch cases where a page owned by DMA is | ||
| 1632 | accessed by the cpu in a way that could cause data corruption. For | ||
| 1633 | example, this enables cow_user_page() to check that the source page is | ||
| 1634 | not undergoing DMA. | ||
| 1635 | |||
| 1636 | This option causes a performance degradation. Use only if you want to | ||
| 1637 | debug device drivers and dma interactions. | ||
| 1638 | |||
| 1639 | If unsure, say N. | ||
| 1640 | |||
| 1593 | menu "Runtime Testing" | 1641 | menu "Runtime Testing" |
| 1594 | 1642 | ||
| 1595 | config LKDTM | 1643 | config LKDTM |
| @@ -1749,56 +1797,6 @@ config TEST_PARMAN | |||
| 1749 | 1797 | ||
| 1750 | If unsure, say N. | 1798 | If unsure, say N. |
| 1751 | 1799 | ||
| 1752 | endmenu # runtime tests | ||
| 1753 | |||
| 1754 | config PROVIDE_OHCI1394_DMA_INIT | ||
| 1755 | bool "Remote debugging over FireWire early on boot" | ||
| 1756 | depends on PCI && X86 | ||
| 1757 | help | ||
| 1758 | If you want to debug problems which hang or crash the kernel early | ||
| 1759 | on boot and the crashing machine has a FireWire port, you can use | ||
| 1760 | this feature to remotely access the memory of the crashed machine | ||
| 1761 | over FireWire. This employs remote DMA as part of the OHCI1394 | ||
| 1762 | specification which is now the standard for FireWire controllers. | ||
| 1763 | |||
| 1764 | With remote DMA, you can monitor the printk buffer remotely using | ||
| 1765 | firescope and access all memory below 4GB using fireproxy from gdb. | ||
| 1766 | Even controlling a kernel debugger is possible using remote DMA. | ||
| 1767 | |||
| 1768 | Usage: | ||
| 1769 | |||
| 1770 | If ohci1394_dma=early is used as boot parameter, it will initialize | ||
| 1771 | all OHCI1394 controllers which are found in the PCI config space. | ||
| 1772 | |||
| 1773 | As all changes to the FireWire bus such as enabling and disabling | ||
| 1774 | devices cause a bus reset and thereby disable remote DMA for all | ||
| 1775 | devices, be sure to have the cable plugged and FireWire enabled on | ||
| 1776 | the debugging host before booting the debug target for debugging. | ||
| 1777 | |||
| 1778 | This code (~1k) is freed after boot. By then, the firewire stack | ||
| 1779 | in charge of the OHCI-1394 controllers should be used instead. | ||
| 1780 | |||
| 1781 | See Documentation/debugging-via-ohci1394.txt for more information. | ||
| 1782 | |||
| 1783 | config DMA_API_DEBUG | ||
| 1784 | bool "Enable debugging of DMA-API usage" | ||
| 1785 | depends on HAVE_DMA_API_DEBUG | ||
| 1786 | help | ||
| 1787 | Enable this option to debug the use of the DMA API by device drivers. | ||
| 1788 | With this option you will be able to detect common bugs in device | ||
| 1789 | drivers like double-freeing of DMA mappings or freeing mappings that | ||
| 1790 | were never allocated. | ||
| 1791 | |||
| 1792 | This also attempts to catch cases where a page owned by DMA is | ||
| 1793 | accessed by the cpu in a way that could cause data corruption. For | ||
| 1794 | example, this enables cow_user_page() to check that the source page is | ||
| 1795 | not undergoing DMA. | ||
| 1796 | |||
| 1797 | This option causes a performance degradation. Use only if you want to | ||
| 1798 | debug device drivers and dma interactions. | ||
| 1799 | |||
| 1800 | If unsure, say N. | ||
| 1801 | |||
| 1802 | config TEST_LKM | 1800 | config TEST_LKM |
| 1803 | tristate "Test module loading with 'hello world' module" | 1801 | tristate "Test module loading with 'hello world' module" |
| 1804 | default n | 1802 | default n |
| @@ -1873,18 +1871,6 @@ config TEST_UDELAY | |||
| 1873 | 1871 | ||
| 1874 | If unsure, say N. | 1872 | If unsure, say N. |
| 1875 | 1873 | ||
| 1876 | config MEMTEST | ||
| 1877 | bool "Memtest" | ||
| 1878 | depends on HAVE_MEMBLOCK | ||
| 1879 | ---help--- | ||
| 1880 | This option adds a kernel parameter 'memtest', which allows memtest | ||
| 1881 | to be set. | ||
| 1882 | memtest=0, mean disabled; -- default | ||
| 1883 | memtest=1, mean do 1 test pattern; | ||
| 1884 | ... | ||
| 1885 | memtest=17, mean do 17 test patterns. | ||
| 1886 | If you are unsure how to answer this question, answer N. | ||
| 1887 | |||
| 1888 | config TEST_STATIC_KEYS | 1874 | config TEST_STATIC_KEYS |
| 1889 | tristate "Test static keys" | 1875 | tristate "Test static keys" |
| 1890 | default n | 1876 | default n |
| @@ -1894,16 +1880,6 @@ config TEST_STATIC_KEYS | |||
| 1894 | 1880 | ||
| 1895 | If unsure, say N. | 1881 | If unsure, say N. |
| 1896 | 1882 | ||
| 1897 | config BUG_ON_DATA_CORRUPTION | ||
| 1898 | bool "Trigger a BUG when data corruption is detected" | ||
| 1899 | select DEBUG_LIST | ||
| 1900 | help | ||
| 1901 | Select this option if the kernel should BUG when it encounters | ||
| 1902 | data corruption in kernel memory structures when they get checked | ||
| 1903 | for validity. | ||
| 1904 | |||
| 1905 | If unsure, say N. | ||
| 1906 | |||
| 1907 | config TEST_KMOD | 1883 | config TEST_KMOD |
| 1908 | tristate "kmod stress tester" | 1884 | tristate "kmod stress tester" |
| 1909 | default n | 1885 | default n |
| @@ -1941,6 +1917,29 @@ config TEST_DEBUG_VIRTUAL | |||
| 1941 | 1917 | ||
| 1942 | If unsure, say N. | 1918 | If unsure, say N. |
| 1943 | 1919 | ||
| 1920 | endmenu # runtime tests | ||
| 1921 | |||
| 1922 | config MEMTEST | ||
| 1923 | bool "Memtest" | ||
| 1924 | depends on HAVE_MEMBLOCK | ||
| 1925 | ---help--- | ||
| 1926 | This option adds a kernel parameter 'memtest', which allows memtest | ||
| 1927 | to be set. | ||
| 1928 | memtest=0, mean disabled; -- default | ||
| 1929 | memtest=1, mean do 1 test pattern; | ||
| 1930 | ... | ||
| 1931 | memtest=17, mean do 17 test patterns. | ||
| 1932 | If you are unsure how to answer this question, answer N. | ||
| 1933 | |||
| 1934 | config BUG_ON_DATA_CORRUPTION | ||
| 1935 | bool "Trigger a BUG when data corruption is detected" | ||
| 1936 | select DEBUG_LIST | ||
| 1937 | help | ||
| 1938 | Select this option if the kernel should BUG when it encounters | ||
| 1939 | data corruption in kernel memory structures when they get checked | ||
| 1940 | for validity. | ||
| 1941 | |||
| 1942 | If unsure, say N. | ||
| 1944 | 1943 | ||
| 1945 | source "samples/Kconfig" | 1944 | source "samples/Kconfig" |
| 1946 | 1945 | ||
| @@ -460,7 +460,7 @@ struct page *cma_alloc(struct cma *cma, size_t count, unsigned int align, | |||
| 460 | 460 | ||
| 461 | trace_cma_alloc(pfn, page, count, align); | 461 | trace_cma_alloc(pfn, page, count, align); |
| 462 | 462 | ||
| 463 | if (ret) { | 463 | if (ret && !(gfp_mask & __GFP_NOWARN)) { |
| 464 | pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n", | 464 | pr_info("%s: alloc failed, req-size: %zu pages, ret: %d\n", |
| 465 | __func__, count, ret); | 465 | __func__, count, ret); |
| 466 | cma_debug_show_areas(cma); | 466 | cma_debug_show_areas(cma); |
diff --git a/mm/madvise.c b/mm/madvise.c index 25bade36e9ca..fd70d6aabc3e 100644 --- a/mm/madvise.c +++ b/mm/madvise.c | |||
| @@ -757,6 +757,9 @@ madvise_behavior_valid(int behavior) | |||
| 757 | * MADV_DONTFORK - omit this area from child's address space when forking: | 757 | * MADV_DONTFORK - omit this area from child's address space when forking: |
| 758 | * typically, to avoid COWing pages pinned by get_user_pages(). | 758 | * typically, to avoid COWing pages pinned by get_user_pages(). |
| 759 | * MADV_DOFORK - cancel MADV_DONTFORK: no longer omit this area when forking. | 759 | * MADV_DOFORK - cancel MADV_DONTFORK: no longer omit this area when forking. |
| 760 | * MADV_WIPEONFORK - present the child process with zero-filled memory in this | ||
| 761 | * range after a fork. | ||
| 762 | * MADV_KEEPONFORK - undo the effect of MADV_WIPEONFORK | ||
| 760 | * MADV_HWPOISON - trigger memory error handler as if the given memory range | 763 | * MADV_HWPOISON - trigger memory error handler as if the given memory range |
| 761 | * were corrupted by unrecoverable hardware memory failure. | 764 | * were corrupted by unrecoverable hardware memory failure. |
| 762 | * MADV_SOFT_OFFLINE - try to soft-offline the given range of memory. | 765 | * MADV_SOFT_OFFLINE - try to soft-offline the given range of memory. |
| @@ -777,7 +780,9 @@ madvise_behavior_valid(int behavior) | |||
| 777 | * zero - success | 780 | * zero - success |
| 778 | * -EINVAL - start + len < 0, start is not page-aligned, | 781 | * -EINVAL - start + len < 0, start is not page-aligned, |
| 779 | * "behavior" is not a valid value, or application | 782 | * "behavior" is not a valid value, or application |
| 780 | * is attempting to release locked or shared pages. | 783 | * is attempting to release locked or shared pages, |
| 784 | * or the specified address range includes file, Huge TLB, | ||
| 785 | * MAP_SHARED or VMPFNMAP range. | ||
| 781 | * -ENOMEM - addresses in the specified range are not currently | 786 | * -ENOMEM - addresses in the specified range are not currently |
| 782 | * mapped, or are outside the AS of the process. | 787 | * mapped, or are outside the AS of the process. |
| 783 | * -EIO - an I/O error occurred while paging in data. | 788 | * -EIO - an I/O error occurred while paging in data. |
diff --git a/mm/mempolicy.c b/mm/mempolicy.c index 006ba625c0b8..a2af6d58a68f 100644 --- a/mm/mempolicy.c +++ b/mm/mempolicy.c | |||
| @@ -1920,8 +1920,11 @@ static struct page *alloc_page_interleave(gfp_t gfp, unsigned order, | |||
| 1920 | struct page *page; | 1920 | struct page *page; |
| 1921 | 1921 | ||
| 1922 | page = __alloc_pages(gfp, order, nid); | 1922 | page = __alloc_pages(gfp, order, nid); |
| 1923 | if (page && page_to_nid(page) == nid) | 1923 | if (page && page_to_nid(page) == nid) { |
| 1924 | inc_zone_page_state(page, NUMA_INTERLEAVE_HIT); | 1924 | preempt_disable(); |
| 1925 | __inc_numa_state(page_zone(page), NUMA_INTERLEAVE_HIT); | ||
| 1926 | preempt_enable(); | ||
| 1927 | } | ||
| 1925 | return page; | 1928 | return page; |
| 1926 | } | 1929 | } |
| 1927 | 1930 | ||
diff --git a/mm/migrate.c b/mm/migrate.c index 6954c1435833..e00814ca390e 100644 --- a/mm/migrate.c +++ b/mm/migrate.c | |||
| @@ -2146,8 +2146,9 @@ static int migrate_vma_collect_hole(unsigned long start, | |||
| 2146 | unsigned long addr; | 2146 | unsigned long addr; |
| 2147 | 2147 | ||
| 2148 | for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) { | 2148 | for (addr = start & PAGE_MASK; addr < end; addr += PAGE_SIZE) { |
| 2149 | migrate->src[migrate->npages++] = MIGRATE_PFN_MIGRATE; | 2149 | migrate->src[migrate->npages] = MIGRATE_PFN_MIGRATE; |
| 2150 | migrate->dst[migrate->npages] = 0; | 2150 | migrate->dst[migrate->npages] = 0; |
| 2151 | migrate->npages++; | ||
| 2151 | migrate->cpages++; | 2152 | migrate->cpages++; |
| 2152 | } | 2153 | } |
| 2153 | 2154 | ||
diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c index 6a03946469a9..53afbb919a1c 100644 --- a/mm/page_vma_mapped.c +++ b/mm/page_vma_mapped.c | |||
| @@ -6,17 +6,6 @@ | |||
| 6 | 6 | ||
| 7 | #include "internal.h" | 7 | #include "internal.h" |
| 8 | 8 | ||
| 9 | static inline bool check_pmd(struct page_vma_mapped_walk *pvmw) | ||
| 10 | { | ||
| 11 | pmd_t pmde; | ||
| 12 | /* | ||
| 13 | * Make sure we don't re-load pmd between present and !trans_huge check. | ||
| 14 | * We need a consistent view. | ||
| 15 | */ | ||
| 16 | pmde = READ_ONCE(*pvmw->pmd); | ||
| 17 | return pmd_present(pmde) && !pmd_trans_huge(pmde); | ||
| 18 | } | ||
| 19 | |||
| 20 | static inline bool not_found(struct page_vma_mapped_walk *pvmw) | 9 | static inline bool not_found(struct page_vma_mapped_walk *pvmw) |
| 21 | { | 10 | { |
| 22 | page_vma_mapped_walk_done(pvmw); | 11 | page_vma_mapped_walk_done(pvmw); |
| @@ -116,6 +105,7 @@ bool page_vma_mapped_walk(struct page_vma_mapped_walk *pvmw) | |||
| 116 | pgd_t *pgd; | 105 | pgd_t *pgd; |
| 117 | p4d_t *p4d; | 106 | p4d_t *p4d; |
| 118 | pud_t *pud; | 107 | pud_t *pud; |
| 108 | pmd_t pmde; | ||
| 119 | 109 | ||
| 120 | /* The only possible pmd mapping has been handled on last iteration */ | 110 | /* The only possible pmd mapping has been handled on last iteration */ |
| 121 | if (pvmw->pmd && !pvmw->pte) | 111 | if (pvmw->pmd && !pvmw->pte) |
| @@ -148,7 +138,13 @@ restart: | |||
| 148 | if (!pud_present(*pud)) | 138 | if (!pud_present(*pud)) |
| 149 | return false; | 139 | return false; |
| 150 | pvmw->pmd = pmd_offset(pud, pvmw->address); | 140 | pvmw->pmd = pmd_offset(pud, pvmw->address); |
| 151 | if (pmd_trans_huge(*pvmw->pmd) || is_pmd_migration_entry(*pvmw->pmd)) { | 141 | /* |
| 142 | * Make sure the pmd value isn't cached in a register by the | ||
| 143 | * compiler and used as a stale value after we've observed a | ||
| 144 | * subsequent update. | ||
| 145 | */ | ||
| 146 | pmde = READ_ONCE(*pvmw->pmd); | ||
| 147 | if (pmd_trans_huge(pmde) || is_pmd_migration_entry(pmde)) { | ||
| 152 | pvmw->ptl = pmd_lock(mm, pvmw->pmd); | 148 | pvmw->ptl = pmd_lock(mm, pvmw->pmd); |
| 153 | if (likely(pmd_trans_huge(*pvmw->pmd))) { | 149 | if (likely(pmd_trans_huge(*pvmw->pmd))) { |
| 154 | if (pvmw->flags & PVMW_MIGRATION) | 150 | if (pvmw->flags & PVMW_MIGRATION) |
| @@ -167,17 +163,15 @@ restart: | |||
| 167 | return not_found(pvmw); | 163 | return not_found(pvmw); |
| 168 | return true; | 164 | return true; |
| 169 | } | 165 | } |
| 170 | } else | 166 | } |
| 171 | WARN_ONCE(1, "Non present huge pmd without pmd migration enabled!"); | ||
| 172 | return not_found(pvmw); | 167 | return not_found(pvmw); |
| 173 | } else { | 168 | } else { |
| 174 | /* THP pmd was split under us: handle on pte level */ | 169 | /* THP pmd was split under us: handle on pte level */ |
| 175 | spin_unlock(pvmw->ptl); | 170 | spin_unlock(pvmw->ptl); |
| 176 | pvmw->ptl = NULL; | 171 | pvmw->ptl = NULL; |
| 177 | } | 172 | } |
| 178 | } else { | 173 | } else if (!pmd_present(pmde)) { |
| 179 | if (!check_pmd(pvmw)) | 174 | return false; |
| 180 | return false; | ||
| 181 | } | 175 | } |
| 182 | if (!map_pte(pvmw)) | 176 | if (!map_pte(pvmw)) |
| 183 | goto next_pte; | 177 | goto next_pte; |
diff --git a/mm/swap_state.c b/mm/swap_state.c index ed91091d1e68..05b6803f0cce 100644 --- a/mm/swap_state.c +++ b/mm/swap_state.c | |||
| @@ -39,10 +39,6 @@ struct address_space *swapper_spaces[MAX_SWAPFILES]; | |||
| 39 | static unsigned int nr_swapper_spaces[MAX_SWAPFILES]; | 39 | static unsigned int nr_swapper_spaces[MAX_SWAPFILES]; |
| 40 | bool swap_vma_readahead = true; | 40 | bool swap_vma_readahead = true; |
| 41 | 41 | ||
| 42 | #define SWAP_RA_MAX_ORDER_DEFAULT 3 | ||
| 43 | |||
| 44 | static int swap_ra_max_order = SWAP_RA_MAX_ORDER_DEFAULT; | ||
| 45 | |||
| 46 | #define SWAP_RA_WIN_SHIFT (PAGE_SHIFT / 2) | 42 | #define SWAP_RA_WIN_SHIFT (PAGE_SHIFT / 2) |
| 47 | #define SWAP_RA_HITS_MASK ((1UL << SWAP_RA_WIN_SHIFT) - 1) | 43 | #define SWAP_RA_HITS_MASK ((1UL << SWAP_RA_WIN_SHIFT) - 1) |
| 48 | #define SWAP_RA_HITS_MAX SWAP_RA_HITS_MASK | 44 | #define SWAP_RA_HITS_MAX SWAP_RA_HITS_MASK |
| @@ -664,6 +660,13 @@ struct page *swap_readahead_detect(struct vm_fault *vmf, | |||
| 664 | pte_t *tpte; | 660 | pte_t *tpte; |
| 665 | #endif | 661 | #endif |
| 666 | 662 | ||
| 663 | max_win = 1 << min_t(unsigned int, READ_ONCE(page_cluster), | ||
| 664 | SWAP_RA_ORDER_CEILING); | ||
| 665 | if (max_win == 1) { | ||
| 666 | swap_ra->win = 1; | ||
| 667 | return NULL; | ||
| 668 | } | ||
| 669 | |||
| 667 | faddr = vmf->address; | 670 | faddr = vmf->address; |
| 668 | entry = pte_to_swp_entry(vmf->orig_pte); | 671 | entry = pte_to_swp_entry(vmf->orig_pte); |
| 669 | if ((unlikely(non_swap_entry(entry)))) | 672 | if ((unlikely(non_swap_entry(entry)))) |
| @@ -672,12 +675,6 @@ struct page *swap_readahead_detect(struct vm_fault *vmf, | |||
| 672 | if (page) | 675 | if (page) |
| 673 | return page; | 676 | return page; |
| 674 | 677 | ||
| 675 | max_win = 1 << READ_ONCE(swap_ra_max_order); | ||
| 676 | if (max_win == 1) { | ||
| 677 | swap_ra->win = 1; | ||
| 678 | return NULL; | ||
| 679 | } | ||
| 680 | |||
| 681 | fpfn = PFN_DOWN(faddr); | 678 | fpfn = PFN_DOWN(faddr); |
| 682 | swap_ra_info = GET_SWAP_RA_VAL(vma); | 679 | swap_ra_info = GET_SWAP_RA_VAL(vma); |
| 683 | pfn = PFN_DOWN(SWAP_RA_ADDR(swap_ra_info)); | 680 | pfn = PFN_DOWN(SWAP_RA_ADDR(swap_ra_info)); |
| @@ -786,32 +783,8 @@ static struct kobj_attribute vma_ra_enabled_attr = | |||
| 786 | __ATTR(vma_ra_enabled, 0644, vma_ra_enabled_show, | 783 | __ATTR(vma_ra_enabled, 0644, vma_ra_enabled_show, |
| 787 | vma_ra_enabled_store); | 784 | vma_ra_enabled_store); |
| 788 | 785 | ||
| 789 | static ssize_t vma_ra_max_order_show(struct kobject *kobj, | ||
| 790 | struct kobj_attribute *attr, char *buf) | ||
| 791 | { | ||
| 792 | return sprintf(buf, "%d\n", swap_ra_max_order); | ||
| 793 | } | ||
| 794 | static ssize_t vma_ra_max_order_store(struct kobject *kobj, | ||
| 795 | struct kobj_attribute *attr, | ||
| 796 | const char *buf, size_t count) | ||
| 797 | { | ||
| 798 | int err, v; | ||
| 799 | |||
| 800 | err = kstrtoint(buf, 10, &v); | ||
| 801 | if (err || v > SWAP_RA_ORDER_CEILING || v <= 0) | ||
| 802 | return -EINVAL; | ||
| 803 | |||
| 804 | swap_ra_max_order = v; | ||
| 805 | |||
| 806 | return count; | ||
| 807 | } | ||
| 808 | static struct kobj_attribute vma_ra_max_order_attr = | ||
| 809 | __ATTR(vma_ra_max_order, 0644, vma_ra_max_order_show, | ||
| 810 | vma_ra_max_order_store); | ||
| 811 | |||
| 812 | static struct attribute *swap_attrs[] = { | 786 | static struct attribute *swap_attrs[] = { |
| 813 | &vma_ra_enabled_attr.attr, | 787 | &vma_ra_enabled_attr.attr, |
| 814 | &vma_ra_max_order_attr.attr, | ||
| 815 | NULL, | 788 | NULL, |
| 816 | }; | 789 | }; |
| 817 | 790 | ||
diff --git a/mm/vmalloc.c b/mm/vmalloc.c index 8a43db6284eb..673942094328 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c | |||
| @@ -1695,11 +1695,6 @@ static void *__vmalloc_area_node(struct vm_struct *area, gfp_t gfp_mask, | |||
| 1695 | for (i = 0; i < area->nr_pages; i++) { | 1695 | for (i = 0; i < area->nr_pages; i++) { |
| 1696 | struct page *page; | 1696 | struct page *page; |
| 1697 | 1697 | ||
| 1698 | if (fatal_signal_pending(current)) { | ||
| 1699 | area->nr_pages = i; | ||
| 1700 | goto fail_no_warn; | ||
| 1701 | } | ||
| 1702 | |||
| 1703 | if (node == NUMA_NO_NODE) | 1698 | if (node == NUMA_NO_NODE) |
| 1704 | page = alloc_page(alloc_mask|highmem_mask); | 1699 | page = alloc_page(alloc_mask|highmem_mask); |
| 1705 | else | 1700 | else |
| @@ -1723,7 +1718,6 @@ fail: | |||
| 1723 | warn_alloc(gfp_mask, NULL, | 1718 | warn_alloc(gfp_mask, NULL, |
| 1724 | "vmalloc: allocation failure, allocated %ld of %ld bytes", | 1719 | "vmalloc: allocation failure, allocated %ld of %ld bytes", |
| 1725 | (area->nr_pages*PAGE_SIZE), area->size); | 1720 | (area->nr_pages*PAGE_SIZE), area->size); |
| 1726 | fail_no_warn: | ||
| 1727 | vfree(area->addr); | 1721 | vfree(area->addr); |
| 1728 | return NULL; | 1722 | return NULL; |
| 1729 | } | 1723 | } |
diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 5d554419170b..9ee9bf7fd1a2 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c | |||
| @@ -158,7 +158,7 @@ static int read_symbol(FILE *in, struct sym_entry *s) | |||
| 158 | else if (str[0] == '$') | 158 | else if (str[0] == '$') |
| 159 | return -1; | 159 | return -1; |
| 160 | /* exclude debugging symbols */ | 160 | /* exclude debugging symbols */ |
| 161 | else if (stype == 'N') | 161 | else if (stype == 'N' || stype == 'n') |
| 162 | return -1; | 162 | return -1; |
| 163 | 163 | ||
| 164 | /* include the type field in the symbol name, so that it gets | 164 | /* include the type field in the symbol name, so that it gets |
diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c index a2c53a3d223d..de2f9ec8a87f 100644 --- a/tools/testing/selftests/vm/userfaultfd.c +++ b/tools/testing/selftests/vm/userfaultfd.c | |||
| @@ -397,7 +397,7 @@ static void retry_copy_page(int ufd, struct uffdio_copy *uffdio_copy, | |||
| 397 | } | 397 | } |
| 398 | } | 398 | } |
| 399 | 399 | ||
| 400 | static int copy_page(int ufd, unsigned long offset) | 400 | static int __copy_page(int ufd, unsigned long offset, bool retry) |
| 401 | { | 401 | { |
| 402 | struct uffdio_copy uffdio_copy; | 402 | struct uffdio_copy uffdio_copy; |
| 403 | 403 | ||
| @@ -418,7 +418,7 @@ static int copy_page(int ufd, unsigned long offset) | |||
| 418 | fprintf(stderr, "UFFDIO_COPY unexpected copy %Ld\n", | 418 | fprintf(stderr, "UFFDIO_COPY unexpected copy %Ld\n", |
| 419 | uffdio_copy.copy), exit(1); | 419 | uffdio_copy.copy), exit(1); |
| 420 | } else { | 420 | } else { |
| 421 | if (test_uffdio_copy_eexist) { | 421 | if (test_uffdio_copy_eexist && retry) { |
| 422 | test_uffdio_copy_eexist = false; | 422 | test_uffdio_copy_eexist = false; |
| 423 | retry_copy_page(ufd, &uffdio_copy, offset); | 423 | retry_copy_page(ufd, &uffdio_copy, offset); |
| 424 | } | 424 | } |
| @@ -427,6 +427,16 @@ static int copy_page(int ufd, unsigned long offset) | |||
| 427 | return 0; | 427 | return 0; |
| 428 | } | 428 | } |
| 429 | 429 | ||
| 430 | static int copy_page_retry(int ufd, unsigned long offset) | ||
| 431 | { | ||
| 432 | return __copy_page(ufd, offset, true); | ||
| 433 | } | ||
| 434 | |||
| 435 | static int copy_page(int ufd, unsigned long offset) | ||
| 436 | { | ||
| 437 | return __copy_page(ufd, offset, false); | ||
| 438 | } | ||
| 439 | |||
| 430 | static void *uffd_poll_thread(void *arg) | 440 | static void *uffd_poll_thread(void *arg) |
| 431 | { | 441 | { |
| 432 | unsigned long cpu = (unsigned long) arg; | 442 | unsigned long cpu = (unsigned long) arg; |
| @@ -544,7 +554,7 @@ static void *background_thread(void *arg) | |||
| 544 | for (page_nr = cpu * nr_pages_per_cpu; | 554 | for (page_nr = cpu * nr_pages_per_cpu; |
| 545 | page_nr < (cpu+1) * nr_pages_per_cpu; | 555 | page_nr < (cpu+1) * nr_pages_per_cpu; |
| 546 | page_nr++) | 556 | page_nr++) |
| 547 | copy_page(uffd, page_nr * page_size); | 557 | copy_page_retry(uffd, page_nr * page_size); |
| 548 | 558 | ||
| 549 | return NULL; | 559 | return NULL; |
| 550 | } | 560 | } |
| @@ -779,7 +789,7 @@ static void retry_uffdio_zeropage(int ufd, | |||
| 779 | } | 789 | } |
| 780 | } | 790 | } |
| 781 | 791 | ||
| 782 | static int uffdio_zeropage(int ufd, unsigned long offset) | 792 | static int __uffdio_zeropage(int ufd, unsigned long offset, bool retry) |
| 783 | { | 793 | { |
| 784 | struct uffdio_zeropage uffdio_zeropage; | 794 | struct uffdio_zeropage uffdio_zeropage; |
| 785 | int ret; | 795 | int ret; |
| @@ -814,7 +824,7 @@ static int uffdio_zeropage(int ufd, unsigned long offset) | |||
| 814 | fprintf(stderr, "UFFDIO_ZEROPAGE unexpected %Ld\n", | 824 | fprintf(stderr, "UFFDIO_ZEROPAGE unexpected %Ld\n", |
| 815 | uffdio_zeropage.zeropage), exit(1); | 825 | uffdio_zeropage.zeropage), exit(1); |
| 816 | } else { | 826 | } else { |
| 817 | if (test_uffdio_zeropage_eexist) { | 827 | if (test_uffdio_zeropage_eexist && retry) { |
| 818 | test_uffdio_zeropage_eexist = false; | 828 | test_uffdio_zeropage_eexist = false; |
| 819 | retry_uffdio_zeropage(ufd, &uffdio_zeropage, | 829 | retry_uffdio_zeropage(ufd, &uffdio_zeropage, |
| 820 | offset); | 830 | offset); |
| @@ -830,6 +840,11 @@ static int uffdio_zeropage(int ufd, unsigned long offset) | |||
| 830 | return 0; | 840 | return 0; |
| 831 | } | 841 | } |
| 832 | 842 | ||
| 843 | static int uffdio_zeropage(int ufd, unsigned long offset) | ||
| 844 | { | ||
| 845 | return __uffdio_zeropage(ufd, offset, false); | ||
| 846 | } | ||
| 847 | |||
| 833 | /* exercise UFFDIO_ZEROPAGE */ | 848 | /* exercise UFFDIO_ZEROPAGE */ |
| 834 | static int userfaultfd_zeropage_test(void) | 849 | static int userfaultfd_zeropage_test(void) |
| 835 | { | 850 | { |
