Date: Thu, 07 Oct 2010 20:53:46 +0300 From: Andriy Gapon <avg@freebsd.org> To: freebsd-hackers@freebsd.org Cc: Matthew Fleming <mdf@freebsd.org> Subject: generic_stop_cpus: prevent parallel execution Message-ID: <4CAE092A.60905@freebsd.org>
next in thread | raw e-mail | index | archive | help
Here is patch that applies the technique from panic() to generic_stop_cpus() to prevent its parallel execution on multiple CPUs: http://people.freebsd.org/~avg/generic_stop_cpus.diff In theory this could lead to two CPUs stopping each other and everyone else, and thus a total system halt. Also, in theory, we should have some smarter locking here, because two (or more CPUs) could be stopping unrelated sets of CPUs. But in practice, it seems, this function is only used to stop "all other" CPUs. Unless I overlooked other usages, that is. Additionally, I took this opportunity to make amd64-specific suspend_cpus() function use generic_stop_cpus() instead of rolling out essentially duplicate code. I couldn't see any reason no to consolidate, but perhaps I missed something. Big thanks to Matthew and his employer for the idea and example. -- Andriy Gapon
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CAE092A.60905>