diff options
| author | Olof Johansson <olof@lixom.net> | 2013-10-28 00:42:44 -0400 |
|---|---|---|
| committer | Olof Johansson <olof@lixom.net> | 2013-10-28 00:42:44 -0400 |
| commit | 3316dee245ef297155fa45b8d14263dfd6a9164b (patch) | |
| tree | 7adbf9875893ce0405f771d92d266d70df1aedbb /ipc/msg.c | |
| parent | f2c4e82e350dab489ae0d8fcd84b780de508ab64 (diff) | |
| parent | 1fecf8958eb7f90791f2c7e99afac393b64fa976 (diff) | |
Merge tag 's3c24xx-dma' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/drivers
From Kukjin Kim, this branch adds device-tree support to the DMA controller
on the older Samsung SoCs. It also adds support for one of the missing SoCs
in the family (2410).
The driver has been Ack:ed by Vinod Koul, but is merged through here due
to dependencies with platform code.
* tag 's3c24xx-dma' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
ARM: S3C24XX: add dma pdata for s3c2410, s3c2440 and s3c2442
dmaengine: s3c24xx-dma: add support for the s3c2410 type of controller
ARM: S3C24XX: Fix possible dma selection warning
ARM: SAMSUNG: set s3c24xx_dma_filter for s3c64xx-spi0 device
ARM: S3C24XX: add platform-devices for new dma driver for s3c2412 and s3c2443
dmaengine: add driver for Samsung s3c24xx SoCs
ARM: S3C24XX: number the dma clocks
+ Linux 3.12-rc3
Signed-off-by: Olof Johansson <olof@lixom.net>
Diffstat (limited to 'ipc/msg.c')
| -rw-r--r-- | ipc/msg.c | 19 |
1 files changed, 13 insertions, 6 deletions
| @@ -165,6 +165,15 @@ static inline void msg_rmid(struct ipc_namespace *ns, struct msg_queue *s) | |||
| 165 | ipc_rmid(&msg_ids(ns), &s->q_perm); | 165 | ipc_rmid(&msg_ids(ns), &s->q_perm); |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | static void msg_rcu_free(struct rcu_head *head) | ||
| 169 | { | ||
| 170 | struct ipc_rcu *p = container_of(head, struct ipc_rcu, rcu); | ||
| 171 | struct msg_queue *msq = ipc_rcu_to_struct(p); | ||
| 172 | |||
| 173 | security_msg_queue_free(msq); | ||
| 174 | ipc_rcu_free(head); | ||
| 175 | } | ||
| 176 | |||
| 168 | /** | 177 | /** |
| 169 | * newque - Create a new msg queue | 178 | * newque - Create a new msg queue |
| 170 | * @ns: namespace | 179 | * @ns: namespace |
| @@ -189,15 +198,14 @@ static int newque(struct ipc_namespace *ns, struct ipc_params *params) | |||
| 189 | msq->q_perm.security = NULL; | 198 | msq->q_perm.security = NULL; |
| 190 | retval = security_msg_queue_alloc(msq); | 199 | retval = security_msg_queue_alloc(msq); |
| 191 | if (retval) { | 200 | if (retval) { |
| 192 | ipc_rcu_putref(msq); | 201 | ipc_rcu_putref(msq, ipc_rcu_free); |
| 193 | return retval; | 202 | return retval; |
| 194 | } | 203 | } |
| 195 | 204 | ||
| 196 | /* ipc_addid() locks msq upon success. */ | 205 | /* ipc_addid() locks msq upon success. */ |
| 197 | id = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni); | 206 | id = ipc_addid(&msg_ids(ns), &msq->q_perm, ns->msg_ctlmni); |
| 198 | if (id < 0) { | 207 | if (id < 0) { |
| 199 | security_msg_queue_free(msq); | 208 | ipc_rcu_putref(msq, msg_rcu_free); |
| 200 | ipc_rcu_putref(msq); | ||
| 201 | return id; | 209 | return id; |
| 202 | } | 210 | } |
| 203 | 211 | ||
| @@ -276,8 +284,7 @@ static void freeque(struct ipc_namespace *ns, struct kern_ipc_perm *ipcp) | |||
| 276 | free_msg(msg); | 284 | free_msg(msg); |
| 277 | } | 285 | } |
| 278 | atomic_sub(msq->q_cbytes, &ns->msg_bytes); | 286 | atomic_sub(msq->q_cbytes, &ns->msg_bytes); |
| 279 | security_msg_queue_free(msq); | 287 | ipc_rcu_putref(msq, msg_rcu_free); |
| 280 | ipc_rcu_putref(msq); | ||
| 281 | } | 288 | } |
| 282 | 289 | ||
| 283 | /* | 290 | /* |
| @@ -717,7 +724,7 @@ long do_msgsnd(int msqid, long mtype, void __user *mtext, | |||
| 717 | rcu_read_lock(); | 724 | rcu_read_lock(); |
| 718 | ipc_lock_object(&msq->q_perm); | 725 | ipc_lock_object(&msq->q_perm); |
| 719 | 726 | ||
| 720 | ipc_rcu_putref(msq); | 727 | ipc_rcu_putref(msq, ipc_rcu_free); |
| 721 | if (msq->q_perm.deleted) { | 728 | if (msq->q_perm.deleted) { |
| 722 | err = -EIDRM; | 729 | err = -EIDRM; |
| 723 | goto out_unlock0; | 730 | goto out_unlock0; |
