Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1533173
| Path | csiph.com!1.us.feeder.erje.net!feeder.erje.net!2.us.feeder.erje.net!newsfeed.fsmpi.rwth-aachen.de!newsfeed.straub-nv.de!news.mixmin.net!aioe.org!bofh.it!news.nic.it!robomod |
|---|---|
| From | Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Newsgroups | linux.kernel |
| Subject | [PATCH 4.4 10/21] tile: avoid using clocksource_cyc2ns with absolute cycle count |
| Date | Wed, 30 Nov 2016 11:10:02 +0100 |
| Message-ID | <sJ9ZU-4JS-29@gated-at.bofh.it> (permalink) |
| References | <sJ9nb-4fE-1@gated-at.bofh.it> |
| X-Original-To | linux-kernel@vger.kernel.org |
| X-Mailer | git-send-email 2.10.2 |
| User-Agent | quilt/0.65 |
| MIME-Version | 1.0 |
| Content-Type | text/plain; charset=UTF-8 |
| Sender | robomod@news.nic.it |
| List-ID | <linux-kernel.vger.kernel.org> |
| X-Mailing-List | linux-kernel@vger.kernel.org |
| Approved | robomod@news.nic.it |
| Lines | 64 |
| Organization | linux.* mail to news gateway |
| X-Original-Cc | Greg Kroah-Hartman <gregkh@linuxfoundation.org>, stable@vger.kernel.org, Chris Metcalf <cmetcalf@mellanox.com> |
| X-Original-Date | Wed, 30 Nov 2016 10:27:26 +0100 |
| X-Original-Message-ID | <20161130092655.440607276@linuxfoundation.org> |
| X-Original-References | <20161130092654.890709900@linuxfoundation.org> |
| X-Original-Sender | linux-kernel-owner@vger.kernel.org |
| Xref | csiph.com linux.kernel:1533173 |
Show key headers only | View raw
4.4-stable review patch. If anyone has any objections, please let me know.
------------------
From: Chris Metcalf <cmetcalf@mellanox.com>
commit e658a6f14d7c0243205f035979d0ecf6c12a036f upstream.
For large values of "mult" and long uptimes, the intermediate
result of "cycles * mult" can overflow 64 bits. For example,
the tile platform calls clocksource_cyc2ns with a 1.2 GHz clock;
we have mult = 853, and after 208.5 days, we overflow 64 bits.
Since clocksource_cyc2ns() is intended to be used for relative
cycle counts, not absolute cycle counts, performance is more
importance than accepting a wider range of cycle values. So,
just use mult_frac() directly in tile's sched_clock().
Commit 4cecf6d401a0 ("sched, x86: Avoid unnecessary overflow
in sched_clock") by Salman Qazi results in essentially the same
generated code for x86 as this change does for tile. In fact,
a follow-on change by Salman introduced mult_frac() and switched
to using it, so the C code was largely identical at that point too.
Peter Zijlstra then added mul_u64_u32_shr() and switched x86
to use it. This is, in principle, better; by optimizing the
64x64->64 multiplies to be 32x32->64 multiplies we can potentially
save some time. However, the compiler piplines the 64x64->64
multiplies pretty well, and the conditional branch in the generic
mul_u64_u32_shr() causes some bubbles in execution, with the
result that it's pretty much a wash. If tilegx provided its own
implementation of mul_u64_u32_shr() without the conditional branch,
we could potentially save 3 cycles, but that seems like small gain
for a fair amount of additional build scaffolding; no other platform
currently provides a mul_u64_u32_shr() override, and tile doesn't
currently have an <asm/div64.h> header to put the override in.
Additionally, gcc currently has an optimization bug that prevents
it from recognizing the opportunity to use a 32x32->64 multiply,
and so the result would be no better than the existing mult_frac()
until such time as the compiler is fixed.
For now, just using mult_frac() seems like the right answer.
Signed-off-by: Chris Metcalf <cmetcalf@mellanox.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
arch/tile/kernel/time.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/tile/kernel/time.c
+++ b/arch/tile/kernel/time.c
@@ -218,8 +218,8 @@ void do_timer_interrupt(struct pt_regs *
*/
unsigned long long sched_clock(void)
{
- return clocksource_cyc2ns(get_cycles(),
- sched_clock_mult, SCHED_CLOCK_SHIFT);
+ return mult_frac(get_cycles(),
+ sched_clock_mult, 1ULL << SCHED_CLOCK_SHIFT);
}
int setup_profiling_timer(unsigned int multiplier)
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH 4.4 00/21] 4.4.36-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:30 +0100
[PATCH 4.4 07/21] USB: serial: ftdi_sio: add support for TI CC3200 LaunchPad Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:30 +0100
[PATCH 4.4 15/21] parisc: Fix race in pci-dma.c Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:40 +0100
[PATCH 4.4 06/21] USB: serial: cp210x: add ID for the Zone DPMX Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:40 +0100
[PATCH 4.4 21/21] mei: fix return value on disconnection Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:40 +0100
[PATCH 4.4 17/21] mpi: Fix NULL ptr dereference in mpi_powm() [ver #3] Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:40 +0100
[PATCH 4.4 20/21] mei: me: fix place for kaby point device ids. Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:40 +0100
[PATCH 4.4 05/21] usb: chipidea: move the lock initialization to core file Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 10:40 +0100
[PATCH 4.4 19/21] mei: me: disable driver on SPT SPS firmware Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:00 +0100
[PATCH 4.4 08/21] Fix USB CB/CBI storage devices with CONFIG_VMAP_STACK=y Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:00 +0100
[PATCH 4.4 16/21] parisc: Also flush data TLB in flush_icache_page_asm Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:00 +0100
[PATCH 4.4 12/21] apparmor: fix change_hat not finding hat after policy replacement Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:10 +0100
[PATCH 4.4 09/21] scsi: mpt3sas: Fix secure erase premature termination Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:10 +0100
[PATCH 4.4 10/21] tile: avoid using clocksource_cyc2ns with absolute cycle count Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:10 +0100
[PATCH 4.4 14/21] parisc: Fix races in parisc_setup_cache_timing() Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:10 +0100
[PATCH 4.4 13/21] NFSv4.x: hide array-bounds warning Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:10 +0100
[PATCH 4.4 11/21] cfg80211: limit scan results cache size Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 11:10 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Andre Noll <maan@tuebingen.mpg.de> - 2016-11-30 14:50 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 15:00 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Andre Noll <maan@tuebingen.mpg.de> - 2016-11-30 15:10 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Eric Dumazet <edumazet@google.com> - 2016-11-30 15:30 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Greg Kroah-Hartman <gregkh@linuxfoundation.org> - 2016-11-30 15:40 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review David Miller <davem@davemloft.net> - 2016-11-30 16:00 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Andre Noll <maan@tuebingen.mpg.de> - 2016-11-30 16:20 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review David Miller <davem@davemloft.net> - 2016-11-30 16:00 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Greg KH <gregkh@linuxfoundation.org> - 2016-11-30 16:40 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Shuah Khan <shuah.kh@samsung.com> - 2016-11-30 17:10 +0100
Re: [PATCH 4.4 00/21] 4.4.36-stable review Guenter Roeck <linux@roeck-us.net> - 2016-12-01 00:30 +0100
csiph-web