2002-08-07 13:00:52

by Eyal Lebedinsky

[permalink] [raw]
Subject: 2.4.20-pre1-ac1: apm.c non SMP compile error

--- linux/arch/i386/kernel/apm.c.orig Wed Aug 7 22:59:06 2002
+++ linux/arch/i386/kernel/apm.c Wed Aug 7 22:56:55 2002
@@ -524,7 +524,7 @@
* No CPU lockdown needed on a uniprocessor
*/

-#define apm_save_cpus 0
+#define apm_save_cpus() 0
#define apm_restore_cpus(x)

#endif


Attachments:
2.4.20-pre1-ac1-apm.patch (285.00 B)

2002-08-07 15:12:46

by Tomas Szepe

[permalink] [raw]
Subject: Re: 2.4.20-pre1-ac1: apm.c non SMP compile error

> apm_save_cpus() is defined without parameters for non-SMP, breaks
> compile.
>
> --
> Eyal Lebedinsky ([email protected]) <http://samba.org/eyal/>
> --- linux/arch/i386/kernel/apm.c.orig Wed Aug 7 22:59:06 2002
> +++ linux/arch/i386/kernel/apm.c Wed Aug 7 22:56:55 2002
> @@ -524,7 +524,7 @@
> * No CPU lockdown needed on a uniprocessor
> */
>
> -#define apm_save_cpus 0
> +#define apm_save_cpus() 0
> #define apm_restore_cpus(x)
>
> #endif

or alternatively the following, which for the cost of a couple ifdefs
also removes the unused variable 'cpus' on UP:

diff -urN linux-2.4.20-pre1-ac1/arch/i386/kernel/apm.c linux-2.4.20-pre1-ac1.n/arch/i386/kernel/apm.c
--- linux-2.4.20-pre1-ac1/arch/i386/kernel/apm.c 2002-08-07 17:11:09.000000000 +0200
+++ linux-2.4.20-pre1-ac1.n/arch/i386/kernel/apm.c 2002-08-07 17:08:10.000000000 +0200
@@ -496,9 +496,9 @@
}

/*
- * Lock APM functionality to physical CPU 0
+ * Lock APM functionality to physical CPU 0 in SMP kernels
*/
-
+
#ifdef CONFIG_SMP

static unsigned long apm_save_cpus(void)
@@ -518,15 +518,6 @@
set_cpus_allowed(current, mask);
}

-#else
-
-/*
- * No CPU lockdown needed on a uniprocessor
- */
-
-#define apm_save_cpus 0
-#define apm_restore_cpus(x)
-
#endif

/*
@@ -602,8 +593,10 @@
{
APM_DECL_SEGS
unsigned long flags;
+#ifdef CONFIG_SMP
unsigned long cpus = apm_save_cpus();
-
+#endif
+
__save_flags(flags);
APM_DO_CLI;
APM_DO_SAVE_SEGS;
@@ -625,9 +618,11 @@
: "memory", "cc");
APM_DO_RESTORE_SEGS;
__restore_flags(flags);
-
+
+#ifdef CONFIG_SMP
apm_restore_cpus(cpus);
-
+#endif
+
return *eax & 0xff;
}

@@ -651,8 +646,10 @@
APM_DECL_SEGS
unsigned long flags;

+#ifdef CONFIG_SMP
unsigned long cpus = apm_save_cpus();
-
+#endif
+
__save_flags(flags);
APM_DO_CLI;
APM_DO_SAVE_SEGS;
@@ -679,8 +676,10 @@
APM_DO_RESTORE_SEGS;
__restore_flags(flags);

+#ifdef CONFIG_SMP
apm_restore_cpus(cpus);
-
+#endif
+
return error;
}

@@ -935,7 +934,9 @@
*/
if (apm_info.realmode_power_off)
{
+#ifdef CONFIG_SMP
apm_save_cpus();
+#endif
machine_real_restart(po_bios_call, sizeof(po_bios_call));
/* Never returns */
}

2002-08-07 15:56:53

by Alan

[permalink] [raw]
Subject: Re: 2.4.20-pre1-ac1: apm.c non SMP compile error

On Wed, 2002-08-07 at 16:15, Tomas Szepe wrote:
> or alternatively the following, which for the cost of a couple ifdefs
> also removes the unused variable 'cpus' on UP:

The compiler will do that for us anyway