Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp936262imu; Wed, 9 Jan 2019 08:47:29 -0800 (PST) X-Google-Smtp-Source: ALg8bN78zJnU02KTsk1KxwGcW81erOJzcQLWvvtGkdDFrF0lo3RkQuRsKCYeTV9BJigqQoDoW3fi X-Received: by 2002:a63:fc49:: with SMTP id r9mr5903216pgk.209.1547052448938; Wed, 09 Jan 2019 08:47:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547052448; cv=none; d=google.com; s=arc-20160816; b=JGRaFsjYZ/w8K5rU0aDCFnpZuC/WuTbNpJ3T4HcGj8mFsD4C34cbhkGvcE39ZxCtLv gIclc+RL/Ty2hcoUqju9M4L6qo5fh2VE6EDvY81QU6ieTGsTeOaF6IwD2uCGn0PmTSvp kFyH1pzPq1sKbDUzFR+7NfLGFweuLf2Jg7sTCus0XCxbZt/pTNPW4Y/ydcvy8FRIcYh8 I4Fz0rYI/Rj1YfXfLkYd/Jqf5lFsaxcswOMmGQdMIh75doz5O/8D9OtHylOrSxwZuZeM tthGqX3kktat46nCGx81GM8o5p7qv+MgFjh2+C0brdumpkAzAa9NGV6KYPxnIDMw9wVx VmFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from; bh=UuT49j6AQLlXMrebRgINDKjWYMh9cJgdyJua1lgeNQY=; b=Zwt7Uqsy8f+EVa2Y/YzdAu69urPk08IT/IFr4kqZzF4vzy0FL0fHe2cYwgsDiQq1pz 3KdjKrjFJpkGNS0h7ifV6lr1Ps4ZXMOhFHon6bzlno6fedAJsEN8TIBRdSdqvl1r5iUu mAp3Y8xhT1kZXnImiDzmKQENr1XuM+dmdVNKLdNM7DXyFyKydOrpJFMMw/YlZkCaNBWs P7RMWtprmqw+0P0Ot4ALnvgYiloKCVpe6ZIatAfhES7tEAGmMhvyVVKVNyujEr4KZHlH AzIvu3yXjUQ3plrnl7aeH2kijxDgYSch4YiFGS6W9/ffUP9aL4MnPj3iyGsg9OHzDhlw beaQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d1si6476880pla.412.2019.01.09.08.47.13; Wed, 09 Jan 2019 08:47:28 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726881AbfAIQmC (ORCPT + 99 others); Wed, 9 Jan 2019 11:42:02 -0500 Received: from mx2.suse.de ([195.135.220.15]:57620 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726586AbfAIQkk (ORCPT ); Wed, 9 Jan 2019 11:40:40 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay1.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id DE35CAF91; Wed, 9 Jan 2019 16:40:38 +0000 (UTC) From: Roman Penyaev Cc: Roman Penyaev , Andrew Morton , Davidlohr Bueso , Jason Baron , Al Viro , "Paul E. McKenney" , Linus Torvalds , Andrea Parri , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 06/15] epoll: introduce various of helpers for user structure lengths calculations Date: Wed, 9 Jan 2019 17:40:16 +0100 Message-Id: <20190109164025.24554-7-rpenyaev@suse.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190109164025.24554-1-rpenyaev@suse.de> References: <20190109164025.24554-1-rpenyaev@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Helpers for lengths-from-number and number-from-lengths calculations. Among them: ep_polled_by_user() - returns true if epoll was created with EPOLL_USERPOLL ep_user_ring_events_available() - returns true if there is something in user ring buffer Signed-off-by: Roman Penyaev Cc: Andrew Morton Cc: Davidlohr Bueso Cc: Jason Baron Cc: Al Viro Cc: "Paul E. McKenney" Cc: Linus Torvalds Cc: Andrea Parri Cc: linux-fsdevel@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- fs/eventpoll.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/fs/eventpoll.c b/fs/eventpoll.c index 9ec682b6488f..ae288f62aa4c 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -438,6 +438,65 @@ static void ep_nested_calls_init(struct nested_calls *ncalls) spin_lock_init(&ncalls->lock); } +static inline unsigned int to_items_length(unsigned int nr) +{ + struct eventpoll *ep; + + return (sizeof(*ep->user_header) + + (nr << ilog2(sizeof(ep->user_header->items[0])))); +} + +static inline unsigned int to_index_length(unsigned int nr) +{ + struct eventpoll *ep; + + return nr << ilog2(sizeof(*ep->user_index)); +} + +static inline unsigned int to_items_bm_length(unsigned int nr) +{ + return ALIGN(nr, 8) >> 3; +} + +static inline unsigned int to_items_nr(unsigned int len) +{ + struct eventpoll *ep; + + return (len - sizeof(*ep->user_header)) >> + ilog2(sizeof(ep->user_header->items[0])); +} + +static inline unsigned int to_items_bm_nr(unsigned int len) +{ + return len << 3; +} + +static inline unsigned int ep_max_items_nr(struct eventpoll *ep) +{ + return to_items_nr(ep->header_length); +} + +static inline unsigned int ep_max_index_nr(struct eventpoll *ep) +{ + return ep->index_length >> ilog2(sizeof(*ep->user_index)); +} + +static inline unsigned int ep_max_items_bm_nr(struct eventpoll *ep) +{ + return to_items_bm_nr(ep->items_bm_length); +} + +static inline bool ep_polled_by_user(struct eventpoll *ep) +{ + return !!ep->user_header; +} + +static inline bool ep_user_ring_events_available(struct eventpoll *ep) +{ + return ep_polled_by_user(ep) && + ep->user_header->head != ep->user_header->tail; +} + /** * ep_events_available - Checks if ready events might be available. * -- 2.19.1