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 Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 43FE1C32771 for ; Fri, 19 Aug 2022 12:20:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348774AbiHSMUh (ORCPT ); Fri, 19 Aug 2022 08:20:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53034 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1347929AbiHSMUg (ORCPT ); Fri, 19 Aug 2022 08:20:36 -0400 Received: from mx0b-00082601.pphosted.com (mx0b-00082601.pphosted.com [67.231.153.30]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50E79FF227 for ; Fri, 19 Aug 2022 05:20:35 -0700 (PDT) Received: from pps.filterd (m0148460.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.17.1.5/8.17.1.5) with ESMTP id 27J9GqED025284 for ; Fri, 19 Aug 2022 05:20:34 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : mime-version : content-transfer-encoding : content-type; s=facebook; bh=07wjHAPFXMReUQK4g7uilmsdQuSczGFG6GubYuzzT6g=; b=fCrHn3A0DVXs7Lkx+O1Su7OSSScen9bi/VEVz7CIAhuGMTBzdgH+bzRRiZdGZlKkMBVI Sw64b3c7h7bI9jTUAsH/VCwaK9F39ItflxY/+y0CZz6IwwEvWlygokEjWsKv+uJ4mpYO apZbq8lbYqQLHViIA6XYcsYHL5zqJh7PsnM= Received: from mail.thefacebook.com ([163.114.132.120]) by mx0a-00082601.pphosted.com (PPS) with ESMTPS id 3j27ra9760-14 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Fri, 19 Aug 2022 05:20:34 -0700 Received: from twshared8442.02.ash8.facebook.com (2620:10d:c085:108::8) by mail.thefacebook.com (2620:10d:c085:11d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2375.31; Fri, 19 Aug 2022 05:20:32 -0700 Received: by devbig038.lla2.facebook.com (Postfix, from userid 572232) id AF5734CEF048; Fri, 19 Aug 2022 05:20:25 -0700 (PDT) From: Dylan Yudaken To: Jens Axboe , Pavel Begunkov , CC: , Dylan Yudaken Subject: [PATCH for-next v3 2/7] io_uring: introduce io_has_work Date: Fri, 19 Aug 2022 05:19:41 -0700 Message-ID: <20220819121946.676065-3-dylany@fb.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220819121946.676065-1-dylany@fb.com> References: <20220819121946.676065-1-dylany@fb.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-FB-Internal: Safe Content-Type: text/plain X-Proofpoint-ORIG-GUID: tETYRlCbYDk3wh0AZDn8XJALn0WHPmwD X-Proofpoint-GUID: tETYRlCbYDk3wh0AZDn8XJALn0WHPmwD X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.895,Hydra:6.0.517,FMLib:17.11.122.1 definitions=2022-08-19_06,2022-08-18_01,2022-06-22_01 Precedence: bulk List-ID: X-Mailing-List: io-uring@vger.kernel.org This will be used later to know if the ring has outstanding work. Right now just if there is overflow CQEs to copy to the main CQE ring, but late= r will include deferred tasks Signed-off-by: Dylan Yudaken --- io_uring/io_uring.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/io_uring/io_uring.c b/io_uring/io_uring.c index 0c9fe0f1c174..19d5d1ab5793 100644 --- a/io_uring/io_uring.c +++ b/io_uring/io_uring.c @@ -2144,6 +2144,11 @@ struct io_wait_queue { unsigned nr_timeouts; }; =20 +static inline bool io_has_work(struct io_ring_ctx *ctx) +{ + return test_bit(IO_CHECK_CQ_OVERFLOW_BIT, &ctx->check_cq); +} + static inline bool io_should_wake(struct io_wait_queue *iowq) { struct io_ring_ctx *ctx =3D iowq->ctx; @@ -2162,13 +2167,13 @@ static int io_wake_function(struct wait_queue_ent= ry *curr, unsigned int mode, { struct io_wait_queue *iowq =3D container_of(curr, struct io_wait_queue, wq); + struct io_ring_ctx *ctx =3D iowq->ctx; =20 /* * Cannot safely flush overflowed CQEs from here, ensure we wake up * the task, and the next invocation will do it. */ - if (io_should_wake(iowq) || - test_bit(IO_CHECK_CQ_OVERFLOW_BIT, &iowq->ctx->check_cq)) + if (io_should_wake(iowq) || io_has_work(ctx)) return autoremove_wake_function(curr, mode, wake_flags, key); return -1; } @@ -2504,8 +2509,8 @@ static __poll_t io_uring_poll(struct file *file, po= ll_table *wait) * Users may get EPOLLIN meanwhile seeing nothing in cqring, this * pushs them to do the flush. */ - if (io_cqring_events(ctx) || - test_bit(IO_CHECK_CQ_OVERFLOW_BIT, &ctx->check_cq)) + + if (io_cqring_events(ctx) || io_has_work(ctx)) mask |=3D EPOLLIN | EPOLLRDNORM; =20 return mask; --=20 2.30.2