diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c index ecfe15122091..b157a680e940 100644 --- a/drivers/mfd/syscon.c +++ b/drivers/mfd/syscon.c @@ -101,6 +101,9 @@ static struct syscon *of_syscon_register(struct device_node *np, bool check_clk) } } + /*For PREEMPT_RT: avoid scheduler preemption during fast register ops*/ + syscon_config.use_raw_spinlock = true; + syscon_config.name = kasprintf(GFP_KERNEL, "%pOFn@%pa", np, &res.start); if (!syscon_config.name) { ret = -ENOMEM; @@ -302,6 +305,10 @@ static int syscon_probe(struct platform_device *pdev) syscon_config.max_register = resource_size(res) - 4; if (pdata) syscon_config.name = pdata->label; + + /*For PREEMPT_RT: avoid scheduler preemption during fast register ops*/ + syscon_config.use_raw_spinlock = true; + syscon->regmap = devm_regmap_init_mmio(dev, base, &syscon_config); if (IS_ERR(syscon->regmap)) { dev_err(dev, "regmap init failed\n");