Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 1 Jul 2013 11:56:25 +1000 (EST)
From:      Bruce Evans <brde@optusnet.com.au>
To:        Aleksandr Rybalko <ray@FreeBSD.org>
Cc:        svn-src-head@FreeBSD.org, svn-src-all@FreeBSD.org, src-committers@FreeBSD.org
Subject:   Re: svn commit: r252425 - head/sys/arm/arm
Message-ID:  <20130701113808.F894@besplex.bde.org>
In-Reply-To: <201306301952.r5UJqfwf010873@svn.freebsd.org>
References:  <201306301952.r5UJqfwf010873@svn.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 30 Jun 2013, Aleksandr Rybalko wrote:

> Log:
>  Decrypt magic numbers - define names for fields of Generic Timer's CNTKCTL reg.
>
>  Submitted by:	Ruslan Bukin <br@bsdpad.com>
>
> Modified:
>  head/sys/arm/arm/generic_timer.c
>
> Modified: head/sys/arm/arm/generic_timer.c
> ==============================================================================
> --- head/sys/arm/arm/generic_timer.c	Sun Jun 30 19:36:17 2013	(r252424)
> +++ head/sys/arm/arm/generic_timer.c	Sun Jun 30 19:52:41 2013	(r252425)
> @@ -66,7 +66,22 @@ __FBSDID("$FreeBSD$");
> #define	GENERIC_TIMER_REG_CTRL		0
> #define	GENERIC_TIMER_REG_TVAL		1
>
> -#define	CNTPSIRQ	29
> +#define	GENERIC_TIMER_CNTKCTL_PL0PTEN	(1 << 9) /* Physical timer registers
> +						    access from PL0 */
> +#define	GENERIC_TIMER_CNTKCTL_PL0VTEN	(1 << 8) /* Virtual timer registers

With names like these, the magic numbers are better.  The prefix name
GENERIC_TIMER is especially bad.  GT would be good.

> ...
> +#define	GENERIC_TIMER_CNTPSIRQ	29

Here the interesting part CNTPSIRQ is fairly abbreviated, but its prefix
is not.

>
> struct arm_tmr_softc {
> 	struct resource		*irq_res;
> @@ -167,7 +182,11 @@ disable_user_access(void)
> 	uint32_t cntkctl;
>
> 	__asm volatile("mrc p15, 0, %0, c14, c1, 0" : "=r" (cntkctl));
> -	cntkctl &= ~((3 << 8) | (7 << 0));
> +	cntkctl &= ~(GENERIC_TIMER_CNTKCTL_PL0PTEN |
> +		GENERIC_TIMER_CNTKCTL_PL0VTEN |
> +		GENERIC_TIMER_CNTKCTL_EVNTEN |
> +		GENERIC_TIMER_CNTKCTL_PL0VCTEN |
> +		GENERIC_TIMER_CNTKCTL_PL0PCTEN);
> 	__asm volatile("mcr p15, 0, %0, c14, c1, 0" : : "r" (cntkctl));
> 	isb();
> }

Using these verbose names takes about 15 times as much code as
before (the statement is only 5 times longer, but the definitions
macros are about 10 times longer), and looks like even more becayse
the statement is misformatted with non-KNF indentation which then
requires extra line spitting with only 1 name per line.

> @@ -270,7 +289,8 @@ arm_tmr_attach(device_t dev)
>
> 	rid = 0;
> 	sc->irq_res = bus_alloc_resource(dev, SYS_RES_IRQ, &rid,
> -	    CNTPSIRQ, CNTPSIRQ, 1, RF_SHAREABLE | RF_ACTIVE);
> +	    GENERIC_TIMER_CNTPSIRQ, GENERIC_TIMER_CNTPSIRQ,
> +	    1, RF_SHAREABLE | RF_ACTIVE);
>
> 	arm_tmr_sc = sc;

For full uglyness, expand all the prefixes and names:
- SYS -> SYSTEM
- RES -> RESOURCE
- IRQ -> INTERRUPT_REQUEST_NUMBER
- SYS_RES_IRQ -> SYSTEM_RESOURCE_INTERRUPT_REQUEST_NUMBER
- RF -> RESOURCE_FLAG
- RF_SHAREABLE_RESOURCE_FLAG_SHAREABLE 
- RF_ACTIVE -> RESOURCE_FLAG_ACTIVE
- CNTPSIRQ -> COUNT_PRIVATELY_SOURCED_INTERRUPT_REQUEST_NUMBER
   (just guessing what PS means):

 	sc->irq_res = bus_alloc_resource(dev, SYS_RES_INTERRUPT_REQUEST_NUMBER,
 	    &rid,
 	    GENERIC_TIMER_COUNT_PRIVATELY_SOURCED_INTERRUPT_REQUEST_NUMBER,
 	    GENERIC_TIMER_COUNT_PRIVATELY_SOURCED_INTERRUPT_REQUEST_NUMBER,
 	    1, RESOURCE_FLAG_SHAREABLE | RESOURCE_FLAG_ACTIVE);

Next, use non-KNF indentation:

 	sc->irq_res = bus_alloc_resource(dev, SYS_RES_INTERRUPT_REQUEST_NUMBER,
 		&rid,
 		GENERIC_TIMER_COUNT_PRIVATELY_SOURCED_INTERRUPT_REQUEST_NUMBER,
 		GENERIC_TIMER_COUNT_PRIVATELY_SOURCED_INTERRUPT_REQUEST_NUMBER,
 		1, RESOURCE_FLAG_SHAREABLE | RESOURCE_FLAG_ACTIVE);

The names aren't even 80 characters long, so they actually fit on 1 line.

Bruce



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20130701113808.F894>