NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

port-arm/50635: arm11_setup() cpuctrlmask value causes CPU_CONTROL_VECRELOC bit to toggle



>Number:         50635
>Category:       port-arm
>Synopsis:       arm11_setup() cpuctrlmask value causes CPU_CONTROL_VECRELOC bit to toggle
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    port-arm-maintainer
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Jan 08 21:55:01 +0000 2016
>Originator:     Frank Zerangue
>Release:        NetBSD-7.0
>Organization:
>Environment:
Darwin Franks-Mac-Pro-3.local 14.5.0 Darwin Kernel Version 14.5.0: Wed Jul 29 02:26:53 PDT 2015; root:xnu-2782.40.9~1/RELEASE_X86_64 x86_64
>Description:
arch/arm/arm/cpufunc.c:  arm11_setup()

// When using high vectors, code below sets CPU_CONTROL_VECRELOC bit in cpuctrl.
// When cpu_control(cpuctrlmask,cpuctrl) is called later cpu_control() will toggle bit if already set rather than set it because cpuctrlmask does not contain this bit.

#ifndef ARM_HAS_VBAR
	if (vector_page == ARM_VECTORS_HIGH)
		cpuctrl |= CPU_CONTROL_VECRELOC;
#endif
>How-To-Repeat:

>Fix:

#ifndef ARM_HAS_VBAR
	if (vector_page == ARM_VECTORS_HIGH) {
		cpuctrl |= CPU_CONTROL_VECRELOC;
                cpuctrlmask |= CPU_CONTROL_VECRELOC;
        }
#endif



Home | Main Index | Thread Index | Old Index