Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp935438imu; Wed, 9 Jan 2019 08:46:33 -0800 (PST) X-Google-Smtp-Source: ALg8bN6OKNO2MeP0vbeAXrTVoderStb/RfkPoAUuq9YY8UD4UAyvqQ8AqTU2yPlF1+MG4Lt0ocki X-Received: by 2002:a17:902:8f97:: with SMTP id z23mr6803029plo.283.1547052393638; Wed, 09 Jan 2019 08:46:33 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1547052393; cv=none; d=google.com; s=arc-20160816; b=HdwolUdDu7zbr/S1mvqori05CtfDB0Agv/0ltu2ql+Oc3K/icj4hvESJpbrwsQvoy6 zO6L1slqRhm8nIuWmjHaF6Yp0HYoZ1WmFKMHgk1+e/XNhu81yJxgyKShAGdh94FqnW8n eKqPZ8007lYrFePqFU8gTueXXidyv1rTtafH1rVmHysfonDv1Jw9D5a/UstY4N+Ppfod fbh/ZG88tLQaYJ2OSy3HVsd6NMoBABvdz6W/b2ppTUAM1s2rwnuQF4sr0G9bd4JhIb7z yE7IKEL7hZBAMODsa4UnwjEcnQSQPlwTnrr7RS2nH4VrtwgkkdiZdaeQxctOq4krZrxP xtNg== 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=l9qIonzt66vlZmA+xlSBhbzz142sxJv0CxCgHpNp8NY=; b=A0Lkm19oB+XDKTpMuN6hvS3AsJG2po/zm5C6uAExPHsMXVd1Y+q5PusYaQbZpVAi+9 eFCwBluBaTyaNFxrPCH/ClPsJZ2f8xe7NEpMW2twChRwwuSGb7QECV1CwLWxHBDRVUQs KwXVtfEYYEE2cP240iUtlREZ3twFrbiKhlp3CssRMt2jdqAVWuhblaGeoniKuGnG6aTc b9NCma0H6VKMvY+J9NitfaGrhexOZ3cPkqeiCWDnATZMNVlXUlzuSDnM03N9s9DtMpRB CHewjwyipqnPSrMCF6nYQpnJo0fXI2e1Fa5SlNmIb+4Gd98wVcPgLjt6OUH7vpQMjVRf iGJA== 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 w16si16044063plk.192.2019.01.09.08.46.17; Wed, 09 Jan 2019 08:46:33 -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 S1726824AbfAIQlo (ORCPT + 99 others); Wed, 9 Jan 2019 11:41:44 -0500 Received: from mx2.suse.de ([195.135.220.15]:57636 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726551AbfAIQkk (ORCPT ); Wed, 9 Jan 2019 11:40:40 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id 4A596B012; Wed, 9 Jan 2019 16:40:39 +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 07/15] epoll: extend epitem struct with new members for polling from userspace Date: Wed, 9 Jan 2019 17:40:17 +0100 Message-Id: <20190109164025.24554-8-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 ->bit every epitem has an element inside user item array, this bit is actually an index position of that user item array and also a bit inside ep->items_bm ->ready_events received events in the period when descriptor can't be polled from userspace and ep->rdllist is used for keeping list of ready items ->work work for offloading polling from task context if epfd is polled from userspace but driver does not provide pollflags on wakeup 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 | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/fs/eventpoll.c b/fs/eventpoll.c index ae288f62aa4c..637b463587c1 100644 --- a/fs/eventpoll.c +++ b/fs/eventpoll.c @@ -9,6 +9,8 @@ * * Davide Libenzi * + * Polling from userspace support by Roman Penyaev + * (C) Copyright 2019 SUSE, All Rights Reserved */ #include @@ -42,6 +44,7 @@ #include #include #include +#include #include /* @@ -176,6 +179,18 @@ struct epitem { /* The structure that describe the interested events and the source fd */ struct epoll_event event; + + /* Bit in user bitmap for user polling */ + unsigned int bit; + + /* + * Collect ready events for the period when descriptor is polled by user + * but events are routed to klists. + */ + __poll_t ready_events; + + /* Work for offloading event callback */ + struct work_struct work; }; #define EPOLL_USER_HEADER_SIZE 128 @@ -2557,12 +2572,6 @@ static int __init eventpoll_init(void) ep_nested_calls_init(&poll_safewake_ncalls); #endif - /* - * We can have many thousands of epitems, so prevent this from - * using an extra cache line on 64-bit (and smaller) CPUs - */ - BUILD_BUG_ON(sizeof(void *) <= 8 && sizeof(struct epitem) > 128); - /* Allocates slab cache used to allocate "struct epitem" items */ epi_cache = kmem_cache_create("eventpoll_epi", sizeof(struct epitem), 0, SLAB_HWCACHE_ALIGN|SLAB_PANIC|SLAB_ACCOUNT, NULL); -- 2.19.1