On Tue, Feb 11, 2014 at 12:29 PM, Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> wrote: > On Tue, Feb 11, 2014 at 7:08 PM, Josh Cartwright <joshc@xxxxxxxxxxxxxx> 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@xxxxxxxxxxxx> 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@xxxxxxxxxxxx> Rob -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html