aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wan
diff options
context:
space:
mode:
authorZhao Qiang <qiang.zhao@nxp.com>2016-07-14 22:38:25 -0400
committerDavid S. Miller <davem@davemloft.net>2016-07-16 23:22:02 -0400
commit1efb597d8bf56cbe9faa79e245472f1451e04d64 (patch)
tree904de0b35bff4a5fe8e5e5b13e2def9cce76fcbb /drivers/net/wan
parent18210510cfe418b374e364654743f738ddb75196 (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.c55
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
286bd_alloc_error: 286free_tiptr:
287 qe_muram_free(tiptr); 287 qe_muram_free(tiptr);
288tiptr_alloc_error: 288free_riptr:
289 qe_muram_free(riptr); 289 qe_muram_free(riptr);
290riptr_alloc_error: 290free_tx_skbuff:
291 kfree(priv->tx_skbuff); 291 kfree(priv->tx_skbuff);
292tx_skb_alloc_error: 292free_rx_skbuff:
293 kfree(priv->rx_skbuff); 293 kfree(priv->rx_skbuff);
294rx_skb_alloc_error: 294free_ucc_pram:
295 qe_muram_free(priv->ucc_pram_offset); 295 qe_muram_free(priv->ucc_pram_offset);
296pram_alloc_error: 296free_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);
300txbd_alloc_error: 300free_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);
304rxbd_alloc_error: 304free_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
1127err_hdlc_init: 1125free_dev:
1128err_miss_tsa_property: 1126 free_netdev(dev);
1127undo_uhdlc_init:
1128free_utdm:
1129 if (uhdlc_priv->tsa) 1129 if (uhdlc_priv->tsa)
1130 kfree(utdm); 1130 kfree(utdm);
1131err_alloc_utdm: 1131free_uhdlc_priv:
1132 kfree(uhdlc_priv); 1132 kfree(uhdlc_priv);
1133err_alloc_priv:
1134 return ret; 1133 return ret;
1135} 1134}
1136 1135