Disable use of synchronization early in the boot by the MAC Framework;

for modules linked into the kernel or loaded very early, panics will
result otherwise, as the CV code it calls will panic due to its use
of a mutex before it is initialized.
This commit is contained in:
Robert Watson 2004-10-30 14:20:59 +00:00
parent 923a1dc3d1
commit 1e4cadcb14
3 changed files with 63 additions and 0 deletions

View File

@ -188,6 +188,9 @@ mac_policy_grab_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
"mac_policy_grab_exclusive() at %s:%d", __FILE__, __LINE__);
mtx_lock(&mac_policy_mtx);
@ -201,6 +204,9 @@ mac_policy_assert_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_assert(&mac_policy_mtx, MA_OWNED);
KASSERT(mac_policy_count == 0,
("mac_policy_assert_exclusive(): not exclusive"));
@ -212,6 +218,9 @@ mac_policy_release_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
KASSERT(mac_policy_count == 0,
("mac_policy_release_exclusive(): not exclusive"));
mtx_unlock(&mac_policy_mtx);
@ -224,6 +233,9 @@ mac_policy_list_busy(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_lock(&mac_policy_mtx);
mac_policy_count++;
mtx_unlock(&mac_policy_mtx);
@ -236,6 +248,9 @@ mac_policy_list_conditional_busy(void)
#ifndef MAC_STATIC
int ret;
if (!mac_late)
return (1);
mtx_lock(&mac_policy_mtx);
if (!LIST_EMPTY(&mac_policy_list)) {
mac_policy_count++;
@ -245,6 +260,9 @@ mac_policy_list_conditional_busy(void)
mtx_unlock(&mac_policy_mtx);
return (ret);
#else
if (!mac_late)
return (1);
return (1);
#endif
}
@ -254,6 +272,9 @@ mac_policy_list_unbusy(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_lock(&mac_policy_mtx);
mac_policy_count--;
KASSERT(mac_policy_count >= 0, ("MAC_POLICY_LIST_LOCK"));

View File

@ -188,6 +188,9 @@ mac_policy_grab_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
"mac_policy_grab_exclusive() at %s:%d", __FILE__, __LINE__);
mtx_lock(&mac_policy_mtx);
@ -201,6 +204,9 @@ mac_policy_assert_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_assert(&mac_policy_mtx, MA_OWNED);
KASSERT(mac_policy_count == 0,
("mac_policy_assert_exclusive(): not exclusive"));
@ -212,6 +218,9 @@ mac_policy_release_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
KASSERT(mac_policy_count == 0,
("mac_policy_release_exclusive(): not exclusive"));
mtx_unlock(&mac_policy_mtx);
@ -224,6 +233,9 @@ mac_policy_list_busy(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_lock(&mac_policy_mtx);
mac_policy_count++;
mtx_unlock(&mac_policy_mtx);
@ -236,6 +248,9 @@ mac_policy_list_conditional_busy(void)
#ifndef MAC_STATIC
int ret;
if (!mac_late)
return (1);
mtx_lock(&mac_policy_mtx);
if (!LIST_EMPTY(&mac_policy_list)) {
mac_policy_count++;
@ -245,6 +260,9 @@ mac_policy_list_conditional_busy(void)
mtx_unlock(&mac_policy_mtx);
return (ret);
#else
if (!mac_late)
return (1);
return (1);
#endif
}
@ -254,6 +272,9 @@ mac_policy_list_unbusy(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_lock(&mac_policy_mtx);
mac_policy_count--;
KASSERT(mac_policy_count >= 0, ("MAC_POLICY_LIST_LOCK"));

View File

@ -188,6 +188,9 @@ mac_policy_grab_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, NULL,
"mac_policy_grab_exclusive() at %s:%d", __FILE__, __LINE__);
mtx_lock(&mac_policy_mtx);
@ -201,6 +204,9 @@ mac_policy_assert_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_assert(&mac_policy_mtx, MA_OWNED);
KASSERT(mac_policy_count == 0,
("mac_policy_assert_exclusive(): not exclusive"));
@ -212,6 +218,9 @@ mac_policy_release_exclusive(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
KASSERT(mac_policy_count == 0,
("mac_policy_release_exclusive(): not exclusive"));
mtx_unlock(&mac_policy_mtx);
@ -224,6 +233,9 @@ mac_policy_list_busy(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_lock(&mac_policy_mtx);
mac_policy_count++;
mtx_unlock(&mac_policy_mtx);
@ -236,6 +248,9 @@ mac_policy_list_conditional_busy(void)
#ifndef MAC_STATIC
int ret;
if (!mac_late)
return (1);
mtx_lock(&mac_policy_mtx);
if (!LIST_EMPTY(&mac_policy_list)) {
mac_policy_count++;
@ -245,6 +260,9 @@ mac_policy_list_conditional_busy(void)
mtx_unlock(&mac_policy_mtx);
return (ret);
#else
if (!mac_late)
return (1);
return (1);
#endif
}
@ -254,6 +272,9 @@ mac_policy_list_unbusy(void)
{
#ifndef MAC_STATIC
if (!mac_late)
return;
mtx_lock(&mac_policy_mtx);
mac_policy_count--;
KASSERT(mac_policy_count >= 0, ("MAC_POLICY_LIST_LOCK"));