diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-13 18:21:57 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-03-13 18:21:57 -0400 |
| commit | 842d223f28c4a4a6fe34df2d613049d4e47446c1 (patch) | |
| tree | fe24924112a915651eb8cc2c03836a695db6b7d7 /drivers | |
| parent | ad8395e149e86ca3a76b6ae300c0d0a92b7f7e17 (diff) | |
| parent | 59bfbcf01967d4d3370a2b8294673dd709e732cc (diff) | |
Merge branch 'akpm' (fixes from Andrew)
Merge misc fixes from Andrew Morton:
- A bunch of fixes
- Finish off the idr API conversions before someone starts to use the
old interfaces again.
* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
idr: idr_alloc() shouldn't trigger lowmem warning when preloaded
UAPI: fix endianness conditionals in M32R's asm/stat.h
UAPI: fix endianness conditionals in linux/raid/md_p.h
UAPI: fix endianness conditionals in linux/acct.h
UAPI: fix endianness conditionals in linux/aio_abi.h
decompressors: fix typo "POWERPC"
mm/fremap.c: fix oops on error path
idr: deprecate idr_pre_get() and idr_get_new[_above]()
tidspbridge: convert to idr_alloc()
zcache: convert to idr_alloc()
mlx4: remove leftover idr_pre_get() call
workqueue: convert to idr_alloc()
nfsd: convert to idr_alloc()
nfsd: remove unused get_new_stid()
kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER
signal: always clear sa_restorer on execve
mm: remove_memory(): fix end_pfn setting
include/linux/res_counter.h needs errno.h
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/infiniband/hw/mlx4/cm.c | 1 | ||||
| -rw-r--r-- | drivers/staging/tidspbridge/rmgr/drv.c | 70 | ||||
| -rw-r--r-- | drivers/staging/zcache/ramster/tcp.c | 25 |
3 files changed, 36 insertions, 60 deletions
diff --git a/drivers/infiniband/hw/mlx4/cm.c b/drivers/infiniband/hw/mlx4/cm.c index e0d79b2395e4..add98d01476c 100644 --- a/drivers/infiniband/hw/mlx4/cm.c +++ b/drivers/infiniband/hw/mlx4/cm.c | |||
| @@ -362,7 +362,6 @@ void mlx4_ib_cm_paravirt_init(struct mlx4_ib_dev *dev) | |||
| 362 | INIT_LIST_HEAD(&dev->sriov.cm_list); | 362 | INIT_LIST_HEAD(&dev->sriov.cm_list); |
| 363 | dev->sriov.sl_id_map = RB_ROOT; | 363 | dev->sriov.sl_id_map = RB_ROOT; |
| 364 | idr_init(&dev->sriov.pv_id_table); | 364 | idr_init(&dev->sriov.pv_id_table); |
| 365 | idr_pre_get(&dev->sriov.pv_id_table, GFP_KERNEL); | ||
| 366 | } | 365 | } |
| 367 | 366 | ||
| 368 | /* slave = -1 ==> all slaves */ | 367 | /* slave = -1 ==> all slaves */ |
diff --git a/drivers/staging/tidspbridge/rmgr/drv.c b/drivers/staging/tidspbridge/rmgr/drv.c index db1da28cecba..be26917a6896 100644 --- a/drivers/staging/tidspbridge/rmgr/drv.c +++ b/drivers/staging/tidspbridge/rmgr/drv.c | |||
| @@ -76,37 +76,28 @@ int drv_insert_node_res_element(void *hnode, void *node_resource, | |||
| 76 | struct node_res_object **node_res_obj = | 76 | struct node_res_object **node_res_obj = |
| 77 | (struct node_res_object **)node_resource; | 77 | (struct node_res_object **)node_resource; |
| 78 | struct process_context *ctxt = (struct process_context *)process_ctxt; | 78 | struct process_context *ctxt = (struct process_context *)process_ctxt; |
| 79 | int status = 0; | ||
| 80 | int retval; | 79 | int retval; |
| 81 | 80 | ||
| 82 | *node_res_obj = kzalloc(sizeof(struct node_res_object), GFP_KERNEL); | 81 | *node_res_obj = kzalloc(sizeof(struct node_res_object), GFP_KERNEL); |
| 83 | if (!*node_res_obj) { | 82 | if (!*node_res_obj) |
| 84 | status = -ENOMEM; | 83 | return -ENOMEM; |
| 85 | goto func_end; | ||
| 86 | } | ||
| 87 | 84 | ||
| 88 | (*node_res_obj)->node = hnode; | 85 | (*node_res_obj)->node = hnode; |
| 89 | retval = idr_get_new(ctxt->node_id, *node_res_obj, | 86 | retval = idr_alloc(ctxt->node_id, *node_res_obj, 0, 0, GFP_KERNEL); |
| 90 | &(*node_res_obj)->id); | 87 | if (retval >= 0) { |
| 91 | if (retval == -EAGAIN) { | 88 | (*node_res_obj)->id = retval; |
| 92 | if (!idr_pre_get(ctxt->node_id, GFP_KERNEL)) { | 89 | return 0; |
| 93 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 94 | status = -ENOMEM; | ||
| 95 | goto func_end; | ||
| 96 | } | ||
| 97 | |||
| 98 | retval = idr_get_new(ctxt->node_id, *node_res_obj, | ||
| 99 | &(*node_res_obj)->id); | ||
| 100 | } | 90 | } |
| 101 | if (retval) { | 91 | |
| 92 | kfree(*node_res_obj); | ||
| 93 | |||
| 94 | if (retval == -ENOSPC) { | ||
| 102 | pr_err("%s: FAILED, IDR is FULL\n", __func__); | 95 | pr_err("%s: FAILED, IDR is FULL\n", __func__); |
| 103 | status = -EFAULT; | 96 | return -EFAULT; |
| 97 | } else { | ||
| 98 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 99 | return -ENOMEM; | ||
| 104 | } | 100 | } |
| 105 | func_end: | ||
| 106 | if (status) | ||
| 107 | kfree(*node_res_obj); | ||
| 108 | |||
| 109 | return status; | ||
| 110 | } | 101 | } |
| 111 | 102 | ||
| 112 | /* Release all Node resources and its context | 103 | /* Release all Node resources and its context |
| @@ -201,35 +192,26 @@ int drv_proc_insert_strm_res_element(void *stream_obj, | |||
| 201 | struct strm_res_object **pstrm_res = | 192 | struct strm_res_object **pstrm_res = |
| 202 | (struct strm_res_object **)strm_res; | 193 | (struct strm_res_object **)strm_res; |
| 203 | struct process_context *ctxt = (struct process_context *)process_ctxt; | 194 | struct process_context *ctxt = (struct process_context *)process_ctxt; |
| 204 | int status = 0; | ||
| 205 | int retval; | 195 | int retval; |
| 206 | 196 | ||
| 207 | *pstrm_res = kzalloc(sizeof(struct strm_res_object), GFP_KERNEL); | 197 | *pstrm_res = kzalloc(sizeof(struct strm_res_object), GFP_KERNEL); |
| 208 | if (*pstrm_res == NULL) { | 198 | if (*pstrm_res == NULL) |
| 209 | status = -EFAULT; | 199 | return -EFAULT; |
| 210 | goto func_end; | ||
| 211 | } | ||
| 212 | 200 | ||
| 213 | (*pstrm_res)->stream = stream_obj; | 201 | (*pstrm_res)->stream = stream_obj; |
| 214 | retval = idr_get_new(ctxt->stream_id, *pstrm_res, | 202 | retval = idr_alloc(ctxt->stream_id, *pstrm_res, 0, 0, GFP_KERNEL); |
| 215 | &(*pstrm_res)->id); | 203 | if (retval >= 0) { |
| 216 | if (retval == -EAGAIN) { | 204 | (*pstrm_res)->id = retval; |
| 217 | if (!idr_pre_get(ctxt->stream_id, GFP_KERNEL)) { | 205 | return 0; |
| 218 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 219 | status = -ENOMEM; | ||
| 220 | goto func_end; | ||
| 221 | } | ||
| 222 | |||
| 223 | retval = idr_get_new(ctxt->stream_id, *pstrm_res, | ||
| 224 | &(*pstrm_res)->id); | ||
| 225 | } | 206 | } |
| 226 | if (retval) { | 207 | |
| 208 | if (retval == -ENOSPC) { | ||
| 227 | pr_err("%s: FAILED, IDR is FULL\n", __func__); | 209 | pr_err("%s: FAILED, IDR is FULL\n", __func__); |
| 228 | status = -EPERM; | 210 | return -EPERM; |
| 211 | } else { | ||
| 212 | pr_err("%s: OUT OF MEMORY\n", __func__); | ||
| 213 | return -ENOMEM; | ||
| 229 | } | 214 | } |
| 230 | |||
| 231 | func_end: | ||
| 232 | return status; | ||
| 233 | } | 215 | } |
| 234 | 216 | ||
| 235 | static int drv_proc_free_strm_res(int id, void *p, void *process_ctxt) | 217 | static int drv_proc_free_strm_res(int id, void *p, void *process_ctxt) |
diff --git a/drivers/staging/zcache/ramster/tcp.c b/drivers/staging/zcache/ramster/tcp.c index aa2a1a763aa4..f6e1e5209d88 100644 --- a/drivers/staging/zcache/ramster/tcp.c +++ b/drivers/staging/zcache/ramster/tcp.c | |||
| @@ -300,27 +300,22 @@ static u8 r2net_num_from_nn(struct r2net_node *nn) | |||
| 300 | 300 | ||
| 301 | static int r2net_prep_nsw(struct r2net_node *nn, struct r2net_status_wait *nsw) | 301 | static int r2net_prep_nsw(struct r2net_node *nn, struct r2net_status_wait *nsw) |
| 302 | { | 302 | { |
| 303 | int ret = 0; | 303 | int ret; |
| 304 | 304 | ||
| 305 | do { | 305 | spin_lock(&nn->nn_lock); |
| 306 | if (!idr_pre_get(&nn->nn_status_idr, GFP_ATOMIC)) { | 306 | ret = idr_alloc(&nn->nn_status_idr, nsw, 0, 0, GFP_ATOMIC); |
| 307 | ret = -EAGAIN; | 307 | if (ret >= 0) { |
| 308 | break; | 308 | nsw->ns_id = ret; |
| 309 | } | 309 | list_add_tail(&nsw->ns_node_item, &nn->nn_status_list); |
| 310 | spin_lock(&nn->nn_lock); | 310 | } |
| 311 | ret = idr_get_new(&nn->nn_status_idr, nsw, &nsw->ns_id); | 311 | spin_unlock(&nn->nn_lock); |
| 312 | if (ret == 0) | ||
| 313 | list_add_tail(&nsw->ns_node_item, | ||
| 314 | &nn->nn_status_list); | ||
| 315 | spin_unlock(&nn->nn_lock); | ||
| 316 | } while (ret == -EAGAIN); | ||
| 317 | 312 | ||
| 318 | if (ret == 0) { | 313 | if (ret >= 0) { |
| 319 | init_waitqueue_head(&nsw->ns_wq); | 314 | init_waitqueue_head(&nsw->ns_wq); |
| 320 | nsw->ns_sys_status = R2NET_ERR_NONE; | 315 | nsw->ns_sys_status = R2NET_ERR_NONE; |
| 321 | nsw->ns_status = 0; | 316 | nsw->ns_status = 0; |
| 317 | return 0; | ||
| 322 | } | 318 | } |
| 323 | |||
| 324 | return ret; | 319 | return ret; |
| 325 | } | 320 | } |
| 326 | 321 | ||
