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 X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0B7EC43381 for ; Wed, 27 Mar 2019 10:57:46 +0000 (UTC) Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1A1BD20651 for ; Wed, 27 Mar 2019 10:57:45 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1A1BD20651 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=secunet.com Authentication-Results: mail.kernel.org; spf=fail smtp.mailfrom=kernelnewbies-bounces@kernelnewbies.org Received: from localhost ([::1] helo=shelob.surriel.com) by shelob.surriel.com with esmtp (Exim 4.91) (envelope-from ) id 1h96Es-0004gH-E4; Wed, 27 Mar 2019 06:56:58 -0400 Received: from a.mx.secunet.com ([62.96.220.36]) by shelob.surriel.com with esmtps (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.91) (envelope-from ) id 1h96Ep-0004gB-KH for kernelnewbies@kernelnewbies.org; Wed, 27 Mar 2019 06:56:55 -0400 Received: from localhost (localhost [127.0.0.1]) by a.mx.secunet.com (Postfix) with ESMTP id A5B4E20268 for ; Wed, 27 Mar 2019 11:56:54 +0100 (CET) X-Virus-Scanned: by secunet Received: from a.mx.secunet.com ([127.0.0.1]) by localhost (a.mx.secunet.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2ANmCogxe9yl for ; Wed, 27 Mar 2019 11:56:54 +0100 (CET) Received: from mail-essen-01.secunet.de (mail-essen-01.secunet.de [10.53.40.204]) (using TLSv1 with cipher ECDHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by a.mx.secunet.com (Postfix) with ESMTPS id 2934A20262 for ; Wed, 27 Mar 2019 11:56:54 +0100 (CET) Received: from [10.182.7.62] (10.182.7.62) by mail-essen-01.secunet.de (10.53.40.204) with Microsoft SMTP Server (TLS) id 14.3.439.0; Wed, 27 Mar 2019 11:56:53 +0100 From: Martin Christian Subject: Unexpected scheduling with mutexes To: Openpgp: preference=signencrypt Autocrypt: addr=martin.christian@secunet.com; prefer-encrypt=mutual; keydata= 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 7XZ1NLfDSFwlysJFxJtzhRuxZQ== Message-ID: Date: Wed, 27 Mar 2019 11:56:51 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 X-EXCLAIMER-MD-CONFIG: 2c86f778-e09b-4440-8b15-867914633a10 X-BeenThere: kernelnewbies@kernelnewbies.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Learn about the Linux kernel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: multipart/mixed; boundary="===============7904324377615200607==" Errors-To: kernelnewbies-bounces@kernelnewbies.org --===============7904324377615200607== Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="klBLI9m0gNWa3vxxCXPrWFUoZxo3FMoBv" --klBLI9m0gNWa3vxxCXPrWFUoZxo3FMoBv Content-Type: multipart/mixed; boundary="mkNNw4qtFCzFtw3KGLMbmhyK7NrDbJVQ8"; protected-headers="v1" From: Martin Christian To: kernelnewbies@kernelnewbies.org Message-ID: Subject: Unexpected scheduling with mutexes --mkNNw4qtFCzFtw3KGLMbmhyK7NrDbJVQ8 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: quoted-printable Hi, I've written a linux kernel module for an USB device. The USB driver provides 2 read-only character devices, which can be opened only exclusively by one process: - `/dev/cdev_a` - `/dev/cdev_b` The USB device can only handle one request at a time. The test setup is a follows: - Processes A reads data from 1st device: `dd if=3D/dev/cdev_a of=3D/tmp= /a bs=3DX` - Processes B reads data from 2nd device: `dd if=3D/dev/cdev_b of=3D/tmp= /b bs=3DX` - Process A and B run in parallel - After 10 seconds both processes are killed and size of both output files is compared. For certain values of `X` there is a significant difference in size between the two files, which I don't expect. A read call to the driver does the following: 1. `mutex_lock_interruptible(iolock)` 2. `usb_bulk_msg(dev, pipe, buf, X, timeout)` 3. `mutex_unlock(iolock)` 4. `copy_to_user(buf)` What I would expect is the following: 1. Proc A: `mutex_lock_interruptible(iolock)` 2. Proc A: `usb_bulk_msg(dev, pipe, buf, X, timeout)` 3. Scheduling: A -> B 4. Proc B: `mutex_lock_interruptible(iolock)` -> blocks 5. Scheduling: B -> A 6. Proc A: `mutex_unlock(iolock)` 7. Proc A: `copy_to_user(buf)` 8. Proc A: `mutex_lock_interruptible(iolock)` -> blocks 9. Scheduling: A -> B 10. Proc B: `usb_bulk_msg(dev, pipe, buf, X, timeout)` But what I see with ftrace is that in step 8, process A still continues. And it seems that for certain values of X the time inside the critical region is a multiple of the time slice, so that process B always gets the time slice when the critical region is blocked. What would be a best practise solution for this? I was thinking of calling `schedule()` each time after copying to user space or playing with nice values or using wait_queues? --=20 Dipl.-Inf. Martin Christian Senior Berater Entwicklung Hardware secunet Security Networks AG Tel.: +49 201 5454-3612, Fax +49 201 5454-1323 E-Mail: martin.christian@secunet.com Ammonstra=C3=9Fe 74, 01067 Dresden www.secunet.com --mkNNw4qtFCzFtw3KGLMbmhyK7NrDbJVQ8-- --klBLI9m0gNWa3vxxCXPrWFUoZxo3FMoBv Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEEcVMZ0aBmilTEqb/wI7bvPAzZnFYFAlybVvQACgkQI7bvPAzZ nFbTFhAArH5vymeqIGRsc6GHehIJDuOTy7qQzmz2nJ7/D3EfCb9g1J+6bfGSnOKs 2rjPhln+eUEPOXmnErMKwXXpuYXRccJUgTnmrdYRthJOasQholA0SGuwCD8WGqqt fn90N1Y0PG4OedNaMvSubXqBQqt+rhMHSk850NZjIOxc3MW8NH058S9Wq90PZMD7 APrGPwWhSVjBS2Rguqr6JXhdkqBhxuyconevSXa2VmBNUw/8p0fqze/jOJb6ZoIm f14yhY+FhLzOsyVChd6fr9QkQkQdIv2ZUO25SK6MZ4rn28NqlYZ3qlEyMXj+6HcF PKJllTU1jfTgkfeXM8ydPNPNQytTqdQ9IyKpKJdy8hdqLzvcaetOA6ymCAJev6QW P8FlyLCN9Ovh0ZoNrn6oMPiGACCUmzOZP1IAFVDycbMalvFcl4YlP/46zqx7IPRN AjVgHbtVXDrPe7sbBt2ZCYRnGL4s4Sb/F3FuHf6Rt8E3Q3CQh9366RtyVhy8trj0 VNkjkwTzmLolE+ne+w5S7GGZAbap+8bMAtx4uqgN4IT5YyvWHK7kZc1mS/Rf51ht ZX3Idx2L2s7wywvDjUmpxvwqDeQwwZBH0x+/nCdsX3h5YP+E+CAGPE/xQ/UevFDu BUZbUusxgjcEq6iDDT3g3PmpoV5IxqijCJbHHkci0r6BPhk0IZ4= =9wSi -----END PGP SIGNATURE----- --klBLI9m0gNWa3vxxCXPrWFUoZxo3FMoBv-- --===============7904324377615200607== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies --===============7904324377615200607==--