From owner-freebsd-net@freebsd.org Fri Jul 17 21:54:47 2020 Return-Path: Delivered-To: freebsd-net@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 731D936FF3C for ; Fri, 17 Jul 2020 21:54:47 +0000 (UTC) (envelope-from zec@fer.hr) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on20616.outbound.protection.outlook.com [IPv6:2a01:111:f400:7d00::616]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mail.protection.outlook.com", Issuer "GlobalSign Organization Validation CA - SHA256 - G3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4B7lK16G1Wz4Zqj for ; Fri, 17 Jul 2020 21:54:45 +0000 (UTC) (envelope-from zec@fer.hr) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WwLpsY0TwHkSJjIEch6KTNBhLMb7gf/68pa57+KHj8DdC2om2b+eCxmw007HKZwfICQ5+1tybpoMESaOYS3dB2Wi/xc1XJ0yAFOkYvZDi3BC9hFQbjEQIkKAkq7HZvLDERxrU3vtXuBvZiOjccRFkAkbSrPFS8yD0zTZTgXEZEE11IiPmM8XqsiT30/aJdXaqbJcrenLg+6BBKFSYGKFqTAccjbTe0rdGpf3mMF/voD/Gr6cmN2R8Rgx4l7JHewXuOIJ+/t/ziYBtnuZ6woE5GI88ISEd2LZVv+JBiB/9pBWkTcX+XHjlIlZBWuOc4TvcsCK8+jflWfAadhkQYDMhg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hbKPo8ugDyEE7e6VaUtMECwAXycLFLh84qe/XxRbNUs=; b=HAr2XeGgIBJ26WAA13fjei3YQYrNbFUDgE5STh2oJZUf4+SyctDeWcAMRRnblUNNN8oVaOKg8vVbPmd8MXX++yRF+AqxeRAfKbK9shiARgYr3wxwAxNRYngYyrGYpsOkeEsiNAOvEWHoLsIc3dFPFCWD+9eXZ0P/asu9N2pN9auHlA8rSM/RRLeFPHESzUX+RZu0fDKKx9hoHGRRiFJWm9nTvMs4TXKgOftFF9RQnKo76xke0io7pD/osPjt4nhlz9r+YEBm04LV5lIbCMyZQ8zSM9yYErdXEdSFIJQPbWSVvgumAgpU9NyKcXxM3no6ERxknQ05MVr/rV2LCPb9KQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fer.hr; dmarc=pass action=none header.from=fer.hr; dkim=pass header.d=fer.hr; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ferhr.onmicrosoft.com; s=selector2-ferhr-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=hbKPo8ugDyEE7e6VaUtMECwAXycLFLh84qe/XxRbNUs=; b=GZ9e0Qfs40diHdaEuytlMDe38pzlaVqKcixvE8yvR+ngKFLjm1YUxn6JxbNmsJpkm3+83GEJKbR8GBQkqkmfcHHSytSGFsOOsbq96944mr4QK7vfeFUCGlfAdplcWKj41Cg4ByQReNo8+9tqPERW8vtm2MJez+z0moqeeVANXJM= Received: from VE1PR08MB4783.eurprd08.prod.outlook.com (2603:10a6:802:a9::16) by VI1PR08MB4238.eurprd08.prod.outlook.com (2603:10a6:803:f2::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.18; Fri, 17 Jul 2020 21:54:41 +0000 Received: from VE1PR08MB4783.eurprd08.prod.outlook.com ([fe80::c8e:e335:c7:319b]) by VE1PR08MB4783.eurprd08.prod.outlook.com ([fe80::c8e:e335:c7:319b%3]) with mapi id 15.20.3195.023; Fri, 17 Jul 2020 21:54:41 +0000 Date: Fri, 17 Jul 2020 23:54:38 +0200 From: Marko Zec To: John-Mark Gurney Cc: freebsd-net@FreeBSD.org Subject: Re: IF_DRV_PREPEND unlocked? Message-ID: <20200717235438.1fee733b@x23> In-Reply-To: <20200717185609.GX4213@funkthat.com> References: <20200715232624.GR4213@funkthat.com> <20200716072622.5fa35ba2@x23> <20200716074917.04445daa@x23> <20200716185629.GT4213@funkthat.com> <20200717120311.59377e0d@x23> <20200717185609.GX4213@funkthat.com> X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; amd64-portbld-freebsd11.3) Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-ClientProxiedBy: VI1PR06CA0165.eurprd06.prod.outlook.com (2603:10a6:803:c8::22) To VE1PR08MB4783.eurprd08.prod.outlook.com (2603:10a6:802:a9::16) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from x23 (31.147.7.0) by VI1PR06CA0165.eurprd06.prod.outlook.com (2603:10a6:803:c8::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3195.17 via Frontend Transport; Fri, 17 Jul 2020 21:54:39 +0000 X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; amd64-portbld-freebsd11.3) X-Originating-IP: [31.147.7.0] X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aece9e77-426c-44cd-65f0-08d82a9c021c X-MS-TrafficTypeDiagnostic: VI1PR08MB4238: X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:8273; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: J8M2JxSYj5NRaraiyIwjbY4rqVxHWox1jZkkEb1ob6tbvWoTm7OaJcC+2uGJQJQk8d7Nrgwq3PoBhhyNE+8HzaHs7pk2I5Rfkw58563VhK/DA7fjfIt7G4PDi1kH/ogDRVH059D5zllwldEH80bDs5dkogqDOtpXTr/L7HLyPueAw/eCYfSrLVrxc5PvIOz8aXusSFXkhQZuWX8EHFa4u0+PYwKadAyqdTXOgJZq9XUClN52nYwqiXfwcy1E9Hrssy+YQBvzbPgoudgEfwkHd2J7IFeQF6oX5cF8QlDZEUY/B7RGm30sDJURQAaSHr8Wg3N6VtlKGTLOpSIWNCUJjA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:VE1PR08MB4783.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFTY:; SFS:(4636009)(366004)(376002)(136003)(39850400004)(346002)(396003)(4326008)(478600001)(6916009)(2906002)(66946007)(33716001)(66556008)(66476007)(786003)(16526019)(316002)(55016002)(956004)(26005)(9686003)(186003)(6496006)(52116002)(5660300002)(1076003)(9576002)(83380400001)(86362001)(7116003)(8676002)(8936002); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: pcRqlNZxcQMSBnoQcLcYIvlhO6TIFRV0oOOILcQrCRWVbQxqzWrV3e/AxaAtWWO1eQiJpIDjPy8Mn3QL6+PAaFrPPqvdi9qR8wtHT9XpaamuavUOmNEDogM+rA62pS7uJO31HQ+LDhdA7bKA/q4ppLQxIAh+JbFDi7Vrqft0cq3AjZ6BLqxZ4mdjdzfmrVEd4mHIdglSHyN6w7iVfGq0kkCMH3170VvHo7AFlOkq7ImiLyoFHOaThAOUoMO+XrOzktK1W9i9J9UEsjjgv4DRCKr2yqd1eQM2YnJau1oPss4ChfVsFhN1BH5btBQDiEXScI0n9C2Fjt/uK7PFn5jpsVwB6EPlkq7svKcaAdus76RaYINK27DaV0EpvKPKWmHFRLLXvCZLBLfWLNtcAzPWW85k7SkLzt7JNFLIXXbPGVSYUjPCPCz58J+/QBg+n5cqzlOnHZjvhucYBBEeIf8uOV3UMGCq4IYBwEIf2JZqfls= X-OriginatorOrg: fer.hr X-MS-Exchange-CrossTenant-Network-Message-Id: aece9e77-426c-44cd-65f0-08d82a9c021c X-MS-Exchange-CrossTenant-AuthSource: VE1PR08MB4783.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Jul 2020 21:54:41.3784 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: ca71eddc-cc7b-4e5b-95bd-55b658e696be X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: aelX9b2W+oVeb+QI9k4RgXpaucINyAx+wjofTHKao4yXu9MnjWrCKHMNTp49gN1l X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR08MB4238 X-Rspamd-Queue-Id: 4B7lK16G1Wz4Zqj X-Spamd-Bar: -- Authentication-Results: mx1.freebsd.org; dkim=pass header.d=ferhr.onmicrosoft.com header.s=selector2-ferhr-onmicrosoft-com header.b=GZ9e0Qfs; dmarc=none; spf=pass (mx1.freebsd.org: domain of zec@fer.hr designates 2a01:111:f400:7d00::616 as permitted sender) smtp.mailfrom=zec@fer.hr X-Spamd-Result: default: False [-2.92 / 15.00]; MID_RHS_NOT_FQDN(0.50)[]; NEURAL_HAM_MEDIUM(-1.04)[-1.040]; R_DKIM_ALLOW(-0.20)[ferhr.onmicrosoft.com:s=selector2-ferhr-onmicrosoft-com]; HAS_XOIP(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; R_SPF_ALLOW(-0.20)[+ip6:2a01:111:f400::/48]; NEURAL_HAM_LONG(-1.02)[-1.015]; MIME_GOOD(-0.10)[text/plain]; DMARC_NA(0.00)[fer.hr]; ARC_ALLOW(-1.00)[microsoft.com:s=arcselector9901:i=1]; RCVD_COUNT_THREE(0.00)[4]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DKIM_TRACE(0.00)[ferhr.onmicrosoft.com:+]; RCPT_COUNT_TWO(0.00)[2]; NEURAL_HAM_SHORT(-0.87)[-0.869]; FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+]; SUBJECT_ENDS_QUESTION(1.00)[]; ASN(0.00)[asn:8075, ipnet:2a01:111:f000::/36, country:US]; RCVD_TLS_LAST(0.00)[]; RECEIVED_SPAMHAUS_PBL(0.00)[31.147.7.0:received] X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.33 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 17 Jul 2020 21:54:47 -0000 On Fri, 17 Jul 2020 11:56:09 -0700 John-Mark Gurney wrote: > Marko Zec wrote this message on Fri, Jul 17, 2020 at 12:03 +0200: ... > > #define IFQ_DRV_IS_EMPTY(ifq) \ > > (((ifq)->ifq_drv_len == 0) && ((ifq)->ifq_len == 0)) > > > > So, if per altq(9) the contract is that with IFQ_DRV_* the ifq_drv_* > > fields should be protected by some caller-provided mechanism, while > > the other ifq_* fields will be implictly protected by ifq_mtx, how > > can accessing ifw_len without holding ifq_mtx in the above example > > be safe? > > Reading is safe when you aren't modifying it, and only using it to > inform if you should recheck w/ a lock... > > This way a driver can do: > if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd)) { > mtx_lock(sc->sc_mtx); > for (;;) { > IFQ_DRV_DEQUEUE(&ifp->if_snd, m); > if (m == NULL) > break; > sendpkt(m); > } > mtx_unlock(sc->sc_mtx); > } > > which saves an expensive lock/unlock op when there are no packets > in the queue... The above snippet is fine even if IFQ_DRV_IS_EMPTY() returns 0 during a race with another thread: per altq(9) the subsequent (then properly locked) IFQ_DRV_DEQUEUE() might find out that the queue is actually empty, and bail out if (m == NULL). But what if IFQ_DRV_IS_EMPTY() returns 1 due to a race with another thread which has just executed IFQ_ENQUEUE() (invisible to the first thread due to lack of synchronization), and therefore leaves the mbuf in the queue, instead of dequeuing and processing it? Marko