cocci.inria.fr archive mirror
 help / color / mirror / Atom feed
From: Michael Walle <michael@walle.cc>
To: cocci@systeme.lip6.fr
Subject: [Cocci] changing of_get_mac_address() to pass a buffer
Date: Thu, 01 Apr 2021 10:13:14 +0200	[thread overview]
Message-ID: <acfc6d2f0a7ea90f451de6d1185a0383@walle.cc> (raw)

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);

(2) Unfortunately, there are also other variants of this like. Eg.

   const char *mac;
   mac = of_get_mac_address(np);
   if (IS_ERR(mac))
     eth_hw_addr_random(ndev);
   else
     ether_addr_copy(ndev->dev_addr, mac);

This would need to be changed to:

   ret = of_get_mac_address(np, ndev->dev_addr);
   if (ret)
     eth_hw_addr_random(ndev);

(3) Of course there are more variants like "if .. else if .. else"
     and so on.

This is what I've come up for now:

<spml>
virtual patch

@depends on patch@
type T;
identifier mac;
expression node, dev_addr;
statement S;
statement list SL;
@@

- T mac;
<+...
- mac = of_get_mac_address(node);
(
+ of_get_mac_address(node, dev_addr);
- if (!IS_ERR(mac))
-   ether_addr_copy(dev_addr, mac);
|
+ ret_tbd = of_get_mac_address(node, dev_addr);
+ if (!ret_tdb) {
- if (!IS_ERR(mac)) {
     ... when != mac
-   ether_addr_copy(dev_addr, mac);
     ... when != mac
   }
|
+ ret_tbd = of_get_mac_address(node, dev_addr);
+ if (!ret_tdb) {
- if (!IS_ERR(mac)) {
     ... when != mac
-   ether_addr_copy(dev_addr, mac);
     ... when != mac
   } else {
     ... when != mac
   }
|
- if (IS_ERR(mac))
-   S
- else
-   ether_addr_copy(dev_addr, mac);
+ ret_tbd = of_get_mac_address(node, dev_addr);
+ if (ret_tbd) S
|
- if (IS_ERR(mac)) {
-   SL
- } else {
-   ether_addr_copy(dev_addr, mac);
- }
+ ret_tbd = of_get_mac_address(node, dev_addr);
+ if (ret_tbd) { SL }
)
...+>

@depends on patch@
type T;
identifier mac;
expression node, dev_addr;
statement S;
@@

- T mac = of_get_mac_address(node);
+ of_get_mac_address(node, dev_addr);
- if (!IS_ERR(mac))
-   ether_addr_copy(dev_addr, mac);
   ... when != mac
</spml>

Maybe someone could have a brief look at it. Maybe (well I'm sure)
there is something to improve here. There is some repeated code
here, esp. for the different "if" and  "if else" branches. Is there
a better way to tell coccinelle, that the else might be optional?
And I guess, I need to go over the (maybe) new ret_tbd manually.

Of course, this won't match all occurrences, I'll go over the
remaining ones manually.

Thanks,
-michael
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

             reply	other threads:[~2021-04-01  8:13 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-04-01  8:13 Michael Walle [this message]
2021-04-01 17:06 ` [Cocci] changing of_get_mac_address() to pass a buffer Markus Elfring
2021-04-04 17:48 ` Mansour Moufid
2021-04-04 18:34   ` Julia Lawall
2021-04-05 21:50   ` Michael Walle
2021-04-05 21:58     ` Julia Lawall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=acfc6d2f0a7ea90f451de6d1185a0383@walle.cc \
    --to=michael@walle.cc \
    --cc=cocci@systeme.lip6.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).