lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 18 Feb 2014 08:29:34 +0530
From:	Preeti Murthy <preeti.lkml@...il.com>
To:	Thomas Gleixner <tglx@...utronix.de>
Cc:	Linus Torvalds <torvalds@...ux-foundation.org>,
	LKML <linux-kernel@...r.kernel.org>,
	Andrew Morton <akpm@...ux-foundation.org>,
	Ingo Molnar <mingo@...nel.org>,
	"H. Peter Anvin" <hpa@...or.com>,
	Preeti U Murthy <preeti@...ux.vnet.ibm.com>
Subject: Re: [GIT Pull] timer fixes for 3.14

Hi Thomas,

With regard to the patch: "tick: Clear broadcast pending bit when
switching to oneshot"
isn't BROADCAST_EXIT called atleast after initializing the high
resolution timers while
handling the broadcast IPI and before re-entering idle? This should
clear the cpu bit
in the pending mask right?

idle()
|__BROADCAST_ENTER
    |__halt()
      |__broadcast_ipi
          |__init_highres()->clear oneshot mask
              |__return from interrupt->BROADCAST_EXIT (clear pending mask)
                   |__re-enter idle

When the cpu re-enters idle and does a BROADCAST_ENTER again, the
pending mask is cleared
and hence should not trigger a WARN_ON().

Thanks

Regards
Preeti U Murthy

On Sun, Feb 16, 2014 at 12:51 AM, Thomas Gleixner <tglx@...utronix.de> wrote:
> Linus,
>
> please pull the latest timers-urgent-for-linus git tree from:
>
>    git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git timers-urgent-for-linus
>
> The following trilogy of patches brings you:
>
>  * Fix for a long standing math overflow issue with HZ < 60
>
>  * An onliner fix for a corner case in the dreaded tick broadcast
>    mechanism affecting a certain range of AMD machines which are
>    infested with the infamous automagic C1E power control misfeature
>
>  * A fix for one of the ARM platforms which allows the kernel to
>    proceed and boot instead of stupidly panicing for no good
>    reason. The patch is slightly larger than necessary, but it's less
>    ugly than the alternative 5 liner.
>
>
> Thanks,
>
>         tglx
>
> ------------------>
> Mikulas Patocka (1):
>       time: Fix overflow when HZ is smaller than 60
>
> Thomas Gleixner (1):
>       tick: Clear broadcast pending bit when switching to oneshot
>
> Tim Kryger (1):
>       clocksource: Kona: Print warning rather than panic
>
>
>  drivers/clocksource/bcm_kona_timer.c |   54 ++++++++++++++++++----------------
>  kernel/time/jiffies.c                |    6 ++++
>  kernel/time/tick-broadcast.c         |    1 +
>  3 files changed, 35 insertions(+), 26 deletions(-)
>
> diff --git a/drivers/clocksource/bcm_kona_timer.c b/drivers/clocksource/bcm_kona_timer.c
> index 974b2db..0595dc6 100644
> --- a/drivers/clocksource/bcm_kona_timer.c
> +++ b/drivers/clocksource/bcm_kona_timer.c
> @@ -99,31 +99,6 @@ kona_timer_get_counter(void *timer_base, uint32_t *msw, uint32_t *lsw)
>         return;
>  }
>
> -static void __init kona_timers_init(struct device_node *node)
> -{
> -       u32 freq;
> -       struct clk *external_clk;
> -
> -       external_clk = of_clk_get_by_name(node, NULL);
> -
> -       if (!IS_ERR(external_clk)) {
> -               arch_timer_rate = clk_get_rate(external_clk);
> -               clk_prepare_enable(external_clk);
> -       } else if (!of_property_read_u32(node, "clock-frequency", &freq)) {
> -               arch_timer_rate = freq;
> -       } else {
> -               panic("unable to determine clock-frequency");
> -       }
> -
> -       /* Setup IRQ numbers */
> -       timers.tmr_irq = irq_of_parse_and_map(node, 0);
> -
> -       /* Setup IO addresses */
> -       timers.tmr_regs = of_iomap(node, 0);
> -
> -       kona_timer_disable_and_clear(timers.tmr_regs);
> -}
> -
>  static int kona_timer_set_next_event(unsigned long clc,
>                                   struct clock_event_device *unused)
>  {
> @@ -198,7 +173,34 @@ static struct irqaction kona_timer_irq = {
>
>  static void __init kona_timer_init(struct device_node *node)
>  {
> -       kona_timers_init(node);
> +       u32 freq;
> +       struct clk *external_clk;
> +
> +       if (!of_device_is_available(node)) {
> +               pr_info("Kona Timer v1 marked as disabled in device tree\n");
> +               return;
> +       }
> +
> +       external_clk = of_clk_get_by_name(node, NULL);
> +
> +       if (!IS_ERR(external_clk)) {
> +               arch_timer_rate = clk_get_rate(external_clk);
> +               clk_prepare_enable(external_clk);
> +       } else if (!of_property_read_u32(node, "clock-frequency", &freq)) {
> +               arch_timer_rate = freq;
> +       } else {
> +               pr_err("Kona Timer v1 unable to determine clock-frequency");
> +               return;
> +       }
> +
> +       /* Setup IRQ numbers */
> +       timers.tmr_irq = irq_of_parse_and_map(node, 0);
> +
> +       /* Setup IO addresses */
> +       timers.tmr_regs = of_iomap(node, 0);
> +
> +       kona_timer_disable_and_clear(timers.tmr_regs);
> +
>         kona_timer_clockevents_init();
>         setup_irq(timers.tmr_irq, &kona_timer_irq);
>         kona_timer_set_next_event((arch_timer_rate / HZ), NULL);
> diff --git a/kernel/time/jiffies.c b/kernel/time/jiffies.c
> index 7a925ba..a6a5bf5 100644
> --- a/kernel/time/jiffies.c
> +++ b/kernel/time/jiffies.c
> @@ -51,7 +51,13 @@
>   * HZ shrinks, so values greater than 8 overflow 32bits when
>   * HZ=100.
>   */
> +#if HZ < 34
> +#define JIFFIES_SHIFT  6
> +#elif HZ < 67
> +#define JIFFIES_SHIFT  7
> +#else
>  #define JIFFIES_SHIFT  8
> +#endif
>
>  static cycle_t jiffies_read(struct clocksource *cs)
>  {
> diff --git a/kernel/time/tick-broadcast.c b/kernel/time/tick-broadcast.c
> index 43780ab..98977a5 100644
> --- a/kernel/time/tick-broadcast.c
> +++ b/kernel/time/tick-broadcast.c
> @@ -756,6 +756,7 @@ out:
>  static void tick_broadcast_clear_oneshot(int cpu)
>  {
>         cpumask_clear_cpu(cpu, tick_broadcast_oneshot_mask);
> +       cpumask_clear_cpu(cpu, tick_broadcast_pending_mask);
>  }
>
>  static void tick_broadcast_init_next_event(struct cpumask *mask,
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@...r.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists