diff options
| -rw-r--r-- | MAINTAINERS | 8 | ||||
| -rw-r--r-- | Makefile | 8 | ||||
| -rw-r--r-- | drivers/fmc/fmc-write-eeprom.c | 2 | ||||
| -rw-r--r-- | drivers/iommu/omap-iommu-debug.c | 4 | ||||
| -rw-r--r-- | include/linux/ipc_namespace.h | 2 | ||||
| -rw-r--r-- | ipc/mq_sysctl.c | 18 | ||||
| -rw-r--r-- | ipc/mqueue.c | 6 | ||||
| -rw-r--r-- | mm/huge_memory.c | 9 | ||||
| -rw-r--r-- | mm/memcontrol.c | 6 | ||||
| -rw-r--r-- | mm/memory.c | 15 |
10 files changed, 40 insertions, 38 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 85b3dd8008b7..df8869d49c3f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -538,7 +538,7 @@ F: arch/alpha/ | |||
| 538 | ALTERA UART/JTAG UART SERIAL DRIVERS | 538 | ALTERA UART/JTAG UART SERIAL DRIVERS |
| 539 | M: Tobias Klauser <tklauser@distanz.ch> | 539 | M: Tobias Klauser <tklauser@distanz.ch> |
| 540 | L: linux-serial@vger.kernel.org | 540 | L: linux-serial@vger.kernel.org |
| 541 | L: nios2-dev@sopc.et.ntust.edu.tw (moderated for non-subscribers) | 541 | L: nios2-dev@lists.rocketboards.org (moderated for non-subscribers) |
| 542 | S: Maintained | 542 | S: Maintained |
| 543 | F: drivers/tty/serial/altera_uart.c | 543 | F: drivers/tty/serial/altera_uart.c |
| 544 | F: drivers/tty/serial/altera_jtaguart.c | 544 | F: drivers/tty/serial/altera_jtaguart.c |
| @@ -2611,9 +2611,9 @@ DC395x SCSI driver | |||
| 2611 | M: Oliver Neukum <oliver@neukum.org> | 2611 | M: Oliver Neukum <oliver@neukum.org> |
| 2612 | M: Ali Akcaagac <aliakc@web.de> | 2612 | M: Ali Akcaagac <aliakc@web.de> |
| 2613 | M: Jamie Lenehan <lenehan@twibble.org> | 2613 | M: Jamie Lenehan <lenehan@twibble.org> |
| 2614 | W: http://twibble.org/dist/dc395x/ | ||
| 2615 | L: dc395x@twibble.org | 2614 | L: dc395x@twibble.org |
| 2616 | L: http://lists.twibble.org/mailman/listinfo/dc395x/ | 2615 | W: http://twibble.org/dist/dc395x/ |
| 2616 | W: http://lists.twibble.org/mailman/listinfo/dc395x/ | ||
| 2617 | S: Maintained | 2617 | S: Maintained |
| 2618 | F: Documentation/scsi/dc395x.txt | 2618 | F: Documentation/scsi/dc395x.txt |
| 2619 | F: drivers/scsi/dc395x.* | 2619 | F: drivers/scsi/dc395x.* |
| @@ -8443,8 +8443,8 @@ TARGET SUBSYSTEM | |||
| 8443 | M: Nicholas A. Bellinger <nab@linux-iscsi.org> | 8443 | M: Nicholas A. Bellinger <nab@linux-iscsi.org> |
| 8444 | L: linux-scsi@vger.kernel.org | 8444 | L: linux-scsi@vger.kernel.org |
| 8445 | L: target-devel@vger.kernel.org | 8445 | L: target-devel@vger.kernel.org |
| 8446 | L: http://groups.google.com/group/linux-iscsi-target-dev | ||
| 8447 | W: http://www.linux-iscsi.org | 8446 | W: http://www.linux-iscsi.org |
| 8447 | W: http://groups.google.com/group/linux-iscsi-target-dev | ||
| 8448 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master | 8448 | T: git git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending.git master |
| 8449 | S: Supported | 8449 | S: Supported |
| 8450 | F: drivers/target/ | 8450 | F: drivers/target/ |
| @@ -605,10 +605,11 @@ endif | |||
| 605 | ifdef CONFIG_CC_STACKPROTECTOR_REGULAR | 605 | ifdef CONFIG_CC_STACKPROTECTOR_REGULAR |
| 606 | stackp-flag := -fstack-protector | 606 | stackp-flag := -fstack-protector |
| 607 | ifeq ($(call cc-option, $(stackp-flag)),) | 607 | ifeq ($(call cc-option, $(stackp-flag)),) |
| 608 | $(warning Cannot use CONFIG_CC_STACKPROTECTOR: \ | 608 | $(warning Cannot use CONFIG_CC_STACKPROTECTOR_REGULAR: \ |
| 609 | -fstack-protector not supported by compiler)) | 609 | -fstack-protector not supported by compiler) |
| 610 | endif | 610 | endif |
| 611 | else ifdef CONFIG_CC_STACKPROTECTOR_STRONG | 611 | else |
| 612 | ifdef CONFIG_CC_STACKPROTECTOR_STRONG | ||
| 612 | stackp-flag := -fstack-protector-strong | 613 | stackp-flag := -fstack-protector-strong |
| 613 | ifeq ($(call cc-option, $(stackp-flag)),) | 614 | ifeq ($(call cc-option, $(stackp-flag)),) |
| 614 | $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \ | 615 | $(warning Cannot use CONFIG_CC_STACKPROTECTOR_STRONG: \ |
| @@ -618,6 +619,7 @@ else | |||
| 618 | # Force off for distro compilers that enable stack protector by default. | 619 | # Force off for distro compilers that enable stack protector by default. |
| 619 | stackp-flag := $(call cc-option, -fno-stack-protector) | 620 | stackp-flag := $(call cc-option, -fno-stack-protector) |
| 620 | endif | 621 | endif |
| 622 | endif | ||
| 621 | KBUILD_CFLAGS += $(stackp-flag) | 623 | KBUILD_CFLAGS += $(stackp-flag) |
| 622 | 624 | ||
| 623 | # This warning generated too much noise in a regular build. | 625 | # This warning generated too much noise in a regular build. |
diff --git a/drivers/fmc/fmc-write-eeprom.c b/drivers/fmc/fmc-write-eeprom.c index ee5b47904130..9bb2cbd5c9f2 100644 --- a/drivers/fmc/fmc-write-eeprom.c +++ b/drivers/fmc/fmc-write-eeprom.c | |||
| @@ -27,7 +27,7 @@ FMC_PARAM_BUSID(fwe_drv); | |||
| 27 | /* The "file=" is like the generic "gateware=" used elsewhere */ | 27 | /* The "file=" is like the generic "gateware=" used elsewhere */ |
| 28 | static char *fwe_file[FMC_MAX_CARDS]; | 28 | static char *fwe_file[FMC_MAX_CARDS]; |
| 29 | static int fwe_file_n; | 29 | static int fwe_file_n; |
| 30 | module_param_array_named(file, fwe_file, charp, &fwe_file_n, 444); | 30 | module_param_array_named(file, fwe_file, charp, &fwe_file_n, 0444); |
| 31 | 31 | ||
| 32 | static int fwe_run_tlv(struct fmc_device *fmc, const struct firmware *fw, | 32 | static int fwe_run_tlv(struct fmc_device *fmc, const struct firmware *fw, |
| 33 | int write) | 33 | int write) |
diff --git a/drivers/iommu/omap-iommu-debug.c b/drivers/iommu/omap-iommu-debug.c index d97fbe4fb9b1..80fffba7f12d 100644 --- a/drivers/iommu/omap-iommu-debug.c +++ b/drivers/iommu/omap-iommu-debug.c | |||
| @@ -354,8 +354,8 @@ DEBUG_FOPS(mem); | |||
| 354 | return -ENOMEM; \ | 354 | return -ENOMEM; \ |
| 355 | } | 355 | } |
| 356 | 356 | ||
| 357 | #define DEBUG_ADD_FILE(name) __DEBUG_ADD_FILE(name, 600) | 357 | #define DEBUG_ADD_FILE(name) __DEBUG_ADD_FILE(name, 0600) |
| 358 | #define DEBUG_ADD_FILE_RO(name) __DEBUG_ADD_FILE(name, 400) | 358 | #define DEBUG_ADD_FILE_RO(name) __DEBUG_ADD_FILE(name, 0400) |
| 359 | 359 | ||
| 360 | static int iommu_debug_register(struct device *dev, void *data) | 360 | static int iommu_debug_register(struct device *dev, void *data) |
| 361 | { | 361 | { |
diff --git a/include/linux/ipc_namespace.h b/include/linux/ipc_namespace.h index e7831d203737..35e7eca4e33b 100644 --- a/include/linux/ipc_namespace.h +++ b/include/linux/ipc_namespace.h | |||
| @@ -118,9 +118,7 @@ extern int mq_init_ns(struct ipc_namespace *ns); | |||
| 118 | * the new maximum will handle anyone else. I may have to revisit this | 118 | * the new maximum will handle anyone else. I may have to revisit this |
| 119 | * in the future. | 119 | * in the future. |
| 120 | */ | 120 | */ |
| 121 | #define MIN_QUEUESMAX 1 | ||
| 122 | #define DFLT_QUEUESMAX 256 | 121 | #define DFLT_QUEUESMAX 256 |
| 123 | #define HARD_QUEUESMAX 1024 | ||
| 124 | #define MIN_MSGMAX 1 | 122 | #define MIN_MSGMAX 1 |
| 125 | #define DFLT_MSG 10U | 123 | #define DFLT_MSG 10U |
| 126 | #define DFLT_MSGMAX 10 | 124 | #define DFLT_MSGMAX 10 |
diff --git a/ipc/mq_sysctl.c b/ipc/mq_sysctl.c index 383d638340b8..5bb8bfe67149 100644 --- a/ipc/mq_sysctl.c +++ b/ipc/mq_sysctl.c | |||
| @@ -22,6 +22,16 @@ static void *get_mq(ctl_table *table) | |||
| 22 | return which; | 22 | return which; |
| 23 | } | 23 | } |
| 24 | 24 | ||
| 25 | static int proc_mq_dointvec(ctl_table *table, int write, | ||
| 26 | void __user *buffer, size_t *lenp, loff_t *ppos) | ||
| 27 | { | ||
| 28 | struct ctl_table mq_table; | ||
| 29 | memcpy(&mq_table, table, sizeof(mq_table)); | ||
| 30 | mq_table.data = get_mq(table); | ||
| 31 | |||
| 32 | return proc_dointvec(&mq_table, write, buffer, lenp, ppos); | ||
| 33 | } | ||
| 34 | |||
| 25 | static int proc_mq_dointvec_minmax(ctl_table *table, int write, | 35 | static int proc_mq_dointvec_minmax(ctl_table *table, int write, |
| 26 | void __user *buffer, size_t *lenp, loff_t *ppos) | 36 | void __user *buffer, size_t *lenp, loff_t *ppos) |
| 27 | { | 37 | { |
| @@ -33,12 +43,10 @@ static int proc_mq_dointvec_minmax(ctl_table *table, int write, | |||
| 33 | lenp, ppos); | 43 | lenp, ppos); |
| 34 | } | 44 | } |
| 35 | #else | 45 | #else |
| 46 | #define proc_mq_dointvec NULL | ||
| 36 | #define proc_mq_dointvec_minmax NULL | 47 | #define proc_mq_dointvec_minmax NULL |
| 37 | #endif | 48 | #endif |
| 38 | 49 | ||
| 39 | static int msg_queues_limit_min = MIN_QUEUESMAX; | ||
| 40 | static int msg_queues_limit_max = HARD_QUEUESMAX; | ||
| 41 | |||
| 42 | static int msg_max_limit_min = MIN_MSGMAX; | 50 | static int msg_max_limit_min = MIN_MSGMAX; |
| 43 | static int msg_max_limit_max = HARD_MSGMAX; | 51 | static int msg_max_limit_max = HARD_MSGMAX; |
| 44 | 52 | ||
| @@ -51,9 +59,7 @@ static ctl_table mq_sysctls[] = { | |||
| 51 | .data = &init_ipc_ns.mq_queues_max, | 59 | .data = &init_ipc_ns.mq_queues_max, |
| 52 | .maxlen = sizeof(int), | 60 | .maxlen = sizeof(int), |
| 53 | .mode = 0644, | 61 | .mode = 0644, |
| 54 | .proc_handler = proc_mq_dointvec_minmax, | 62 | .proc_handler = proc_mq_dointvec, |
| 55 | .extra1 = &msg_queues_limit_min, | ||
| 56 | .extra2 = &msg_queues_limit_max, | ||
| 57 | }, | 63 | }, |
| 58 | { | 64 | { |
| 59 | .procname = "msg_max", | 65 | .procname = "msg_max", |
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index ccf1f9fd263a..c3b31179122c 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c | |||
| @@ -433,9 +433,9 @@ static int mqueue_create(struct inode *dir, struct dentry *dentry, | |||
| 433 | error = -EACCES; | 433 | error = -EACCES; |
| 434 | goto out_unlock; | 434 | goto out_unlock; |
| 435 | } | 435 | } |
| 436 | if (ipc_ns->mq_queues_count >= HARD_QUEUESMAX || | 436 | |
| 437 | (ipc_ns->mq_queues_count >= ipc_ns->mq_queues_max && | 437 | if (ipc_ns->mq_queues_count >= ipc_ns->mq_queues_max && |
| 438 | !capable(CAP_SYS_RESOURCE))) { | 438 | !capable(CAP_SYS_RESOURCE)) { |
| 439 | error = -ENOSPC; | 439 | error = -ENOSPC; |
| 440 | goto out_unlock; | 440 | goto out_unlock; |
| 441 | } | 441 | } |
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index da23eb96779f..4df39b1bde91 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c | |||
| @@ -1166,8 +1166,10 @@ alloc: | |||
| 1166 | } else { | 1166 | } else { |
| 1167 | ret = do_huge_pmd_wp_page_fallback(mm, vma, address, | 1167 | ret = do_huge_pmd_wp_page_fallback(mm, vma, address, |
| 1168 | pmd, orig_pmd, page, haddr); | 1168 | pmd, orig_pmd, page, haddr); |
| 1169 | if (ret & VM_FAULT_OOM) | 1169 | if (ret & VM_FAULT_OOM) { |
| 1170 | split_huge_page(page); | 1170 | split_huge_page(page); |
| 1171 | ret |= VM_FAULT_FALLBACK; | ||
| 1172 | } | ||
| 1171 | put_page(page); | 1173 | put_page(page); |
| 1172 | } | 1174 | } |
| 1173 | count_vm_event(THP_FAULT_FALLBACK); | 1175 | count_vm_event(THP_FAULT_FALLBACK); |
| @@ -1179,9 +1181,10 @@ alloc: | |||
| 1179 | if (page) { | 1181 | if (page) { |
| 1180 | split_huge_page(page); | 1182 | split_huge_page(page); |
| 1181 | put_page(page); | 1183 | put_page(page); |
| 1182 | } | 1184 | } else |
| 1185 | split_huge_page_pmd(vma, address, pmd); | ||
| 1186 | ret |= VM_FAULT_FALLBACK; | ||
| 1183 | count_vm_event(THP_FAULT_FALLBACK); | 1187 | count_vm_event(THP_FAULT_FALLBACK); |
| 1184 | ret |= VM_FAULT_OOM; | ||
| 1185 | goto out; | 1188 | goto out; |
| 1186 | } | 1189 | } |
| 1187 | 1190 | ||
diff --git a/mm/memcontrol.c b/mm/memcontrol.c index 53385cd4e6f0..ce7a8cc7b404 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c | |||
| @@ -1687,7 +1687,7 @@ void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) | |||
| 1687 | * protects memcg_name and makes sure that parallel ooms do not | 1687 | * protects memcg_name and makes sure that parallel ooms do not |
| 1688 | * interleave | 1688 | * interleave |
| 1689 | */ | 1689 | */ |
| 1690 | static DEFINE_SPINLOCK(oom_info_lock); | 1690 | static DEFINE_MUTEX(oom_info_lock); |
| 1691 | struct cgroup *task_cgrp; | 1691 | struct cgroup *task_cgrp; |
| 1692 | struct cgroup *mem_cgrp; | 1692 | struct cgroup *mem_cgrp; |
| 1693 | static char memcg_name[PATH_MAX]; | 1693 | static char memcg_name[PATH_MAX]; |
| @@ -1698,7 +1698,7 @@ void mem_cgroup_print_oom_info(struct mem_cgroup *memcg, struct task_struct *p) | |||
| 1698 | if (!p) | 1698 | if (!p) |
| 1699 | return; | 1699 | return; |
| 1700 | 1700 | ||
| 1701 | spin_lock(&oom_info_lock); | 1701 | mutex_lock(&oom_info_lock); |
| 1702 | rcu_read_lock(); | 1702 | rcu_read_lock(); |
| 1703 | 1703 | ||
| 1704 | mem_cgrp = memcg->css.cgroup; | 1704 | mem_cgrp = memcg->css.cgroup; |
| @@ -1767,7 +1767,7 @@ done: | |||
| 1767 | 1767 | ||
| 1768 | pr_cont("\n"); | 1768 | pr_cont("\n"); |
| 1769 | } | 1769 | } |
| 1770 | spin_unlock(&oom_info_lock); | 1770 | mutex_unlock(&oom_info_lock); |
| 1771 | } | 1771 | } |
| 1772 | 1772 | ||
| 1773 | /* | 1773 | /* |
diff --git a/mm/memory.c b/mm/memory.c index be6a0c0d4ae0..22dfa617bddb 100644 --- a/mm/memory.c +++ b/mm/memory.c | |||
| @@ -3348,6 +3348,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma, | |||
| 3348 | if (ret & VM_FAULT_LOCKED) | 3348 | if (ret & VM_FAULT_LOCKED) |
| 3349 | unlock_page(vmf.page); | 3349 | unlock_page(vmf.page); |
| 3350 | ret = VM_FAULT_HWPOISON; | 3350 | ret = VM_FAULT_HWPOISON; |
| 3351 | page_cache_release(vmf.page); | ||
| 3351 | goto uncharge_out; | 3352 | goto uncharge_out; |
| 3352 | } | 3353 | } |
| 3353 | 3354 | ||
| @@ -3703,7 +3704,6 @@ static int __handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma, | |||
| 3703 | if (unlikely(is_vm_hugetlb_page(vma))) | 3704 | if (unlikely(is_vm_hugetlb_page(vma))) |
| 3704 | return hugetlb_fault(mm, vma, address, flags); | 3705 | return hugetlb_fault(mm, vma, address, flags); |
| 3705 | 3706 | ||
| 3706 | retry: | ||
| 3707 | pgd = pgd_offset(mm, address); | 3707 | pgd = pgd_offset(mm, address); |
| 3708 | pud = pud_alloc(mm, pgd, address); | 3708 | pud = pud_alloc(mm, pgd, address); |
| 3709 | if (!pud) | 3709 | if (!pud) |
| @@ -3741,20 +3741,13 @@ retry: | |||
| 3741 | if (dirty && !pmd_write(orig_pmd)) { | 3741 | if (dirty && !pmd_write(orig_pmd)) { |
| 3742 | ret = do_huge_pmd_wp_page(mm, vma, address, pmd, | 3742 | ret = do_huge_pmd_wp_page(mm, vma, address, pmd, |
| 3743 | orig_pmd); | 3743 | orig_pmd); |
| 3744 | /* | 3744 | if (!(ret & VM_FAULT_FALLBACK)) |
| 3745 | * If COW results in an oom, the huge pmd will | 3745 | return ret; |
| 3746 | * have been split, so retry the fault on the | ||
| 3747 | * pte for a smaller charge. | ||
| 3748 | */ | ||
| 3749 | if (unlikely(ret & VM_FAULT_OOM)) | ||
| 3750 | goto retry; | ||
| 3751 | return ret; | ||
| 3752 | } else { | 3746 | } else { |
| 3753 | huge_pmd_set_accessed(mm, vma, address, pmd, | 3747 | huge_pmd_set_accessed(mm, vma, address, pmd, |
| 3754 | orig_pmd, dirty); | 3748 | orig_pmd, dirty); |
| 3749 | return 0; | ||
| 3755 | } | 3750 | } |
| 3756 | |||
| 3757 | return 0; | ||
| 3758 | } | 3751 | } |
| 3759 | } | 3752 | } |
| 3760 | 3753 | ||
