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  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 16 Apr 2009 08:36:39 +0100
From:	Russell King <rmk+lkml@....linux.org.uk>
To:	john stultz <johnstul@...ibm.com>
Cc:	lkml <linux-kernel@...r.kernel.org>, cooloney@...nel.org,
	starvik@...s.com, takata@...ux-m32r.org, geert@...ux-m68k.org,
	Roman Zippel <zippel@...ux-m68k.org>, lethal@...ux-sh.org,
	Magnus Damm <magnus.damm@...il.com>, wli@...omorphy.com,
	rth@...ddle.net
Subject: Re: [RFC][PATCH 2/8] Convert arm to use arch_getoffset()
	infrastructure.

You really need to also post this (and the generic part) to the
linux-arm-kernel mailing list; there's far too much here for one
person (me) to deal with.

On Tue, Apr 14, 2009 at 06:41:08PM -0700, john stultz wrote:
> This patch converts arm to use GENERIC_TIME via the arch_getoffset()
> infrastructure 
> 
> I do not have cross compilers for these architectures, and in some cases
> the architectures can be compiles both with and without clocksources. So
> I've taken my best swing at converting this, but I'm not confident I got
> it right. Any assistance from arch maintainers or testers would be
> great.
> 
> NOT FOR INCLUSION
> Signed-off-by: John Stultz <johnstul@...ibm.com>
> 
> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
> index e02b893..61c88e1 100644
> --- a/arch/arm/Kconfig
> +++ b/arch/arm/Kconfig
> @@ -38,7 +38,7 @@ config GENERIC_GPIO
>  
>  config GENERIC_TIME
>  	bool
> -	default n
> +	default y
>  
>  config GENERIC_CLOCKEVENTS
>  	bool
> @@ -203,6 +203,7 @@ config ARCH_AAEC2000
>  	select CPU_ARM920T
>  	select ARM_AMBA
>  	select HAVE_CLK
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  This enables support for systems based on the Agilent AAEC-2000
>  
> @@ -212,6 +213,7 @@ config ARCH_INTEGRATOR
>  	select HAVE_CLK
>  	select COMMON_CLKDEV
>  	select ICST525
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for ARM's Integrator platform.
>  
> @@ -221,7 +223,6 @@ config ARCH_REALVIEW
>  	select HAVE_CLK
>  	select COMMON_CLKDEV
>  	select ICST307
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	help
>  	  This enables support for ARM Ltd RealView boards.
> @@ -233,7 +234,6 @@ config ARCH_VERSATILE
>  	select HAVE_CLK
>  	select COMMON_CLKDEV
>  	select ICST307
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	help
>  	  This enables support for ARM Ltd Versatile board.
> @@ -243,6 +243,7 @@ config ARCH_AT91
>  	select GENERIC_GPIO
>  	select ARCH_REQUIRE_GPIOLIB
>  	select HAVE_CLK
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  This enables support for systems based on the Atmel AT91RM9200,
>  	  AT91SAM9 and AT91CAP9 processors.
> @@ -258,6 +259,7 @@ config ARCH_EBSA110
>  	select CPU_SA110
>  	select ISA
>  	select NO_IOPORT
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  This is an evaluation board for the StrongARM processor available
>  	  from Digital. It has limited hardware on-board, including an
> @@ -273,6 +275,7 @@ config ARCH_EP93XX
>  	select HAVE_CLK
>  	select COMMON_CLKDEV
>  	select ARCH_REQUIRE_GPIOLIB
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  This enables support for the Cirrus EP93xx series of CPUs.
>  
> @@ -288,6 +291,7 @@ config ARCH_FOOTBRIDGE
>  	bool "FootBridge"
>  	select CPU_SA110
>  	select FOOTBRIDGE
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for systems based on the DC21285 companion chip
>  	  ("FootBridge"), such as the Simtec CATS and the Rebel NetWinder.
> @@ -297,7 +301,6 @@ config ARCH_NETX
>  	select CPU_ARM926T
>  	select ARM_VIC
>  	select GENERIC_CLOCKEVENTS
> -	select GENERIC_TIME
>  	help
>  	  This enables support for systems based on the Hilscher NetX Soc
>  
> @@ -305,6 +308,7 @@ config ARCH_H720X
>  	bool "Hynix HMS720x-based"
>  	select CPU_ARM720T
>  	select ISA_DMA_API
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  This enables support for systems based on the Hynix HMS720x
>  
> @@ -312,7 +316,6 @@ config ARCH_IMX
>  	bool "IMX"
>  	select CPU_ARM920T
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	help
>  	  Support for Motorola's i.MX family of processors (MX1, MXL).
> @@ -325,6 +328,7 @@ config ARCH_IOP13XX
>  	select PCI
>  	select ARCH_SUPPORTS_MSI
>  	select VMSPLIT_1G
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for Intel's IOP13XX (XScale) family of processors.
>  
> @@ -336,6 +340,7 @@ config ARCH_IOP32X
>  	select PCI
>  	select GENERIC_GPIO
>  	select ARCH_REQUIRE_GPIOLIB
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for Intel's 80219 and IOP32X (XScale) family of
>  	  processors.
> @@ -348,6 +353,7 @@ config ARCH_IOP33X
>  	select PCI
>  	select GENERIC_GPIO
>  	select ARCH_REQUIRE_GPIOLIB
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for Intel's IOP33X (XScale) family of processors.
>  
> @@ -356,6 +362,7 @@ config ARCH_IXP23XX
>  	depends on MMU
>  	select CPU_XSC3
>   	select PCI
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for Intel's IXP23xx (XScale) family of processors.
>  
> @@ -364,6 +371,7 @@ config ARCH_IXP2000
>  	depends on MMU
>  	select CPU_XSCALE
>  	select PCI
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for Intel's IXP2400/2800 (XScale) family of processors.
>  
> @@ -372,7 +380,6 @@ config ARCH_IXP4XX
>  	depends on MMU
>  	select CPU_XSCALE
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select DMABOUNCE if PCI
>  	help
> @@ -382,6 +389,7 @@ config ARCH_L7200
>  	bool "LinkUp-L7200"
>  	select CPU_ARM720T
>  	select FIQ
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Say Y here if you intend to run this kernel on a LinkUp Systems
>  	  L7200 Software Development Board which uses an ARM720T processor.
> @@ -397,7 +405,6 @@ config ARCH_KIRKWOOD
>  	select CPU_FEROCEON
>  	select PCI
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select PLAT_ORION
>  	help
> @@ -409,6 +416,7 @@ config ARCH_KS8695
>  	select CPU_ARM922T
>  	select GENERIC_GPIO
>          select ARCH_REQUIRE_GPIOLIB
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for Micrel/Kendin KS8695 "Centaur" (ARM922T) based
>  	  System-on-Chip devices.
> @@ -417,7 +425,6 @@ config ARCH_NS9XXX
>  	bool "NetSilicon NS9xxx"
>  	select CPU_ARM926T
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select HAVE_CLK
>  	help
> @@ -429,7 +436,6 @@ config ARCH_NS9XXX
>  config ARCH_LOKI
>  	bool "Marvell Loki (88RC8480)"
>  	select CPU_FEROCEON
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select PLAT_ORION
>  	help
> @@ -440,7 +446,6 @@ config ARCH_MV78XX0
>  	select CPU_FEROCEON
>  	select PCI
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select PLAT_ORION
>  	help
> @@ -449,7 +454,6 @@ config ARCH_MV78XX0
>  
>  config ARCH_MXC
>  	bool "Freescale MXC/iMX-based"
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select ARCH_MTD_XIP
>  	select GENERIC_GPIO
> @@ -463,7 +467,6 @@ config ARCH_ORION5X
>  	select CPU_FEROCEON
>  	select PCI
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select PLAT_ORION
>  	help
> @@ -475,6 +478,7 @@ config ARCH_PNX4008
>  	bool "Philips Nexperia PNX4008 Mobile"
>  	select CPU_ARM926T
>  	select HAVE_CLK
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  This enables support for Philips PNX4008 mobile platform.
>  
> @@ -488,7 +492,6 @@ config ARCH_PXA
>  	select ARCH_REQUIRE_GPIOLIB
>  	select HAVE_CLK
>  	select COMMON_CLKDEV
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select TICK_ONESHOT
>  	select PLAT_PXA
> @@ -502,7 +505,6 @@ config ARCH_MMP
>  	select ARCH_REQUIRE_GPIOLIB
>  	select HAVE_CLK
>  	select COMMON_CLKDEV
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select TICK_ONESHOT
>  	select PLAT_PXA
> @@ -519,6 +521,7 @@ config ARCH_RPC
>  	select ISA_DMA_API
>  	select NO_IOPORT
>  	select ARCH_SPARSEMEM_ENABLE
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  On the Acorn Risc-PC, Linux can support the internal IDE disk and
>  	  CD-ROM interface, serial and parallel port, and the floppy drive.
> @@ -530,7 +533,6 @@ config ARCH_SA1100
>  	select ARCH_SPARSEMEM_ENABLE
>  	select ARCH_MTD_XIP
>  	select GENERIC_GPIO
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select HAVE_CLK
>  	select TICK_ONESHOT
> @@ -542,6 +544,7 @@ config ARCH_S3C2410
>  	bool "Samsung S3C2410, S3C2412, S3C2413, S3C2440, S3C2442, S3C2443"
>  	select GENERIC_GPIO
>  	select HAVE_CLK
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Samsung S3C2410X CPU based systems, such as the Simtec Electronics
>  	  BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
> @@ -551,6 +554,7 @@ config ARCH_S3C64XX
>  	bool "Samsung S3C64XX"
>  	select GENERIC_GPIO
>  	select HAVE_CLK
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Samsung S3C64XX series based systems
>  
> @@ -561,6 +565,7 @@ config ARCH_SHARK
>  	select ISA_DMA
>  	select ZONE_DMA
>  	select PCI
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Support for the StrongARM based Digital DNARD machine, also known
>  	  as "Shark" (<http://www.shark-linux.de/shark.html>).
> @@ -570,6 +575,7 @@ config ARCH_LH7A40X
>  	select CPU_ARM922T
>  	select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM
>  	select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  	  Say Y here for systems based on one of the Sharp LH7A40X
>  	  System on a Chip processors.  These CPUs include an ARM922T
> @@ -579,7 +585,6 @@ config ARCH_LH7A40X
>  config ARCH_DAVINCI
>  	bool "TI DaVinci"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	select GENERIC_GPIO
>  	select ARCH_REQUIRE_GPIOLIB
> @@ -593,7 +598,6 @@ config ARCH_OMAP
>  	select GENERIC_GPIO
>  	select HAVE_CLK
>  	select ARCH_REQUIRE_GPIOLIB
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	help
>  	  Support for TI's OMAP platform (OMAP1 and OMAP2).
> @@ -601,7 +605,6 @@ config ARCH_OMAP
>  config ARCH_MSM
>  	bool "Qualcomm MSM"
>  	select CPU_V6
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  	help
>  	  Support for Qualcomm MSM7K based systems.  This runs on the ARM11
> @@ -612,6 +615,7 @@ config ARCH_MSM
>  config ARCH_W90X900
>  	bool "Nuvoton W90X900 CPU"
>  	select CPU_ARM926T
> +	select ARCH_USES_GETTIMEOFFSET
>  	help
>  		Support for Nuvoton (Winbond logic dept.) ARM9 processor,You
>  		can login www.mcuos.com or www.nuvoton.com to know more.
> diff --git a/arch/arm/include/asm/mach/time.h b/arch/arm/include/asm/mach/time.h
> index b2cc1fc..20c1d84 100644
> --- a/arch/arm/include/asm/mach/time.h
> +++ b/arch/arm/include/asm/mach/time.h
> @@ -38,7 +38,7 @@ struct sys_timer {
>  	void			(*init)(void);
>  	void			(*suspend)(void);
>  	void			(*resume)(void);
> -#ifndef CONFIG_GENERIC_TIME
> +#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
>  	unsigned long		(*offset)(void);
>  #endif
>  };
> diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c
> index 4cdc4a0..d9d8d6d 100644
> --- a/arch/arm/kernel/time.c
> +++ b/arch/arm/kernel/time.c
> @@ -81,7 +81,7 @@ EXPORT_SYMBOL(profile_pc);
>   */
>  int (*set_rtc)(void);
>  
> -#ifndef CONFIG_GENERIC_TIME
> +#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
>  static unsigned long dummy_gettimeoffset(void)
>  {
>  	return 0;
> @@ -236,63 +236,12 @@ static inline void do_leds(void)
>  #define	do_leds()
>  #endif
>  
> -#ifndef CONFIG_GENERIC_TIME
> -void do_gettimeofday(struct timeval *tv)
> +#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
> +u32 arch_gettimeoffset(void)
>  {
> -	unsigned long flags;
> -	unsigned long seq;
> -	unsigned long usec, sec;
> -
> -	do {
> -		seq = read_seqbegin_irqsave(&xtime_lock, flags);
> -		usec = system_timer->offset();
> -		sec = xtime.tv_sec;
> -		usec += xtime.tv_nsec / 1000;
> -	} while (read_seqretry_irqrestore(&xtime_lock, seq, flags));
> -
> -	/* usec may have gone up a lot: be safe */
> -	while (usec >= 1000000) {
> -		usec -= 1000000;
> -		sec++;
> -	}
> -
> -	tv->tv_sec = sec;
> -	tv->tv_usec = usec;
> -}
> -
> -EXPORT_SYMBOL(do_gettimeofday);
> -
> -int do_settimeofday(struct timespec *tv)
> -{
> -	time_t wtm_sec, sec = tv->tv_sec;
> -	long wtm_nsec, nsec = tv->tv_nsec;
> -
> -	if ((unsigned long)tv->tv_nsec >= NSEC_PER_SEC)
> -		return -EINVAL;
> -
> -	write_seqlock_irq(&xtime_lock);
> -	/*
> -	 * This is revolting. We need to set "xtime" correctly. However, the
> -	 * value in this location is the value at the most recent update of
> -	 * wall time.  Discover what correction gettimeofday() would have
> -	 * done, and then undo it!
> -	 */
> -	nsec -= system_timer->offset() * NSEC_PER_USEC;
> -
> -	wtm_sec  = wall_to_monotonic.tv_sec + (xtime.tv_sec - sec);
> -	wtm_nsec = wall_to_monotonic.tv_nsec + (xtime.tv_nsec - nsec);
> -
> -	set_normalized_timespec(&xtime, sec, nsec);
> -	set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
> -
> -	ntp_clear();
> -	write_sequnlock_irq(&xtime_lock);
> -	clock_was_set();
> -	return 0;
> +	return system_timer->offset() * 1000;
>  }
> -
> -EXPORT_SYMBOL(do_settimeofday);
> -#endif /* !CONFIG_GENERIC_TIME */
> +#endif /* CONFIG_ARCH_USES_GETTIMEOFFSET */
>  
>  /**
>   * save_time_delta - Save the offset between system time and RTC time
> @@ -391,7 +340,7 @@ device_initcall(timer_init_sysfs);
>  
>  void __init time_init(void)
>  {
> -#ifndef CONFIG_GENERIC_TIME
> +#ifdef CONFIG_ARCH_USES_GETTIMEOFFSET
>  	if (system_timer->offset == NULL)
>  		system_timer->offset = dummy_gettimeoffset;
>  #endif
> diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig
> index 323b47f..e82979c 100644
> --- a/arch/arm/mach-at91/Kconfig
> +++ b/arch/arm/mach-at91/Kconfig
> @@ -8,47 +8,41 @@ choice
>  config ARCH_AT91RM9200
>  	bool "AT91RM9200"
>  	select CPU_ARM920T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91SAM9260
>  	bool "AT91SAM9260 or AT91SAM9XE"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91SAM9261
>  	bool "AT91SAM9261"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91SAM9263
>  	bool "AT91SAM9263"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91SAM9RL
>  	bool "AT91SAM9RL"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91SAM9G20
>  	bool "AT91SAM9G20"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91CAP9
>  	bool "AT91CAP9"
>  	select CPU_ARM926T
> -	select GENERIC_TIME
>  	select GENERIC_CLOCKEVENTS
>  
>  config ARCH_AT91X40
>  	bool "AT91x40"
> +	select ARCH_USES_GETTIMEOFFSET
>  
>  endchoice
>  
> 
> 

-- 
Russell King
 Linux kernel    2.6 ARM Linux   - http://www.arm.linux.org.uk/
 maintainer of:
--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ