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>
This commit is contained in:
@@ -304,8 +304,10 @@ static int __devinit fsl_msi_setup_hwirq(struct fsl_msi *msi,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id fsl_of_msi_ids[];
|
||||
static int __devinit fsl_of_msi_probe(struct platform_device *dev)
|
||||
{
|
||||
const struct of_device_id *match;
|
||||
struct fsl_msi *msi;
|
||||
struct resource res;
|
||||
int err, i, j, irq_index, count;
|
||||
@@ -316,9 +318,10 @@ static int __devinit fsl_of_msi_probe(struct platform_device *dev)
|
||||
u32 offset;
|
||||
static const u32 all_avail[] = { 0, NR_MSI_IRQS };
|
||||
|
||||
if (!dev->dev.of_match)
|
||||
match = of_match_device(fsl_of_msi_ids, &dev->dev);
|
||||
if (!match)
|
||||
return -EINVAL;
|
||||
features = dev->dev.of_match->data;
|
||||
features = match->data;
|
||||
|
||||
printk(KERN_DEBUG "Setting up Freescale MSI support\n");
|
||||
|
||||
|
Reference in New Issue
Block a user