Merge misc fixes from Andrew Morton. * emailed patches from Andrew Morton <akpm@linux-foundation.org>: alpha: boot: fix build breakage introduced by system.h disintegration memcg: initialize kmem-cache destroying work earlier Randy has moved ksm: fix m68k build: only NUMA needs pfn_to_nid dmi_scan: fix missing check for _DMI_ signature in smbios_present() Revert parts of "hlist: drop the node parameter from iterators" idr: remove WARN_ON_ONCE() on negative IDs mm/mempolicy.c: fix sp_node_init() argument ordering mm/mempolicy.c: fix wrong sp_node insertion ipc: don't allocate a copy larger than max ipc: fix potential oops when src msg > 4k w/ MSG_COPY
Unified · Split
| @@ -953,11 +953,11 @@ S: Blacksburg, Virginia 24061 · 952 unmodified lines | ||
| 953 | 953 | S: USA |
| 954 | 954 | |
| 955 | 955 | N: Randy Dunlap |
| 956 | −E: rdunlap@xenotime.net | |
| 957 | −W: http://www.xenotime.net/linux/linux.html | |
| 958 | −W: http://www.linux-usb.org | |
| 956 | +E: rdunlap@infradead.org | |
| 957 | +W: http://www.infradead.org/~rdunlap/ | |
| 959 | 958 | D: Linux-USB subsystem, USB core/UHCI/printer/storage drivers |
| 960 | 959 | D: x86 SMP, ACPI, bootflag hacking |
| 960 | +D: documentation, builds | |
| 961 | 961 | S: (ask for current address) |
| 962 | 962 | S: USA |
| 963 | 963 | |
| @@ -60,8 +60,7 @@ own source tree. For example: · 59 unmodified lines | ||
| 60 | 60 | "dontdiff" is a list of files which are generated by the kernel during |
| 61 | 61 | the build process, and should be ignored in any diff(1)-generated |
| 62 | 62 | patch. The "dontdiff" file is included in the kernel tree in |
| 63 | −2.6.12 and later. For earlier kernel versions, you can get it | |
| 64 | −from <http://www.xenotime.net/linux/doc/dontdiff>. | |
| 63 | +2.6.12 and later. | |
| 65 | 64 | |
| 66 | 65 | Make sure your patch does not include any extra files which do not |
| 67 | 66 | belong in a patch submission. Make sure to review your patch -after- |
| @@ -170,5 +170,5 @@ Reminder: sizeof() result is of type size_t. · 169 unmodified lines | ||
| 170 | 170 | Thank you for your cooperation and attention. |
| 171 | 171 | |
| 172 | 172 | |
| 173 | −By Randy Dunlap <rdunlap@xenotime.net> and | |
| 173 | +By Randy Dunlap <rdunlap@infradead.org> and | |
| 174 | 174 | Andrew Murray <amurray@mpc-data.co.uk> |
| @@ -4,6 +4,7 @@ · 3 unmodified lines | ||
| 4 | 4 | * initial bootloader stuff.. |
| 5 | 5 | */ |
| 6 | 6 | |
| 7 | +#include <asm/pal.h> | |
| 7 | 8 | |
| 8 | 9 | .set noreorder |
| 9 | 10 | .globl __start |
| @@ -442,7 +442,6 @@ static int __init dmi_present(const char __iomem *p) · 441 unmodified lines | ||
| 442 | 442 | static int __init smbios_present(const char __iomem *p) |
| 443 | 443 | { |
| 444 | 444 | u8 buf[32]; |
| 445 | − int offset = 0; | |
| 446 | 445 | |
| 447 | 446 | memcpy_fromio(buf, p, 32); |
| 448 | 447 | if ((buf[5] < 32) && dmi_checksum(buf, buf[5])) { |
| @@ -461,9 +460,9 @@ static int __init smbios_present(const char __iomem *p) · 12 unmodified lines | ||
| 461 | 460 | dmi_ver = 0x0206; |
| 462 | 461 | break; |
| 463 | 462 | } |
| 464 | − offset = 16; | |
| 463 | + return memcmp(p + 16, "_DMI_", 5) || dmi_present(p + 16); | |
| 465 | 464 | } |
| 466 | − return dmi_present(buf + offset); | |
| 465 | + return 1; | |
| 467 | 466 | } |
| 468 | 467 | |
| 469 | 468 | void __init dmi_scan_machine(void) |
| @@ -820,15 +820,17 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, · 819 unmodified lines | ||
| 820 | 820 | struct msg_msg *copy = NULL; |
| 821 | 821 | unsigned long copy_number = 0; |
| 822 | 822 | |
| 823 | + ns = current->nsproxy->ipc_ns; | |
| 824 | + | |
| 823 | 825 | if (msqid < 0 || (long) bufsz < 0) |
| 824 | 826 | return -EINVAL; |
| 825 | 827 | if (msgflg & MSG_COPY) { |
| 826 | − copy = prepare_copy(buf, bufsz, msgflg, &msgtyp, ©_number); | |
| 828 | + copy = prepare_copy(buf, min_t(size_t, bufsz, ns->msg_ctlmax), | |
| 829 | + msgflg, &msgtyp, ©_number); | |
| 827 | 830 | if (IS_ERR(copy)) |
| 828 | 831 | return PTR_ERR(copy); |
| 829 | 832 | } |
| 830 | 833 | mode = convert_mode(&msgtyp, msgflg); |
| 831 | − ns = current->nsproxy->ipc_ns; | |
| 832 | 834 | |
| 833 | 835 | msq = msg_lock_check(ns, msqid); |
| 834 | 836 | if (IS_ERR(msq)) { |
| @@ -117,9 +117,6 @@ struct msg_msg *copy_msg(struct msg_msg *src, struct msg_msg *dst) · 116 unmodified lines | ||
| 117 | 117 | if (alen > DATALEN_MSG) |
| 118 | 118 | alen = DATALEN_MSG; |
| 119 | 119 | |
| 120 | − dst->next = NULL; | |
| 121 | − dst->security = NULL; | |
| 122 | − | |
| 123 | 120 | memcpy(dst + 1, src + 1, alen); |
| 124 | 121 | |
| 125 | 122 | len -= alen; |
| @@ -131,7 +131,7 @@ static int smpboot_thread_fn(void *data) · 130 unmodified lines | ||
| 131 | 131 | continue; |
| 132 | 132 | } |
| 133 | 133 | |
| 134 | − //BUG_ON(td->cpu != smp_processor_id()); | |
| 134 | + BUG_ON(td->cpu != smp_processor_id()); | |
| 135 | 135 | |
| 136 | 136 | /* Check for state change setup */ |
| 137 | 137 | switch (td->status) { |
| @@ -569,8 +569,7 @@ void idr_remove(struct idr *idp, int id) · 568 unmodified lines | ||
| 569 | 569 | struct idr_layer *p; |
| 570 | 570 | struct idr_layer *to_free; |
| 571 | 571 | |
| 572 | − /* see comment in idr_find_slowpath() */ | |
| 573 | − if (WARN_ON_ONCE(id < 0)) | |
| 572 | + if (id < 0) | |
| 574 | 573 | return; |
| 575 | 574 | |
| 576 | 575 | sub_remove(idp, (idp->layers - 1) * IDR_BITS, id); |
| @@ -667,15 +666,7 @@ void *idr_find_slowpath(struct idr *idp, int id) · 90 unmodified lines | ||
| 667 | 666 | int n; |
| 668 | 667 | struct idr_layer *p; |
| 669 | 668 | |
| 670 | − /* | |
| 671 | − * If @id is negative, idr_find() used to ignore the sign bit and | |
| 672 | − * performed lookup with the rest of bits, which is weird and can | |
| 673 | − * lead to very obscure bugs. We're now returning NULL for all | |
| 674 | − * negative IDs but just in case somebody was depending on the sign | |
| 675 | − * bit being ignored, let's trigger WARN_ON_ONCE() so that they can | |
| 676 | − * be detected and fixed. WARN_ON_ONCE() can later be removed. | |
| 677 | − */ | |
| 678 | − if (WARN_ON_ONCE(id < 0)) | |
| 669 | + if (id < 0) | |
| 679 | 670 | return NULL; |
| 680 | 671 | |
| 681 | 672 | p = rcu_dereference_raw(idp->top); |
| @@ -824,8 +815,7 @@ void *idr_replace(struct idr *idp, void *ptr, int id) · 142 unmodified lines | ||
| 824 | 815 | int n; |
| 825 | 816 | struct idr_layer *p, *old_p; |
| 826 | 817 | |
| 827 | − /* see comment in idr_find_slowpath() */ | |
| 828 | − if (WARN_ON_ONCE(id < 0)) | |
| 818 | + if (id < 0) | |
| 829 | 819 | return ERR_PTR(-EINVAL); |
| 830 | 820 | |
| 831 | 821 | p = idp->top; |
| @@ -489,7 +489,7 @@ out: page = NULL; · 488 unmodified lines | ||
| 489 | 489 | */ |
| 490 | 490 | static inline int get_kpfn_nid(unsigned long kpfn) |
| 491 | 491 | { |
| 492 | − return ksm_merge_across_nodes ? 0 : pfn_to_nid(kpfn); | |
| 492 | + return ksm_merge_across_nodes ? 0 : NUMA(pfn_to_nid(kpfn)); | |
| 493 | 493 | } |
| 494 | 494 | |
| 495 | 495 | static void remove_node_from_stable_tree(struct stable_node *stable_node) |
| @@ -3012,6 +3012,8 @@ void memcg_update_array_size(int num) · 3011 unmodified lines | ||
| 3012 | 3012 | memcg_limited_groups_array_size = memcg_caches_array_size(num); |
| 3013 | 3013 | } |
| 3014 | 3014 | |
| 3015 | +static void kmem_cache_destroy_work_func(struct work_struct *w); | |
| 3016 | + | |
| 3015 | 3017 | int memcg_update_cache_size(struct kmem_cache *s, int num_groups) |
| 3016 | 3018 | { |
| 3017 | 3019 | struct memcg_cache_params *cur_params = s->memcg_params; |
| @@ -3031,6 +3033,8 @@ int memcg_update_cache_size(struct kmem_cache *s, int num_groups) · 13 unmodified lines | ||
| 3031 | 3033 | return -ENOMEM; |
| 3032 | 3034 | } |
| 3033 | 3035 | |
| 3036 | + INIT_WORK(&s->memcg_params->destroy, | |
| 3037 | + kmem_cache_destroy_work_func); | |
| 3034 | 3038 | s->memcg_params->is_root_cache = true; |
| 3035 | 3039 | |
| 3036 | 3040 | /* |
| @@ -3078,6 +3082,8 @@ int memcg_register_cache(struct mem_cgroup *memcg, struct kmem_cache *s, · 41 unmodified lines | ||
| 3078 | 3082 | if (!s->memcg_params) |
| 3079 | 3083 | return -ENOMEM; |
| 3080 | 3084 | |
| 3085 | + INIT_WORK(&s->memcg_params->destroy, | |
| 3086 | + kmem_cache_destroy_work_func); | |
| 3081 | 3087 | if (memcg) { |
| 3082 | 3088 | s->memcg_params->memcg = memcg; |
| 3083 | 3089 | s->memcg_params->root_cache = root_cache; |
| @@ -3358,8 +3364,6 @@ static void mem_cgroup_destroy_all_caches(struct mem_cgroup *memcg) · 274 unmodified lines | ||
| 3358 | 3364 | list_for_each_entry(params, &memcg->memcg_slab_caches, list) { |
| 3359 | 3365 | cachep = memcg_params_to_cache(params); |
| 3360 | 3366 | cachep->memcg_params->dead = true; |
| 3361 | − INIT_WORK(&cachep->memcg_params->destroy, | |
| 3362 | − kmem_cache_destroy_work_func); | |
| 3363 | 3367 | schedule_work(&cachep->memcg_params->destroy); |
| 3364 | 3368 | } |
| 3365 | 3369 | mutex_unlock(&memcg->slab_caches_mutex); |
| @@ -2390,9 +2390,9 @@ restart: · 2389 unmodified lines | ||
| 2390 | 2390 | |
| 2391 | 2391 | *mpol_new = *n->policy; |
| 2392 | 2392 | atomic_set(&mpol_new->refcnt, 1); |
| 2393 | − sp_node_init(n_new, n->end, end, mpol_new); | |
| 2394 | − sp_insert(sp, n_new); | |
| 2393 | + sp_node_init(n_new, end, n->end, mpol_new); | |
| 2395 | 2394 | n->end = start; |
| 2395 | + sp_insert(sp, n_new); | |
| 2396 | 2396 | n_new = NULL; |
| 2397 | 2397 | mpol_new = NULL; |
| 2398 | 2398 | break; |
| @@ -655,7 +655,7 @@ static struct p9_trans_module p9_virtio_trans = { · 654 unmodified lines | ||
| 655 | 655 | .create = p9_virtio_create, |
| 656 | 656 | .close = p9_virtio_close, |
| 657 | 657 | .request = p9_virtio_request, |
| 658 | − //.zc_request = p9_virtio_zc_request, | |
| 658 | + .zc_request = p9_virtio_zc_request, | |
| 659 | 659 | .cancel = p9_virtio_cancel, |
| 660 | 660 | /* |
| 661 | 661 | * We leave one entry for input and one entry for response |