diff options
author | Zhao Qiang <qiang.zhao@nxp.com> | 2016-07-14 22:38:25 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-07-16 23:22:02 -0400 |
commit | 1efb597d8bf56cbe9faa79e245472f1451e04d64 (patch) | |
tree | 904de0b35bff4a5fe8e5e5b13e2def9cce76fcbb /drivers/net/wan | |
parent | 18210510cfe418b374e364654743f738ddb75196 (diff) |
wan/fsl_ucc_hdlc: rewrite error handling to make it clearer
It was used err_xxx for labeled statement, it is
not easy to understand, now use free_xxx for labeled
statement.
Signed-off-by: Zhao Qiang <qiang.zhao@nxp.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wan')
-rw-r--r-- | drivers/net/wan/fsl_ucc_hdlc.c | 55 |
1 files changed, 27 insertions, 28 deletions
diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c index 040a45c4b4c1..b3861bf93899 100644 --- a/drivers/net/wan/fsl_ucc_hdlc.c +++ b/drivers/net/wan/fsl_ucc_hdlc.c | |||
@@ -143,7 +143,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv) | |||
143 | if (!priv->rx_bd_base) { | 143 | if (!priv->rx_bd_base) { |
144 | dev_err(priv->dev, "Cannot allocate MURAM memory for RxBDs\n"); | 144 | dev_err(priv->dev, "Cannot allocate MURAM memory for RxBDs\n"); |
145 | ret = -ENOMEM; | 145 | ret = -ENOMEM; |
146 | goto rxbd_alloc_error; | 146 | goto free_uccf; |
147 | } | 147 | } |
148 | 148 | ||
149 | /* Alloc Tx BD */ | 149 | /* Alloc Tx BD */ |
@@ -154,7 +154,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv) | |||
154 | if (!priv->tx_bd_base) { | 154 | if (!priv->tx_bd_base) { |
155 | dev_err(priv->dev, "Cannot allocate MURAM memory for TxBDs\n"); | 155 | dev_err(priv->dev, "Cannot allocate MURAM memory for TxBDs\n"); |
156 | ret = -ENOMEM; | 156 | ret = -ENOMEM; |
157 | goto txbd_alloc_error; | 157 | goto free_rx_bd; |
158 | } | 158 | } |
159 | 159 | ||
160 | /* Alloc parameter ram for ucc hdlc */ | 160 | /* Alloc parameter ram for ucc hdlc */ |
@@ -164,18 +164,18 @@ static int uhdlc_init(struct ucc_hdlc_private *priv) | |||
164 | if (priv->ucc_pram_offset < 0) { | 164 | if (priv->ucc_pram_offset < 0) { |
165 | dev_err(priv->dev, "Can not allocate MURAM for hdlc prameter.\n"); | 165 | dev_err(priv->dev, "Can not allocate MURAM for hdlc prameter.\n"); |
166 | ret = -ENOMEM; | 166 | ret = -ENOMEM; |
167 | goto pram_alloc_error; | 167 | goto free_tx_bd; |
168 | } | 168 | } |
169 | 169 | ||
170 | priv->rx_skbuff = kzalloc(priv->rx_ring_size * sizeof(*priv->rx_skbuff), | 170 | priv->rx_skbuff = kzalloc(priv->rx_ring_size * sizeof(*priv->rx_skbuff), |
171 | GFP_KERNEL); | 171 | GFP_KERNEL); |
172 | if (!priv->rx_skbuff) | 172 | if (!priv->rx_skbuff) |
173 | goto rx_skb_alloc_error; | 173 | goto free_ucc_pram; |
174 | 174 | ||
175 | priv->tx_skbuff = kzalloc(priv->tx_ring_size * sizeof(*priv->tx_skbuff), | 175 | priv->tx_skbuff = kzalloc(priv->tx_ring_size * sizeof(*priv->tx_skbuff), |
176 | GFP_KERNEL); | 176 | GFP_KERNEL); |
177 | if (!priv->tx_skbuff) | 177 | if (!priv->tx_skbuff) |
178 | goto tx_skb_alloc_error; | 178 | goto free_rx_skbuff; |
179 | 179 | ||
180 | priv->skb_curtx = 0; | 180 | priv->skb_curtx = 0; |
181 | priv->skb_dirtytx = 0; | 181 | priv->skb_dirtytx = 0; |
@@ -200,14 +200,14 @@ static int uhdlc_init(struct ucc_hdlc_private *priv) | |||
200 | if (riptr < 0) { | 200 | if (riptr < 0) { |
201 | dev_err(priv->dev, "Cannot allocate MURAM mem for Receive internal temp data pointer\n"); | 201 | dev_err(priv->dev, "Cannot allocate MURAM mem for Receive internal temp data pointer\n"); |
202 | ret = -ENOMEM; | 202 | ret = -ENOMEM; |
203 | goto riptr_alloc_error; | 203 | goto free_tx_skbuff; |
204 | } | 204 | } |
205 | 205 | ||
206 | tiptr = qe_muram_alloc(32, 32); | 206 | tiptr = qe_muram_alloc(32, 32); |
207 | if (tiptr < 0) { | 207 | if (tiptr < 0) { |
208 | dev_err(priv->dev, "Cannot allocate MURAM mem for Transmit internal temp data pointer\n"); | 208 | dev_err(priv->dev, "Cannot allocate MURAM mem for Transmit internal temp data pointer\n"); |
209 | ret = -ENOMEM; | 209 | ret = -ENOMEM; |
210 | goto tiptr_alloc_error; | 210 | goto free_riptr; |
211 | } | 211 | } |
212 | 212 | ||
213 | /* Set RIPTR, TIPTR */ | 213 | /* Set RIPTR, TIPTR */ |
@@ -247,7 +247,7 @@ static int uhdlc_init(struct ucc_hdlc_private *priv) | |||
247 | if (!bd_buffer) { | 247 | if (!bd_buffer) { |
248 | dev_err(priv->dev, "Could not allocate buffer descriptors\n"); | 248 | dev_err(priv->dev, "Could not allocate buffer descriptors\n"); |
249 | ret = -ENOMEM; | 249 | ret = -ENOMEM; |
250 | goto bd_alloc_error; | 250 | goto free_tiptr; |
251 | } | 251 | } |
252 | 252 | ||
253 | memset(bd_buffer, 0, (RX_BD_RING_LEN + TX_BD_RING_LEN) | 253 | memset(bd_buffer, 0, (RX_BD_RING_LEN + TX_BD_RING_LEN) |
@@ -283,25 +283,25 @@ static int uhdlc_init(struct ucc_hdlc_private *priv) | |||
283 | 283 | ||
284 | return 0; | 284 | return 0; |
285 | 285 | ||
286 | bd_alloc_error: | 286 | free_tiptr: |
287 | qe_muram_free(tiptr); | 287 | qe_muram_free(tiptr); |
288 | tiptr_alloc_error: | 288 | free_riptr: |
289 | qe_muram_free(riptr); | 289 | qe_muram_free(riptr); |
290 | riptr_alloc_error: | 290 | free_tx_skbuff: |
291 | kfree(priv->tx_skbuff); | 291 | kfree(priv->tx_skbuff); |
292 | tx_skb_alloc_error: | 292 | free_rx_skbuff: |
293 | kfree(priv->rx_skbuff); | 293 | kfree(priv->rx_skbuff); |
294 | rx_skb_alloc_error: | 294 | free_ucc_pram: |
295 | qe_muram_free(priv->ucc_pram_offset); | 295 | qe_muram_free(priv->ucc_pram_offset); |
296 | pram_alloc_error: | 296 | free_tx_bd: |
297 | dma_free_coherent(priv->dev, | 297 | dma_free_coherent(priv->dev, |
298 | TX_BD_RING_LEN * sizeof(struct qe_bd), | 298 | TX_BD_RING_LEN * sizeof(struct qe_bd), |
299 | priv->tx_bd_base, priv->dma_tx_bd); | 299 | priv->tx_bd_base, priv->dma_tx_bd); |
300 | txbd_alloc_error: | 300 | free_rx_bd: |
301 | dma_free_coherent(priv->dev, | 301 | dma_free_coherent(priv->dev, |
302 | RX_BD_RING_LEN * sizeof(struct qe_bd), | 302 | RX_BD_RING_LEN * sizeof(struct qe_bd), |
303 | priv->rx_bd_base, priv->dma_rx_bd); | 303 | priv->rx_bd_base, priv->dma_rx_bd); |
304 | rxbd_alloc_error: | 304 | free_uccf: |
305 | ucc_fast_free(priv->uccf); | 305 | ucc_fast_free(priv->uccf); |
306 | 306 | ||
307 | return ret; | 307 | return ret; |
@@ -1067,9 +1067,7 @@ static int ucc_hdlc_probe(struct platform_device *pdev) | |||
1067 | 1067 | ||
1068 | uhdlc_priv = kzalloc(sizeof(*uhdlc_priv), GFP_KERNEL); | 1068 | uhdlc_priv = kzalloc(sizeof(*uhdlc_priv), GFP_KERNEL); |
1069 | if (!uhdlc_priv) { | 1069 | if (!uhdlc_priv) { |
1070 | ret = -ENOMEM; | 1070 | return -ENOMEM; |
1071 | dev_err(&pdev->dev, "No mem to alloc hdlc private data\n"); | ||
1072 | goto err_alloc_priv; | ||
1073 | } | 1071 | } |
1074 | 1072 | ||
1075 | dev_set_drvdata(&pdev->dev, uhdlc_priv); | 1073 | dev_set_drvdata(&pdev->dev, uhdlc_priv); |
@@ -1087,25 +1085,25 @@ static int ucc_hdlc_probe(struct platform_device *pdev) | |||
1087 | if (!utdm) { | 1085 | if (!utdm) { |
1088 | ret = -ENOMEM; | 1086 | ret = -ENOMEM; |
1089 | dev_err(&pdev->dev, "No mem to alloc ucc tdm data\n"); | 1087 | dev_err(&pdev->dev, "No mem to alloc ucc tdm data\n"); |
1090 | goto err_alloc_utdm; | 1088 | goto free_uhdlc_priv; |
1091 | } | 1089 | } |
1092 | uhdlc_priv->utdm = utdm; | 1090 | uhdlc_priv->utdm = utdm; |
1093 | ret = ucc_of_parse_tdm(np, utdm, ut_info); | 1091 | ret = ucc_of_parse_tdm(np, utdm, ut_info); |
1094 | if (ret) | 1092 | if (ret) |
1095 | goto err_miss_tsa_property; | 1093 | goto free_utdm; |
1096 | } | 1094 | } |
1097 | 1095 | ||
1098 | ret = uhdlc_init(uhdlc_priv); | 1096 | ret = uhdlc_init(uhdlc_priv); |
1099 | if (ret) { | 1097 | if (ret) { |
1100 | dev_err(&pdev->dev, "Failed to init uhdlc\n"); | 1098 | dev_err(&pdev->dev, "Failed to init uhdlc\n"); |
1101 | goto err_hdlc_init; | 1099 | goto free_utdm; |
1102 | } | 1100 | } |
1103 | 1101 | ||
1104 | dev = alloc_hdlcdev(uhdlc_priv); | 1102 | dev = alloc_hdlcdev(uhdlc_priv); |
1105 | if (!dev) { | 1103 | if (!dev) { |
1106 | ret = -ENOMEM; | 1104 | ret = -ENOMEM; |
1107 | pr_err("ucc_hdlc: unable to allocate memory\n"); | 1105 | pr_err("ucc_hdlc: unable to allocate memory\n"); |
1108 | goto err_hdlc_init; | 1106 | goto undo_uhdlc_init; |
1109 | } | 1107 | } |
1110 | 1108 | ||
1111 | uhdlc_priv->ndev = dev; | 1109 | uhdlc_priv->ndev = dev; |
@@ -1119,18 +1117,19 @@ static int ucc_hdlc_probe(struct platform_device *pdev) | |||
1119 | ret = -ENOBUFS; | 1117 | ret = -ENOBUFS; |
1120 | pr_err("ucc_hdlc: unable to register hdlc device\n"); | 1118 | pr_err("ucc_hdlc: unable to register hdlc device\n"); |
1121 | free_netdev(dev); | 1119 | free_netdev(dev); |
1122 | goto err_hdlc_init; | 1120 | goto free_dev; |
1123 | } | 1121 | } |
1124 | 1122 | ||
1125 | return 0; | 1123 | return 0; |
1126 | 1124 | ||
1127 | err_hdlc_init: | 1125 | free_dev: |
1128 | err_miss_tsa_property: | 1126 | free_netdev(dev); |
1127 | undo_uhdlc_init: | ||
1128 | free_utdm: | ||
1129 | if (uhdlc_priv->tsa) | 1129 | if (uhdlc_priv->tsa) |
1130 | kfree(utdm); | 1130 | kfree(utdm); |
1131 | err_alloc_utdm: | 1131 | free_uhdlc_priv: |
1132 | kfree(uhdlc_priv); | 1132 | kfree(uhdlc_priv); |
1133 | err_alloc_priv: | ||
1134 | return ret; | 1133 | return ret; |
1135 | } | 1134 | } |
1136 | 1135 | ||