From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BBCE830B535 for ; Wed, 6 May 2026 20:14:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.177 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778098495; cv=none; b=U1ZdNujNC0CD11ii9uKeykG+OWGSeZN5BQbqDiKdwABfrjAFupFT06NgNz3FqUrdOhg5hPYrvcFE/Dvw8VR3O2uux0VxpzF42BXQ+CvsPQzZ4C+KEJid37kIkFcBnysEdDMCXwpddznvzUaa10rNaO+YcqVWHPPw60SRX+Ar4Xs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778098495; c=relaxed/simple; bh=lzl+ZCEbJXomun7iKlXawoVQwcFcM6XChlqH0vheII4=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=GelBjiaja5AxJ4bIMSfqfjFtomFj/nl8jgGS4FIrdIrSQWFTe4SKZopUCouYtYTAA4VuewpBBSERmSTT/A5av+N0mo54JSIVR9JJZd6Nn5g/tc8i72flRASVu4Gcf7jo5DKEio2hacwzcJPUnYrwIJ+25KeE8+w0qQvYQme7RJU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=U5JY+fsr; arc=none smtp.client-ip=209.85.222.177 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="U5JY+fsr" Received: by mail-qk1-f177.google.com with SMTP id af79cd13be357-8ef2118b478so12231885a.0 for ; Wed, 06 May 2026 13:14:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778098493; x=1778703293; darn=vger.kernel.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=fe4us+YTOYlScKAXCfvhTi11WxXFiyS0yMbl0trik1I=; b=U5JY+fsrQi01HxwP5cFFgVT4ldcUJeT6TgrBhXH89xHM39aRGAOI/LWVCu1DL9304E 0HvC/9rPN92nvrdKK+88TnTBOzr9WRfvc40YTLoZD4LUkrZfb0s/dwSg73Hfb2jNmkVO D/p+CrKoQkvpglmi0CUq3RBm9w+1IfrH8U0OtzUM2mvyGOzPieFxn9aIXaQibr3YghB0 2hOJHQwUv6QjAsU1f7o5J+/dM4WuGjSPLlO0AJtc6LZwsF6CLchBTMOjH/BzStCqdCZt Rw38bsLFQBqAGc7Q5ED2zJOgEJ6iVQmTtw1cJR8UZbd+6yJGyPMGWqXBagBHMorNvOeb Y0Wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778098493; x=1778703293; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fe4us+YTOYlScKAXCfvhTi11WxXFiyS0yMbl0trik1I=; b=QU2z+ajj89lYJmAF2gzIlSSpKdhB17A2p3fgeEKcKmUsdE9JZEPpbmRa2hG+2WhPf2 li2s5kH6GaNlEZnj/SgGgFr3hJw1tspKS6yRmi0+aMxPMie9hTmJ6XKHIiJtaMaiAnPz G0SIgXFnRuK/dPZHfVDSVmbUKCQMBPeWR/3Pr2bq5Mn9HspyF8OW9hSCifpKBh4sLAmk Rlux32sLsMUzT0XqnH0NuqRblg74SJJrF8Ebjqofxe47ZveALMVHpxrtAglLN2hO5LoW CBP66JQD8bmYD/k0X4zJNSErvIsfxYw89HIAmoTzLoeuRt3+OKTTMcCq5RRzWPFMgufO Cj4Q== X-Forwarded-Encrypted: i=1; AFNElJ9/tW/IrFlW5l2pEcAmuAJz6/IxP0AccChDLfoU4u4y5xIqLDZW/LHJKJG9A4VNA9FQaYoPIL1jmTx+JDo=@vger.kernel.org X-Gm-Message-State: AOJu0YykcViH1AlXAwO7W88T+bzXmiqf4Xsdv+nn2rB5AOMVlTvku2A5 BtIqrumyeSajov6IM1tDMgb6idMu/NKsYJQcEqv5CQEU53IVE8u2SBDA X-Gm-Gg: AeBDieuf/oOY8P8UKIzZj4RzX31CwHY2WNo8ZjD81M0MMToziG6tesikU6oBehq+mPs ePLlmPozkvxJ9le1JSoNR3cOC0lZ1LbMSktMUa5HqJO4ma0UMSy+6Rlk+H/8x97VkuQ/ih1vF7O CnoqzxrHLImMSE+C0zYodjTSre25m2pl5lWhztGZX91Lt+ZifM4SGebbacmJXvgQbkonzVFTXcm OF2Dj3BRF3hsdvbmjIU2Boz2EwKxKu7aw8DWC6FB2koz5Q2jA6XX1wmHllHhL0Te/xNSrLIFvy3 yPlJmtYs/b0+yoDMSQyzR6saAdJCBg5W1PAMsFTRkUepffCSdnGAgLdot4TisFIVUYpnv5X0EMh 0QuIKqSjUMVmrYNQRm9J+qZYdKS9HOHR2JfG3tEqwz+zXW5DC9xFguugsuaArLcT0rPJ8BRoxkz y26ilAYhXnaggycL5SCIC2TWSU6FMy/1GUoC8zrwctlrK5TjHwQJ81suk2nz/AoeCDK58Jmu3Gk i/v0E4dkUiBZ3WWowRrNI0E0R4Y6cPDksPgayg4I3IFvEsy X-Received: by 2002:a05:620a:4512:b0:8c6:ff8f:58af with SMTP id af79cd13be357-904d69d8ee6mr757125085a.51.1778098492535; Wed, 06 May 2026 13:14:52 -0700 (PDT) Received: from ?IPV6:2600:4040:93b4:e600:a22c:878f:7c1a:1976? ([2600:4040:93b4:e600:a22c:878f:7c1a:1976]) by smtp.gmail.com with ESMTPSA id af79cd13be357-8fc2c91b976sm1768658185a.39.2026.05.06.13.14.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 06 May 2026 13:14:52 -0700 (PDT) Message-ID: <9e691c63-ef7d-4e35-8cc4-77f83a16c970@gmail.com> Date: Wed, 6 May 2026 16:14:51 -0400 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH net 3/3] netdevsim: psp: rcu protect psp_dev reference To: Willem de Bruijn , Jakub Kicinski , Andrew Lunn , "David S. Miller" , Eric Dumazet , Paolo Abeni , Willem de Bruijn Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org References: <20260505-psd-rcu-v1-0-a8f69ec1ab96@gmail.com> <20260505-psd-rcu-v1-3-a8f69ec1ab96@gmail.com> Content-Language: en-US From: Daniel Zahka In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 5/6/26 3:34 PM, Willem de Bruijn wrote: > Daniel Zahka wrote >> static ssize_t >> @@ -228,16 +237,23 @@ nsim_psp_rereg_write(struct file *file, const char __user *data, size_t count, >> loff_t *ppos) >> { >> struct netdevsim *ns = file->private_data; >> - int err; >> + struct psp_dev *psd; >> + ssize_t ret; >> >> mutex_lock(&ns->psp.rereg_lock); >> - __nsim_psp_uninit(ns); >> + __nsim_psp_uninit(ns, false); >> + >> + psd = psp_dev_create(ns->netdev, &nsim_psp_ops, &nsim_psp_caps, ns); >> + if (IS_ERR(psd)) { >> + ret = PTR_ERR(psd); >> + goto out; >> + } > Do you want to create the new device first and only delete the old > state if that succeeds? To avoid a netdevsim in state without dev. > >> >> - ns->psp.dev = psp_dev_create(ns->netdev, &nsim_psp_ops, >> - &nsim_psp_caps, ns); >> - err = PTR_ERR_OR_ZERO(ns->psp.dev); >> + rcu_assign_pointer(ns->psp.dev, psd); >> + ret = count; >> +out: >> mutex_unlock(&ns->psp.rereg_lock); >> - return err ?: count; >> + return ret; >> } >> Unfortunately, the way we have psp_dev_unregister() written, it would clear out the main_netdev->psp_dev field from the second psp_dev_create() call. I don't believe there is use case to do this in a real driver, so I'm not sure we need to change how the create/unregister paths work.