From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.9 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=no autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 43B0CC4727E for ; Thu, 1 Oct 2020 23:36:05 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E68D120739 for ; Thu, 1 Oct 2020 23:36:04 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="TYXfSssb"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="8J9vPfi2" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733166AbgJAXgC (ORCPT ); Thu, 1 Oct 2020 19:36:02 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:39096 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726855AbgJAXgC (ORCPT ); Thu, 1 Oct 2020 19:36:02 -0400 From: Thomas Gleixner DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1601595359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to; bh=3bLXIEr80y97HxN2avit1abmvcPedPzxpX5HrJY66eU=; b=TYXfSssbA27+U7rvgAEv1+r0MLc02A1qL7tBVFTCn92ZXT/0hU0g25+7YYJ9+eqxA890+x B8Vj/1uvphGaVcf+XCOziDUD3XvZ0M3JSMOzPt99T2VOrgek4zG8Zh3PwqL2nIXETjdzS5 XO7pxYElHz6Gpcit5ofiM0KGT2oc7uT5YBeucV5q8aFwSOgGUrSMW953W5uJHviSDDMob+ hVKEg+/JyhV/oGkK7XnPG3Dse4F57kUdo5vkou0sdvK8PzqulhbiYz8AcjWevms8v/xI19 x0aImkyZQoU0GRAAM6OgtBaFjC66dqle/eW6Zko+LgJf+7EUX59aPuKGEwtadQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1601595359; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to; bh=3bLXIEr80y97HxN2avit1abmvcPedPzxpX5HrJY66eU=; b=8J9vPfi2zXAFae/LTOhYPhvlIQJkGUH6QTe73K/DZdZcGumxoPTSJfhWp4MhC4MABdp9rl lFo+Xkpuvp/XeyDQ== To: Erez Geva , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, Cong Wang , "David S . Miller" , Jakub Kicinski , Jamal Hadi Salim , Jiri Pirko , Andrei Vagin , Dmitry Safonov <0x7f454c46@gmail.com>, "Eric W . Biederman" , Ingo Molnar , John Stultz , Michal Kubecek , Oleg Nesterov , Peter Zijlstra , Richard Cochran , Stephen Boyd , Vladis Dronov , Sebastian Andrzej Siewior , Frederic Weisbecker , Eric Dumazet Cc: Jesus Sanchez-Palencia , Vinicius Costa Gomes , Vedang Patel , Simon Sudler , Andreas Meisinger , Andreas Bucher , Henning Schild , Jan Kiszka , Andreas Zirkler , Ermin Sakic , An Ninh Nguyen , Michael Saenger , Bernd Maehringer , Gisela Greinert , Erez Geva , Erez Geva Subject: Re: [PATCH 3/7] Functions to fetch POSIX dynamic clock object In-Reply-To: <20201001205141.8885-4-erez.geva.ext@siemens.com> Date: Fri, 02 Oct 2020 01:35:59 +0200 Message-ID: <87h7rdecyo.fsf@nanos.tec.linutronix.de> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Oct 01 2020 at 22:51, Erez Geva wrote: > Add kernel functions to fetch a pointer to a POSIX dynamic clock > using a user file description dynamic clock ID. And how is that supposed to work. What are the lifetime rules? > +struct posix_clock *posix_clock_get_clock(clockid_t id) > +{ > + int err; > + struct posix_clock_desc cd; The core code uses reverse fir tree ordering of variable declaration based on the length: struct posix_clock_desc cd; int err; > + /* Verify we use posix clock ID */ > + if (!is_clockid_fd_clock(id)) > + return ERR_PTR(-EINVAL); > + > + err = get_clock_desc(id, &cd); So this is a kernel interface and get_clock_desc() does: struct file *fp = fget(clockid_to_fd(id)); How is that file descriptor valid in random kernel context? > + if (err) > + return ERR_PTR(err); > + > + get_device(cd.clk->dev); The purpose of this is? Comments are overrated... > + put_clock_desc(&cd); > + > + return cd.clk; > +} > +EXPORT_SYMBOL_GPL(posix_clock_get_clock); > + > +int posix_clock_put_clock(struct posix_clock *clk) > +{ > + if (IS_ERR_OR_NULL(clk)) > + return -EINVAL; > + put_device(clk->dev); > + return 0; > +} > +EXPORT_SYMBOL_GPL(posix_clock_put_clock); > + > +int posix_clock_gettime(struct posix_clock *clk, struct timespec64 *ts) > +{ > + int err; > + > + if (IS_ERR_OR_NULL(clk)) > + return -EINVAL; > + > + down_read(&clk->rwsem); Open coding the logic of get_posix_clock() and having a copy here and in the next function is really useful. Thanks, tglx