mirror of
https://github.com/t2linux/kernel.git
synced 2026-04-30 13:48:59 -07:00
Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer updates from Thomas Gleixner:
"The time/timekeeping/timer folks deliver with this update:
- Fix a reintroduced signed/unsigned issue and cleanup the whole
signed/unsigned mess in the timekeeping core so this wont happen
accidentaly again.
- Add a new trace clock based on boot time
- Prevent injection of random sleep times when PM tracing abuses the
RTC for storage
- Make posix timers configurable for real tiny systems
- Add tracepoints for the alarm timer subsystem so timer based
suspend wakeups can be instrumented
- The usual pile of fixes and updates to core and drivers"
* 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (23 commits)
timekeeping: Use mul_u64_u32_shr() instead of open coding it
timekeeping: Get rid of pointless typecasts
timekeeping: Make the conversion call chain consistently unsigned
timekeeping_Force_unsigned_clocksource_to_nanoseconds_conversion
alarmtimer: Add tracepoints for alarm timers
trace: Update documentation for mono, mono_raw and boot clock
trace: Add an option for boot clock as trace clock
timekeeping: Add a fast and NMI safe boot clock
timekeeping/clocksource_cyc2ns: Document intended range limitation
timekeeping: Ignore the bogus sleep time if pm_trace is enabled
selftests/timers: Fix spelling mistake "Asyncrhonous" -> "Asynchronous"
clocksource/drivers/bcm2835_timer: Unmap region obtained by of_iomap
clocksource/drivers/arm_arch_timer: Map frame with of_io_request_and_map()
arm64: dts: rockchip: Arch counter doesn't tick in system suspend
clocksource/drivers/arm_arch_timer: Don't assume clock runs in suspend
posix-timers: Make them configurable
posix_cpu_timers: Move the add_device_randomness() call to a proper place
timer: Move sys_alarm from timer.c to itimer.c
ptp_clock: Allow for it to be optional
Kconfig: Regenerate *.c_shipped files after previous changes
...
This commit is contained in:
@@ -38,6 +38,11 @@ to deliver its interrupts via SPIs.
|
||||
architecturally-defined reset values. Only supported for 32-bit
|
||||
systems which follow the ARMv7 architected reset values.
|
||||
|
||||
- arm,no-tick-in-suspend : The main counter does not tick when the system is in
|
||||
low-power system suspend on some SoCs. This behavior does not match the
|
||||
Architecture Reference Manual's specification that the system counter "must
|
||||
be implemented in an always-on power domain."
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
|
||||
@@ -113,6 +113,34 @@ applicable everywhere (see syntax).
|
||||
That will limit the usefulness but on the other hand avoid
|
||||
the illegal configurations all over.
|
||||
|
||||
- weak reverse dependencies: "imply" <symbol> ["if" <expr>]
|
||||
This is similar to "select" as it enforces a lower limit on another
|
||||
symbol except that the "implied" symbol's value may still be set to n
|
||||
from a direct dependency or with a visible prompt.
|
||||
|
||||
Given the following example:
|
||||
|
||||
config FOO
|
||||
tristate
|
||||
imply BAZ
|
||||
|
||||
config BAZ
|
||||
tristate
|
||||
depends on BAR
|
||||
|
||||
The following values are possible:
|
||||
|
||||
FOO BAR BAZ's default choice for BAZ
|
||||
--- --- ------------- --------------
|
||||
n y n N/m/y
|
||||
m y m M/y/n
|
||||
y y y Y/n
|
||||
y n * N
|
||||
|
||||
This is useful e.g. with multiple drivers that want to indicate their
|
||||
ability to hook into a secondary subsystem while allowing the user to
|
||||
configure that subsystem out without also having to unset these drivers.
|
||||
|
||||
- limiting menu display: "visible if" <expr>
|
||||
This attribute is only applicable to menu blocks, if the condition is
|
||||
false, the menu block is not displayed to the user (the symbols
|
||||
@@ -481,6 +509,7 @@ historical issues resolved through these different solutions.
|
||||
b) Match dependency semantics:
|
||||
b1) Swap all "select FOO" to "depends on FOO" or,
|
||||
b2) Swap all "depends on FOO" to "select FOO"
|
||||
c) Consider the use of "imply" instead of "select"
|
||||
|
||||
The resolution to a) can be tested with the sample Kconfig file
|
||||
Documentation/kbuild/Kconfig.recursion-issue-01 through the removal
|
||||
|
||||
@@ -362,6 +362,26 @@ of ftrace. Here is a list of some of the key files:
|
||||
to correlate events across hypervisor/guest if
|
||||
tb_offset is known.
|
||||
|
||||
mono: This uses the fast monotonic clock (CLOCK_MONOTONIC)
|
||||
which is monotonic and is subject to NTP rate adjustments.
|
||||
|
||||
mono_raw:
|
||||
This is the raw monotonic clock (CLOCK_MONOTONIC_RAW)
|
||||
which is montonic but is not subject to any rate adjustments
|
||||
and ticks at the same rate as the hardware clocksource.
|
||||
|
||||
boot: This is the boot clock (CLOCK_BOOTTIME) and is based on the
|
||||
fast monotonic clock, but also accounts for time spent in
|
||||
suspend. Since the clock access is designed for use in
|
||||
tracing in the suspend path, some side effects are possible
|
||||
if clock is accessed after the suspend time is accounted before
|
||||
the fast mono clock is updated. In this case, the clock update
|
||||
appears to happen slightly sooner than it normally would have.
|
||||
Also on 32-bit systems, it's possible that the 64-bit boot offset
|
||||
sees a partial update. These effects are rare and post
|
||||
processing should be able to handle them. See comments in the
|
||||
ktime_get_boot_fast_ns() function for more information.
|
||||
|
||||
To set a clock, simply echo the clock name into this file.
|
||||
|
||||
echo global > trace_clock
|
||||
|
||||
@@ -1029,11 +1029,16 @@ SYSCALL_DEFINE2(osf_settimeofday, struct timeval32 __user *, tv,
|
||||
return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
|
||||
}
|
||||
|
||||
asmlinkage long sys_ni_posix_timers(void);
|
||||
|
||||
SYSCALL_DEFINE2(osf_getitimer, int, which, struct itimerval32 __user *, it)
|
||||
{
|
||||
struct itimerval kit;
|
||||
int error;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_POSIX_TIMERS))
|
||||
return sys_ni_posix_timers();
|
||||
|
||||
error = do_getitimer(which, &kit);
|
||||
if (!error && put_it32(it, &kit))
|
||||
error = -EFAULT;
|
||||
@@ -1047,6 +1052,9 @@ SYSCALL_DEFINE3(osf_setitimer, int, which, struct itimerval32 __user *, in,
|
||||
struct itimerval kin, kout;
|
||||
int error;
|
||||
|
||||
if (!IS_ENABLED(CONFIG_POSIX_TIMERS))
|
||||
return sys_ni_posix_timers();
|
||||
|
||||
if (in) {
|
||||
if (get_it32(&kin, in))
|
||||
return -EFAULT;
|
||||
|
||||
@@ -174,6 +174,7 @@
|
||||
<GIC_PPI 14 IRQ_TYPE_LEVEL_LOW 0>,
|
||||
<GIC_PPI 11 IRQ_TYPE_LEVEL_LOW 0>,
|
||||
<GIC_PPI 10 IRQ_TYPE_LEVEL_LOW 0>;
|
||||
arm,no-tick-in-suspend;
|
||||
};
|
||||
|
||||
xin24m: xin24m {
|
||||
|
||||
@@ -64,6 +64,15 @@ void mach_get_cmos_time(struct timespec *now)
|
||||
unsigned int status, year, mon, day, hour, min, sec, century = 0;
|
||||
unsigned long flags;
|
||||
|
||||
/*
|
||||
* If pm_trace abused the RTC as storage, set the timespec to 0,
|
||||
* which tells the caller that this RTC value is unusable.
|
||||
*/
|
||||
if (!pm_trace_rtc_valid()) {
|
||||
now->tv_sec = now->tv_nsec = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&rtc_lock, flags);
|
||||
|
||||
/*
|
||||
|
||||
+1
-1
@@ -107,7 +107,7 @@ obj-$(CONFIG_INPUT) += input/
|
||||
obj-$(CONFIG_RTC_LIB) += rtc/
|
||||
obj-y += i2c/ media/
|
||||
obj-$(CONFIG_PPS) += pps/
|
||||
obj-$(CONFIG_PTP_1588_CLOCK) += ptp/
|
||||
obj-y += ptp/
|
||||
obj-$(CONFIG_W1) += w1/
|
||||
obj-y += power/
|
||||
obj-$(CONFIG_HWMON) += hwmon/
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <linux/pm-trace.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/rtc.h>
|
||||
#include <linux/suspend.h>
|
||||
|
||||
#include <linux/mc146818rtc.h>
|
||||
|
||||
@@ -74,6 +75,9 @@
|
||||
|
||||
#define DEVSEED (7919)
|
||||
|
||||
bool pm_trace_rtc_abused __read_mostly;
|
||||
EXPORT_SYMBOL_GPL(pm_trace_rtc_abused);
|
||||
|
||||
static unsigned int dev_hash_value;
|
||||
|
||||
static int set_magic_time(unsigned int user, unsigned int file, unsigned int device)
|
||||
@@ -104,6 +108,7 @@ static int set_magic_time(unsigned int user, unsigned int file, unsigned int dev
|
||||
time.tm_min = (n % 20) * 3;
|
||||
n /= 20;
|
||||
mc146818_set_time(&time);
|
||||
pm_trace_rtc_abused = true;
|
||||
return n ? -1 : 0;
|
||||
}
|
||||
|
||||
@@ -239,9 +244,31 @@ int show_trace_dev_match(char *buf, size_t size)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
pm_trace_notify(struct notifier_block *nb, unsigned long mode, void *_unused)
|
||||
{
|
||||
switch (mode) {
|
||||
case PM_POST_HIBERNATION:
|
||||
case PM_POST_SUSPEND:
|
||||
if (pm_trace_rtc_abused) {
|
||||
pm_trace_rtc_abused = false;
|
||||
pr_warn("Possible incorrect RTC due to pm_trace, please use 'ntpdate' or 'rdate' to reset it.\n");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct notifier_block pm_trace_nb = {
|
||||
.notifier_call = pm_trace_notify,
|
||||
};
|
||||
|
||||
static int early_resume_init(void)
|
||||
{
|
||||
hash_value_early_read = read_magic_time();
|
||||
register_pm_notifier(&pm_trace_nb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -542,6 +542,7 @@ config HANGCHECK_TIMER
|
||||
config MMTIMER
|
||||
tristate "MMTIMER Memory mapped RTC for SGI Altix"
|
||||
depends on IA64_GENERIC || IA64_SGI_SN2
|
||||
depends on POSIX_TIMERS
|
||||
default y
|
||||
help
|
||||
The mmtimer device allows direct userspace access to the
|
||||
|
||||
@@ -81,6 +81,7 @@ static struct clock_event_device __percpu *arch_timer_evt;
|
||||
static enum ppi_nr arch_timer_uses_ppi = VIRT_PPI;
|
||||
static bool arch_timer_c3stop;
|
||||
static bool arch_timer_mem_use_virtual;
|
||||
static bool arch_counter_suspend_stop;
|
||||
|
||||
static bool evtstrm_enable = IS_ENABLED(CONFIG_ARM_ARCH_TIMER_EVTSTREAM);
|
||||
|
||||
@@ -576,7 +577,7 @@ static struct clocksource clocksource_counter = {
|
||||
.rating = 400,
|
||||
.read = arch_counter_read,
|
||||
.mask = CLOCKSOURCE_MASK(56),
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS | CLOCK_SOURCE_SUSPEND_NONSTOP,
|
||||
.flags = CLOCK_SOURCE_IS_CONTINUOUS,
|
||||
};
|
||||
|
||||
static struct cyclecounter cyclecounter = {
|
||||
@@ -616,6 +617,8 @@ static void __init arch_counter_register(unsigned type)
|
||||
arch_timer_read_counter = arch_counter_get_cntvct_mem;
|
||||
}
|
||||
|
||||
if (!arch_counter_suspend_stop)
|
||||
clocksource_counter.flags |= CLOCK_SOURCE_SUSPEND_NONSTOP;
|
||||
start_count = arch_timer_read_counter();
|
||||
clocksource_register_hz(&clocksource_counter, arch_timer_rate);
|
||||
cyclecounter.mult = clocksource_counter.mult;
|
||||
@@ -907,6 +910,10 @@ static int __init arch_timer_of_init(struct device_node *np)
|
||||
of_property_read_bool(np, "arm,cpu-registers-not-fw-configured"))
|
||||
arch_timer_uses_ppi = PHYS_SECURE_PPI;
|
||||
|
||||
/* On some systems, the counter stops ticking when in suspend. */
|
||||
arch_counter_suspend_stop = of_property_read_bool(np,
|
||||
"arm,no-tick-in-suspend");
|
||||
|
||||
return arch_timer_init();
|
||||
}
|
||||
CLOCKSOURCE_OF_DECLARE(armv7_arch_timer, "arm,armv7-timer", arch_timer_of_init);
|
||||
@@ -964,8 +971,9 @@ static int __init arch_timer_mem_init(struct device_node *np)
|
||||
}
|
||||
|
||||
ret= -ENXIO;
|
||||
base = arch_counter_base = of_iomap(best_frame, 0);
|
||||
if (!base) {
|
||||
base = arch_counter_base = of_io_request_and_map(best_frame, 0,
|
||||
"arch_mem_timer");
|
||||
if (IS_ERR(base)) {
|
||||
pr_err("arch_timer: Can't map frame's registers\n");
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ static int __init bcm2835_timer_init(struct device_node *node)
|
||||
ret = of_property_read_u32(node, "clock-frequency", &freq);
|
||||
if (ret) {
|
||||
pr_err("Can't read clock-frequency");
|
||||
return ret;
|
||||
goto err_iounmap;
|
||||
}
|
||||
|
||||
system_clock = base + REG_COUNTER_LO;
|
||||
@@ -108,13 +108,15 @@ static int __init bcm2835_timer_init(struct device_node *node)
|
||||
irq = irq_of_parse_and_map(node, DEFAULT_TIMER);
|
||||
if (irq <= 0) {
|
||||
pr_err("Can't parse IRQ");
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto err_iounmap;
|
||||
}
|
||||
|
||||
timer = kzalloc(sizeof(*timer), GFP_KERNEL);
|
||||
if (!timer) {
|
||||
pr_err("Can't allocate timer struct\n");
|
||||
return -ENOMEM;
|
||||
ret = -ENOMEM;
|
||||
goto err_iounmap;
|
||||
}
|
||||
|
||||
timer->control = base + REG_CONTROL;
|
||||
@@ -133,7 +135,7 @@ static int __init bcm2835_timer_init(struct device_node *node)
|
||||
ret = setup_irq(irq, &timer->act);
|
||||
if (ret) {
|
||||
pr_err("Can't set up timer IRQ\n");
|
||||
return ret;
|
||||
goto err_iounmap;
|
||||
}
|
||||
|
||||
clockevents_config_and_register(&timer->evt, freq, 0xf, 0xffffffff);
|
||||
@@ -141,6 +143,10 @@ static int __init bcm2835_timer_init(struct device_node *node)
|
||||
pr_info("bcm2835: system timer (irq = %d)\n", irq);
|
||||
|
||||
return 0;
|
||||
|
||||
err_iounmap:
|
||||
iounmap(base);
|
||||
return ret;
|
||||
}
|
||||
CLOCKSOURCE_OF_DECLARE(bcm2835, "brcm,bcm2835-system-timer",
|
||||
bcm2835_timer_init);
|
||||
|
||||
@@ -58,7 +58,7 @@ config BFIN_RX_DESC_NUM
|
||||
config BFIN_MAC_USE_HWSTAMP
|
||||
bool "Use IEEE 1588 hwstamp"
|
||||
depends on BFIN_MAC && BF518
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
default y
|
||||
---help---
|
||||
To support the IEEE 1588 Precision Time Protocol (PTP), select y here
|
||||
|
||||
@@ -177,9 +177,9 @@ config AMD_XGBE
|
||||
depends on X86 || ARM64 || COMPILE_TEST
|
||||
select BITREVERSE
|
||||
select CRC32
|
||||
select PTP_1588_CLOCK
|
||||
select PHYLIB
|
||||
select AMD_XGBE_HAVE_ECC if X86
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
This driver supports the AMD 10GbE Ethernet device found on an
|
||||
AMD SoC.
|
||||
|
||||
@@ -422,7 +422,8 @@ int xgbe_config_netdev(struct xgbe_prv_data *pdata)
|
||||
goto err_wq;
|
||||
}
|
||||
|
||||
xgbe_ptp_register(pdata);
|
||||
if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK))
|
||||
xgbe_ptp_register(pdata);
|
||||
|
||||
xgbe_debugfs_init(pdata);
|
||||
|
||||
@@ -448,7 +449,8 @@ void xgbe_deconfig_netdev(struct xgbe_prv_data *pdata)
|
||||
|
||||
xgbe_debugfs_exit(pdata);
|
||||
|
||||
xgbe_ptp_unregister(pdata);
|
||||
if (IS_REACHABLE(CONFIG_PTP_1588_CLOCK))
|
||||
xgbe_ptp_unregister(pdata);
|
||||
|
||||
pdata->phy_if.phy_exit(pdata);
|
||||
|
||||
|
||||
@@ -110,7 +110,7 @@ config TIGON3
|
||||
depends on PCI
|
||||
select PHYLIB
|
||||
select HWMON
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
This driver supports Broadcom Tigon3 based gigabit Ethernet cards.
|
||||
|
||||
@@ -120,7 +120,7 @@ config TIGON3
|
||||
config BNX2X
|
||||
tristate "Broadcom NetXtremeII 10Gb support"
|
||||
depends on PCI
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
select FW_LOADER
|
||||
select ZLIB_INFLATE
|
||||
select LIBCRC32C
|
||||
|
||||
@@ -53,7 +53,7 @@ config THUNDER_NIC_RGX
|
||||
config LIQUIDIO
|
||||
tristate "Cavium LiquidIO support"
|
||||
depends on 64BIT
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
select FW_LOADER
|
||||
select LIBCRC32C
|
||||
---help---
|
||||
|
||||
@@ -25,7 +25,7 @@ config FEC
|
||||
ARCH_MXC || SOC_IMX28)
|
||||
default ARCH_MXC || SOC_IMX28 if ARM
|
||||
select PHYLIB
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
Say Y here if you want to use the built-in 10/100 Fast ethernet
|
||||
controller on some Motorola ColdFire and Freescale i.MX processors.
|
||||
|
||||
@@ -58,7 +58,7 @@ config E1000E
|
||||
tristate "Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support"
|
||||
depends on PCI && (!SPARC32 || BROKEN)
|
||||
select CRC32
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
This driver supports the PCI-Express Intel(R) PRO/1000 gigabit
|
||||
ethernet family of adapters. For PCI or PCI-X e1000 adapters,
|
||||
@@ -83,7 +83,7 @@ config E1000E_HWTS
|
||||
config IGB
|
||||
tristate "Intel(R) 82575/82576 PCI-Express Gigabit Ethernet support"
|
||||
depends on PCI
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
select I2C
|
||||
select I2C_ALGOBIT
|
||||
---help---
|
||||
@@ -156,7 +156,7 @@ config IXGBE
|
||||
tristate "Intel(R) 10GbE PCI Express adapters support"
|
||||
depends on PCI
|
||||
select MDIO
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
This driver supports Intel(R) 10GbE PCI Express family of
|
||||
adapters. For more information on how to identify your adapter, go
|
||||
@@ -213,7 +213,7 @@ config IXGBEVF
|
||||
|
||||
config I40E
|
||||
tristate "Intel(R) Ethernet Controller XL710 Family support"
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
depends on PCI
|
||||
---help---
|
||||
This driver supports Intel(R) Ethernet Controller XL710 Family of
|
||||
@@ -264,7 +264,7 @@ config FM10K
|
||||
tristate "Intel(R) FM10000 Ethernet Switch Host Interface Support"
|
||||
default n
|
||||
depends on PCI_MSI
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
This driver supports Intel(R) FM10000 Ethernet Switch Host
|
||||
Interface. For more information on how to identify your adapter,
|
||||
|
||||
@@ -7,7 +7,7 @@ config MLX4_EN
|
||||
depends on MAY_USE_DEVLINK
|
||||
depends on PCI
|
||||
select MLX4_CORE
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
---help---
|
||||
This driver supports Mellanox Technologies ConnectX Ethernet
|
||||
devices.
|
||||
|
||||
@@ -14,7 +14,7 @@ config MLX5_CORE
|
||||
config MLX5_CORE_EN
|
||||
bool "Mellanox Technologies ConnectX-4 Ethernet support"
|
||||
depends on NETDEVICES && ETHERNET && PCI && MLX5_CORE
|
||||
select PTP_1588_CLOCK
|
||||
imply PTP_1588_CLOCK
|
||||
default n
|
||||
---help---
|
||||
Ethernet support in Mellanox Technologies ConnectX-4 NIC.
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user