[PATCH v3] OMAP2+: PM/serial: fix console semaphore acquire during suspend
Vitaly Wool
vitalywool at gmail.com
Wed Dec 8 18:51:29 EST 2010
On Wed, Dec 8, 2010 at 11:40 PM, Kevin Hilman
<khilman at deeprootsystems.com> wrote:
> @@ -120,8 +133,9 @@ static void omap2_enter_full_retention(void)
> goto no_sleep;
>
> /* Block console output in case it is on one of the OMAP UARTs */
> - if (try_acquire_console_sem())
> - goto no_sleep;
> + if (!is_suspending())
> + if (try_acquire_console_sem())
> + goto no_sleep;
Combine into one if?
Hi Kevin,
<snip>
> omap_uart_prepare_idle(0);
> omap_uart_prepare_idle(1);
> @@ -136,7 +150,8 @@ static void omap2_enter_full_retention(void)
> omap_uart_resume_idle(1);
> omap_uart_resume_idle(0);
>
> - release_console_sem();
> + if (!is_suspending())
> + release_console_sem();
>
> no_sleep:
> if (omap2_pm_debug) {
> @@ -284,6 +299,12 @@ out:
> local_irq_enable();
> }
>
> +static int omap2_pm_begin(suspend_state_t state)
> +{
> + suspend_state = state;
> + return 0;
> +}
Do you really need a return code here?
> static int omap2_pm_prepare(void)
> {
> /* We cannot sleep in idle until we have resumed */
> @@ -333,10 +354,18 @@ static void omap2_pm_finish(void)
> enable_hlt();
> }
>
> +static void omap2_pm_end(void)
> +{
> + suspend_state = PM_SUSPEND_ON;
> + return;
> +}
Redundant return.
> +
> static struct platform_suspend_ops omap_pm_ops = {
> + .begin = omap2_pm_begin,
> .prepare = omap2_pm_prepare,
> .enter = omap2_pm_enter,
> .finish = omap2_pm_finish,
> + .end = omap2_pm_end,
> .valid = suspend_valid_only_mem,
> };
>
> diff --git a/arch/arm/mach-omap2/pm34xx.c b/arch/arm/mach-omap2/pm34xx.c
> index 0ec8a04..648b8c5 100644
> --- a/arch/arm/mach-omap2/pm34xx.c
> +++ b/arch/arm/mach-omap2/pm34xx.c
> @@ -50,6 +50,19 @@
> #include "sdrc.h"
> #include "control.h"
>
> +#ifdef CONFIG_SUSPEND
> +static suspend_state_t suspend_state = PM_SUSPEND_ON;
> +static inline bool is_suspending(void)
> +{
> + return (suspend_state != PM_SUSPEND_ON);
> +}
> +#else
> +static inline bool is_suspending(void)
> +{
> + return false;
> +}
> +#endif
> +
> /* Scratchpad offsets */
> #define OMAP343X_TABLE_ADDRESS_OFFSET 0xc4
> #define OMAP343X_TABLE_VALUE_OFFSET 0xc0
> @@ -387,10 +400,11 @@ void omap_sram_idle(void)
> }
>
> /* Block console output in case it is on one of the OMAP UARTs */
> - if (per_next_state < PWRDM_POWER_ON ||
> - core_next_state < PWRDM_POWER_ON)
> - if (try_acquire_console_sem())
> - goto console_still_active;
> + if (!is_suspending())
> + if (per_next_state < PWRDM_POWER_ON ||
> + core_next_state < PWRDM_POWER_ON)
> + if (try_acquire_console_sem())
> + goto console_still_active;
Oh well, 3 nested ifs...
Thanks,
Vitaly
More information about the linux-arm-kernel
mailing list