On Thu, Apr 1, 2021 at 4:13 AM Michael Walle <mich...@walle.cc> wrote:
>
> Hi,
>
> so first I need to say I've never used coccinelle before,
> so please bear with me ;)
>
> To make of_get_mac_address() work with DSA ports (and a nvmem
> provider) I'd need to change the semantics of of_get_mac_address().
> Right now it returns a pointer to "const char *", I'd need to change
> that so a buffer will be passed as a parameter in which the MAC
> address gets stored.
>
> (1) Usually the call is something like:
>
>    const char *mac;
>    mac = of_get_mac_address(np);
>    if (!IS_ERR(mac))
>      ether_addr_copy(ndev->dev_addr, mac);
>
> This would need to be changed to:
>
>    of_get_mac_address(np, ndev->dev_addr);

Here is one possible approach, doing the API change first then
handling the conditionals. It seems to work.

@a@
identifier x;
expression y, z;
@@
-   x = of_get_mac_address(y);
+   x = of_get_mac_address(y, z);
    <...
-   ether_addr_copy(z, x);
    ...>

@@
identifier a.x;
@@
-   if (<+... x ...+>) {}

@@
identifier a.x;
@@
    if (<+... x ...+>) {
        ...
    }
-   else {}

@@
identifier a.x;
expression e;
@@
-   if (<+... x ...+>@e)
-       {}
-   else
+   if (!(e))
        {...}

@@
expression x, y, z;
@@
-   x = of_get_mac_address(y, z);
+   of_get_mac_address(y, z);
    ... when != x
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to