summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichal Hocko <mhocko@suse.com>2017-05-08 18:57:27 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2017-05-08 20:15:13 -0400
commit752ade68cbd81d0321dfecc188f655a945551b25 (patch)
tree34b2ba4cabedb829639c925b7b38dd2f73aa02a9
parent81be3dee96346fbe08c31be5ef74f03f6b63cf68 (diff)
treewide: use kv[mz]alloc* rather than opencoded variants
There are many code paths opencoding kvmalloc. Let's use the helper instead. The main difference to kvmalloc is that those users are usually not considering all the aspects of the memory allocator. E.g. allocation requests <= 32kB (with 4kB pages) are basically never failing and invoke OOM killer to satisfy the allocation. This sounds too disruptive for something that has a reasonable fallback - the vmalloc. On the other hand those requests might fallback to vmalloc even when the memory allocator would succeed after several more reclaim/compaction attempts previously. There is no guarantee something like that happens though. This patch converts many of those places to kv[mz]alloc* helpers because they are more conservative. Link: http://lkml.kernel.org/r/20170306103327.2766-2-mhocko@kernel.org Signed-off-by: Michal Hocko <mhocko@suse.com> Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com> # Xen bits Acked-by: Kees Cook <keescook@chromium.org> Acked-by: Vlastimil Babka <vbabka@suse.cz> Acked-by: Andreas Dilger <andreas.dilger@intel.com> # Lustre Acked-by: Christian Borntraeger <borntraeger@de.ibm.com> # KVM/s390 Acked-by: Dan Williams <dan.j.williams@intel.com> # nvdim Acked-by: David Sterba <dsterba@suse.com> # btrfs Acked-by: Ilya Dryomov <idryomov@gmail.com> # Ceph Acked-by: Tariq Toukan <tariqt@mellanox.com> # mlx4 Acked-by: Leon Romanovsky <leonro@mellanox.com> # mlx5 Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Cc: Heiko Carstens <heiko.carstens@de.ibm.com> Cc: Herbert Xu <herbert@gondor.apana.org.au> Cc: Anton Vorontsov <anton@enomsg.org> Cc: Colin Cross <ccross@android.com> Cc: Tony Luck <tony.luck@intel.com> Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net> Cc: Ben Skeggs <bskeggs@redhat.com> Cc: Kent Overstreet <kent.overstreet@gmail.com> Cc: Santosh Raspatur <santosh@chelsio.com> Cc: Hariprasad S <hariprasad@chelsio.com> Cc: Yishai Hadas <yishaih@mellanox.com> Cc: Oleg Drokin <oleg.drokin@intel.com> Cc: "Yan, Zheng" <zyan@redhat.com> Cc: Alexander Viro <viro@zeniv.linux.org.uk> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Eric Dumazet <eric.dumazet@gmail.com> Cc: David Miller <davem@davemloft.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--arch/s390/kvm/kvm-s390.c10
-rw-r--r--crypto/lzo.c4
-rw-r--r--drivers/acpi/apei/erst.c8
-rw-r--r--drivers/char/agp/generic.c8
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_gem.c4
-rw-r--r--drivers/md/bcache/util.h12
-rw-r--r--drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h3
-rw-r--r--drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c29
-rw-r--r--drivers/net/ethernet/chelsio/cxgb3/l2t.c8
-rw-r--r--drivers/net/ethernet/chelsio/cxgb3/l2t.h1
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c12
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4.h3
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c10
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c8
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c31
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c14
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/l2t.c2
-rw-r--r--drivers/net/ethernet/chelsio/cxgb4/sched.c12
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/en_tx.c9
-rw-r--r--drivers/net/ethernet/mellanox/mlx4/mr.c9
-rw-r--r--drivers/nvdimm/dimm_devs.c5
-rw-r--r--drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c11
-rw-r--r--drivers/xen/evtchn.c14
-rw-r--r--fs/btrfs/ctree.c9
-rw-r--r--fs/btrfs/ioctl.c9
-rw-r--r--fs/btrfs/send.c27
-rw-r--r--fs/ceph/file.c9
-rw-r--r--fs/select.c5
-rw-r--r--fs/xattr.c27
-rw-r--r--include/linux/mlx5/driver.h7
-rw-r--r--include/linux/mm.h8
-rw-r--r--lib/iov_iter.c5
-rw-r--r--mm/frame_vector.c5
-rw-r--r--net/ipv4/inet_hashtables.c6
-rw-r--r--net/ipv4/tcp_metrics.c5
-rw-r--r--net/mpls/af_mpls.c5
-rw-r--r--net/netfilter/x_tables.c21
-rw-r--r--net/netfilter/xt_recent.c5
-rw-r--r--net/sched/sch_choke.c5
-rw-r--r--net/sched/sch_fq_codel.c26
-rw-r--r--net/sched/sch_hhf.c33
-rw-r--r--net/sched/sch_netem.c6
-rw-r--r--net/sched/sch_sfq.c6
-rw-r--r--security/keys/keyctl.c22
44 files changed, 128 insertions, 350 deletions
diff --git a/arch/s390/kvm/kvm-s390.c b/arch/s390/kvm/kvm-s390.c
index d5c5c911821a..323297e55e80 100644
--- a/arch/s390/kvm/kvm-s390.c
+++ b/arch/s390/kvm/kvm-s390.c
@@ -1166,10 +1166,7 @@ static long kvm_s390_get_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1166 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX) 1166 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1167 return -EINVAL; 1167 return -EINVAL;
1168 1168
1169 keys = kmalloc_array(args->count, sizeof(uint8_t), 1169 keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL);
1170 GFP_KERNEL | __GFP_NOWARN);
1171 if (!keys)
1172 keys = vmalloc(sizeof(uint8_t) * args->count);
1173 if (!keys) 1170 if (!keys)
1174 return -ENOMEM; 1171 return -ENOMEM;
1175 1172
@@ -1211,10 +1208,7 @@ static long kvm_s390_set_skeys(struct kvm *kvm, struct kvm_s390_skeys *args)
1211 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX) 1208 if (args->count < 1 || args->count > KVM_S390_SKEYS_MAX)
1212 return -EINVAL; 1209 return -EINVAL;
1213 1210
1214 keys = kmalloc_array(args->count, sizeof(uint8_t), 1211 keys = kvmalloc_array(args->count, sizeof(uint8_t), GFP_KERNEL);
1215 GFP_KERNEL | __GFP_NOWARN);
1216 if (!keys)
1217 keys = vmalloc(sizeof(uint8_t) * args->count);
1218 if (!keys) 1212 if (!keys)
1219 return -ENOMEM; 1213 return -ENOMEM;
1220 1214
diff --git a/crypto/lzo.c b/crypto/lzo.c
index 168df784da84..218567d717d6 100644
--- a/crypto/lzo.c
+++ b/crypto/lzo.c
@@ -32,9 +32,7 @@ static void *lzo_alloc_ctx(struct crypto_scomp *tfm)
32{ 32{
33 void *ctx; 33 void *ctx;
34 34
35 ctx = kmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL | __GFP_NOWARN); 35 ctx = kvmalloc(LZO1X_MEM_COMPRESS, GFP_KERNEL);
36 if (!ctx)
37 ctx = vmalloc(LZO1X_MEM_COMPRESS);
38 if (!ctx) 36 if (!ctx)
39 return ERR_PTR(-ENOMEM); 37 return ERR_PTR(-ENOMEM);
40 38
diff --git a/drivers/acpi/apei/erst.c b/drivers/acpi/apei/erst.c
index 7207e5fc9d3d..2c462beee551 100644
--- a/drivers/acpi/apei/erst.c
+++ b/drivers/acpi/apei/erst.c
@@ -513,7 +513,7 @@ retry:
513 if (i < erst_record_id_cache.len) 513 if (i < erst_record_id_cache.len)
514 goto retry; 514 goto retry;
515 if (erst_record_id_cache.len >= erst_record_id_cache.size) { 515 if (erst_record_id_cache.len >= erst_record_id_cache.size) {
516 int new_size, alloc_size; 516 int new_size;
517 u64 *new_entries; 517 u64 *new_entries;
518 518
519 new_size = erst_record_id_cache.size * 2; 519 new_size = erst_record_id_cache.size * 2;
@@ -524,11 +524,7 @@ retry:
524 pr_warn(FW_WARN "too many record IDs!\n"); 524 pr_warn(FW_WARN "too many record IDs!\n");
525 return 0; 525 return 0;
526 } 526 }
527 alloc_size = new_size * sizeof(entries[0]); 527 new_entries = kvmalloc(new_size * sizeof(entries[0]), GFP_KERNEL);
528 if (alloc_size < PAGE_SIZE)
529 new_entries = kmalloc(alloc_size, GFP_KERNEL);
530 else
531 new_entries = vmalloc(alloc_size);
532 if (!new_entries) 528 if (!new_entries)
533 return -ENOMEM; 529 return -ENOMEM;
534 memcpy(new_entries, entries, 530 memcpy(new_entries, entries,
diff --git a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c
index f002fa5d1887..bdf418cac8ef 100644
--- a/drivers/char/agp/generic.c
+++ b/drivers/char/agp/generic.c
@@ -88,13 +88,7 @@ static int agp_get_key(void)
88 88
89void agp_alloc_page_array(size_t size, struct agp_memory *mem) 89void agp_alloc_page_array(size_t size, struct agp_memory *mem)
90{ 90{
91 mem->pages = NULL; 91 mem->pages = kvmalloc(size, GFP_KERNEL);
92
93 if (size <= 2*PAGE_SIZE)
94 mem->pages = kmalloc(size, GFP_KERNEL | __GFP_NOWARN);
95 if (mem->pages == NULL) {
96 mem->pages = vmalloc(size);
97 }
98} 92}
99EXPORT_SYMBOL(agp_alloc_page_array); 93EXPORT_SYMBOL(agp_alloc_page_array);
100 94
diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c
index ca5397beb357..2170534101ca 100644
--- a/drivers/gpu/drm/nouveau/nouveau_gem.c
+++ b/drivers/gpu/drm/nouveau/nouveau_gem.c
@@ -568,9 +568,7 @@ u_memcpya(uint64_t user, unsigned nmemb, unsigned size)
568 568
569 size *= nmemb; 569 size *= nmemb;
570 570
571 mem = kmalloc(size, GFP_KERNEL | __GFP_NOWARN); 571 mem = kvmalloc(size, GFP_KERNEL);
572 if (!mem)
573 mem = vmalloc(size);
574 if (!mem) 572 if (!mem)
575 return ERR_PTR(-ENOMEM); 573 return ERR_PTR(-ENOMEM);
576 574
diff --git a/drivers/md/bcache/util.h b/drivers/md/bcache/util.h
index 5d13930f0f22..cb8d2ccbb6c6 100644
--- a/drivers/md/bcache/util.h
+++ b/drivers/md/bcache/util.h
@@ -43,11 +43,7 @@ struct closure;
43 (heap)->used = 0; \ 43 (heap)->used = 0; \
44 (heap)->size = (_size); \ 44 (heap)->size = (_size); \
45 _bytes = (heap)->size * sizeof(*(heap)->data); \ 45 _bytes = (heap)->size * sizeof(*(heap)->data); \
46 (heap)->data = NULL; \ 46 (heap)->data = kvmalloc(_bytes, (gfp) & GFP_KERNEL); \
47 if (_bytes < KMALLOC_MAX_SIZE) \
48 (heap)->data = kmalloc(_bytes, (gfp)); \
49 if ((!(heap)->data) && ((gfp) & GFP_KERNEL)) \
50 (heap)->data = vmalloc(_bytes); \
51 (heap)->data; \ 47 (heap)->data; \
52}) 48})
53 49
@@ -136,12 +132,8 @@ do { \
136 \ 132 \
137 (fifo)->mask = _allocated_size - 1; \ 133 (fifo)->mask = _allocated_size - 1; \
138 (fifo)->front = (fifo)->back = 0; \ 134 (fifo)->front = (fifo)->back = 0; \
139 (fifo)->data = NULL; \
140 \ 135 \
141 if (_bytes < KMALLOC_MAX_SIZE) \ 136 (fifo)->data = kvmalloc(_bytes, (gfp) & GFP_KERNEL); \
142 (fifo)->data = kmalloc(_bytes, (gfp)); \
143 if ((!(fifo)->data) && ((gfp) & GFP_KERNEL)) \
144 (fifo)->data = vmalloc(_bytes); \
145 (fifo)->data; \ 137 (fifo)->data; \
146}) 138})
147 139
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h
index 920d918ed193..f04e81f33795 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_defs.h
@@ -41,9 +41,6 @@
41 41
42#define VALIDATE_TID 1 42#define VALIDATE_TID 1
43 43
44void *cxgb_alloc_mem(unsigned long size);
45void cxgb_free_mem(void *addr);
46
47/* 44/*
48 * Map an ATID or STID to their entries in the corresponding TID tables. 45 * Map an ATID or STID to their entries in the corresponding TID tables.
49 */ 46 */
diff --git a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
index 76684dcb874c..fa81445e334c 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/cxgb3_offload.c
@@ -1152,27 +1152,6 @@ static void cxgb_redirect(struct dst_entry *old, struct dst_entry *new,
1152} 1152}
1153 1153
1154/* 1154/*
1155 * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.
1156 * The allocated memory is cleared.
1157 */
1158void *cxgb_alloc_mem(unsigned long size)
1159{
1160 void *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
1161
1162 if (!p)
1163 p = vzalloc(size);
1164 return p;
1165}
1166
1167/*
1168 * Free memory allocated through t3_alloc_mem().
1169 */
1170void cxgb_free_mem(void *addr)
1171{
1172 kvfree(addr);
1173}
1174
1175/*
1176 * Allocate and initialize the TID tables. Returns 0 on success. 1155 * Allocate and initialize the TID tables. Returns 0 on success.
1177 */ 1156 */
1178static int init_tid_tabs(struct tid_info *t, unsigned int ntids, 1157static int init_tid_tabs(struct tid_info *t, unsigned int ntids,
@@ -1182,7 +1161,7 @@ static int init_tid_tabs(struct tid_info *t, unsigned int ntids,
1182 unsigned long size = ntids * sizeof(*t->tid_tab) + 1161 unsigned long size = ntids * sizeof(*t->tid_tab) +
1183 natids * sizeof(*t->atid_tab) + nstids * sizeof(*t->stid_tab); 1162 natids * sizeof(*t->atid_tab) + nstids * sizeof(*t->stid_tab);
1184 1163
1185 t->tid_tab = cxgb_alloc_mem(size); 1164 t->tid_tab = kvzalloc(size, GFP_KERNEL);
1186 if (!t->tid_tab) 1165 if (!t->tid_tab)
1187 return -ENOMEM; 1166 return -ENOMEM;
1188 1167
@@ -1218,7 +1197,7 @@ static int init_tid_tabs(struct tid_info *t, unsigned int ntids,
1218 1197
1219static void free_tid_maps(struct tid_info *t) 1198static void free_tid_maps(struct tid_info *t)
1220{ 1199{
1221 cxgb_free_mem(t->tid_tab); 1200 kvfree(t->tid_tab);
1222} 1201}
1223 1202
1224static inline void add_adapter(struct adapter *adap) 1203static inline void add_adapter(struct adapter *adap)
@@ -1293,7 +1272,7 @@ int cxgb3_offload_activate(struct adapter *adapter)
1293 return 0; 1272 return 0;
1294 1273
1295out_free_l2t: 1274out_free_l2t:
1296 t3_free_l2t(l2td); 1275 kvfree(l2td);
1297out_free: 1276out_free:
1298 kfree(t); 1277 kfree(t);
1299 return err; 1278 return err;
@@ -1302,7 +1281,7 @@ out_free:
1302static void clean_l2_data(struct rcu_head *head) 1281static void clean_l2_data(struct rcu_head *head)
1303{ 1282{
1304 struct l2t_data *d = container_of(head, struct l2t_data, rcu_head); 1283 struct l2t_data *d = container_of(head, struct l2t_data, rcu_head);
1305 t3_free_l2t(d); 1284 kvfree(d);
1306} 1285}
1307 1286
1308 1287
diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.c b/drivers/net/ethernet/chelsio/cxgb3/l2t.c
index 52063587e1e9..26264125865f 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/l2t.c
+++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.c
@@ -444,7 +444,7 @@ struct l2t_data *t3_init_l2t(unsigned int l2t_capacity)
444 struct l2t_data *d; 444 struct l2t_data *d;
445 int i, size = sizeof(*d) + l2t_capacity * sizeof(struct l2t_entry); 445 int i, size = sizeof(*d) + l2t_capacity * sizeof(struct l2t_entry);
446 446
447 d = cxgb_alloc_mem(size); 447 d = kvzalloc(size, GFP_KERNEL);
448 if (!d) 448 if (!d)
449 return NULL; 449 return NULL;
450 450
@@ -462,9 +462,3 @@ struct l2t_data *t3_init_l2t(unsigned int l2t_capacity)
462 } 462 }
463 return d; 463 return d;
464} 464}
465
466void t3_free_l2t(struct l2t_data *d)
467{
468 cxgb_free_mem(d);
469}
470
diff --git a/drivers/net/ethernet/chelsio/cxgb3/l2t.h b/drivers/net/ethernet/chelsio/cxgb3/l2t.h
index 8cffcdfd5678..c2fd323c4078 100644
--- a/drivers/net/ethernet/chelsio/cxgb3/l2t.h
+++ b/drivers/net/ethernet/chelsio/cxgb3/l2t.h
@@ -115,7 +115,6 @@ int t3_l2t_send_slow(struct t3cdev *dev, struct sk_buff *skb,
115 struct l2t_entry *e); 115 struct l2t_entry *e);
116void t3_l2t_send_event(struct t3cdev *dev, struct l2t_entry *e); 116void t3_l2t_send_event(struct t3cdev *dev, struct l2t_entry *e);
117struct l2t_data *t3_init_l2t(unsigned int l2t_capacity); 117struct l2t_data *t3_init_l2t(unsigned int l2t_capacity);
118void t3_free_l2t(struct l2t_data *d);
119 118
120int cxgb3_ofld_send(struct t3cdev *dev, struct sk_buff *skb); 119int cxgb3_ofld_send(struct t3cdev *dev, struct sk_buff *skb);
121 120
diff --git a/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c b/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c
index 7ad43af6bde1..3103ef9b561d 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/clip_tbl.c
@@ -290,8 +290,8 @@ struct clip_tbl *t4_init_clip_tbl(unsigned int clipt_start,
290 if (clipt_size < CLIPT_MIN_HASH_BUCKETS) 290 if (clipt_size < CLIPT_MIN_HASH_BUCKETS)
291 return NULL; 291 return NULL;
292 292
293 ctbl = t4_alloc_mem(sizeof(*ctbl) + 293 ctbl = kvzalloc(sizeof(*ctbl) +
294 clipt_size*sizeof(struct list_head)); 294 clipt_size*sizeof(struct list_head), GFP_KERNEL);
295 if (!ctbl) 295 if (!ctbl)
296 return NULL; 296 return NULL;
297 297
@@ -305,9 +305,9 @@ struct clip_tbl *t4_init_clip_tbl(unsigned int clipt_start,
305 for (i = 0; i < ctbl->clipt_size; ++i) 305 for (i = 0; i < ctbl->clipt_size; ++i)
306 INIT_LIST_HEAD(&ctbl->hash_list[i]); 306 INIT_LIST_HEAD(&ctbl->hash_list[i]);
307 307
308 cl_list = t4_alloc_mem(clipt_size*sizeof(struct clip_entry)); 308 cl_list = kvzalloc(clipt_size*sizeof(struct clip_entry), GFP_KERNEL);
309 if (!cl_list) { 309 if (!cl_list) {
310 t4_free_mem(ctbl); 310 kvfree(ctbl);
311 return NULL; 311 return NULL;
312 } 312 }
313 ctbl->cl_list = (void *)cl_list; 313 ctbl->cl_list = (void *)cl_list;
@@ -326,8 +326,8 @@ void t4_cleanup_clip_tbl(struct adapter *adap)
326 326
327 if (ctbl) { 327 if (ctbl) {
328 if (ctbl->cl_list) 328 if (ctbl->cl_list)
329 t4_free_mem(ctbl->cl_list); 329 kvfree(ctbl->cl_list);
330 t4_free_mem(ctbl); 330 kvfree(ctbl);
331 } 331 }
332} 332}
333EXPORT_SYMBOL(t4_cleanup_clip_tbl); 333EXPORT_SYMBOL(t4_cleanup_clip_tbl);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
index 163543b1ea0b..1d2be2dd19dd 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4.h
@@ -1184,8 +1184,6 @@ extern const char cxgb4_driver_version[];
1184void t4_os_portmod_changed(const struct adapter *adap, int port_id); 1184void t4_os_portmod_changed(const struct adapter *adap, int port_id);
1185void t4_os_link_changed(struct adapter *adap, int port_id, int link_stat); 1185void t4_os_link_changed(struct adapter *adap, int port_id, int link_stat);
1186 1186
1187void *t4_alloc_mem(size_t size);
1188
1189void t4_free_sge_resources(struct adapter *adap); 1187void t4_free_sge_resources(struct adapter *adap);
1190void t4_free_ofld_rxqs(struct adapter *adap, int n, struct sge_ofld_rxq *q); 1188void t4_free_ofld_rxqs(struct adapter *adap, int n, struct sge_ofld_rxq *q);
1191irq_handler_t t4_intr_handler(struct adapter *adap); 1189irq_handler_t t4_intr_handler(struct adapter *adap);
@@ -1557,7 +1555,6 @@ int t4_sched_params(struct adapter *adapter, int type, int level, int mode,
1557 int rateunit, int ratemode, int channel, int class, 1555 int rateunit, int ratemode, int channel, int class,
1558 int minrate, int maxrate, int weight, int pktsize); 1556 int minrate, int maxrate, int weight, int pktsize);
1559void t4_sge_decode_idma_state(struct adapter *adapter, int state); 1557void t4_sge_decode_idma_state(struct adapter *adapter, int state);
1560void t4_free_mem(void *addr);
1561void t4_idma_monitor_init(struct adapter *adapter, 1558void t4_idma_monitor_init(struct adapter *adapter,
1562 struct sge_idma_monitor_state *idma); 1559 struct sge_idma_monitor_state *idma);
1563void t4_idma_monitor(struct adapter *adapter, 1560void t4_idma_monitor(struct adapter *adapter,
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
index f6e739da7bb7..1fa34b009891 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_debugfs.c
@@ -2634,7 +2634,7 @@ static ssize_t mem_read(struct file *file, char __user *buf, size_t count,
2634 if (count > avail - pos) 2634 if (count > avail - pos)
2635 count = avail - pos; 2635 count = avail - pos;
2636 2636
2637 data = t4_alloc_mem(count); 2637 data = kvzalloc(count, GFP_KERNEL);
2638 if (!data) 2638 if (!data)
2639 return -ENOMEM; 2639 return -ENOMEM;
2640 2640
@@ -2642,12 +2642,12 @@ static ssize_t mem_read(struct file *file, char __user *buf, size_t count,
2642 ret = t4_memory_rw(adap, 0, mem, pos, count, data, T4_MEMORY_READ); 2642 ret = t4_memory_rw(adap, 0, mem, pos, count, data, T4_MEMORY_READ);
2643 spin_unlock(&adap->win0_lock); 2643 spin_unlock(&adap->win0_lock);
2644 if (ret) { 2644 if (ret) {
2645 t4_free_mem(data); 2645 kvfree(data);
2646 return ret; 2646 return ret;
2647 } 2647 }
2648 ret = copy_to_user(buf, data, count); 2648 ret = copy_to_user(buf, data, count);
2649 2649
2650 t4_free_mem(data); 2650 kvfree(data);
2651 if (ret) 2651 if (ret)
2652 return -EFAULT; 2652 return -EFAULT;
2653 2653
@@ -2753,7 +2753,7 @@ static ssize_t blocked_fl_read(struct file *filp, char __user *ubuf,
2753 adap->sge.egr_sz, adap->sge.blocked_fl); 2753 adap->sge.egr_sz, adap->sge.blocked_fl);
2754 len += sprintf(buf + len, "\n"); 2754 len += sprintf(buf + len, "\n");
2755 size = simple_read_from_buffer(ubuf, count, ppos, buf, len); 2755 size = simple_read_from_buffer(ubuf, count, ppos, buf, len);
2756 t4_free_mem(buf); 2756 kvfree(buf);
2757 return size; 2757 return size;
2758} 2758}
2759 2759
@@ -2773,7 +2773,7 @@ static ssize_t blocked_fl_write(struct file *filp, const char __user *ubuf,
2773 return err; 2773 return err;
2774 2774
2775 bitmap_copy(adap->sge.blocked_fl, t, adap->sge.egr_sz); 2775 bitmap_copy(adap->sge.blocked_fl, t, adap->sge.egr_sz);
2776 t4_free_mem(t); 2776 kvfree(t);
2777 return count; 2777 return count;
2778} 2778}
2779 2779
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
index 02f80febeb91..0ba7866c8259 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_ethtool.c
@@ -969,7 +969,7 @@ static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
969{ 969{
970 int i, err = 0; 970 int i, err = 0;
971 struct adapter *adapter = netdev2adap(dev); 971 struct adapter *adapter = netdev2adap(dev);
972 u8 *buf = t4_alloc_mem(EEPROMSIZE); 972 u8 *buf = kvzalloc(EEPROMSIZE, GFP_KERNEL);
973 973
974 if (!buf) 974 if (!buf)
975 return -ENOMEM; 975 return -ENOMEM;
@@ -980,7 +980,7 @@ static int get_eeprom(struct net_device *dev, struct ethtool_eeprom *e,
980 980
981 if (!err) 981 if (!err)
982 memcpy(data, buf + e->offset, e->len); 982 memcpy(data, buf + e->offset, e->len);
983 t4_free_mem(buf); 983 kvfree(buf);
984 return err; 984 return err;
985} 985}
986 986
@@ -1009,7 +1009,7 @@ static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
1009 if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) { 1009 if (aligned_offset != eeprom->offset || aligned_len != eeprom->len) {
1010 /* RMW possibly needed for first or last words. 1010 /* RMW possibly needed for first or last words.
1011 */ 1011 */
1012 buf = t4_alloc_mem(aligned_len); 1012 buf = kvzalloc(aligned_len, GFP_KERNEL);
1013 if (!buf) 1013 if (!buf)
1014 return -ENOMEM; 1014 return -ENOMEM;
1015 err = eeprom_rd_phys(adapter, aligned_offset, (u32 *)buf); 1015 err = eeprom_rd_phys(adapter, aligned_offset, (u32 *)buf);
@@ -1037,7 +1037,7 @@ static int set_eeprom(struct net_device *dev, struct ethtool_eeprom *eeprom,
1037 err = t4_seeprom_wp(adapter, true); 1037 err = t4_seeprom_wp(adapter, true);
1038out: 1038out:
1039 if (buf != data) 1039 if (buf != data)
1040 t4_free_mem(buf); 1040 kvfree(buf);
1041 return err; 1041 return err;
1042} 1042}
1043 1043
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
index c12c4a3b82b5..38a5c6764bb5 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c
@@ -880,27 +880,6 @@ freeout:
880 return err; 880 return err;
881} 881}
882 882
883/*
884 * Allocate a chunk of memory using kmalloc or, if that fails, vmalloc.
885 * The allocated memory is cleared.
886 */
887void *t4_alloc_mem(size_t size)
888{
889 void *p = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
890
891 if (!p)
892 p = vzalloc(size);
893 return p;
894}
895
896/*
897 * Free memory allocated through alloc_mem().
898 */
899void t4_free_mem(void *addr)
900{
901 kvfree(addr);
902}
903
904static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb, 883static u16 cxgb_select_queue(struct net_device *dev, struct sk_buff *skb,
905 void *accel_priv, select_queue_fallback_t fallback) 884 void *accel_priv, select_queue_fallback_t fallback)
906{ 885{
@@ -1299,7 +1278,7 @@ static int tid_init(struct tid_info *t)
1299 max_ftids * sizeof(*t->ftid_tab) + 1278 max_ftids * sizeof(*t->ftid_tab) +
1300 ftid_bmap_size * sizeof(long); 1279 ftid_bmap_size * sizeof(long);
1301 1280
1302 t->tid_tab = t4_alloc_mem(size); 1281 t->tid_tab = kvzalloc(size, GFP_KERNEL);
1303 if (!t->tid_tab) 1282 if (!t->tid_tab)
1304 return -ENOMEM; 1283 return -ENOMEM;
1305 1284
@@ -3445,7 +3424,7 @@ static int adap_init0(struct adapter *adap)
3445 /* allocate memory to read the header of the firmware on the 3424 /* allocate memory to read the header of the firmware on the
3446 * card 3425 * card
3447 */ 3426 */
3448 card_fw = t4_alloc_mem(sizeof(*card_fw)); 3427 card_fw = kvzalloc(sizeof(*card_fw), GFP_KERNEL);
3449 3428
3450 /* Get FW from from /lib/firmware/ */ 3429 /* Get FW from from /lib/firmware/ */
3451 ret = request_firmware(&fw, fw_info->fw_mod_name, 3430 ret = request_firmware(&fw, fw_info->fw_mod_name,
@@ -3465,7 +3444,7 @@ static int adap_init0(struct adapter *adap)
3465 3444
3466 /* Cleaning up */ 3445 /* Cleaning up */
3467 release_firmware(fw); 3446 release_firmware(fw);
3468 t4_free_mem(card_fw); 3447 kvfree(card_fw);
3469 3448
3470 if (ret < 0) 3449 if (ret < 0)
3471 goto bye; 3450 goto bye;
@@ -4470,9 +4449,9 @@ static void free_some_resources(struct adapter *adapter)
4470{ 4449{
4471 unsigned int i; 4450 unsigned int i;
4472 4451
4473 t4_free_mem(adapter->l2t); 4452 kvfree(adapter->l2t);
4474 t4_cleanup_sched(adapter); 4453 t4_cleanup_sched(adapter);
4475 t4_free_mem(adapter->tids.tid_tab); 4454 kvfree(adapter->tids.tid_tab);
4476 cxgb4_cleanup_tc_u32(adapter); 4455 cxgb4_cleanup_tc_u32(adapter);
4477 kfree(adapter->sge.egr_map); 4456 kfree(adapter->sge.egr_map);
4478 kfree(adapter->sge.ingr_map); 4457 kfree(adapter->sge.ingr_map);
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
index a1b19422b339..ef06ce8247ab 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_u32.c
@@ -432,9 +432,9 @@ void cxgb4_cleanup_tc_u32(struct adapter *adap)
432 for (i = 0; i < t->size; i++) { 432 for (i = 0; i < t->size; i++) {
433 struct cxgb4_link *link = &t->table[i]; 433 struct cxgb4_link *link = &t->table[i];
434 434
435 t4_free_mem(link->tid_map); 435 kvfree(link->tid_map);
436 } 436 }
437 t4_free_mem(adap->tc_u32); 437 kvfree(adap->tc_u32);
438} 438}
439 439
440struct cxgb4_tc_u32_table *cxgb4_init_tc_u32(struct adapter *adap) 440struct cxgb4_tc_u32_table *cxgb4_init_tc_u32(struct adapter *adap)
@@ -446,8 +446,8 @@ struct cxgb4_tc_u32_table *cxgb4_init_tc_u32(struct adapter *adap)
446 if (!max_tids) 446 if (!max_tids)
447 return NULL; 447 return NULL;
448 448
449 t = t4_alloc_mem(sizeof(*t) + 449 t = kvzalloc(sizeof(*t) +
450 (max_tids * sizeof(struct cxgb4_link))); 450 (max_tids * sizeof(struct cxgb4_link)), GFP_KERNEL);
451 if (!t) 451 if (!t)
452 return NULL; 452 return NULL;
453 453
@@ -458,7 +458,7 @@ struct cxgb4_tc_u32_table *cxgb4_init_tc_u32(struct adapter *adap)
458 unsigned int bmap_size; 458 unsigned int bmap_size;
459 459
460 bmap_size = BITS_TO_LONGS(max_tids); 460 bmap_size = BITS_TO_LONGS(max_tids);
461 link->tid_map = t4_alloc_mem(sizeof(unsigned long) * bmap_size); 461 link->tid_map = kvzalloc(sizeof(unsigned long) * bmap_size, GFP_KERNEL);
462 if (!link->tid_map) 462 if (!link->tid_map)
463 goto out_no_mem; 463 goto out_no_mem;
464 bitmap_zero(link->tid_map, max_tids); 464 bitmap_zero(link->tid_map, max_tids);
@@ -471,11 +471,11 @@ out_no_mem:
471 struct cxgb4_link *link = &t->table[i]; 471 struct cxgb4_link *link = &t->table[i];
472 472
473 if (link->tid_map) 473 if (link->tid_map)
474 t4_free_mem(link->tid_map); 474 kvfree(link->tid_map);
475 } 475 }
476 476
477 if (t) 477 if (t)
478 t4_free_mem(t); 478 kvfree(t);
479 479
480 return NULL; 480 return NULL;
481} 481}
diff --git a/drivers/net/ethernet/chelsio/cxgb4/l2t.c b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
index 7c8c5b9a3c22..6f3692db29af 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/l2t.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/l2t.c
@@ -646,7 +646,7 @@ struct l2t_data *t4_init_l2t(unsigned int l2t_start, unsigned int l2t_end)
646 if (l2t_size < L2T_MIN_HASH_BUCKETS) 646 if (l2t_size < L2T_MIN_HASH_BUCKETS)
647 return NULL; 647 return NULL;
648 648
649 d = t4_alloc_mem(sizeof(*d) + l2t_size * sizeof(struct l2t_entry)); 649 d = kvzalloc(sizeof(*d) + l2t_size * sizeof(struct l2t_entry), GFP_KERNEL);
650 if (!d) 650 if (!d)
651 return NULL; 651 return NULL;
652 652
diff --git a/drivers/net/ethernet/chelsio/cxgb4/sched.c b/drivers/net/ethernet/chelsio/cxgb4/sched.c
index c9026352a842..02acff741f11 100644
--- a/drivers/net/ethernet/chelsio/cxgb4/sched.c
+++ b/drivers/net/ethernet/chelsio/cxgb4/sched.c
@@ -177,7 +177,7 @@ static int t4_sched_queue_unbind(struct port_info *pi, struct ch_sched_queue *p)
177 } 177 }
178 178
179 list_del(&qe->list); 179 list_del(&qe->list);
180 t4_free_mem(qe); 180 kvfree(qe);
181 if (atomic_dec_and_test(&e->refcnt)) { 181 if (atomic_dec_and_test(&e->refcnt)) {
182 e->state = SCHED_STATE_UNUSED; 182 e->state = SCHED_STATE_UNUSED;
183 memset(&e->info, 0, sizeof(e->info)); 183 memset(&e->info, 0, sizeof(e->info));
@@ -201,7 +201,7 @@ static int t4_sched_queue_bind(struct port_info *pi, struct ch_sched_queue *p)
201 if (p->queue < 0 || p->queue >= pi->nqsets) 201 if (p->queue < 0 || p->queue >= pi->nqsets)
202 return -ERANGE; 202 return -ERANGE;
203 203
204 qe = t4_alloc_mem(sizeof(struct sched_queue_entry)); 204 qe = kvzalloc(sizeof(struct sched_queue_entry), GFP_KERNEL);
205 if (!qe) 205 if (!qe)
206 return -ENOMEM; 206 return -ENOMEM;
207 207
@@ -211,7 +211,7 @@ static int t4_sched_queue_bind(struct port_info *pi, struct ch_sched_queue *p)
211 /* Unbind queue from any existing class */ 211 /* Unbind queue from any existing class */
212 err = t4_sched_queue_unbind(pi, p); 212 err = t4_sched_queue_unbind(pi, p);
213 if (err) { 213 if (err) {
214 t4_free_mem(qe); 214 kvfree(qe);
215 goto out; 215 goto out;
216 } 216 }
217 217
@@ -224,7 +224,7 @@ static int t4_sched_queue_bind(struct port_info *pi, struct ch_sched_queue *p)
224 spin_lock(&e->lock); 224 spin_lock(&e->lock);
225 err = t4_sched_bind_unbind_op(pi, (void *)qe, SCHED_QUEUE, true); 225 err = t4_sched_bind_unbind_op(pi, (void *)qe, SCHED_QUEUE, true);
226 if (err) { 226 if (err) {
227 t4_free_mem(qe); 227 kvfree(qe);
228 spin_unlock(&e->lock); 228 spin_unlock(&e->lock);
229 goto out; 229 goto out;
230 } 230 }
@@ -512,7 +512,7 @@ struct sched_table *t4_init_sched(unsigned int sched_size)
512 struct sched_table *s; 512 struct sched_table *s;
513 unsigned int i; 513 unsigned int i;
514 514
515 s = t4_alloc_mem(sizeof(*s) + sched_size * sizeof(struct sched_class)); 515 s = kvzalloc(sizeof(*s) + sched_size * sizeof(struct sched_class), GFP_KERNEL);
516 if (!s) 516 if (!s)
517 return NULL; 517 return NULL;
518 518
@@ -548,6 +548,6 @@ void t4_cleanup_sched(struct adapter *adap)
548 t4_sched_class_free(pi, e); 548 t4_sched_class_free(pi, e);
549 write_unlock(&s->rw_lock); 549 write_unlock(&s->rw_lock);
550 } 550 }
551 t4_free_mem(s); 551 kvfree(s);
552 } 552 }
553} 553}
diff --git a/drivers/net/ethernet/mellanox/mlx4/en_tx.c b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
index 3ba89bc43d74..6ffd1849a604 100644
--- a/drivers/net/ethernet/mellanox/mlx4/en_tx.c
+++ b/drivers/net/ethernet/mellanox/mlx4/en_tx.c
@@ -70,13 +70,10 @@ int mlx4_en_create_tx_ring(struct mlx4_en_priv *priv,
70 ring->full_size = ring->size - HEADROOM - MAX_DESC_TXBBS; 70 ring->full_size = ring->size - HEADROOM - MAX_DESC_TXBBS;
71 71
72 tmp = size * sizeof(struct mlx4_en_tx_info); 72 tmp = size * sizeof(struct mlx4_en_tx_info);
73 ring->tx_info = kmalloc_node(tmp, GFP_KERNEL | __GFP_NOWARN, node); 73 ring->tx_info = kvmalloc_node(tmp, GFP_KERNEL, node);
74 if (!ring->tx_info) { 74 if (!ring->tx_info) {
75 ring->tx_info = vmalloc(tmp); 75 err = -ENOMEM;
76 if (!ring->tx_info) { 76 goto err_ring;
77 err = -ENOMEM;
78 goto err_ring;
79 }
80 } 77 }
81 78
82 en_dbg(DRV, priv, "Allocated tx_info ring at addr:%p size:%d\n", 79 en_dbg(DRV, priv, "Allocated tx_info ring at addr:%p size:%d\n",
diff --git a/drivers/net/ethernet/mellanox/mlx4/mr.c b/drivers/net/ethernet/mellanox/mlx4/mr.c
index db65f72879e9..ce852ca22a96 100644
--- a/drivers/net/ethernet/mellanox/mlx4/mr.c
+++ b/drivers/net/ethernet/mellanox/mlx4/mr.c
@@ -115,12 +115,9 @@ static int mlx4_buddy_init(struct mlx4_buddy *buddy, int max_order)
115 115
116 for (i = 0; i <= buddy->max_order; ++i) { 116 for (i = 0; i <= buddy->max_order; ++i) {
117 s = BITS_TO_LONGS(1 << (buddy->max_order - i)); 117 s = BITS_TO_LONGS(1 << (buddy->max_order - i));
118 buddy->bits[i] = kcalloc(s, sizeof (long), GFP_KERNEL | __GFP_NOWARN); 118 buddy->bits[i] = kvmalloc_array(s, sizeof(long), GFP_KERNEL | __GFP_ZERO);
119 if (!buddy->bits[i]) { 119 if (!buddy->bits[i])
120 buddy->bits[i] = vzalloc(s * sizeof(long)); 120 goto err_out_free;
121 if (!buddy->bits[i])
122 goto err_out_free;
123 }
124 } 121 }
125 122
126 set_bit(0, buddy->bits[buddy->max_order]); 123 set_bit(0, buddy->bits[buddy->max_order]);
diff --git a/drivers/nvdimm/dimm_devs.c b/drivers/nvdimm/dimm_devs.c
index fac1e9fbd11d..9852a3355509 100644
--- a/drivers/nvdimm/dimm_devs.c
+++ b/drivers/nvdimm/dimm_devs.c
@@ -106,10 +106,7 @@ int nvdimm_init_config_data(struct nvdimm_drvdata *ndd)
106 return -ENXIO; 106 return -ENXIO;
107 } 107 }
108 108
109 ndd->data = kmalloc(ndd->nsarea.config_size, GFP_KERNEL); 109 ndd->data = kvmalloc(ndd->nsarea.config_size, GFP_KERNEL);
110 if (!ndd->data)
111 ndd->data = vmalloc(ndd->nsarea.config_size);
112
113 if (!ndd->data) 110 if (!ndd->data)
114 return -ENOMEM; 111 return -ENOMEM;
115 112
diff --git a/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c b/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c
index a6a76a681ea9..8f638267e704 100644
--- a/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c
+++ b/drivers/staging/lustre/lnet/libcfs/linux/linux-mem.c
@@ -45,15 +45,6 @@ EXPORT_SYMBOL(libcfs_kvzalloc);
45void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size, 45void *libcfs_kvzalloc_cpt(struct cfs_cpt_table *cptab, int cpt, size_t size,
46 gfp_t flags) 46 gfp_t flags)
47{ 47{
48 void *ret; 48 return kvzalloc_node(size, flags, cfs_cpt_spread_node(cptab, cpt));
49
50 ret = kzalloc_node(size, flags | __GFP_NOWARN,
51 cfs_cpt_spread_node(cptab, cpt));
52 if (!ret) {
53 WARN_ON(!(flags & (__GFP_FS | __GFP_HIGH)));
54 ret = vmalloc_node(size, cfs_cpt_spread_node(cptab, cpt));
55 }
56
57 return ret;
58} 49}
59EXPORT_SYMBOL(libcfs_kvzalloc_cpt); 50EXPORT_SYMBOL(libcfs_kvzalloc_cpt);
diff --git a/drivers/xen/evtchn.c b/drivers/xen/evtchn.c
index 6890897a6f30..10f1ef582659 100644
--- a/drivers/xen/evtchn.c
+++ b/drivers/xen/evtchn.c
@@ -87,18 +87,6 @@ struct user_evtchn {
87 bool enabled; 87 bool enabled;
88}; 88};
89 89
90static evtchn_port_t *evtchn_alloc_ring(unsigned int size)
91{
92 evtchn_port_t *ring;
93 size_t s = size * sizeof(*ring);
94
95 ring = kmalloc(s, GFP_KERNEL);
96 if (!ring)
97 ring = vmalloc(s);
98
99 return ring;
100}
101
102static void evtchn_free_ring(evtchn_port_t *ring) 90static void evtchn_free_ring(evtchn_port_t *ring)
103{ 91{
104 kvfree(ring); 92 kvfree(ring);
@@ -334,7 +322,7 @@ static int evtchn_resize_ring(struct per_user_data *u)
334 else 322 else
335 new_size = 2 * u->ring_size; 323 new_size = 2 * u->ring_size;
336 324
337 new_ring = evtchn_alloc_ring(new_size); 325 new_ring = kvmalloc(new_size * sizeof(*new_ring), GFP_KERNEL);
338 if (!new_ring) 326 if (!new_ring)
339 return -ENOMEM; 327 return -ENOMEM;
340 328
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c
index 7dc8844037e0..1c3b6c54d5ee 100644
--- a/fs/btrfs/ctree.c
+++ b/fs/btrfs/ctree.c
@@ -5392,13 +5392,10 @@ int btrfs_compare_trees(struct btrfs_root *left_root,
5392 goto out; 5392 goto out;
5393 } 5393 }
5394 5394
5395 tmp_buf = kmalloc(fs_info->nodesize, GFP_KERNEL | __GFP_NOWARN); 5395 tmp_buf = kvmalloc(fs_info->nodesize, GFP_KERNEL);
5396 if (!tmp_buf) { 5396 if (!tmp_buf) {
5397 tmp_buf = vmalloc(fs_info->nodesize); 5397 ret = -ENOMEM;
5398 if (!tmp_buf) { 5398 goto out;
5399 ret = -ENOMEM;
5400 goto out;
5401 }
5402 } 5399 }
5403 5400
5404 left_path->search_commit_root = 1; 5401 left_path->search_commit_root = 1;
diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
index dabfc7ac48a6..922a66fce401 100644
--- a/fs/btrfs/ioctl.c
+++ b/fs/btrfs/ioctl.c
@@ -3539,12 +3539,9 @@ static int btrfs_clone(struct inode *src, struct inode *inode,
3539 u64 last_dest_end = destoff; 3539 u64 last_dest_end = destoff;
3540 3540
3541 ret = -ENOMEM; 3541 ret = -ENOMEM;
3542 buf = kmalloc(fs_info->nodesize, GFP_KERNEL | __GFP_NOWARN); 3542 buf = kvmalloc(fs_info->nodesize, GFP_KERNEL);
3543 if (!buf) { 3543 if (!buf)
3544 buf = vmalloc(fs_info->nodesize); 3544 return ret;
3545 if (!buf)
3546 return ret;
3547 }
3548 3545
3549 path = btrfs_alloc_path(); 3546 path = btrfs_alloc_path();
3550 if (!path) { 3547 if (!path) {
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c
index a60d5bfb8a49..3f645cd67b54 100644
--- a/fs/btrfs/send.c
+++ b/fs/btrfs/send.c
@@ -6360,22 +6360,16 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
6360 sctx->clone_roots_cnt = arg->clone_sources_count; 6360 sctx->clone_roots_cnt = arg->clone_sources_count;
6361 6361
6362 sctx->send_max_size = BTRFS_SEND_BUF_SIZE; 6362 sctx->send_max_size = BTRFS_SEND_BUF_SIZE;
6363 sctx->send_buf = kmalloc(sctx->send_max_size, GFP_KERNEL | __GFP_NOWARN); 6363 sctx->send_buf = kvmalloc(sctx->send_max_size, GFP_KERNEL);
6364 if (!sctx->send_buf) { 6364 if (!sctx->send_buf) {
6365 sctx->send_buf = vmalloc(sctx->send_max_size); 6365 ret = -ENOMEM;
6366 if (!sctx->send_buf) { 6366 goto out;
6367 ret = -ENOMEM;
6368 goto out;
6369 }
6370 } 6367 }
6371 6368
6372 sctx->read_buf = kmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL | __GFP_NOWARN); 6369 sctx->read_buf = kvmalloc(BTRFS_SEND_READ_SIZE, GFP_KERNEL);
6373 if (!sctx->read_buf) { 6370 if (!sctx->read_buf) {
6374 sctx->read_buf = vmalloc(BTRFS_SEND_READ_SIZE); 6371 ret = -ENOMEM;
6375 if (!sctx->read_buf) { 6372 goto out;
6376 ret = -ENOMEM;
6377 goto out;
6378 }
6379 } 6373 }
6380 6374
6381 sctx->pending_dir_moves = RB_ROOT; 6375 sctx->pending_dir_moves = RB_ROOT;
@@ -6396,13 +6390,10 @@ long btrfs_ioctl_send(struct file *mnt_file, void __user *arg_)
6396 alloc_size = arg->clone_sources_count * sizeof(*arg->clone_sources); 6390 alloc_size = arg->clone_sources_count * sizeof(*arg->clone_sources);
6397 6391
6398 if (arg->clone_sources_count) { 6392 if (arg->clone_sources_count) {
6399 clone_sources_tmp = kmalloc(alloc_size, GFP_KERNEL | __GFP_NOWARN); 6393 clone_sources_tmp = kvmalloc(alloc_size, GFP_KERNEL);
6400 if (!clone_sources_tmp) { 6394 if (!clone_sources_tmp) {
6401 clone_sources_tmp = vmalloc(alloc_size); 6395 ret = -ENOMEM;
6402 if (!clone_sources_tmp) { 6396 goto out;
6403 ret = -ENOMEM;
6404 goto out;
6405 }
6406 } 6397 }
6407 6398
6408 ret = copy_from_user(clone_sources_tmp, arg->clone_sources, 6399 ret = copy_from_user(clone_sources_tmp, arg->clone_sources,
diff --git a/fs/ceph/file.c b/fs/ceph/file.c
index 26cc95421cca..18c045e2ead6 100644
--- a/fs/ceph/file.c
+++ b/fs/ceph/file.c
@@ -74,12 +74,9 @@ dio_get_pages_alloc(const struct iov_iter *it, size_t nbytes,
74 align = (unsigned long)(it->iov->iov_base + it->iov_offset) & 74 align = (unsigned long)(it->iov->iov_base + it->iov_offset) &
75 (PAGE_SIZE - 1); 75 (PAGE_SIZE - 1);
76 npages = calc_pages_for(align, nbytes); 76 npages = calc_pages_for(align, nbytes);
77 pages = kmalloc(sizeof(*pages) * npages, GFP_KERNEL); 77 pages = kvmalloc(sizeof(*pages) * npages, GFP_KERNEL);
78 if (!pages) { 78 if (!pages)
79 pages = vmalloc(sizeof(*pages) * npages); 79 return ERR_PTR(-ENOMEM);
80 if (!pages)
81 return ERR_PTR(-ENOMEM);
82 }
83 80
84 for (idx = 0; idx < npages; ) { 81 for (idx = 0; idx < npages; ) {
85 size_t start; 82 size_t start;
diff --git a/fs/select.c b/fs/select.c
index bd4b2ccfd346..d6c652a31e99 100644
--- a/fs/select.c
+++ b/fs/select.c
@@ -633,10 +633,7 @@ int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
633 goto out_nofds; 633 goto out_nofds;
634 634
635 alloc_size = 6 * size; 635 alloc_size = 6 * size;
636 bits = kmalloc(alloc_size, GFP_KERNEL|__GFP_NOWARN); 636 bits = kvmalloc(alloc_size, GFP_KERNEL);
637 if (!bits && alloc_size > PAGE_SIZE)
638 bits = vmalloc(alloc_size);
639
640 if (!bits) 637 if (!bits)
641 goto out_nofds; 638 goto out_nofds;
642 } 639 }
diff --git a/fs/xattr.c b/fs/xattr.c
index 94f49a082dd2..464c94bf65f9 100644
--- a/fs/xattr.c
+++ b/fs/xattr.c
@@ -431,12 +431,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value,
431 if (size) { 431 if (size) {
432 if (size > XATTR_SIZE_MAX) 432 if (size > XATTR_SIZE_MAX)
433 return -E2BIG; 433 return -E2BIG;
434 kvalue = kmalloc(size, GFP_KERNEL | __GFP_NOWARN); 434 kvalue = kvmalloc(size, GFP_KERNEL);
435 if (!kvalue) { 435 if (!kvalue)
436 kvalue = vmalloc(size); 436 return -ENOMEM;
437 if (!kvalue)
438 return -ENOMEM;
439 }
440 if (copy_from_user(kvalue, value, size)) { 437 if (copy_from_user(kvalue, value, size)) {
441 error = -EFAULT; 438 error = -EFAULT;
442 goto out; 439 goto out;
@@ -528,12 +525,9 @@ getxattr(struct dentry *d, const char __user *name, void __user *value,
528 if (size) { 525 if (size) {
529 if (size > XATTR_SIZE_MAX) 526 if (size > XATTR_SIZE_MAX)
530 size = XATTR_SIZE_MAX; 527 size = XATTR_SIZE_MAX;
531 kvalue = kzalloc(size, GFP_KERNEL | __GFP_NOWARN); 528 kvalue = kvzalloc(size, GFP_KERNEL);
532 if (!kvalue) { 529 if (!kvalue)
533 kvalue = vzalloc(size); 530 return -ENOMEM;
534 if (!kvalue)
535 return -ENOMEM;
536 }
537 } 531 }
538 532
539 error = vfs_getxattr(d, kname, kvalue, size); 533 error = vfs_getxattr(d, kname, kvalue, size);
@@ -611,12 +605,9 @@ listxattr(struct dentry *d, char __user *list, size_t size)
611 if (size) { 605 if (size) {
612 if (size > XATTR_LIST_MAX) 606 if (size > XATTR_LIST_MAX)
613 size = XATTR_LIST_MAX; 607 size = XATTR_LIST_MAX;
614 klist = kmalloc(size, __GFP_NOWARN | GFP_KERNEL); 608 klist = kvmalloc(size, GFP_KERNEL);
615 if (!klist) { 609 if (!klist)
616 klist = vmalloc(size); 610 return -ENOMEM;
617 if (!klist)
618 return -ENOMEM;
619 }
620 } 611 }
621 612
622 error = vfs_listxattr(d, klist, size); 613 error = vfs_listxattr(d, klist, size);
diff --git a/include/linux/mlx5/driver.h b/include/linux/mlx5/driver.h
index 3fece51dcf13..18fc65b84b79 100644
--- a/include/linux/mlx5/driver.h
+++ b/include/linux/mlx5/driver.h
@@ -892,12 +892,7 @@ static inline u16 cmdif_rev(struct mlx5_core_dev *dev)
892 892
893static inline void *mlx5_vzalloc(unsigned long size) 893static inline void *mlx5_vzalloc(unsigned long size)
894{ 894{
895 void *rtn; 895 return kvzalloc(size, GFP_KERNEL);
896
897 rtn = kzalloc(size, GFP_KERNEL | __GFP_NOWARN);
898 if (!rtn)
899 rtn = vzalloc(size);
900 return rtn;
901} 896}
902 897
903static inline u32 mlx5_base_mkey(const u32 key) 898static inline u32 mlx5_base_mkey(const u32 key)
diff --git a/include/linux/mm.h b/include/linux/mm.h
index 08e2849d27ca..7cb17c6b97de 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -532,6 +532,14 @@ static inline void *kvzalloc(size_t size, gfp_t flags)
532 return kvmalloc(size, flags | __GFP_ZERO); 532 return kvmalloc(size, flags | __GFP_ZERO);
533} 533}
534 534
535static inline void *kvmalloc_array(size_t n, size_t size, gfp_t flags)
536{
537 if (size != 0 && n > SIZE_MAX / size)
538 return NULL;
539
540 return kvmalloc(n * size, flags);
541}
542
535extern void kvfree(const void *addr); 543extern void kvfree(const void *addr);
536 544
537static inline atomic_t *compound_mapcount_ptr(struct page *page) 545static inline atomic_t *compound_mapcount_ptr(struct page *page)
diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index 4952311422c1..ae82d9cea553 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -1028,10 +1028,7 @@ EXPORT_SYMBOL(iov_iter_get_pages);
1028 1028
1029static struct page **get_pages_array(size_t n) 1029static struct page **get_pages_array(size_t n)
1030{ 1030{
1031 struct page **p = kmalloc(n * sizeof(struct page *), GFP_KERNEL); 1031 return kvmalloc_array(n, sizeof(struct page *), GFP_KERNEL);
1032 if (!p)
1033 p = vmalloc(n * sizeof(struct page *));
1034 return p;
1035} 1032}
1036 1033
1037static ssize_t pipe_get_pages_alloc(struct iov_iter *i, 1034static ssize_t pipe_get_pages_alloc(struct iov_iter *i,
diff --git a/mm/frame_vector.c b/mm/frame_vector.c
index db77dcb38afd..72ebec18629c 100644
--- a/mm/frame_vector.c
+++ b/mm/frame_vector.c
@@ -200,10 +200,7 @@ struct frame_vector *frame_vector_create(unsigned int nr_frames)
200 * Avoid higher order allocations, use vmalloc instead. It should 200 * Avoid higher order allocations, use vmalloc instead. It should
201 * be rare anyway. 201 * be rare anyway.
202 */ 202 */
203 if (size <= PAGE_SIZE) 203 vec = kvmalloc(size, GFP_KERNEL);
204 vec = kmalloc(size, GFP_KERNEL);
205 else
206 vec = vmalloc(size);
207 if (!vec) 204 if (!vec)
208 return NULL; 205 return NULL;
209 vec->nr_allocated = nr_frames; 206 vec->nr_allocated = nr_frames;
diff --git a/net/ipv4/inet_hashtables.c b/net/ipv4/inet_hashtables.c
index 8bea74298173..e9a59d2d91d4 100644
--- a/net/ipv4/inet_hashtables.c
+++ b/net/ipv4/inet_hashtables.c
@@ -678,11 +678,7 @@ int inet_ehash_locks_alloc(struct inet_hashinfo *hashinfo)
678 /* no more locks than number of hash buckets */ 678 /* no more locks than number of hash buckets */
679 nblocks = min(nblocks, hashinfo->ehash_mask + 1); 679 nblocks = min(nblocks, hashinfo->ehash_mask + 1);
680 680
681 hashinfo->ehash_locks = kmalloc_array(nblocks, locksz, 681 hashinfo->ehash_locks = kvmalloc_array(nblocks, locksz, GFP_KERNEL);
682 GFP_KERNEL | __GFP_NOWARN);
683 if (!hashinfo->ehash_locks)
684 hashinfo->ehash_locks = vmalloc(nblocks * locksz);
685
686 if (!hashinfo->ehash_locks) 682 if (!hashinfo->ehash_locks)
687 return -ENOMEM; 683 return -ENOMEM;
688 684
diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c
index 9d0d4f39e42b..653bbd67e3a3 100644
--- a/net/ipv4/tcp_metrics.c
+++ b/net/ipv4/tcp_metrics.c
@@ -1011,10 +1011,7 @@ static int __net_init tcp_net_metrics_init(struct net *net)
1011 tcp_metrics_hash_log = order_base_2(slots); 1011 tcp_metrics_hash_log = order_base_2(slots);
1012 size = sizeof(struct tcpm_hash_bucket) << tcp_metrics_hash_log; 1012 size = sizeof(struct tcpm_hash_bucket) << tcp_metrics_hash_log;
1013 1013
1014 tcp_metrics_hash = kzalloc(size, GFP_KERNEL | __GFP_NOWARN); 1014 tcp_metrics_hash = kvzalloc(size, GFP_KERNEL);
1015 if (!tcp_metrics_hash)
1016 tcp_metrics_hash = vzalloc(size);
1017
1018 if (!tcp_metrics_hash) 1015 if (!tcp_metrics_hash)
1019 return -ENOMEM; 1016 return -ENOMEM;
1020 1017
diff --git a/net/mpls/af_mpls.c b/net/mpls/af_mpls.c
index 088e2b459d0f..257ec66009da 100644
--- a/net/mpls/af_mpls.c
+++ b/net/mpls/af_mpls.c
@@ -2005,10 +2005,7 @@ static int resize_platform_label_table(struct net *net, size_t limit)
2005 unsigned index; 2005 unsigned index;
2006 2006
2007 if (size) { 2007 if (size) {
2008 labels = kzalloc(size, GFP_KERNEL | __GFP_NOWARN | __GFP_NORETRY); 2008 labels = kvzalloc(size, GFP_KERNEL);
2009 if (!labels)
2010 labels = vzalloc(size);
2011
2012 if (!labels) 2009 if (!labels)
2013 goto nolabels; 2010 goto nolabels;
2014 } 2011 }
diff --git a/net/netfilter/x_tables.c b/net/netfilter/x_tables.c
index f134d384852f..3d0584665b5d 100644
--- a/net/netfilter/x_tables.c
+++ b/net/netfilter/x_tables.c
@@ -763,17 +763,8 @@ EXPORT_SYMBOL(xt_check_entry_offsets);
763 */ 763 */
764unsigned int *xt_alloc_entry_offsets(unsigned int size) 764unsigned int *xt_alloc_entry_offsets(unsigned int size)
765{ 765{
766 unsigned int *off; 766 return kvmalloc_array(size, sizeof(unsigned int), GFP_KERNEL | __GFP_ZERO);
767 767
768 off = kcalloc(size, sizeof(unsigned int), GFP_KERNEL | __GFP_NOWARN);
769
770 if (off)
771 return off;
772
773 if (size < (SIZE_MAX / sizeof(unsigned int)))
774 off = vmalloc(size * sizeof(unsigned int));
775
776 return off;
777} 768}
778EXPORT_SYMBOL(xt_alloc_entry_offsets); 769EXPORT_SYMBOL(xt_alloc_entry_offsets);
779 770
@@ -1116,7 +1107,7 @@ static int xt_jumpstack_alloc(struct xt_table_info *i)
1116 1107
1117 size = sizeof(void **) * nr_cpu_ids; 1108 size = sizeof(void **) * nr_cpu_ids;
1118 if (size > PAGE_SIZE) 1109 if (size > PAGE_SIZE)
1119 i->jumpstack = vzalloc(size); 1110 i->jumpstack = kvzalloc(size, GFP_KERNEL);
1120 else 1111 else
1121 i->jumpstack = kzalloc(size, GFP_KERNEL); 1112 i->jumpstack = kzalloc(size, GFP_KERNEL);
1122 if (i->jumpstack == NULL) 1113 if (i->jumpstack == NULL)
@@ -1138,12 +1129,8 @@ static int xt_jumpstack_alloc(struct xt_table_info *i)
1138 */ 1129 */
1139 size = sizeof(void *) * i->stacksize * 2u; 1130 size = sizeof(void *) * i->stacksize * 2u;
1140 for_each_possible_cpu(cpu) { 1131 for_each_possible_cpu(cpu) {
1141 if (size > PAGE_SIZE) 1132 i->jumpstack[cpu] = kvmalloc_node(size, GFP_KERNEL,
1142 i->jumpstack[cpu] = vmalloc_node(size, 1133 cpu_to_node(cpu));
1143 cpu_to_node(cpu));
1144 else
1145 i->jumpstack[cpu] = kmalloc_node(size,
1146 GFP_KERNEL, cpu_to_node(cpu));
1147 if (i->jumpstack[cpu] == NULL) 1134 if (i->jumpstack[cpu] == NULL)
1148 /* 1135 /*
1149 * Freeing will be done later on by the callers. The 1136 * Freeing will be done later on by the callers. The
diff --git a/net/netfilter/xt_recent.c b/net/netfilter/xt_recent.c
index 37d581a31cff..3f6c4fa78bdb 100644
--- a/net/netfilter/xt_recent.c
+++ b/net/netfilter/xt_recent.c
@@ -388,10 +388,7 @@ static int recent_mt_check(const struct xt_mtchk_param *par,
388 } 388 }
389 389
390 sz = sizeof(*t) + sizeof(t->iphash[0]) * ip_list_hash_size; 390 sz = sizeof(*t) + sizeof(t->iphash[0]) * ip_list_hash_size;
391 if (sz <= PAGE_SIZE) 391 t = kvzalloc(sz, GFP_KERNEL);
392 t = kzalloc(sz, GFP_KERNEL);
393 else
394 t = vzalloc(sz);
395 if (t == NULL) { 392 if (t == NULL) {
396 ret = -ENOMEM; 393 ret = -ENOMEM;
397 goto out; 394 goto out;
diff --git a/net/sched/sch_choke.c b/net/sched/sch_choke.c
index d00f4c7c2f3a..b30a2c70bd48 100644
--- a/net/sched/sch_choke.c
+++ b/net/sched/sch_choke.c
@@ -376,10 +376,7 @@ static int choke_change(struct Qdisc *sch, struct nlattr *opt)
376 if (mask != q->tab_mask) { 376 if (mask != q->tab_mask) {
377 struct sk_buff **ntab; 377 struct sk_buff **ntab;
378 378
379 ntab = kcalloc(mask + 1, sizeof(struct sk_buff *), 379 ntab = kvmalloc_array((mask + 1), sizeof(struct sk_buff *), GFP_KERNEL | __GFP_ZERO);
380 GFP_KERNEL | __GFP_NOWARN);
381 if (!ntab)
382 ntab = vzalloc((mask + 1) * sizeof(struct sk_buff *));
383 if (!ntab) 380 if (!ntab)
384 return -ENOMEM; 381 return -ENOMEM;
385 382
diff --git a/net/sched/sch_fq_codel.c b/net/sched/sch_fq_codel.c
index 18bbb5476c83..9201abce928c 100644
--- a/net/sched/sch_fq_codel.c
+++ b/net/sched/sch_fq_codel.c
@@ -446,27 +446,13 @@ static int fq_codel_change(struct Qdisc *sch, struct nlattr *opt)
446 return 0; 446 return 0;
447} 447}
448 448
449static void *fq_codel_zalloc(size_t sz)
450{
451 void *ptr = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN);
452
453 if (!ptr)
454 ptr = vzalloc(sz);
455 return ptr;
456}
457
458static void fq_codel_free(void *addr)
459{
460 kvfree(addr);
461}
462
463static void fq_codel_destroy(struct Qdisc *sch) 449static void fq_codel_destroy(struct Qdisc *sch)
464{ 450{
465 struct fq_codel_sched_data *q = qdisc_priv(sch); 451 struct fq_codel_sched_data *q = qdisc_priv(sch);
466 452
467 tcf_destroy_chain(&q->filter_list); 453 tcf_destroy_chain(&q->filter_list);
468 fq_codel_free(q->backlogs); 454 kvfree(q->backlogs);
469 fq_codel_free(q->flows); 455 kvfree(q->flows);
470} 456}
471 457
472static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt) 458static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)
@@ -493,13 +479,13 @@ static int fq_codel_init(struct Qdisc *sch, struct nlattr *opt)
493 } 479 }
494 480
495 if (!q->flows) { 481 if (!q->flows) {
496 q->flows = fq_codel_zalloc(q->flows_cnt * 482 q->flows = kvzalloc(q->flows_cnt *
497 sizeof(struct fq_codel_flow)); 483 sizeof(struct fq_codel_flow), GFP_KERNEL);
498 if (!q->flows) 484 if (!q->flows)
499 return -ENOMEM; 485 return -ENOMEM;
500 q->backlogs = fq_codel_zalloc(q->flows_cnt * sizeof(u32)); 486 q->backlogs = kvzalloc(q->flows_cnt * sizeof(u32), GFP_KERNEL);
501 if (!q->backlogs) { 487 if (!q->backlogs) {
502 fq_codel_free(q->flows); 488 kvfree(q->flows);
503 return -ENOMEM; 489 return -ENOMEM;
504 } 490 }
505 for (i = 0; i < q->flows_cnt; i++) { 491 for (i = 0; i < q->flows_cnt; i++) {
diff --git a/net/sched/sch_hhf.c b/net/sched/sch_hhf.c
index c19d346e6c5a..51d3ba682af9 100644
--- a/net/sched/sch_hhf.c
+++ b/net/sched/sch_hhf.c
@@ -467,29 +467,14 @@ static void hhf_reset(struct Qdisc *sch)
467 rtnl_kfree_skbs(skb, skb); 467 rtnl_kfree_skbs(skb, skb);
468} 468}
469 469
470static void *hhf_zalloc(size_t sz)
471{
472 void *ptr = kzalloc(sz, GFP_KERNEL | __GFP_NOWARN);
473
474 if (!ptr)
475 ptr = vzalloc(sz);
476
477 return ptr;
478}
479
480static void hhf_free(void *addr)
481{
482 kvfree(addr);
483}
484
485static void hhf_destroy(struct Qdisc *sch) 470static void hhf_destroy(struct Qdisc *sch)
486{ 471{
487 int i; 472 int i;
488 struct hhf_sched_data *q = qdisc_priv(sch); 473 struct hhf_sched_data *q = qdisc_priv(sch);
489 474
490 for (i = 0; i < HHF_ARRAYS_CNT; i++) { 475 for (i = 0; i < HHF_ARRAYS_CNT; i++) {
491 hhf_free(q->hhf_arrays[i]); 476 kvfree(q->hhf_arrays[i]);
492 hhf_free(q->hhf_valid_bits[i]); 477 kvfree(q->hhf_valid_bits[i]);
493 } 478 }
494 479
495 for (i = 0; i < HH_FLOWS_CNT; i++) { 480 for (i = 0; i < HH_FLOWS_CNT; i++) {
@@ -503,7 +488,7 @@ static void hhf_destroy(struct Qdisc *sch)
503 kfree(flow); 488 kfree(flow);
504 } 489 }
505 } 490 }
506 hhf_free(q->hh_flows); 491 kvfree(q->hh_flows);
507} 492}
508 493
509static const struct nla_policy hhf_policy[TCA_HHF_MAX + 1] = { 494static const struct nla_policy hhf_policy[TCA_HHF_MAX + 1] = {
@@ -609,8 +594,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
609 594
610 if (!q->hh_flows) { 595 if (!q->hh_flows) {
611 /* Initialize heavy-hitter flow table. */ 596 /* Initialize heavy-hitter flow table. */
612 q->hh_flows = hhf_zalloc(HH_FLOWS_CNT * 597 q->hh_flows = kvzalloc(HH_FLOWS_CNT *
613 sizeof(struct list_head)); 598 sizeof(struct list_head), GFP_KERNEL);
614 if (!q->hh_flows) 599 if (!q->hh_flows)
615 return -ENOMEM; 600 return -ENOMEM;
616 for (i = 0; i < HH_FLOWS_CNT; i++) 601 for (i = 0; i < HH_FLOWS_CNT; i++)
@@ -624,8 +609,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
624 609
625 /* Initialize heavy-hitter filter arrays. */ 610 /* Initialize heavy-hitter filter arrays. */
626 for (i = 0; i < HHF_ARRAYS_CNT; i++) { 611 for (i = 0; i < HHF_ARRAYS_CNT; i++) {
627 q->hhf_arrays[i] = hhf_zalloc(HHF_ARRAYS_LEN * 612 q->hhf_arrays[i] = kvzalloc(HHF_ARRAYS_LEN *
628 sizeof(u32)); 613 sizeof(u32), GFP_KERNEL);
629 if (!q->hhf_arrays[i]) { 614 if (!q->hhf_arrays[i]) {
630 /* Note: hhf_destroy() will be called 615 /* Note: hhf_destroy() will be called
631 * by our caller. 616 * by our caller.
@@ -637,8 +622,8 @@ static int hhf_init(struct Qdisc *sch, struct nlattr *opt)
637 622
638 /* Initialize valid bits of heavy-hitter filter arrays. */ 623 /* Initialize valid bits of heavy-hitter filter arrays. */
639 for (i = 0; i < HHF_ARRAYS_CNT; i++) { 624 for (i = 0; i < HHF_ARRAYS_CNT; i++) {
640 q->hhf_valid_bits[i] = hhf_zalloc(HHF_ARRAYS_LEN / 625 q->hhf_valid_bits[i] = kvzalloc(HHF_ARRAYS_LEN /
641 BITS_PER_BYTE); 626 BITS_PER_BYTE, GFP_KERNEL);
642 if (!q->hhf_valid_bits[i]) { 627 if (!q->hhf_valid_bits[i]) {
643 /* Note: hhf_destroy() will be called 628 /* Note: hhf_destroy() will be called
644 * by our caller. 629 * by our caller.
diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c
index f0ce4780f395..1b3dd6190e93 100644
--- a/net/sched/sch_netem.c
+++ b/net/sched/sch_netem.c
@@ -702,15 +702,11 @@ static int get_dist_table(struct Qdisc *sch, const struct nlattr *attr)
702 spinlock_t *root_lock; 702 spinlock_t *root_lock;
703 struct disttable *d; 703 struct disttable *d;
704 int i; 704 int i;
705 size_t s;
706 705
707 if (n > NETEM_DIST_MAX) 706 if (n > NETEM_DIST_MAX)
708 return -EINVAL; 707 return -EINVAL;
709 708
710 s = sizeof(struct disttable) + n * sizeof(s16); 709 d = kvmalloc(sizeof(struct disttable) + n * sizeof(s16), GFP_KERNEL);
711 d = kmalloc(s, GFP_KERNEL | __GFP_NOWARN);
712 if (!d)
713 d = vmalloc(s);
714 if (!d) 710 if (!d)
715 return -ENOMEM; 711 return -ENOMEM;
716 712
diff --git a/net/sched/sch_sfq.c b/net/sched/sch_sfq.c
index b00e02c139de..332d94be6e1c 100644
--- a/net/sched/sch_sfq.c
+++ b/net/sched/sch_sfq.c
@@ -685,11 +685,7 @@ static int sfq_change(struct Qdisc *sch, struct nlattr *opt)
685 685
686static void *sfq_alloc(size_t sz) 686static void *sfq_alloc(size_t sz)
687{ 687{
688 void *ptr = kmalloc(sz, GFP_KERNEL | __GFP_NOWARN); 688 return kvmalloc(sz, GFP_KERNEL);
689
690 if (!ptr)
691 ptr = vmalloc(sz);
692 return ptr;
693} 689}
694 690
695static void sfq_free(void *addr) 691static void sfq_free(void *addr)
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index 82a9e1851108..447a7d5cee0f 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -101,14 +101,9 @@ SYSCALL_DEFINE5(add_key, const char __user *, _type,
101 101
102 if (_payload) { 102 if (_payload) {
103 ret = -ENOMEM; 103 ret = -ENOMEM;
104 payload = kmalloc(plen, GFP_KERNEL | __GFP_NOWARN); 104 payload = kvmalloc(plen, GFP_KERNEL);
105 if (!payload) { 105 if (!payload)
106 if (plen <= PAGE_SIZE) 106 goto error2;
107 goto error2;
108 payload = vmalloc(plen);
109 if (!payload)
110 goto error2;
111 }
112 107
113 ret = -EFAULT; 108 ret = -EFAULT;
114 if (copy_from_user(payload, _payload, plen) != 0) 109 if (copy_from_user(payload, _payload, plen) != 0)
@@ -1071,14 +1066,9 @@ long keyctl_instantiate_key_common(key_serial_t id,
1071 1066
1072 if (from) { 1067 if (from) {
1073 ret = -ENOMEM; 1068 ret = -ENOMEM;
1074 payload = kmalloc(plen, GFP_KERNEL); 1069 payload = kvmalloc(plen, GFP_KERNEL);
1075 if (!payload) { 1070 if (!payload)
1076 if (plen <= PAGE_SIZE) 1071 goto error;
1077 goto error;
1078 payload = vmalloc(plen);
1079 if (!payload)
1080 goto error;
1081 }
1082 1072
1083 ret = -EFAULT; 1073 ret = -EFAULT;
1084 if (!copy_from_iter_full(payload, plen, from)) 1074 if (!copy_from_iter_full(payload, plen, from))