From owner-freebsd-drivers@freebsd.org Tue Aug 18 18:41:41 2015 Return-Path: Delivered-To: freebsd-drivers@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 51A939BDC9A for ; Tue, 18 Aug 2015 18:41:41 +0000 (UTC) (envelope-from leonardofogel@yahoo.com.br) Received: from nm6-vm4.bullet.mail.ne1.yahoo.com (nm6-vm4.bullet.mail.ne1.yahoo.com [98.138.91.166]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 15F731697 for ; Tue, 18 Aug 2015 18:41:40 +0000 (UTC) (envelope-from leonardofogel@yahoo.com.br) Received: from [98.138.226.176] by nm6.bullet.mail.ne1.yahoo.com with NNFMP; 18 Aug 2015 18:41:34 -0000 Received: from [98.138.226.162] by tm11.bullet.mail.ne1.yahoo.com with NNFMP; 18 Aug 2015 18:41:34 -0000 Received: from [127.0.0.1] by omp1063.mail.ne1.yahoo.com with NNFMP; 18 Aug 2015 18:41:34 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 161212.80223.bm@omp1063.mail.ne1.yahoo.com Received: (qmail 16368 invoked by uid 60001); 18 Aug 2015 18:41:34 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com.br; s=s1024; t=1439923294; bh=HhmMvwaWKOPF5gWlKe9pxRoEMCX7diLeEmynHmhqTiA=; h=Message-ID:Date:From:Subject:To:MIME-Version:Content-Type:Content-Transfer-Encoding; b=yJg83U+soIhc2PbeTq4bkROFpm9jg3xYGBPjYEgo8xh/ZoXDiDGGX4++XIwLKa0D6DA7NlCx9vC9FMKYlK+8slbCcEfjAqNFMDgC9r11xL8TUb6W5PqXvgaZ3FcwfobepZG0Ff+S7/rSdaiSZ7YejteFfSZlqei7wl/I31OfQ6E= X-YMail-OSG: p5JB_VwVM1mSADIEO01NcHADnhfBE5z7mJG0N1ZSPuN7kET ESRO2txi6.2Swb_jdXTiUZFk1ceeioWxOLl.kICJQj7y4l.MB..GjS.SlgnQ eoTLIE5q3SVvbrjk_TT0c9ZgvxiQb3dOsI98wggRQGj6Sx_a0tvAr_oVHEEb 5Gz1r2nzNm9MQ6R_zouUZfUpW6hsH7Yq1kolm3J_O8zI6YXfiCPM5ODuNMT_ LeCYJ3DA8lP3p8bzTyQ7pVn5Dq7T1FCu2k1jt8bxaV8rYHNou5rtnA03wxjf c6PPcIiphlgOJLIyeIfrd5iCY6UYM6cZBy63UdD3JVXijvnmtMGLFwhrFw6C lXV8pirFfrM2JKC0ZhYCfW64KfqBjnXCWEzYozvX0CxjMO8vw_6CZziBlTKn .RBqZk9jRdvv1mSBot6sW1C_0lnJxmRtkVfjpckXpBGjVpue_ysJk4iJu5i1 IcUrwTJVH97Jiv09wG_2Kd58HKRy8Z79NiXDp8_xLTxlOO4IbFsf3HwSKWd_ Q8e2zQUSY1QzR1rGycvWnclgsMI1GcrcdKyLM3yxAYYZtryviZzizDPzFuXq TX2a6OvMxhQINXzBpohlFb9te5dc1 Received: from [186.228.53.250] by web120801.mail.ne1.yahoo.com via HTTP; Tue, 18 Aug 2015 11:41:34 PDT X-Rocket-MIMEInfo: 002.001, SGkuDQpUaGUgZm9sbG93aW5nIGNvZGUgaXMgYW4gZXhlcnB0IGZyb20gdGhlIEZyZWVCU0QgQXJjaGl0ZWN0dXJlIEhhbmRib29rLCBjaGFwdGVyIDExLjEuMS4gU2FtcGxlIERyaXZlciBTb3VyY2UuIEkndmUgaW5jbHVkZWQgbGFiZWxzIGkxLCBpMiwgaTMuDQoNCiAgIGludA0KICAgbXlwY2lfb3BlbihzdHJ1Y3QgY2RldiAqZGV2LCBpbnQgb2ZsYWdzLCBpbnQgZGV2dHlwZSwgc3RydWN0IHRocmVhZCAqdGQpDQogICB7DQogICAgICAgICAgIHN0cnVjdCBteXBjaV9zb2Z0YyAqc2M7DQoNCiAgICAgICAgICABMAEBAQE- X-Mailer: YahooMailBasic/610 YahooMailWebService/0.8.203.812 Message-ID: <1439923294.98963.YahooMailBasic@web120801.mail.ne1.yahoo.com> Date: Tue, 18 Aug 2015 11:41:34 -0700 From: Leonardo Fogel Subject: Race conditions To: freebsd-drivers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-BeenThere: freebsd-drivers@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Writing device drivers for FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 18 Aug 2015 18:41:41 -0000 Hi. The following code is an exerpt from the FreeBSD Architecture Handbook, cha= pter 11.1.1. Sample Driver Source. I've included labels i1, i2, i3. int mypci_open(struct cdev *dev, int oflags, int devtype, struct thread *td) { struct mypci_softc *sc; /* Look up our softc. */ i1: sc =3D dev->si_drv1; device_printf(sc->my_dev, "Opened successfully.\n"); return (0); } static int mypci_attach(device_t dev) { struct mypci_softc *sc; ... i2: sc->my_cdev =3D make_dev(&mypci_cdevsw, device_get_unit(dev), UID_ROOT, GID_WHEEL, 0600, "mypci%u", device_get_unit(dev)); i3: sc->my_cdev->si_drv1 =3D sc; printf("Mypci device loaded.\n"); return (0); } As I understand it, as soon as instruction at label i2 completes, there is = a rare possibility that another thread opens the device file and executes t= he instruction at i1, before the instruction at i3 is executed. Is it corre= ct? How could one fix it? Thank you for your time. Leonardo