Re: [PATCH 1/2] serial: samsung: Move uart_register_driver call to device probe

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Jan 21, 2014 at 09:25:31AM +0000, One Thousand Gnomes wrote:
> > static DEFINE_MUTEX(foo_mutex);
> > static unsigned foo_devices;
> > 
> > static int foo_probe(struct platform_device *pdev)
> > {
> > 	int ret;
> > 
> > 	mutex_lock(&foo_mutex);
> > 	if (foo_devices++ == 0)
> > 		uart_register_driver(&driver);
> > 
> > 	ret = foo_really_probe_device(pdev);
> 
> We have atomic_inc_and_test and atomic_dec_and_test so it's
> fractionally less ugly.

How do atomics help here?  If we do this as:

	if (atomic_inc_and_test(&foo_atomic))
		uart_register_driver(&driver);

Then let's think about what can happen:

	CPU0				CPU1
	foo_probe
	atomic_inc_and_test() == true
		uart_register_driver
					foo_probe
					atomic_inc_and_test()
					really_probe_foo()
						*bang*

-- 
FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up.  Estimation
in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad.
Estimate before purchase was "up to 13.2Mbit".
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  Powered by Linux