Received: by 10.192.165.156 with SMTP id m28csp879987imm; Tue, 17 Apr 2018 23:17:52 -0700 (PDT) X-Google-Smtp-Source: AIpwx49gM/nwBQVvduvD6wQvZsTPuxKg/ggfThSc03+6LDkF+OKJqeoL1ylofwgAC0g1y+/A++aN X-Received: by 10.99.132.198 with SMTP id k189mr701835pgd.298.1524032272061; Tue, 17 Apr 2018 23:17:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524032272; cv=none; d=google.com; s=arc-20160816; b=0QIsrq6esSqQiqjL8sh38sQ+Am+gWMrYQma6H1xq73ddWNF5I9PiZxiaPwAF9o5BPv ULk8xWERqr2KZGwOuQEFq7g1iAtRImiLftvCjubD8htDxWxuZLxwQRRcHslm6Yum26+F Yxd7WhUXPspGha4THB9Ip6thgvKV0ZLG4n+UY6xCX+ql2lDofS55hL7Cm+nnpNWW+jYK /pj4JuuNvl2Q3EpIjuRsAf097kX4PV4HtuF85RbPPdvMCQwbA9xM4DcDBBRipXCq2+/O azpf2I0Ps2JR343Sfw4W4/IjaFrV0U0Zik9a61Ob3E8Fa6zFnL78GgM0kV5uAU4aiqYb 0VPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=aV1JKWBLPgUFllIcGuY1IiWiapu90Rg9m6bU81Y/93M=; b=WSAOiv0K6UnI7Lugcdqe1dHR3ZRysJoTDDdCcfageWokbWCS7qDGe+abFtuRYr5YKa ZOR9GzLZbMNwoIZHs4/NCVVkMCvy1scmTocvRurQb3cx2kw3kULG14HgwE5SHA9M0Msp 3gfc4ZccMn9euFqzKH8m3OfLJsvuOXWMBmObNN2cSKojuwrMp3GNjB5Nbmj9eUQHl5cr ijkcCX4R3ZCwRvRZ4vmH7P9TrZnJOqT+s0nVqCPyUxHip497cuu5e4M9MGECHthjppmu bu452R7/Knqao8wE9ggL/BZLvMEdtowABZ65WWob9R2+vylSaHQpzlYf2rP64sNEEyjY cpDA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y96-v6si599611plh.370.2018.04.17.23.17.25; Tue, 17 Apr 2018 23:17:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752629AbeDRGQC (ORCPT + 99 others); Wed, 18 Apr 2018 02:16:02 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:55384 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752135AbeDRGQA (ORCPT ); Wed, 18 Apr 2018 02:16:00 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id E9A617B4A7; Wed, 18 Apr 2018 06:15:59 +0000 (UTC) Received: from dhcp-128-65.nay.redhat.com (ovpn-12-86.pek2.redhat.com [10.72.12.86]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 93C872026DFD; Wed, 18 Apr 2018 06:15:53 +0000 (UTC) Date: Wed, 18 Apr 2018 14:15:46 +0800 From: Dave Young To: Rahul Lakkireddy Cc: netdev@vger.kernel.org, kexec@lists.infradead.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, indranil@chelsio.com, nirranjan@chelsio.com, stephen@networkplumber.org, ganeshgr@chelsio.com, ebiederm@xmission.com, akpm@linux-foundation.org, torvalds@linux-foundation.org, davem@davemloft.net, viro@zeniv.linux.org.uk Subject: Re: [PATCH net-next v4 0/3] kernel: add support to collect hardware logs in crash recovery kernel Message-ID: <20180418061546.GA4551@dhcp-128-65.nay.redhat.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.1 (2017-09-22) X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Wed, 18 Apr 2018 06:16:00 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.1]); Wed, 18 Apr 2018 06:16:00 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'dyoung@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Rahul, On 04/17/18 at 01:14pm, Rahul Lakkireddy wrote: > On production servers running variety of workloads over time, kernel > panic can happen sporadically after days or even months. It is > important to collect as much debug logs as possible to root cause > and fix the problem, that may not be easy to reproduce. Snapshot of > underlying hardware/firmware state (like register dump, firmware > logs, adapter memory, etc.), at the time of kernel panic will be very > helpful while debugging the culprit device driver. > > This series of patches add new generic framework that enable device > drivers to collect device specific snapshot of the hardware/firmware > state of the underlying device in the crash recovery kernel. In crash > recovery kernel, the collected logs are added as elf notes to > /proc/vmcore, which is copied by user space scripts for post-analysis. > > The sequence of actions done by device drivers to append their device > specific hardware/firmware logs to /proc/vmcore are as follows: > > 1. During probe (before hardware is initialized), device drivers > register to the vmcore module (via vmcore_add_device_dump()), with > callback function, along with buffer size and log name needed for > firmware/hardware log collection. I assumed the elf notes info should be prepared while kexec_[file_]load phase. But I did not read the old comment, not sure if it has been discussed or not. If do this in 2nd kernel a question is driver can be loaded later than vmcore init. How to guarantee the function works if vmcore reading happens before the driver is loaded? Also it is possible that kdump initramfs does not contains the driver module. Am I missing something? > > 2. vmcore module allocates the buffer with requested size. It adds > an elf note and invokes the device driver's registered callback > function. > > 3. Device driver collects all hardware/firmware logs into the buffer > and returns control back to vmcore module. > > The device specific hardware/firmware logs can be seen as elf notes: > > # readelf -n /proc/vmcore > > Displaying notes found at file offset 0x00001000 with length 0x04003288: > Owner Data size Description > VMCOREDD_cxgb4_0000:02:00.4 0x02000fd8 Unknown note type: (0x00000700) > VMCOREDD_cxgb4_0000:04:00.4 0x02000fd8 Unknown note type: (0x00000700) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > CORE 0x00000150 NT_PRSTATUS (prstatus structure) > VMCOREINFO 0x0000074f Unknown note type: (0x00000000) > > Patch 1 adds API to vmcore module to allow drivers to register callback > to collect the device specific hardware/firmware logs. The logs will > be added to /proc/vmcore as elf notes. > > Patch 2 updates read and mmap logic to append device specific hardware/ > firmware logs as elf notes. > > Patch 3 shows a cxgb4 driver example using the API to collect > hardware/firmware logs in crash recovery kernel, before hardware is > initialized. > > Thanks, > Rahul > > RFC v1: https://lkml.org/lkml/2018/3/2/542 > RFC v2: https://lkml.org/lkml/2018/3/16/326 > > --- > v4: > - Made __vmcore_add_device_dump() static. > - Moved compile check to define vmcore_add_device_dump() to > crash_dump.h to fix compilation when vmcore.c is not compiled in. > - Convert ---help--- to help in Kconfig as indicated by checkpatch. > - Rebased to tip. > > v3: > - Dropped sysfs crashdd module. > - Exported dumps as elf notes. Suggested by Eric Biederman > . Added as patch 2 in this version. > - Added CONFIG_PROC_VMCORE_DEVICE_DUMP to allow configuring device > dump support. > - Moved logic related to adding dumps from crashdd to vmcore module. > - Rename all crashdd* to vmcoredd*. > - Updated comments. > > v2: > - Added ABI Documentation for crashdd. > - Directly use octal permission instead of macro. > > Changes since rfc v2: > - Moved exporting crashdd from procfs to sysfs. Suggested by > Stephen Hemminger > - Moved code from fs/proc/crashdd.c to fs/crashdd/ directory. > - Replaced all proc API with sysfs API and updated comments. > - Calling driver callback before creating the binary file under > crashdd sysfs. > - Changed binary dump file permission from S_IRUSR to S_IRUGO. > - Changed module name from CRASH_DRIVER_DUMP to CRASH_DEVICE_DUMP. > > rfc v2: > - Collecting logs in 2nd kernel instead of during kernel panic. > Suggested by Eric Biederman . > - Added new crashdd module that exports /proc/crashdd/ containing > driver's registered hardware/firmware logs in patch 1. > - Replaced the API to allow drivers to register their hardware/firmware > log collect routine in crash recovery kernel in patch 1. > - Updated patch 2 to use the new API in patch 1. > > Rahul Lakkireddy (3): > vmcore: add API to collect hardware dump in second kernel > vmcore: append device dumps to vmcore as elf notes > cxgb4: collect hardware dump in second kernel > > drivers/net/ethernet/chelsio/cxgb4/cxgb4.h | 4 + > drivers/net/ethernet/chelsio/cxgb4/cxgb4_cudbg.c | 25 ++ > drivers/net/ethernet/chelsio/cxgb4/cxgb4_cudbg.h | 3 + > drivers/net/ethernet/chelsio/cxgb4/cxgb4_main.c | 10 + > fs/proc/Kconfig | 10 + > fs/proc/vmcore.c | 399 ++++++++++++++++++++++- > include/linux/crash_core.h | 4 + > include/linux/crash_dump.h | 17 + > include/linux/kcore.h | 6 + > include/uapi/linux/elf.h | 1 + > 10 files changed, 466 insertions(+), 13 deletions(-) > > -- > 2.14.1 > > > _______________________________________________ > kexec mailing list > kexec@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/kexec Thanks Dave