Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'scripts-coccinelle-symbolic-error-names-script'

Tariq Toukan says:

====================
scripts/coccinelle: Symbolic error names script

This small series by Gal adds a new coccinelle script that spots
potential transitions to symbolic error names in print functions, and
then uses it in mlx5 driver.
====================

Link: https://patch.msgid.link/1758192227-701925-1-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+114 -76
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/diag/reporter_vnic.c
··· 138 138 dev); 139 139 if (IS_ERR(health->vnic_reporter)) 140 140 mlx5_core_warn(dev, 141 - "Failed to create vnic reporter, err = %ld\n", 142 - PTR_ERR(health->vnic_reporter)); 141 + "Failed to create vnic reporter, err = %pe\n", 142 + health->vnic_reporter); 143 143 } 144 144 145 145 void mlx5_reporter_vnic_destroy(struct mlx5_core_dev *dev)
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en/hv_vhca_stats.c
··· 138 138 if (IS_ERR_OR_NULL(agent)) { 139 139 if (IS_ERR(agent)) 140 140 netdev_warn(priv->netdev, 141 - "Failed to create hv vhca stats agent, err = %ld\n", 142 - PTR_ERR(agent)); 141 + "Failed to create hv vhca stats agent, err = %pe\n", 142 + agent); 143 143 144 144 kvfree(priv->stats_agent.buf); 145 145 return;
+4 -3
drivers/net/ethernet/mellanox/mlx5/core/en/rep/bridge.c
··· 488 488 fdb_info, 489 489 br_offloads); 490 490 if (IS_ERR(work)) { 491 - WARN_ONCE(1, "Failed to init switchdev work, err=%ld", 492 - PTR_ERR(work)); 491 + WARN_ONCE(1, "Failed to init switchdev work, err=%pe", 492 + work); 493 493 return notifier_from_errno(PTR_ERR(work)); 494 494 } 495 495 ··· 527 527 br_offloads = mlx5_esw_bridge_init(esw); 528 528 rtnl_unlock(); 529 529 if (IS_ERR(br_offloads)) { 530 - esw_warn(mdev, "Failed to init esw bridge (err=%ld)\n", PTR_ERR(br_offloads)); 530 + esw_warn(mdev, "Failed to init esw bridge (err=%pe)\n", 531 + br_offloads); 531 532 return; 532 533 } 533 534
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
··· 672 672 &mlx5_rx_reporter_ops, 673 673 priv); 674 674 if (IS_ERR(reporter)) { 675 - netdev_warn(priv->netdev, "Failed to create rx reporter, err = %ld\n", 676 - PTR_ERR(reporter)); 675 + netdev_warn(priv->netdev, "Failed to create rx reporter, err = %pe\n", 676 + reporter); 677 677 return; 678 678 } 679 679 priv->rx_reporter = reporter;
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_tx.c
··· 561 561 priv); 562 562 if (IS_ERR(reporter)) { 563 563 netdev_warn(priv->netdev, 564 - "Failed to create tx reporter, err = %ld\n", 565 - PTR_ERR(reporter)); 564 + "Failed to create tx reporter, err = %pe\n", 565 + reporter); 566 566 return; 567 567 } 568 568 priv->tx_reporter = reporter;
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_hmfs.c
··· 136 136 hws_bwc_matcher = mlx5_ct_fs_hmfs_matcher_create(fs, tbl, spec, ipv4, tcp, gre); 137 137 if (IS_ERR(hws_bwc_matcher)) { 138 138 netdev_warn(fs->netdev, 139 - "ct_fs_hmfs: failed to create bwc matcher (nat %d, ipv4 %d, tcp %d, gre %d), err: %ld\n", 140 - nat, ipv4, tcp, gre, PTR_ERR(hws_bwc_matcher)); 139 + "ct_fs_hmfs: failed to create bwc matcher (nat %d, ipv4 %d, tcp %d, gre %d), err: %pe\n", 140 + nat, ipv4, tcp, gre, hws_bwc_matcher); 141 141 142 142 hmfs_matcher = ERR_CAST(hws_bwc_matcher); 143 143 goto out_unlock;
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en/tc/ct_fs_smfs.c
··· 148 148 dr_matcher = mlx5_ct_fs_smfs_matcher_create(fs, tbl, ipv4, tcp, gre, prio); 149 149 if (IS_ERR(dr_matcher)) { 150 150 netdev_warn(fs->netdev, 151 - "ct_fs_smfs: failed to create matcher (nat %d, ipv4 %d, tcp %d, gre %d), err: %ld\n", 152 - nat, ipv4, tcp, gre, PTR_ERR(dr_matcher)); 151 + "ct_fs_smfs: failed to create matcher (nat %d, ipv4 %d, tcp %d, gre %d), err: %pe\n", 152 + nat, ipv4, tcp, gre, dr_matcher); 153 153 154 154 smfs_matcher = ERR_CAST(dr_matcher); 155 155 goto out_unlock;
+4 -4
drivers/net/ethernet/mellanox/mlx5/core/en/tc/int_port.c
··· 93 93 flow_rule = mlx5_add_flow_rules(esw->offloads.ft_offloads, spec, 94 94 &flow_act, dest, 1); 95 95 if (IS_ERR(flow_rule)) 96 - mlx5_core_warn(esw->dev, "ft offloads: Failed to add internal vport rx rule err %ld\n", 97 - PTR_ERR(flow_rule)); 96 + mlx5_core_warn(esw->dev, "ft offloads: Failed to add internal vport rx rule err %pe\n", 97 + flow_rule); 98 98 99 99 kvfree(spec); 100 100 ··· 322 322 sizeof(u32) * 2, 323 323 (1 << ESW_VPORT_BITS) - 1, true); 324 324 if (IS_ERR(int_port_priv->metadata_mapping)) { 325 - mlx5_core_warn(priv->mdev, "Can't allocate metadata mapping of int port offload, err=%ld\n", 326 - PTR_ERR(int_port_priv->metadata_mapping)); 325 + mlx5_core_warn(priv->mdev, "Can't allocate metadata mapping of int port offload, err=%pe\n", 326 + int_port_priv->metadata_mapping); 327 327 goto err_mapping; 328 328 } 329 329
+4 -4
drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
··· 172 172 &reformat_params, 173 173 MLX5_FLOW_NAMESPACE_FDB); 174 174 if (IS_ERR(e->pkt_reformat)) { 175 - mlx5_core_warn(priv->mdev, "Failed to offload cached encapsulation header, %lu\n", 176 - PTR_ERR(e->pkt_reformat)); 175 + mlx5_core_warn(priv->mdev, "Failed to offload cached encapsulation header, %pe\n", 176 + e->pkt_reformat); 177 177 return; 178 178 } 179 179 e->flags |= MLX5_ENCAP_ENTRY_VALID; ··· 1845 1845 queue_work(priv->wq, &fib_work->work); 1846 1846 } else if (IS_ERR(fib_work)) { 1847 1847 NL_SET_ERR_MSG_MOD(info->extack, "Failed to init fib work"); 1848 - mlx5_core_warn(priv->mdev, "Failed to init fib work, %ld\n", 1849 - PTR_ERR(fib_work)); 1848 + mlx5_core_warn(priv->mdev, "Failed to init fib work, %pe\n", 1849 + fib_work); 1850 1850 } 1851 1851 1852 1852 break;
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en_accel/fs_tcp.c
··· 138 138 flow = mlx5_add_flow_rules(ft->t, spec, &flow_act, &dest, 1); 139 139 140 140 if (IS_ERR(flow)) 141 - fs_err(fs, "mlx5_add_flow_rules() failed, flow is %ld\n", PTR_ERR(flow)); 141 + fs_err(fs, "mlx5_add_flow_rules() failed, flow is %pe\n", flow); 142 142 143 143 out: 144 144 kvfree(spec);
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c
··· 1729 1729 1730 1730 modify_hdr = mlx5_modify_header_alloc(mdev, ns_type, num_of_actions, action); 1731 1731 if (IS_ERR(modify_hdr)) { 1732 - mlx5_core_err(mdev, "Failed to allocate modify_header %ld\n", 1733 - PTR_ERR(modify_hdr)); 1732 + mlx5_core_err(mdev, "Failed to allocate modify_header %pe\n", 1733 + modify_hdr); 1734 1734 return PTR_ERR(modify_hdr); 1735 1735 } 1736 1736
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en_common.c
··· 210 210 211 211 mdev->mlx5e_res.dek_priv = mlx5_crypto_dek_init(mdev); 212 212 if (IS_ERR(mdev->mlx5e_res.dek_priv)) { 213 - mlx5_core_err(mdev, "crypto dek init failed, %ld\n", 214 - PTR_ERR(mdev->mlx5e_res.dek_priv)); 213 + mlx5_core_err(mdev, "crypto dek init failed, %pe\n", 214 + mdev->mlx5e_res.dek_priv); 215 215 mdev->mlx5e_res.dek_priv = NULL; 216 216 } 217 217
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/en_rep.c
··· 1450 1450 rpriv); 1451 1451 if (IS_ERR(reporter)) { 1452 1452 mlx5_core_err(priv->mdev, 1453 - "Failed to create representor vnic reporter, err = %ld\n", 1454 - PTR_ERR(reporter)); 1453 + "Failed to create representor vnic reporter, err = %pe\n", 1454 + reporter); 1455 1455 return; 1456 1456 } 1457 1457
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/esw/acl/egress_lgcy.c
··· 87 87 drop_counter = mlx5_fc_create(esw->dev, false); 88 88 if (IS_ERR(drop_counter)) { 89 89 esw_warn(esw->dev, 90 - "vport[%d] configure egress drop rule counter err(%ld)\n", 91 - vport->vport, PTR_ERR(drop_counter)); 90 + "vport[%d] configure egress drop rule counter err(%pe)\n", 91 + vport->vport, drop_counter); 92 92 drop_counter = NULL; 93 93 } 94 94 vport->egress.legacy.drop_counter = drop_counter;
+24 -23
drivers/net/ethernet/mellanox/mlx5/core/esw/bridge.c
··· 81 81 ft_attr.prio = FDB_BR_OFFLOAD; 82 82 fdb = mlx5_create_flow_table(ns, &ft_attr); 83 83 if (IS_ERR(fdb)) 84 - esw_warn(dev, "Failed to create bridge FDB Table (err=%ld)\n", PTR_ERR(fdb)); 84 + esw_warn(dev, "Failed to create bridge FDB Table (err=%pe)\n", 85 + fdb); 85 86 86 87 return fdb; 87 88 } ··· 122 121 kvfree(in); 123 122 if (IS_ERR(fg)) 124 123 esw_warn(esw->dev, 125 - "Failed to create VLAN(proto=%x) flow group for bridge ingress table (err=%ld)\n", 126 - vlan_proto, PTR_ERR(fg)); 124 + "Failed to create VLAN(proto=%x) flow group for bridge ingress table (err=%pe)\n", 125 + vlan_proto, fg); 127 126 128 127 return fg; 129 128 } ··· 181 180 fg = mlx5_create_flow_group(ingress_ft, in); 182 181 if (IS_ERR(fg)) 183 182 esw_warn(esw->dev, 184 - "Failed to create bridge ingress table VLAN filter flow group (err=%ld)\n", 185 - PTR_ERR(fg)); 183 + "Failed to create bridge ingress table VLAN filter flow group (err=%pe)\n", 184 + fg); 186 185 kvfree(in); 187 186 return fg; 188 187 } ··· 238 237 fg = mlx5_create_flow_group(ingress_ft, in); 239 238 if (IS_ERR(fg)) 240 239 esw_warn(esw->dev, 241 - "Failed to create MAC flow group for bridge ingress table (err=%ld)\n", 242 - PTR_ERR(fg)); 240 + "Failed to create MAC flow group for bridge ingress table (err=%pe)\n", 241 + fg); 243 242 244 243 kvfree(in); 245 244 return fg; ··· 275 274 fg = mlx5_create_flow_group(egress_ft, in); 276 275 if (IS_ERR(fg)) 277 276 esw_warn(esw->dev, 278 - "Failed to create VLAN flow group for bridge egress table (err=%ld)\n", 279 - PTR_ERR(fg)); 277 + "Failed to create VLAN flow group for bridge egress table (err=%pe)\n", 278 + fg); 280 279 kvfree(in); 281 280 return fg; 282 281 } ··· 325 324 fg = mlx5_create_flow_group(egress_ft, in); 326 325 if (IS_ERR(fg)) 327 326 esw_warn(esw->dev, 328 - "Failed to create bridge egress table MAC flow group (err=%ld)\n", 329 - PTR_ERR(fg)); 327 + "Failed to create bridge egress table MAC flow group (err=%pe)\n", 328 + fg); 330 329 kvfree(in); 331 330 return fg; 332 331 } ··· 355 354 fg = mlx5_create_flow_group(egress_ft, in); 356 355 if (IS_ERR(fg)) 357 356 esw_warn(esw->dev, 358 - "Failed to create bridge egress table miss flow group (err=%ld)\n", 359 - PTR_ERR(fg)); 357 + "Failed to create bridge egress table miss flow group (err=%pe)\n", 358 + fg); 360 359 kvfree(in); 361 360 return fg; 362 361 } ··· 502 501 if (mlx5_esw_bridge_pkt_reformat_vlan_pop_supported(esw)) { 503 502 miss_fg = mlx5_esw_bridge_egress_miss_fg_create(esw, egress_ft); 504 503 if (IS_ERR(miss_fg)) { 505 - esw_warn(esw->dev, "Failed to create miss flow group (err=%ld)\n", 506 - PTR_ERR(miss_fg)); 504 + esw_warn(esw->dev, "Failed to create miss flow group (err=%pe)\n", 505 + miss_fg); 507 506 miss_fg = NULL; 508 507 goto skip_miss_flow; 509 508 } ··· 511 510 miss_pkt_reformat = mlx5_esw_bridge_pkt_reformat_vlan_pop_create(esw); 512 511 if (IS_ERR(miss_pkt_reformat)) { 513 512 esw_warn(esw->dev, 514 - "Failed to alloc packet reformat REMOVE_HEADER (err=%ld)\n", 515 - PTR_ERR(miss_pkt_reformat)); 513 + "Failed to alloc packet reformat REMOVE_HEADER (err=%pe)\n", 514 + miss_pkt_reformat); 516 515 miss_pkt_reformat = NULL; 517 516 mlx5_destroy_flow_group(miss_fg); 518 517 miss_fg = NULL; ··· 523 522 br_offloads->skip_ft, 524 523 miss_pkt_reformat); 525 524 if (IS_ERR(miss_handle)) { 526 - esw_warn(esw->dev, "Failed to create miss flow (err=%ld)\n", 527 - PTR_ERR(miss_handle)); 525 + esw_warn(esw->dev, "Failed to create miss flow (err=%pe)\n", 526 + miss_handle); 528 527 miss_handle = NULL; 529 528 mlx5_packet_reformat_dealloc(esw->dev, miss_pkt_reformat); 530 529 miss_pkt_reformat = NULL; ··· 1049 1048 &reformat_params, 1050 1049 MLX5_FLOW_NAMESPACE_FDB); 1051 1050 if (IS_ERR(pkt_reformat)) { 1052 - esw_warn(esw->dev, "Failed to alloc packet reformat INSERT_HEADER (err=%ld)\n", 1053 - PTR_ERR(pkt_reformat)); 1051 + esw_warn(esw->dev, "Failed to alloc packet reformat INSERT_HEADER (err=%pe)\n", 1052 + pkt_reformat); 1054 1053 return PTR_ERR(pkt_reformat); 1055 1054 } 1056 1055 ··· 1077 1076 1078 1077 pkt_reformat = mlx5_esw_bridge_pkt_reformat_vlan_pop_create(esw); 1079 1078 if (IS_ERR(pkt_reformat)) { 1080 - esw_warn(esw->dev, "Failed to alloc packet reformat REMOVE_HEADER (err=%ld)\n", 1081 - PTR_ERR(pkt_reformat)); 1079 + esw_warn(esw->dev, "Failed to alloc packet reformat REMOVE_HEADER (err=%pe)\n", 1080 + pkt_reformat); 1082 1081 return PTR_ERR(pkt_reformat); 1083 1082 } 1084 1083
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/esw/vporttbl.c
··· 45 45 ft_attr.flags = vport_ns->flags; 46 46 fdb = mlx5_create_auto_grouped_flow_table(ns, &ft_attr); 47 47 if (IS_ERR(fdb)) { 48 - esw_warn(esw->dev, "Failed to create per vport FDB Table err %ld\n", 49 - PTR_ERR(fdb)); 48 + esw_warn(esw->dev, "Failed to create per vport FDB Table err %pe\n", 49 + fdb); 50 50 } 51 51 52 52 return fdb;
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
··· 257 257 &flow_act, &dest, 1); 258 258 if (IS_ERR(flow_rule)) { 259 259 esw_warn(esw->dev, 260 - "FDB: Failed to add flow rule: dmac_v(%pM) dmac_c(%pM) -> vport(%d), err(%ld)\n", 261 - dmac_v, dmac_c, vport, PTR_ERR(flow_rule)); 260 + "FDB: Failed to add flow rule: dmac_v(%pM) dmac_c(%pM) -> vport(%d), err(%pe)\n", 261 + dmac_v, dmac_c, vport, flow_rule); 262 262 flow_rule = NULL; 263 263 } 264 264
+9 -7
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
··· 1016 1016 flow_rule = mlx5_add_flow_rules(mlx5_eswitch_get_slow_fdb(on_esw), 1017 1017 spec, &flow_act, &dest, 1); 1018 1018 if (IS_ERR(flow_rule)) 1019 - esw_warn(on_esw->dev, "FDB: Failed to add send to vport rule err %ld\n", 1020 - PTR_ERR(flow_rule)); 1019 + esw_warn(on_esw->dev, "FDB: Failed to add send to vport rule err %pe\n", 1020 + flow_rule); 1021 1021 out: 1022 1022 kvfree(spec); 1023 1023 return flow_rule; ··· 1065 1065 flow_rule = mlx5_add_flow_rules(mlx5_eswitch_get_slow_fdb(esw), 1066 1066 spec, &flow_act, &dest, 1); 1067 1067 if (IS_ERR(flow_rule)) 1068 - esw_warn(esw->dev, "FDB: Failed to add send to vport meta rule vport %d, err %ld\n", 1069 - vport_num, PTR_ERR(flow_rule)); 1068 + esw_warn(esw->dev, "FDB: Failed to add send to vport meta rule vport %d, err %pe\n", 1069 + vport_num, flow_rule); 1070 1070 1071 1071 kvfree(spec); 1072 1072 return flow_rule; ··· 2159 2159 flow_rule = mlx5_add_flow_rules(esw->offloads.ft_offloads, spec, 2160 2160 &flow_act, dest, 1); 2161 2161 if (IS_ERR(flow_rule)) { 2162 - esw_warn(esw->dev, "fs offloads: Failed to add vport rx rule err %ld\n", PTR_ERR(flow_rule)); 2162 + esw_warn(esw->dev, 2163 + "fs offloads: Failed to add vport rx rule err %pe\n", 2164 + flow_rule); 2163 2165 goto out; 2164 2166 } 2165 2167 ··· 2180 2178 &flow_act, NULL, 0); 2181 2179 if (IS_ERR(flow_rule)) { 2182 2180 esw_warn(esw->dev, 2183 - "fs offloads: Failed to add vport rx drop rule err %ld\n", 2184 - PTR_ERR(flow_rule)); 2181 + "fs offloads: Failed to add vport rx drop rule err %pe\n", 2182 + flow_rule); 2185 2183 return PTR_ERR(flow_rule); 2186 2184 } 2187 2185
+4 -4
drivers/net/ethernet/mellanox/mlx5/core/health.c
··· 718 718 719 719 health->fw_reporter = devl_health_reporter_create(devlink, fw_ops, dev); 720 720 if (IS_ERR(health->fw_reporter)) 721 - mlx5_core_warn(dev, "Failed to create fw reporter, err = %ld\n", 722 - PTR_ERR(health->fw_reporter)); 721 + mlx5_core_warn(dev, "Failed to create fw reporter, err = %pe\n", 722 + health->fw_reporter); 723 723 724 724 health->fw_fatal_reporter = devl_health_reporter_create(devlink, 725 725 fw_fatal_ops, 726 726 dev); 727 727 if (IS_ERR(health->fw_fatal_reporter)) 728 - mlx5_core_warn(dev, "Failed to create fw fatal reporter, err = %ld\n", 729 - PTR_ERR(health->fw_fatal_reporter)); 728 + mlx5_core_warn(dev, "Failed to create fw fatal reporter, err = %pe\n", 729 + health->fw_fatal_reporter); 730 730 } 731 731 732 732 static void mlx5_fw_reporters_destroy(struct mlx5_core_dev *dev)
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/irq_affinity.c
··· 150 150 if (IS_ERR(new_irq)) { 151 151 if (!least_loaded_irq) { 152 152 /* We failed to create an IRQ and we didn't find an IRQ */ 153 - mlx5_core_err(pool->dev, "Didn't find a matching IRQ. err = %ld\n", 154 - PTR_ERR(new_irq)); 153 + mlx5_core_err(pool->dev, "Didn't find a matching IRQ. err = %pe\n", 154 + new_irq); 155 155 mutex_unlock(&pool->lock); 156 156 return new_irq; 157 157 }
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.c
··· 1365 1365 clock->ptp = ptp_clock_register(&clock->ptp_info, 1366 1366 clock->shared ? NULL : &mdev->pdev->dev); 1367 1367 if (IS_ERR(clock->ptp)) { 1368 - mlx5_core_warn(mdev, "%sptp_clock_register failed %ld\n", 1368 + mlx5_core_warn(mdev, "%sptp_clock_register failed %pe\n", 1369 1369 clock->shared ? "shared clock " : "", 1370 - PTR_ERR(clock->ptp)); 1370 + clock->ptp); 1371 1371 clock->ptp = NULL; 1372 1372 } 1373 1373
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/main.c
··· 979 979 980 980 dev->priv.devc = mlx5_devcom_register_device(dev); 981 981 if (IS_ERR(dev->priv.devc)) 982 - mlx5_core_warn(dev, "failed to register devcom device %ld\n", 983 - PTR_ERR(dev->priv.devc)); 982 + mlx5_core_warn(dev, "failed to register devcom device %pe\n", 983 + dev->priv.devc); 984 984 985 985 err = mlx5_query_board_id(dev); 986 986 if (err) {
+34
scripts/coccinelle/misc/ptr_err_to_pe.cocci
··· 1 + // SPDX-License-Identifier: GPL-2.0-only 2 + /// Use %pe format specifier instead of PTR_ERR() for printing error pointers. 3 + /// 4 + /// For printing error pointers (i.e., a pointer for which IS_ERR() is true) 5 + /// %pe will print a symbolic error name (e.g., -EINVAL), opposed to the raw 6 + /// errno (e.g., -22) produced by PTR_ERR(). 7 + /// It also makes the code cleaner by saving a redundant call to PTR_ERR(). 8 + /// 9 + // Confidence: High 10 + // Copyright: (C) 2025 NVIDIA CORPORATION & AFFILIATES. 11 + // URL: https://coccinelle.gitlabpages.inria.fr/website 12 + // Options: --no-includes --include-headers 13 + 14 + virtual context 15 + virtual org 16 + virtual report 17 + 18 + @r@ 19 + expression ptr; 20 + constant fmt; 21 + position p; 22 + identifier print_func; 23 + @@ 24 + * print_func(..., fmt, ..., PTR_ERR@p(ptr), ...) 25 + 26 + @script:python depends on r && report@ 27 + p << r.p; 28 + @@ 29 + coccilib.report.print_report(p[0], "WARNING: Consider using %pe to print PTR_ERR()") 30 + 31 + @script:python depends on r && org@ 32 + p << r.p; 33 + @@ 34 + coccilib.org.print_todo(p[0], "WARNING: Consider using %pe to print PTR_ERR()")