of: fix race when matching drivers
authorMilton Miller <miltonm@bga.com>
Wed, 18 May 2011 15:27:39 +0000 (10:27 -0500)
committerGrant Likely <grant.likely@secretlab.ca>
Wed, 18 May 2011 16:19:36 +0000 (10:19 -0600)
commit01294d82622d6d9d64bde8e4530c7e2c6dbb6ee6
tree98707dfac7c9533dbfef30c4ff05c0dfdabc17a6
parent2e9521fd656f05a716b5294a7dbebd37ced05e43
of: fix race when matching drivers

If two drivers are probing devices at the same time, both will write
their match table result to the dev->of_match cache at the same time.

Only write the result if the device matches.

In a thread titled "SBus devices sometimes detected, sometimes not",
Meelis reported his SBus hme was not detected about 50% of the time.
From the debug suggested by Grant it was obvious another driver matched
some devices between the call to match the hme and the hme discovery
failling.

Reported-by: Meelis Roos <mroos@linux.ee>
Signed-off-by: Milton Miller <miltonm@bga.com>
[grant.likely: modified to only call of_match_device() once]
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
include/linux/of_device.h