Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Thu, 6 Dec 2001 00:34:32 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Thu, 6 Dec 2001 00:34:22 -0500 Received: from saturn.cs.uml.edu ([129.63.8.2]:50703 "EHLO saturn.cs.uml.edu") by vger.kernel.org with ESMTP id ; Thu, 6 Dec 2001 00:34:10 -0500 From: "Albert D. Cahalan" Message-Id: <200112060534.fB65Y1c335090@saturn.cs.uml.edu> Subject: Re: USB audio w/ "D" state To: linux-usb-devel@lists.sourceforge.net Date: Thu, 6 Dec 2001 00:34:01 -0500 (EST) Cc: linux-kernel@vger.kernel.org, sailer@ife.ee.ethz.ch, alan@lxorguk.ukuu.org.uk, linuxppc-dev@lists.linuxppc.org In-Reply-To: <200112050728.fB57SDO230728@saturn.cs.uml.edu> from "Albert D. Cahalan" at Dec 05, 2001 02:28:13 AM X-Mailer: ELM [version 2.5 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org > I did "cat /bin/sh >> /dev/audio" and hit ^C to stop the noise. > The "cat" process gets stuck in "D" state with the WCHAN indicating > that the process is stuck 1/3 the way through the usbout_stop() > function. > > hardware: Mac Cube and the normal spherical speakers (OHCI USB) > kernel: plain 2.4.16 from www.kernel.org > compiler: gcc version 2.95.4 20011006 (Debian prerelease) > > In case PPC assembly is useful to somebody, I've marked the instruction > where the process gets stuck. The surrounding "bl" instructions look > like infinite loops to me, but maybe I'm reading this wrong. The assembly > is from: objdump -dl --start-address=0x1728 audio.o I added --reloc to that. Since I had to copy by hand, I put the branch targets on the right. I marked the WCHAN with '*' chars. For those not used to PowerPC, "bl foo" is a function call to foo(). So here is a bit of the assembly: 1790: 38 60 00 01 li r3,1 1794: 48 00 00 01 bl schedule_timeout *** 1798: ***** 7f a3 eb 78 *** mr **** r3,r29 **************** 179c: 48 00 00 01 bl __save_flags_ptr 17a0: 48 00 00 01 bl __cli ...and here is the C code for that: schedule_timeout(1); spin_lock_irqsave(&as->lock, flags); The full disassembly: usbout_stop(): 1728: 94 21 ff d0 stwu r1,-48(r1) 172c: 7c 08 02 a6 mflr r0 1730: 7d 80 00 26 mfcr r12 1734: bf 81 00 20 stmw r28,32(r1) 1738: 90 01 00 34 stw r0,52(r1) 173c: 91 81 00 1c stw r12,28(r1) 1740: 3b e3 03 98 addi r31,r3,920 1744: 3b c0 00 01 li r30,1 1748: 3b a1 00 08 addi r29,r1,8 174c: 7f a3 eb 78 mr r3,r29 1750: 48 00 00 01 bl __save_flags_ptr 1754: 48 00 00 01 bl __cli 1758: 83 9f 00 24 lwz r28,36(r31) 175c: 57 80 07 34 rlwinm r0,r28,0,28,26 1760: 90 1f 00 24 stw r0,36(r31) 1764: 80 61 00 08 lwz r3,8(r1) 1768: 48 00 00 01 bl __restore_flags 176c: 73 80 00 0f andi. r0,r28,15 1770: 41 82 00 98 beq 1808 1774: 31 3e ff ff addic r9,r30,-1 1778: 7d 29 49 10 subfe r9,r9,r9 177c: 38 09 00 01 addi r0,r9,1 1780: 55 29 07 bc rlwinm r9,r9,0,30,30 1784: 2e 1e 00 00 cmpwi cr4,r30,0 1788: 7d 29 03 78 or r9,r9,r0 178c: 91 22 00 00 stw r9,0(r2) 1790: 38 60 00 01 li r3,1 1794: 48 00 00 01 bl schedule_timeout *** 1798: ***** 7f a3 eb 78 *** mr **** r3,r29 **************** 179c: 48 00 00 01 bl __save_flags_ptr 17a0: 48 00 00 01 bl __cli 17a4: 83 9f 00 24 lwz r28,36(r31) 17a8: 80 61 00 08 lwz r3,8(r1) 17ac: 48 00 00 01 bl __restore_flags 17b0: 41 92 ff bc beq cr4,176c 17b4: 80 02 00 08 lwz r0,8(r2) 17b8: 2c 00 00 00 cmpwi r0,0 17bc: 41 82 ff b0 beq 176c 17c0: 73 80 00 01 andi. r0,r28,1 17c4: 41 82 00 0c beq 17d0 17c8: 38 7f 00 28 addi r3,r31,40 17cc: 48 00 00 01 bl usb_unlink_urb 17d0: 73 80 00 02 andi. r0,r28,2 17d4: 41 82 00 0c beq 17e0 17d8: 38 7f 00 cc addi r3,r31,204 17dc: 48 00 00 01 bl usb_unlink_urb 17e0: 73 80 00 04 andi. r0,r28,4 17e4: 41 82 00 0c beq 17f0 17e8: 38 7f 01 70 addi r3,r31,368 17ec: 48 00 00 01 bl usb_unlink_urb 17f0: 73 80 00 08 andi. r0,r28,8 17f4: 41 82 00 0c beq 1800 17f8: 38 7f 02 14 addi r3,r31,532 17fc: 48 00 00 01 bl usb_unlink_urb 1800: 3b c0 00 00 li r30,0 1804: 4b ff ff 68 b 176c 1808: 3b a0 00 00 li r29,0 180c: 93 a2 00 00 stw r29,0(r2) 1810: 80 7f 00 4c lwz r3,76(r31) 1814: 2c 03 00 00 cmpwi r3,0 1818: 41 82 00 08 beq 1820 181c: 48 00 00 01 bl kfree 1820: 80 7f 00 f0 lwz r3,240(r31) 1824: 2c 03 00 00 cmpwi r3,0 1828: 41 82 00 08 beq 1830 182c: 48 00 00 01 bl kfree 1830: 80 7f 01 94 lwz r3,404(r31) 1834: 2c 03 00 00 cmpwi r3,0 1838: 41 82 00 08 beq 1840 183c: 48 00 00 01 bl kfree 1840: 80 7f 02 38 lwz r3,568(r31) 1844: 2c 03 00 00 cmpwi r3,0 1848: 41 82 00 08 beq 1850 184c: 48 00 00 01 bl kfree 1850: 93 bf 00 4c stw r29,76(r31) 1854: 93 bf 02 38 stw r29,568(r31) 1858: 93 bf 01 94 stw r29,404(r31) 185c: 93 bf 00 f0 stw r29,240(r31) 1860: 80 01 00 34 lwz r0,52(r1) 1864: 81 81 00 1c lwz r12,28(r1) 1868: 7c 08 03 a6 mtlr r0 186c: bb 81 00 20 lmw r28,32(r1) 1870: 7d 80 81 20 mtcrf 8,r12 1874: 38 21 00 30 addi r1,r1,48 1878: 4e 80 00 20 blr - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/