Re: [v12, 7/8] base: soc: introduce soc_device_match() interface

From: Alexander Shiyan
Date: Wed Sep 21 2016 - 03:58:44 EST


>ÐÑÐÐÐ, 21 ÑÐÐÑÑÐÑÑ 2016, 9:57 +03:00 ÐÑ Yangbo Lu <yangbo.lu@xxxxxxx>:
>
>From: Arnd Bergmann < arnd@xxxxxxxx >
>
>We keep running into cases where device drivers want to know the exact
>version of the a SoC they are currently running on. In the past, this has
>usually been done through a vendor specific API that can be called by a
>driver, or by directly accessing some kind of version register that is
>not part of the device itself but that belongs to a global register area
>of the chip.
...
>+const struct soc_device_attribute *soc_device_match(
>+const struct soc_device_attribute *matches)
>+{
>+int ret = 0;
>+
>+if (!matches)
>+return NULL;
>+
>+while (!ret) {
>+if (!(matches->machine || matches->family ||
>+ matches->revision || matches->soc_id))
>+break;
>+ret = bus_for_each_dev(&soc_bus_type, NULL, (void *)matches,
>+ soc_device_match_one);
>+if (!ret)
>+matches++;

So, what happen if next "matches" (after increment) will be NULL?

I think you should use while(matches) at the start of this procedure.

---