forked from mirrors/linux
		
	powerpc: use time64_t in read_persistent_clock
Looking through the remaining users of the deprecated mktime() function, I found the powerpc rtc handlers, which use it in place of rtc_tm_to_time64(). To clean this up, I'm changing over the read_persistent_clock() function to the read_persistent_clock64() variant, and change all the platform specific handlers along with it. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
		
							parent
							
								
									2dc20f454d
								
							
						
					
					
						commit
						5bfd643583
					
				
					 15 changed files with 31 additions and 45 deletions
				
			
		|  | @ -83,7 +83,7 @@ struct machdep_calls { | |||
| 
 | ||||
| 	int		(*set_rtc_time)(struct rtc_time *); | ||||
| 	void		(*get_rtc_time)(struct rtc_time *); | ||||
| 	unsigned long	(*get_boot_time)(void); | ||||
| 	time64_t	(*get_boot_time)(void); | ||||
| 	unsigned char 	(*rtc_read_val)(int addr); | ||||
| 	void		(*rtc_write_val)(int addr, unsigned char val); | ||||
| 
 | ||||
|  |  | |||
|  | @ -328,7 +328,7 @@ extern int opal_get_sensor_data(u32 sensor_hndl, u32 *sensor_data); | |||
| extern int opal_get_sensor_data_u64(u32 sensor_hndl, u64 *sensor_data); | ||||
| 
 | ||||
| struct rtc_time; | ||||
| extern unsigned long opal_get_boot_time(void); | ||||
| extern time64_t opal_get_boot_time(void); | ||||
| extern void opal_nvram_init(void); | ||||
| extern void opal_flash_update_init(void); | ||||
| extern void opal_flash_update_print_message(void); | ||||
|  |  | |||
|  | @ -361,7 +361,7 @@ extern int rtas_offline_cpus_mask(cpumask_var_t cpus); | |||
| extern int rtas_ibm_suspend_me(u64 handle); | ||||
| 
 | ||||
| struct rtc_time; | ||||
| extern unsigned long rtas_get_boot_time(void); | ||||
| extern time64_t rtas_get_boot_time(void); | ||||
| extern void rtas_get_rtc_time(struct rtc_time *rtc_time); | ||||
| extern int rtas_set_rtc_time(struct rtc_time *rtc_time); | ||||
| 
 | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ | |||
| 
 | ||||
| #define MAX_RTC_WAIT 5000	/* 5 sec */ | ||||
| #define RTAS_CLOCK_BUSY (-2) | ||||
| unsigned long __init rtas_get_boot_time(void) | ||||
| time64_t __init rtas_get_boot_time(void) | ||||
| { | ||||
| 	int ret[8]; | ||||
| 	int error; | ||||
|  | @ -38,7 +38,7 @@ unsigned long __init rtas_get_boot_time(void) | |||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return mktime(ret[0], ret[1], ret[2], ret[3], ret[4], ret[5]); | ||||
| 	return mktime64(ret[0], ret[1], ret[2], ret[3], ret[4], ret[5]); | ||||
| } | ||||
| 
 | ||||
| /* NOTE: get_rtc_time will get an error if executed in interrupt context
 | ||||
|  |  | |||
|  | @ -825,7 +825,7 @@ int update_persistent_clock(struct timespec now) | |||
| 	return ppc_md.set_rtc_time(&tm); | ||||
| } | ||||
| 
 | ||||
| static void __read_persistent_clock(struct timespec *ts) | ||||
| static void __read_persistent_clock(struct timespec64 *ts) | ||||
| { | ||||
| 	struct rtc_time tm; | ||||
| 	static int first = 1; | ||||
|  | @ -849,11 +849,10 @@ static void __read_persistent_clock(struct timespec *ts) | |||
| 	} | ||||
| 	ppc_md.get_rtc_time(&tm); | ||||
| 
 | ||||
| 	ts->tv_sec = mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, | ||||
| 			    tm.tm_hour, tm.tm_min, tm.tm_sec); | ||||
| 	ts->tv_sec = rtc_tm_to_time64(&tm); | ||||
| } | ||||
| 
 | ||||
| void read_persistent_clock(struct timespec *ts) | ||||
| void read_persistent_clock64(struct timespec64 *ts) | ||||
| { | ||||
| 	__read_persistent_clock(ts); | ||||
| 
 | ||||
|  |  | |||
|  | @ -192,9 +192,7 @@ void mpc8xx_get_rtc_time(struct rtc_time *tm) | |||
| 
 | ||||
| 	/* Get time from the RTC. */ | ||||
| 	data = in_be32(&sys_tmr->sit_rtc); | ||||
| 	to_tm(data, tm); | ||||
| 	tm->tm_year -= 1900; | ||||
| 	tm->tm_mon -= 1; | ||||
| 	rtc_time64_to_tm(data, tm); | ||||
| 	immr_unmap(sys_tmr); | ||||
| 	return; | ||||
| } | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ | |||
|  */ | ||||
| extern int maple_set_rtc_time(struct rtc_time *tm); | ||||
| extern void maple_get_rtc_time(struct rtc_time *tm); | ||||
| extern unsigned long maple_get_boot_time(void); | ||||
| extern time64_t maple_get_boot_time(void); | ||||
| extern void maple_calibrate_decr(void); | ||||
| extern void maple_pci_init(void); | ||||
| extern void maple_pci_irq_fixup(struct pci_dev *dev); | ||||
|  |  | |||
|  | @ -137,7 +137,7 @@ static struct resource rtc_iores = { | |||
| 	.flags = IORESOURCE_IO | IORESOURCE_BUSY, | ||||
| }; | ||||
| 
 | ||||
| unsigned long __init maple_get_boot_time(void) | ||||
| time64_t __init maple_get_boot_time(void) | ||||
| { | ||||
| 	struct rtc_time tm; | ||||
| 	struct device_node *rtcs; | ||||
|  | @ -170,7 +170,6 @@ unsigned long __init maple_get_boot_time(void) | |||
| 	request_resource(&ioport_resource, &rtc_iores); | ||||
| 
 | ||||
| 	maple_get_rtc_time(&tm); | ||||
| 	return mktime(tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday, | ||||
| 		      tm.tm_hour, tm.tm_min, tm.tm_sec); | ||||
| 	return rtc_tm_to_time64(&tm); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -2,7 +2,7 @@ | |||
| #ifndef _PASEMI_PASEMI_H | ||||
| #define _PASEMI_PASEMI_H | ||||
| 
 | ||||
| extern unsigned long pas_get_boot_time(void); | ||||
| extern time64_t pas_get_boot_time(void); | ||||
| extern void pas_pci_init(void); | ||||
| extern void pas_pci_irq_fixup(struct pci_dev *dev); | ||||
| extern void pas_pci_dma_dev_setup(struct pci_dev *dev); | ||||
|  |  | |||
|  | @ -21,8 +21,8 @@ | |||
| 
 | ||||
| #include <asm/time.h> | ||||
| 
 | ||||
| unsigned long __init pas_get_boot_time(void) | ||||
| time64_t __init pas_get_boot_time(void) | ||||
| { | ||||
| 	/* Let's just return a fake date right now */ | ||||
| 	return mktime(2006, 1, 1, 12, 0, 0); | ||||
| 	return mktime64(2006, 1, 1, 12, 0, 0); | ||||
| } | ||||
|  |  | |||
|  | @ -15,7 +15,7 @@ struct rtc_time; | |||
| extern int pmac_newworld; | ||||
| 
 | ||||
| extern long pmac_time_init(void); | ||||
| extern unsigned long pmac_get_boot_time(void); | ||||
| extern time64_t pmac_get_boot_time(void); | ||||
| extern void pmac_get_rtc_time(struct rtc_time *); | ||||
| extern int pmac_set_rtc_time(struct rtc_time *); | ||||
| extern void pmac_read_rtc_time(void); | ||||
|  |  | |||
|  | @ -84,15 +84,6 @@ long __init pmac_time_init(void) | |||
| 	return delta; | ||||
| } | ||||
| 
 | ||||
| #if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU) | ||||
| static void to_rtc_time(unsigned long now, struct rtc_time *tm) | ||||
| { | ||||
| 	to_tm(now, tm); | ||||
| 	tm->tm_year -= 1900; | ||||
| 	tm->tm_mon -= 1; | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| #if defined(CONFIG_ADB_CUDA) || defined(CONFIG_ADB_PMU) || \ | ||||
|     defined(CONFIG_PMAC_SMU) | ||||
| static unsigned long from_rtc_time(struct rtc_time *tm) | ||||
|  | @ -103,10 +94,10 @@ static unsigned long from_rtc_time(struct rtc_time *tm) | |||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ADB_CUDA | ||||
| static unsigned long cuda_get_time(void) | ||||
| static time64_t cuda_get_time(void) | ||||
| { | ||||
| 	struct adb_request req; | ||||
| 	unsigned int now; | ||||
| 	time64_t now; | ||||
| 
 | ||||
| 	if (cuda_request(&req, NULL, 2, CUDA_PACKET, CUDA_GET_TIME) < 0) | ||||
| 		return 0; | ||||
|  | @ -117,10 +108,10 @@ static unsigned long cuda_get_time(void) | |||
| 		       req.reply_len); | ||||
| 	now = (req.reply[3] << 24) + (req.reply[4] << 16) | ||||
| 		+ (req.reply[5] << 8) + req.reply[6]; | ||||
| 	return ((unsigned long)now) - RTC_OFFSET; | ||||
| 	return now - RTC_OFFSET; | ||||
| } | ||||
| 
 | ||||
| #define cuda_get_rtc_time(tm)	to_rtc_time(cuda_get_time(), (tm)) | ||||
| #define cuda_get_rtc_time(tm)	rtc_time64_to_tm(cuda_get_time(), (tm)) | ||||
| 
 | ||||
| static int cuda_set_rtc_time(struct rtc_time *tm) | ||||
| { | ||||
|  | @ -147,10 +138,10 @@ static int cuda_set_rtc_time(struct rtc_time *tm) | |||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_ADB_PMU | ||||
| static unsigned long pmu_get_time(void) | ||||
| static time64_t pmu_get_time(void) | ||||
| { | ||||
| 	struct adb_request req; | ||||
| 	unsigned int now; | ||||
| 	time64_t now; | ||||
| 
 | ||||
| 	if (pmu_request(&req, NULL, 1, PMU_READ_RTC) < 0) | ||||
| 		return 0; | ||||
|  | @ -160,10 +151,10 @@ static unsigned long pmu_get_time(void) | |||
| 		       req.reply_len); | ||||
| 	now = (req.reply[0] << 24) + (req.reply[1] << 16) | ||||
| 		+ (req.reply[2] << 8) + req.reply[3]; | ||||
| 	return ((unsigned long)now) - RTC_OFFSET; | ||||
| 	return now - RTC_OFFSET; | ||||
| } | ||||
| 
 | ||||
| #define pmu_get_rtc_time(tm)	to_rtc_time(pmu_get_time(), (tm)) | ||||
| #define pmu_get_rtc_time(tm)	rtc_time64_to_tm(pmu_get_time(), (tm)) | ||||
| 
 | ||||
| static int pmu_set_rtc_time(struct rtc_time *tm) | ||||
| { | ||||
|  | @ -188,13 +179,13 @@ static int pmu_set_rtc_time(struct rtc_time *tm) | |||
| #endif | ||||
| 
 | ||||
| #ifdef CONFIG_PMAC_SMU | ||||
| static unsigned long smu_get_time(void) | ||||
| static time64_t smu_get_time(void) | ||||
| { | ||||
| 	struct rtc_time tm; | ||||
| 
 | ||||
| 	if (smu_get_rtc_time(&tm, 1)) | ||||
| 		return 0; | ||||
| 	return from_rtc_time(&tm); | ||||
| 	return rtc_tm_to_time64(&tm); | ||||
| } | ||||
| 
 | ||||
| #else | ||||
|  | @ -204,7 +195,7 @@ static unsigned long smu_get_time(void) | |||
| #endif | ||||
| 
 | ||||
| /* Can't be __init, it's called when suspending and resuming */ | ||||
| unsigned long pmac_get_boot_time(void) | ||||
| time64_t pmac_get_boot_time(void) | ||||
| { | ||||
| 	/* Get the time from the RTC, used only at boot time */ | ||||
| 	switch (sys_ctrler) { | ||||
|  |  | |||
|  | @ -34,7 +34,7 @@ static void opal_to_tm(u32 y_m_d, u64 h_m_s_ms, struct rtc_time *tm) | |||
| 	tm->tm_wday     = -1; | ||||
| } | ||||
| 
 | ||||
| unsigned long __init opal_get_boot_time(void) | ||||
| time64_t __init opal_get_boot_time(void) | ||||
| { | ||||
| 	struct rtc_time tm; | ||||
| 	u32 y_m_d; | ||||
|  | @ -61,8 +61,7 @@ unsigned long __init opal_get_boot_time(void) | |||
| 	y_m_d = be32_to_cpu(__y_m_d); | ||||
| 	h_m_s_ms = be64_to_cpu(__h_m_s_ms); | ||||
| 	opal_to_tm(y_m_d, h_m_s_ms, &tm); | ||||
| 	return mktime(tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, | ||||
| 		      tm.tm_hour, tm.tm_min, tm.tm_sec); | ||||
| 	return rtc_tm_to_time64(&tm); | ||||
| } | ||||
| 
 | ||||
| static __init int opal_time_init(void) | ||||
|  |  | |||
|  | @ -57,7 +57,7 @@ static inline void ps3_smp_cleanup_cpu(int cpu) { } | |||
| /* time */ | ||||
| 
 | ||||
| void __init ps3_calibrate_decr(void); | ||||
| unsigned long __init ps3_get_boot_time(void); | ||||
| time64_t __init ps3_get_boot_time(void); | ||||
| void ps3_get_rtc_time(struct rtc_time *time); | ||||
| int ps3_set_rtc_time(struct rtc_time *time); | ||||
| 
 | ||||
|  |  | |||
|  | @ -76,7 +76,7 @@ static u64 read_rtc(void) | |||
| 	return rtc_val; | ||||
| } | ||||
| 
 | ||||
| unsigned long __init ps3_get_boot_time(void) | ||||
| time64_t __init ps3_get_boot_time(void) | ||||
| { | ||||
| 	return read_rtc() + ps3_os_area_get_rtc_diff(); | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Arnd Bergmann
						Arnd Bergmann