[bug report] wifi: ath12k: missing clean up
Dan Carpenter
error27 at gmail.com
Thu Feb 16 06:00:10 PST 2023
Hello Kalle Valo,
The patch d889913205cf: "wifi: ath12k: driver for Qualcomm Wi-Fi 7
devices" from Nov 28, 2022, leads to the following Smatch static
checker warning:
drivers/net/wireless/ath/ath12k/pci.c:1198 ath12k_pci_probe()
warn: missing unwind goto?
drivers/net/wireless/ath/ath12k/pci.c
1151 static int ath12k_pci_probe(struct pci_dev *pdev,
1152 const struct pci_device_id *pci_dev)
1153 {
1154 struct ath12k_base *ab;
1155 struct ath12k_pci *ab_pci;
1156 u32 soc_hw_version_major, soc_hw_version_minor;
1157 int ret;
1158
1159 ab = ath12k_core_alloc(&pdev->dev, sizeof(*ab_pci), ATH12K_BUS_PCI);
1160 if (!ab) {
1161 dev_err(&pdev->dev, "failed to allocate ath12k base\n");
1162 return -ENOMEM;
1163 }
1164
1165 ab->dev = &pdev->dev;
1166 pci_set_drvdata(pdev, ab);
1167 ab_pci = ath12k_pci_priv(ab);
1168 ab_pci->dev_id = pci_dev->device;
1169 ab_pci->ab = ab;
1170 ab_pci->pdev = pdev;
1171 ab->hif.ops = &ath12k_pci_hif_ops;
1172 pci_set_drvdata(pdev, ab);
1173 spin_lock_init(&ab_pci->window_lock);
1174
1175 ret = ath12k_pci_claim(ab_pci, pdev);
1176 if (ret) {
1177 ath12k_err(ab, "failed to claim device: %d\n", ret);
1178 goto err_free_core;
1179 }
1180
1181 switch (pci_dev->device) {
1182 case QCN9274_DEVICE_ID:
1183 ab_pci->msi_config = &ath12k_msi_config[0];
1184 ab->static_window_map = true;
1185 ath12k_pci_read_hw_version(ab, &soc_hw_version_major,
1186 &soc_hw_version_minor);
1187 switch (soc_hw_version_major) {
1188 case ATH12K_PCI_SOC_HW_VERSION_2:
1189 ab->hw_rev = ATH12K_HW_QCN9274_HW20;
1190 break;
1191 case ATH12K_PCI_SOC_HW_VERSION_1:
1192 ab->hw_rev = ATH12K_HW_QCN9274_HW10;
1193 break;
1194 default:
1195 dev_err(&pdev->dev,
1196 "Unknown hardware version found for QCN9274: 0x%x\n",
1197 soc_hw_version_major);
--> 1198 return -EOPNOTSUPP;
ret = -EOPNOTSUPP;
goto err_pci_free_region
1199 }
1200 break;
1201 case WCN7850_DEVICE_ID:
1202 ab_pci->msi_config = &ath12k_msi_config[0];
1203 ab->static_window_map = false;
1204 ab->hw_rev = ATH12K_HW_WCN7850_HW20;
1205 break;
1206
1207 default:
1208 dev_err(&pdev->dev, "Unknown PCI device found: 0x%x\n",
1209 pci_dev->device);
1210 ret = -EOPNOTSUPP;
1211 goto err_pci_free_region;
1212 }
1213
1214 ret = ath12k_pci_msi_alloc(ab_pci);
1215 if (ret) {
1216 ath12k_err(ab, "failed to alloc msi: %d\n", ret);
1217 goto err_pci_free_region;
1218 }
1219
1220 ret = ath12k_core_pre_init(ab);
1221 if (ret)
1222 goto err_pci_msi_free;
1223
1224 ret = ath12k_mhi_register(ab_pci);
1225 if (ret) {
1226 ath12k_err(ab, "failed to register mhi: %d\n", ret);
1227 goto err_pci_msi_free;
1228 }
1229
1230 ret = ath12k_hal_srng_init(ab);
1231 if (ret)
1232 goto err_mhi_unregister;
1233
1234 ret = ath12k_ce_alloc_pipes(ab);
1235 if (ret) {
1236 ath12k_err(ab, "failed to allocate ce pipes: %d\n", ret);
1237 goto err_hal_srng_deinit;
1238 }
1239
1240 ath12k_pci_init_qmi_ce_config(ab);
1241
1242 ret = ath12k_pci_config_irq(ab);
1243 if (ret) {
1244 ath12k_err(ab, "failed to config irq: %d\n", ret);
1245 goto err_ce_free;
1246 }
1247
1248 ret = ath12k_core_init(ab);
1249 if (ret) {
1250 ath12k_err(ab, "failed to init core: %d\n", ret);
1251 goto err_free_irq;
1252 }
1253 return 0;
1254
1255 err_free_irq:
1256 ath12k_pci_free_irq(ab);
1257
1258 err_ce_free:
1259 ath12k_ce_free_pipes(ab);
1260
1261 err_hal_srng_deinit:
1262 ath12k_hal_srng_deinit(ab);
1263
1264 err_mhi_unregister:
1265 ath12k_mhi_unregister(ab_pci);
1266
1267 err_pci_msi_free:
1268 ath12k_pci_msi_free(ab_pci);
1269
1270 err_pci_free_region:
1271 ath12k_pci_free_region(ab_pci);
1272
1273 err_free_core:
1274 ath12k_core_free(ab);
1275
1276 return ret;
1277 }
regards,
dan carpenter
More information about the ath12k
mailing list