From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755524AbcKJLoq (ORCPT ); Thu, 10 Nov 2016 06:44:46 -0500 Received: from merlin.infradead.org ([205.233.59.134]:53250 "EHLO merlin.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755362AbcKJLoo (ORCPT ); Thu, 10 Nov 2016 06:44:44 -0500 Date: Thu, 10 Nov 2016 12:44:45 +0100 From: Peter Zijlstra To: Thomas Gleixner Cc: Lu Baolu , Greg Kroah-Hartman , Mathias Nyman , Ingo Molnar , linux-usb@vger.kernel.org, x86@kernel.org, LKML Subject: Re: [PATCH v4 1/4] usb: dbc: early driver for xhci debug capability Message-ID: <20161110114445.GW3142@twins.programming.kicks-ass.net> References: <1477976354-13291-1-git-send-email-baolu.lu@linux.intel.com> <1477976354-13291-2-git-send-email-baolu.lu@linux.intel.com> <5823CB63.7090603@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23.1 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 10, 2016 at 09:56:41AM +0100, Thomas Gleixner wrote: > On Thu, 10 Nov 2016, Lu Baolu wrote: > > This seems to be a common issue for all early printk drivers. > > No. The other early printk drivers like serial do not have that problem as > they simply do: > > while (*buf) { > while (inb(UART) & TX_BUSY) > cpu_relax(); > outb(*buf++, UART); > } Right, which is why actual UARTs rule. If only laptops still had pinouts for them life would be sooooo much better. Ideally the USB debug port would be a virtual UART and its interface as simple and robust. > The wait for the UART to become ready is independent of the context as it > solely depends on the hardware. > > As a result you can see the output from irq/nmi intermingled with the one > from thread context, but that's the only problem they have. > > The only thing you can do to make this work is to prevent printing in NMI > context: > > write() > { > if (in_nmi()) > return; > > raw_spinlock_irqsave(&lock, flags); > .... > > That fully serializes the writes and just ignores NMI context printks. Not > optimal, but I fear that's all you can do. I would also suggest telling the hardware people they have designed something near the brink of useless. If you cannot do random exception context debugging (#DB, #NMI, #MCE etc..) then there's a whole host of problems that simply cannot be debugged. Also note that kdb runs from NMI context, so you'll not be able to support that either.