diff options
author | Dwight Engen <dwight.engen@oracle.com> | 2014-12-11 12:26:16 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-12-11 21:52:45 -0500 |
commit | 1678c2bd131313b58c7492487c00dca982be7f28 (patch) | |
tree | aa674d9f464626aab98183d17a00ad84bbd5c43f /arch/sparc | |
parent | fe47c3c2623d6914655f507a317a6b881bc7c6a4 (diff) |
sparc/ldc: create separate ldc_unbind from ldc_free
Signed-off-by: Dwight Engen <dwight.engen@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc')
-rw-r--r-- | arch/sparc/include/asm/ldc.h | 1 | ||||
-rw-r--r-- | arch/sparc/kernel/ldc.c | 12 |
2 files changed, 10 insertions, 3 deletions
diff --git a/arch/sparc/include/asm/ldc.h b/arch/sparc/include/asm/ldc.h index 58ab64de25d2..6e9004aa6f25 100644 --- a/arch/sparc/include/asm/ldc.h +++ b/arch/sparc/include/asm/ldc.h | |||
@@ -61,6 +61,7 @@ void ldc_free(struct ldc_channel *lp); | |||
61 | 61 | ||
62 | /* Register TX and RX queues of the link with the hypervisor. */ | 62 | /* Register TX and RX queues of the link with the hypervisor. */ |
63 | int ldc_bind(struct ldc_channel *lp); | 63 | int ldc_bind(struct ldc_channel *lp); |
64 | void ldc_unbind(struct ldc_channel *lp); | ||
64 | 65 | ||
65 | /* For non-RAW protocols we need to complete a handshake before | 66 | /* For non-RAW protocols we need to complete a handshake before |
66 | * communication can proceed. ldc_connect() does that, if the | 67 | * communication can proceed. ldc_connect() does that, if the |
diff --git a/arch/sparc/kernel/ldc.c b/arch/sparc/kernel/ldc.c index 4310332872d4..274a9f59d95c 100644 --- a/arch/sparc/kernel/ldc.c +++ b/arch/sparc/kernel/ldc.c | |||
@@ -1222,11 +1222,12 @@ out_err: | |||
1222 | } | 1222 | } |
1223 | EXPORT_SYMBOL(ldc_alloc); | 1223 | EXPORT_SYMBOL(ldc_alloc); |
1224 | 1224 | ||
1225 | void ldc_free(struct ldc_channel *lp) | 1225 | void ldc_unbind(struct ldc_channel *lp) |
1226 | { | 1226 | { |
1227 | if (lp->flags & LDC_FLAG_REGISTERED_IRQS) { | 1227 | if (lp->flags & LDC_FLAG_REGISTERED_IRQS) { |
1228 | free_irq(lp->cfg.rx_irq, lp); | 1228 | free_irq(lp->cfg.rx_irq, lp); |
1229 | free_irq(lp->cfg.tx_irq, lp); | 1229 | free_irq(lp->cfg.tx_irq, lp); |
1230 | lp->flags &= ~LDC_FLAG_REGISTERED_IRQS; | ||
1230 | } | 1231 | } |
1231 | 1232 | ||
1232 | if (lp->flags & LDC_FLAG_REGISTERED_QUEUES) { | 1233 | if (lp->flags & LDC_FLAG_REGISTERED_QUEUES) { |
@@ -1240,10 +1241,15 @@ void ldc_free(struct ldc_channel *lp) | |||
1240 | lp->flags &= ~LDC_FLAG_ALLOCED_QUEUES; | 1241 | lp->flags &= ~LDC_FLAG_ALLOCED_QUEUES; |
1241 | } | 1242 | } |
1242 | 1243 | ||
1243 | hlist_del(&lp->list); | 1244 | ldc_set_state(lp, LDC_STATE_INIT); |
1245 | } | ||
1246 | EXPORT_SYMBOL(ldc_unbind); | ||
1244 | 1247 | ||
1248 | void ldc_free(struct ldc_channel *lp) | ||
1249 | { | ||
1250 | ldc_unbind(lp); | ||
1251 | hlist_del(&lp->list); | ||
1245 | kfree(lp->mssbuf); | 1252 | kfree(lp->mssbuf); |
1246 | |||
1247 | ldc_iommu_release(lp); | 1253 | ldc_iommu_release(lp); |
1248 | 1254 | ||
1249 | kfree(lp); | 1255 | kfree(lp); |