Messages in this thread | | | Date | Tue, 11 Feb 2014 15:30:33 -0600 | Subject | Re: [PATCH] of: Turn of_match_node into a static inline when CONFIG_OF isn't set | From | Rob Herring <> |
| |
On Tue, Feb 11, 2014 at 12:29 PM, Geert Uytterhoeven <geert@linux-m68k.org> wrote: > On Tue, Feb 11, 2014 at 7:08 PM, Josh Cartwright <joshc@codeaurora.org> wrote: >> It sure would be convenient if platform_device had a 'const struct >> of_device_id *of_id_entry' member similar to the existing struct >> platform_device_id one, that was set up during platform device matching. >> Most platform_driver users of of_match_node() would simply go away. > > Can't the entry be shared for both platform_device_id and of_device_id? > Only one of them can be valid at the same time, right? > > Ideally, all xxx_device_id look like > > struct xxx_device_id { > ... /* bus-specific ID information */ > kernel_ulong_t driver_data; > }; > > This may be formalized in some way, using a base class, but thay may > require reordering the fields, like: > > struct base_device_id { > kernel_ulong_t driver_data; > long id[0]; > }; >
I believe this is the reason drivers have to call of_match_device:
commit b1608d69cb804e414d0887140ba08a9398e4e638 Author: Grant Likely <grant.likely@secretlab.ca> Date: Wed May 18 11:19:24 2011 -0600
drivercore: revert addition of of_match to struct device
Commit b826291c, "drivercore/dt: add a match table pointer to struct device" added an of_match pointer to struct device to cache the of_match_table entry discovered at driver match time. This was unsafe because matching is not an atomic operation with probing a driver. If two or more drivers are attempted to be matched to a driver at the same time, then the cached matching entry pointer could get overwritten.
This patch reverts the of_match cache pointer and reworks all users to call of_match_device() directly instead.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Rob
| |