From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965002AbdBQXyH (ORCPT ); Fri, 17 Feb 2017 18:54:07 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:35971 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S964929AbdBQXyA (ORCPT ); Fri, 17 Feb 2017 18:54:00 -0500 Subject: Re: e1000_netpoll() , BUG: sleeping function called from invalid context To: Cong Wang References: <0f5cc059-3db3-f0ae-77a5-0a0c872e4874@gmail.com> <56df0620-6042-50bb-a929-2e8043369554@gmail.com> Cc: lkml , Thomas Gleixner , "David S. Miller" , "Peter Zijlstra (Intel)" From: Gabriel C Message-ID: Date: Sat, 18 Feb 2017 00:53:12 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 18.02.2017 00:44, Cong Wang wrote: > On Fri, Feb 17, 2017 at 3:38 PM, Gabriel C wrote: >> >> My card seems to use the e1000e driver which is buit-in.. >> >> Anyway here an objdump -x : >> >> http://ftp.frugalware.org/pub/other/people/crazy/kernel/t/objdump-x_e1000.ko.txt >> > > Found disable_hardirq() but not disable_irq(). > > Are you sure the kernel warning was emitted by this binary rather than > some old one? > Yes , I use an clean build , remove any other files in /boot && /lib/modules before installing the new build kernel. I've asked Thomas before I send this to lkml and to you and he said : .. It's a real issue. netconsole calls disable_irq() which might sleep from an interrupt and preemption disabled context. > [85362.132801] __might_sleep+0x6b/0x80 > [85362.132803] synchronize_irq+0x33/0x90 > [85362.132805] ? __irq_put_desc_unlock+0x19/0x40 > [85362.132807] ? __disable_irq_nosync+0x4e/0x60 > [85362.132808] disable_irq+0x17/0x20 > [85362.132810] e1000_netpoll+0x3d/0x110 Though, what's weird is that the e1000_netpoll() does not longer call disable_irq(). It calls disable_hardirq(). That got changed in commit 3111912971251 which got into Linus tree during the 4.10 merge window. So it is in 4.10-rc8. Confused. ...