From patchwork Sat Nov 21 12:31:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Johannes Berg X-Patchwork-Id: 1404400 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.infradead.org (client-ip=2001:8b0:10b:1231::1; helo=merlin.infradead.org; envelope-from=linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=sipsolutions.net Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=merlin.20170209 header.b=3kYHAx2a; dkim=fail reason="signature verification failed" (2048-bit key; secure) header.d=infradead.org header.i=@infradead.org header.a=rsa-sha256 header.s=casper.20170209 header.b=iS5eDLTw; dkim-atps=neutral Received: from merlin.infradead.org (merlin.infradead.org [IPv6:2001:8b0:10b:1231::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4CdqDy19D9z9sRK for ; Sun, 22 Nov 2020 10:21:54 +1100 (AEDT) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:To:From: Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender :Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References:List-Owner; bh=PdzlgQNJSiaHixtScdpiCnBOuDrJsNFohjyzDgOfVxc=; b=3kYHAx2a4DZaUwRLq/ib2bu1LU mxjXIUn5dG/PIssNmGX3cK/qr5M3VAtLu8DhuWHbcrhG09iELSUHOa+S+o5wkgFqLQEb+ol0iLGda PnXiWZ4lyPCfL6ojYwQvJ8UUScvKj+CzlUeg9pkskiEERxaywoVjbt0EjejXUsAtWwR2GlRXgGqV6 ZIZQRHmtucXpXcpsB39qnj5Er6u3ZDPPaNEoo0bvW+UQ2xFKxQoEsFdiPV1k6AxDujB9HDR+K2XX8 f7GoXATYsgWxpKDOetGzyQYRo2jMGkR7ZzCBOiKz+fWo1r3RRZnEFf8OGO/bstX4ccnYAzdwE0M2z plKhB4jg==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kgcCU-0002kH-F2; Sat, 21 Nov 2020 23:21:50 +0000 Received: from casper.infradead.org ([2001:8b0:10b:1236::1]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kgcCR-0002ix-Bc for linux-um@merlin.infradead.org; Sat, 21 Nov 2020 23:21:47 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=Content-Transfer-Encoding:MIME-Version: Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:In-Reply-To:References; bh=wHXbBokjaJ1CwBtkDcWKOIFDWR740Ci9/8GDk8VMmEU=; b=iS5eDLTwXJEMeBq3dFxkIN7ZP6 EceaCiYf/1vMGZZsj1RYLy5U6ae12GHq6E1qijKnU0rLw71GmQh+y3Gd/papFDjIRarTAWrdv3yid 8NLL1XfP8DdkYTwlpgofkl8ByjJiG0+C+ywHu6tBEWz61+c2F23/qlnuBBcaW/lAgW7VptAbt2/nk M32J0nVMHw8nn3oM8rA01qwa2gNmnML26AbqbkT1sbgfwu+rG9iJBrLm3letMcYFzuQVz2Od1YG/e Gy57DptSBaETf/kS9vfpeVRdAXk+cqeOET83e2U4fX3++JsQOftO+7MrApb+B9B4GO89BPWt7yVRk Zqi/xTSw==; Received: from s3.sipsolutions.net ([2a01:4f8:191:4433::2] helo=sipsolutions.net) by casper.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kgS39-000828-C4 for linux-um@lists.infradead.org; Sat, 21 Nov 2020 12:31:33 +0000 Received: by sipsolutions.net with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.94) (envelope-from ) id 1kgS2u-00Bxnh-DY; Sat, 21 Nov 2020 13:31:16 +0100 From: Johannes Berg To: linux-um@lists.infradead.org Subject: [PATCH v2] um: simplify os_idle_sleep() and sleep longer Date: Sat, 21 Nov 2020 13:31:11 +0100 Message-Id: <20201121133110.c08aab9c34aa.I3b692c844a4ca459ee3084334a92ac5ef5b4cec4@changeid> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201121_123131_716669_5D7CA7D6 X-CRM114-Status: GOOD ( 13.99 ) X-Spam-Score: -1.5 (-) X-Spam-Report: SpamAssassin version 3.4.4 on casper.infradead.org summary: Content analysis details: (-1.5 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -1.9 BAYES_00 BODY: Bayes spam probability is 0 to 1% [score: 0.0000] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 SPF_NONE SPF: sender does not publish an SPF Record 0.4 KHOP_HELO_FCRDNS Relay HELO differs from its IP's reverse DNS X-BeenThere: linux-um@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Johannes Berg Sender: "linux-um" Errors-To: linux-um-bounces+incoming=patchwork.ozlabs.org@lists.infradead.org From: Johannes Berg There really is no reason to pass the amount of time we should sleep, especially since it's just hard-coded to one second. Additionally, one second isn't really all that long, and as we are expecting to be woken up by a signal, we can sleep longer and avoid doing some work every second. Bump to two minutes. In externally controlled time-travel mode, just wait "forever", which basically sets our next event if any, and if we really don't have any then we'll wait forever without any control socket communication until the outside system sends us an event. Signed-off-by: Johannes Berg --- arch/um/include/linux/time-internal.h | 2 +- arch/um/include/shared/os.h | 2 +- arch/um/kernel/process.c | 11 ++++------- arch/um/kernel/time.c | 11 ++++++++++- arch/um/os-Linux/time.c | 8 +++----- 5 files changed, 19 insertions(+), 15 deletions(-) diff --git a/arch/um/include/linux/time-internal.h b/arch/um/include/linux/time-internal.h index f3b03d39a854..deb7f1d209eb 100644 --- a/arch/um/include/linux/time-internal.h +++ b/arch/um/include/linux/time-internal.h @@ -28,7 +28,7 @@ struct time_travel_event { extern enum time_travel_mode time_travel_mode; -void time_travel_sleep(unsigned long long duration); +void time_travel_sleep(void); static inline void time_travel_set_event_fn(struct time_travel_event *e, diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h index f467d28fc0b4..c89ce642b0d3 100644 --- a/arch/um/include/shared/os.h +++ b/arch/um/include/shared/os.h @@ -256,7 +256,7 @@ extern void os_warn(const char *fmt, ...) __attribute__ ((format (printf, 1, 2))); /* time.c */ -extern void os_idle_sleep(unsigned long long nsecs); +extern void os_idle_sleep(void); extern int os_timer_create(void); extern int os_timer_set_interval(unsigned long long nsecs); extern int os_timer_one_shot(unsigned long long nsecs); diff --git a/arch/um/kernel/process.c b/arch/um/kernel/process.c index 26b5e243d3fc..6f599b206bc7 100644 --- a/arch/um/kernel/process.c +++ b/arch/um/kernel/process.c @@ -204,13 +204,10 @@ void initial_thread_cb(void (*proc)(void *), void *arg) static void um_idle_sleep(void) { - unsigned long long duration = UM_NSEC_PER_SEC; - - if (time_travel_mode != TT_MODE_OFF) { - time_travel_sleep(duration); - } else { - os_idle_sleep(duration); - } + if (time_travel_mode != TT_MODE_OFF) + time_travel_sleep(); + else + os_idle_sleep(); } void arch_cpu_idle(void) diff --git a/arch/um/kernel/time.c b/arch/um/kernel/time.c index 8dafc3f2add4..b69130c77827 100644 --- a/arch/um/kernel/time.c +++ b/arch/um/kernel/time.c @@ -399,13 +399,22 @@ static void time_travel_oneshot_timer(struct time_travel_event *e) deliver_alarm(); } -void time_travel_sleep(unsigned long long duration) +void time_travel_sleep(void) { + unsigned long long duration = NSEC_PER_SEC * 120; unsigned long long next = time_travel_time + duration; if (time_travel_mode == TT_MODE_BASIC) os_timer_disable(); + /* + * In external mode, just tell the external controller we'll + * (essentially) wait "forever" (S64_MAX because there are + * some potential wrapping issues.) + */ + if (time_travel_mode == TT_MODE_EXTERNAL) + next = S64_MAX; + time_travel_update_time(next, true); if (time_travel_mode == TT_MODE_BASIC && diff --git a/arch/um/os-Linux/time.c b/arch/um/os-Linux/time.c index 90f6de224c70..56386ee9e7e8 100644 --- a/arch/um/os-Linux/time.c +++ b/arch/um/os-Linux/time.c @@ -99,14 +99,12 @@ long long os_nsecs(void) } /** - * os_idle_sleep() - sleep for a given time of nsecs - * @nsecs: nanoseconds to sleep + * os_idle_sleep() - idle sleep for some (long) time */ -void os_idle_sleep(unsigned long long nsecs) +void os_idle_sleep(void) { struct timespec ts = { - .tv_sec = nsecs / UM_NSEC_PER_SEC, - .tv_nsec = nsecs % UM_NSEC_PER_SEC + .tv_sec = 120, }; /*