lkml.org 
[lkml]   [2007]   [Sep]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] [16/45] i386: do not BUG_ON() when MSR is unknown
    Date

    From: Stephane Eranian <eranian@hpl.hp.com>

    Here is a small patch to change the behavior of the PMU msr allocator
    to avoid BUG_ON() when the MSR is unknwon. Instead, it now returns
    ok, which means "I do not manage". The current allocator is not
    yet managing the full set of PMU registers (e.g., GLOBAL_* on Core 2).

    [watchdog] do not BUG_ON() in the MSR allocator if MSR is unknown, return ok
    instead

    Signed-off-by: Stephane Eranian <eranian@hpl.hp.com>
    Signed-off-by: Andi Kleen <ak@suse.de>

    ---
    arch/i386/kernel/cpu/perfctr-watchdog.c | 16 ++++++++++++----
    1 file changed, 12 insertions(+), 4 deletions(-)

    Index: linux/arch/i386/kernel/cpu/perfctr-watchdog.c
    ===================================================================
    --- linux.orig/arch/i386/kernel/cpu/perfctr-watchdog.c
    +++ linux/arch/i386/kernel/cpu/perfctr-watchdog.c
    @@ -120,7 +120,9 @@ int reserve_perfctr_nmi(unsigned int msr
    unsigned int counter;

    counter = nmi_perfctr_msr_to_bit(msr);
    - BUG_ON(counter > NMI_MAX_COUNTER_BITS);
    + /* register not managed by the allocator? */
    + if (counter > NMI_MAX_COUNTER_BITS)
    + return 1;

    if (!test_and_set_bit(counter, perfctr_nmi_owner))
    return 1;
    @@ -132,7 +134,9 @@ void release_perfctr_nmi(unsigned int ms
    unsigned int counter;

    counter = nmi_perfctr_msr_to_bit(msr);
    - BUG_ON(counter > NMI_MAX_COUNTER_BITS);
    + /* register not managed by the allocator? */
    + if (counter > NMI_MAX_COUNTER_BITS)
    + return;

    clear_bit(counter, perfctr_nmi_owner);
    }
    @@ -142,7 +146,9 @@ int reserve_evntsel_nmi(unsigned int msr
    unsigned int counter;

    counter = nmi_evntsel_msr_to_bit(msr);
    - BUG_ON(counter > NMI_MAX_COUNTER_BITS);
    + /* register not managed by the allocator? */
    + if (counter > NMI_MAX_COUNTER_BITS)
    + return 1;

    if (!test_and_set_bit(counter, evntsel_nmi_owner))
    return 1;
    @@ -154,7 +160,9 @@ void release_evntsel_nmi(unsigned int ms
    unsigned int counter;

    counter = nmi_evntsel_msr_to_bit(msr);
    - BUG_ON(counter > NMI_MAX_COUNTER_BITS);
    + /* register not managed by the allocator? */
    + if (counter > NMI_MAX_COUNTER_BITS)
    + return;

    clear_bit(counter, evntsel_nmi_owner);
    }
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-09-21 22:53    [W:4.212 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site