Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6013431imu; Tue, 13 Nov 2018 15:44:35 -0800 (PST) X-Google-Smtp-Source: AJdET5dK/1hnUpSejOZ/knzioQONLzMXJAk1tPOYWnfyCdh+ZqZqnbp3sqtjfzycedbmI0jo2hc/ X-Received: by 2002:a17:902:bc8c:: with SMTP id bb12-v6mr6808441plb.275.1542152675367; Tue, 13 Nov 2018 15:44:35 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542152675; cv=none; d=google.com; s=arc-20160816; b=NVBgWWfSdpkko+qiKzoIekeZMonEAvrXEbICWIme+03+B2/Pb5NRADdQFGTlDj2KHM jNkirz3jY5AIVrkBYAc2LRI9JVPavWShBk5su8vMuC4At1UpvbJ4LeO9mHvMUVykFasq gc9MiMV5iYYEqKM18idA/0jvatmxWr5zsEqWBINFRpGPFdn/vvS+YJRfFDnLo5d3JoSt o0qSnMImSwgDOpz/18or+CeQI5a2GCJHZnapkaqOAVfXEwON0sF40UAKciVoVof/oze4 V9P7VgEh4RvOhAJhjWp8My0wiUcQAfyjQLldxfZSE2pckRFoy8j/wZzgctzq3ncFcVRD 92Tg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=tVDuuYcTohWhbiVlfJpAvAa+kHxWzDwlbFRZKUtc/qk=; b=lNFPe5EVyprI+oVWQL/ie8Semx2OXANDnfwvW62sa08VZ8o3TVskxF3StxPfoUhMa9 akyH4E8OCoUPpsf5nQtYXESVKeQ/D+///8/jATwvg+Bc5+wLuUxI6Y3q6nHuKIsN61cr pE7dcw/Q90OzweTlCeA5u7eIocKuMTZToz/sWLFjGPGeuIKHcXAd35qdJBF/Mk48e/4G 1zw9wGdw9DpPtCXxR+U92lKw3lJuUvRXbbEbIN6Wvb4uyqPpJM2L7YyKeiHLX9jnPiQg qQA8mfxYenVEulVG7WaM8pAATpXugmHaCPAKx0xbDadpft1fjzTdPe6DWD9bmjZBZ/AI ndZQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@armlinux.org.uk header.s=pandora-2014 header.b=YUGCgx5Q; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=armlinux.org.uk Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t4-v6si23505097plb.237.2018.11.13.15.44.19; Tue, 13 Nov 2018 15:44:35 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=fail header.i=@armlinux.org.uk header.s=pandora-2014 header.b=YUGCgx5Q; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=armlinux.org.uk Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728330AbeKNJod (ORCPT + 99 others); Wed, 14 Nov 2018 04:44:33 -0500 Received: from pandora.armlinux.org.uk ([78.32.30.218]:34230 "EHLO pandora.armlinux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726937AbeKNJod (ORCPT ); Wed, 14 Nov 2018 04:44:33 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=armlinux.org.uk; s=pandora-2014; h=Sender:In-Reply-To:Content-Type: MIME-Version:References:Message-ID:Subject:Cc:To:From:Date:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=tVDuuYcTohWhbiVlfJpAvAa+kHxWzDwlbFRZKUtc/qk=; b=YUGCgx5QTyOZwrK/VLGpQ4OSn +Q0j4L9FViLwv/ycdhjLvYeTTU4fHM12nZGp02/uLq3UB9kTSO5m1lTVjIKsDWvdHA85Y6dNCM+T3 ZHN4F3gLSbF/xjyCHcUFeunso0nimQ5LOC3juNYwXKOGuNlDKBge8/WVR1d+fFciKQTY8=; Received: from n2100.armlinux.org.uk ([2001:4d48:ad52:3201:214:fdff:fe10:4f86]:49766) by pandora.armlinux.org.uk with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.90_1) (envelope-from ) id 1gMiLO-0002HB-N6; Tue, 13 Nov 2018 23:43:42 +0000 Received: from linux by n2100.armlinux.org.uk with local (Exim 4.90_1) (envelope-from ) id 1gMiLK-00087H-Of; Tue, 13 Nov 2018 23:43:38 +0000 Date: Tue, 13 Nov 2018 23:43:36 +0000 From: Russell King - ARM Linux To: Finn Thain Cc: Christoph Hellwig , Geert Uytterhoeven , Arnd Bergmann , Stephen N Chivers , Thomas Gleixner , Daniel Lezcano , John Stultz , linux-m68k@lists.linux-m68k.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Subject: Re: [RFC PATCH 01/13] arm: Fix mutual exclusion in arch_gettimeoffset Message-ID: <20181113234336.GP30658@n2100.armlinux.org.uk> References: <20181112083422.GA19695@infradead.org> <20181113092012.GI30658@n2100.armlinux.org.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Nov 14, 2018 at 08:55:37AM +1100, Finn Thain wrote: > On Tue, 13 Nov 2018, Russell King - ARM Linux wrote: > > > On Tue, Nov 13, 2018 at 02:39:00PM +1100, Finn Thain wrote: > > > > > > You could remove the old arch_gettimeoffset API without dropping any > > > platforms. > > > > > > If no-one converts a given platform to the clocksource API it would mean > > > that the default 'jiffies' clocksource will get used on that platform. > > > > > > Clock resolution and timer precision would be degraded, but that might not > > > matter. > > > > > > Anyway, if someone who has this hardware is willing to test a clocksource > > > API conversion, they can let me know and I'll attempt that patch. > > > > There's reasons why that's not appropriate - such as not having two > > separate timers in order to supply a clocksource and separate clock > > event. > > > > Not all hardware is suited to the clocksource + clockevent idea. > > > > Sorry, I don't follow. > > AFAIK, clocksources and clock event devices are orthogonal concepts. There > are platforms with !ARCH_USES_GETTIMEOFFSET && !GENERIC_CLOCKEVENTS (and > every other combination). > > A clocksource read method just provides a cycle count, and in this sense > arch_gettimeoffset() is equivalent to a clocksource. A clocksource provides a cycle counter that monotonically changes and does not wrap between clockevent events. A clock event is responsible for providing events to the system when some work is needing to be done, limited by the wrap interval of the clocksource. Each time the clock event triggers an interrupt, the clocksource is read to determine how much time has passed, using: count = (new_value - old_value) & available_bits nanosecs = count * scale >> shift; If you try to combine the clocksource and clockevent because you only have a single counter, and the counter has the behaviour of: - counting down towards zero - when reaching zero, triggers an interrupt, and reloads with N then this provides your clockevent, but you can't use this as a clock source, because each time you receive an interrupt and try to read the counter value, it will be approximately the same value. This means that the above calculation fails to register the correct number of nanoseconds passing. Hence, this does not work. Also note where I said above that the clock event device must be able to provide an interrupt _before_ the clocksource wraps - clearly with such a timer, that is utterly impossible. The simple solution is to not use such a counter as the clocksource, which means you fall back to using the jiffies clocksource, and your timekeeping has jiffy resolution - so 10ms, or possibly 1ms if you want a 1kHz timer interval. For most applications, that's simply way to coarse, as was realised in the very early days of Linux. If only there was a way to interpolate between timer interrupts... which is exactly what arch_gettimeoffset() does, and is a historical reminant of the pre-clocksource/clockevent days of the kernel - but it is the only way to get better resolution from this sort of setup. -- RMK's Patch system: http://www.armlinux.org.uk/developer/patches/ FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up According to speedtest.net: 11.9Mbps down 500kbps up