[{"id":1759980,"web_url":"http://patchwork.ozlabs.org/comment/1759980/","msgid":"<20170830091757.GD24565@stefanha-x1.localdomain>","list_archive_url":null,"date":"2017-08-30T09:17:57","subject":"Re: [Qemu-devel] [Qemu-block] [PATCH v2 8/9] AHCI: pretty-print FIS\n\tto buffer instead of stderr","submitter":{"id":2747,"url":"http://patchwork.ozlabs.org/api/people/2747/","name":"Stefan Hajnoczi","email":"stefanha@gmail.com"},"content":"On Tue, Aug 29, 2017 at 04:49:33PM -0400, John Snow wrote:\n> The current FIS printing routines dump the FIS to screen. adjust this\n> such that it dumps to buffer instead, then use this ability to have\n> FIS dump mechanisms via trace-events instead of compiled defines.\n> \n> Signed-off-by: John Snow <jsnow@redhat.com>\n> ---\n>  hw/ide/ahci.c       | 54 +++++++++++++++++++++++++++++++++++++++++++----------\n>  hw/ide/trace-events |  4 ++++\n>  2 files changed, 48 insertions(+), 10 deletions(-)\n> \n> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c\n> index a0a4dd6..2e75f9b 100644\n> --- a/hw/ide/ahci.c\n> +++ b/hw/ide/ahci.c\n> @@ -644,20 +644,45 @@ static void ahci_reset_port(AHCIState *s, int port)\n>      ahci_init_d2h(d);\n>  }\n>  \n> -static void debug_print_fis(uint8_t *fis, int cmd_len)\n> +/* Buffer pretty output based on a raw FIS structure. */\n> +static void ahci_pretty_buffer_fis(uint8_t *fis, int cmd_len, char **out)\n\nSimplified function using GString:\n\n  static char *ahci_pretty_buffer_fis(const uint8_t *fis, int cmd_len)\n  {\n      GString *s = g_string_new(\"FIS:\");\n      int i;\n\n      for (i = 0; i < cmd_len; i++) {\n          if (i % 16 == 0) {\n              g_string_append_printf(s, \"\\n0x%02x:\", i);\n\t  }\n\n          g_string_append_printf(s, \" %02x\", fis[i]);\n      }\n\n      g_string_append_c('\\n');\n      return g_string_free(s, FALSE);\n  }\n\nIt's less efficient due to extra mallocs but a lot easier to read.\n\n>  {\n> -#if DEBUG_AHCI\n> +    size_t bufsize;\n> +    char *pbuf;\n> +    char *pptr;\n> +    size_t lines = DIV_ROUND_UP(cmd_len, 16);\n> +    const char *preamble = \"FIS:\";\n>      int i;\n>  \n> -    fprintf(stderr, \"fis:\");\n> +    /* Total amount of memory to store FISes in HBA memory */\n> +    g_assert_cmpint(cmd_len, <=, 0x100);\n> +    g_assert(out);\n> +\n> +    /* Printed like:\n> +     * FIS:\\n\n> +     * 0x00: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee \\n\n> +     * 0x10: ff \\n\n> +     * \\0\n> +     *\n> +     * Four bytes for the preamble, seven for each line prefix (including a\n> +     * newline to start a new line), three bytes for each source byte,\n> +     * a trailing newline and a terminal null byte.\n> +     */\n> +\n> +    bufsize = strlen(preamble) + ((6 + 1) * lines) + (3 * cmd_len) + 1 + 1;\n> +    pbuf = g_malloc(bufsize);\n> +    pptr = pbuf;\n> +    pptr += sprintf(pptr, \"%s\", preamble);\n>      for (i = 0; i < cmd_len; i++) {\n>          if ((i & 0xf) == 0) {\n> -            fprintf(stderr, \"\\n%02x:\",i);\n> +            pptr += sprintf(pptr, \"\\n0x%02x: \", i);\n>          }\n> -        fprintf(stderr, \"%02x \",fis[i]);\n> +        pptr += sprintf(pptr, \"%02x \", fis[i]);\n>      }\n> -    fprintf(stderr, \"\\n\");\n> -#endif\n> +    pptr += sprintf(pptr, \"\\n\");\n> +    pptr += 1; /* \\0 */\n> +    g_assert(pbuf + bufsize == pptr);\n> +    *out = pbuf;\n>  }\n>  \n>  static bool ahci_map_fis_address(AHCIDevice *ad)\n> @@ -1201,7 +1226,12 @@ static void handle_reg_h2d_fis(AHCIState *s, int port,\n>       * table to ide_state->io_buffer */\n>      if (opts & AHCI_CMD_ATAPI) {\n>          memcpy(ide_state->io_buffer, &cmd_fis[AHCI_COMMAND_TABLE_ACMD], 0x10);\n> -        debug_print_fis(ide_state->io_buffer, 0x10);\n> +        if (TRACE_HANDLE_REG_H2D_FIS_DUMP_ENABLED) {\n\nThis should probably be:\n\n  if (trace_event_get_state_backends(TRACE_HANDLE_REG_H2D_FIS_DUMP)) {\n\nThe difference is that TRACE_HANDLE_REG_H2D_FIS_DUMP_ENABLED is set at\ncompile time while trace_event_get_state_backends() checks if the event\nis enabled at run-time.\n\nTherefore TRACE_HANDLE_REG_H2D_FIS_DUMP_ENABLED causes the trace event\nto fire even when the user hasn't enabled the trace event yet.  That\nwould be a waste of CPU.\n\n> +            char *pretty_fis;\n> +            ahci_pretty_buffer_fis(ide_state->io_buffer, 0x10, &pretty_fis);\n> +            trace_handle_reg_h2d_fis_dump(s, port, pretty_fis);\n> +            g_free(pretty_fis);\n> +        }\n>          s->dev[port].done_atapi_packet = false;\n>          /* XXX send PIO setup FIS */\n>      }\n> @@ -1256,8 +1286,12 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot)\n>          trace_handle_cmd_badmap(s, port, cmd_len);\n>          goto out;\n>      }\n> -    debug_print_fis(cmd_fis, 0x80);\n> -\n> +    if (TRACE_HANDLE_CMD_FIS_DUMP_ENABLED) {\n\nSame here.\n\n> +        char *pretty_fis;\n> +        ahci_pretty_buffer_fis(cmd_fis, 0x80, &pretty_fis);\n> +        trace_handle_cmd_fis_dump(s, port, pretty_fis);\n> +        g_free(pretty_fis);\n> +    }\n>      switch (cmd_fis[0]) {\n>          case SATA_FIS_TYPE_REGISTER_H2D:\n>              handle_reg_h2d_fis(s, port, slot, cmd_fis);\n> diff --git a/hw/ide/trace-events b/hw/ide/trace-events\n> index e15fd77..77ed3c1 100644\n> --- a/hw/ide/trace-events\n> +++ b/hw/ide/trace-events\n> @@ -105,3 +105,7 @@ ahci_cmd_done(void *s, int port) \"ahci(%p)[%d]: cmd done\"\n>  ahci_reset(void *s) \"ahci(%p): HBA reset\"\n>  allwinner_ahci_mem_read(void *s, void *a, uint64_t addr, uint64_t val, unsigned size) \"ahci(%p): read a=%p addr=0x%\"HWADDR_PRIx\" val=0x%\"PRIx64\", size=%d\"\n>  allwinner_ahci_mem_write(void *s, void *a, uint64_t addr, uint64_t val, unsigned size) \"ahci(%p): write a=%p addr=0x%\"HWADDR_PRIx\" val=0x%\"PRIx64\", size=%d\"\n> +\n> +# Warning: Verbose\n> +handle_reg_h2d_fis_dump(void *s, int port, char *fis) \"ahci(%p)[%d]: %s\"\n\nconst char *fis\n\n> +handle_cmd_fis_dump(void *s, int port, char *fis) \"ahci(%p)[%d]: %s\"\n\nconst char *fis","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"puZ2m+Yy\"; dkim-atps=neutral"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xj0LF1zPbz9t2R\n\tfor <incoming@patchwork.ozlabs.org>;\n\tWed, 30 Aug 2017 19:18:45 +1000 (AEST)","from localhost ([::1]:49275 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dmz91-00067W-2o\n\tfor incoming@patchwork.ozlabs.org; Wed, 30 Aug 2017 05:18:43 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:48481)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <stefanha@gmail.com>) id 1dmz8Y-000678-N3\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 05:18:19 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <stefanha@gmail.com>) id 1dmz8T-0007k2-K6\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 05:18:14 -0400","from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]:37151)\n\tby eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16)\n\t(Exim 4.71) (envelope-from <stefanha@gmail.com>)\n\tid 1dmz8M-0007iA-KQ; Wed, 30 Aug 2017 05:18:02 -0400","by mail-wm0-x241.google.com with SMTP id x189so1107307wmg.4;\n\tWed, 30 Aug 2017 02:18:01 -0700 (PDT)","from localhost ([51.15.41.238]) by smtp.gmail.com with ESMTPSA id\n\to62sm2238783edd.47.2017.08.30.02.17.58\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tWed, 30 Aug 2017 02:17:58 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=date:from:to:cc:subject:message-id:references:mime-version\n\t:content-disposition:in-reply-to:user-agent;\n\tbh=x+XL79O6E0KY5PTCLDIhtTV0YuSmQzDYIobBNzigqzI=;\n\tb=puZ2m+YySZvmtaFZVL79XvKcjpT5muXP9e+5pW3WD4HKmrbd5ZbzGjxXJ8HiBsDTys\n\tABR9KArtrodaI6lQao9UbwAIAajmeRAAT/G85qTbIPMiFYz9jRALjybYrue7HVHvyx7B\n\t7Kvjba/sr61TnFamA6wje+XhZ6SikvTzCglnmB1N/6XcaElo+VHbs1KenfjrSM5iGsE5\n\t40+Tb3hXp1Yje04CS8iS5NbX2USQ8xM/J3Zz75tc1ukA0i8V4ZTmJGBcLPftWCObtOAe\n\tTSCI/cOQusfuF6fUT9N4xGH6Cna0fg/GJvosB3uwyJOxtQKtti44h2VjKnj9PWmUoBOM\n\tniCw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:references\n\t:mime-version:content-disposition:in-reply-to:user-agent;\n\tbh=x+XL79O6E0KY5PTCLDIhtTV0YuSmQzDYIobBNzigqzI=;\n\tb=IQAO+doY60L34oavYPyAG2shwbbtJWs0zBFarZY0WbwKkPJRkzj8x/yPFliaKK0d1f\n\tUX+AZayhte9O0VpabFsw/QNOpPOG8Vqb1aJtcZMjMeVvCmgwSRZuCffhtDQBe9/fRPPm\n\t7QdMrCFrNunq2ad7MvR75As6WHjGCnVKPKnRMRc+843m0/nwv7EpKbvZXz758+9gJhwM\n\tIIN6pHYT843ViMYio0eXyGCZptx5TtiyV5uxrtGpJIzldOy1UECulRcdHhzdGzHcyygP\n\tA4p1NCneZOuOkkCEFPe1njC7WcQEx6pfgx6O7n/va6QKlRcOOWODmyDU0KxSlaqcVzQ+\n\tmTFg==","X-Gm-Message-State":"AHYfb5gv83qOvT0zPJu9DroXNHCYifr0xMHiSkmBuMnqMhulIBFTU/Lf\n\tz1tX8OEa7SE7eQ==","X-Received":"by 10.80.134.171 with SMTP id r40mr1181807eda.142.1504084679635; \n\tWed, 30 Aug 2017 02:17:59 -0700 (PDT)","Date":"Wed, 30 Aug 2017 10:17:57 +0100","From":"Stefan Hajnoczi <stefanha@gmail.com>","To":"John Snow <jsnow@redhat.com>","Message-ID":"<20170830091757.GD24565@stefanha-x1.localdomain>","References":"<20170829204934.9039-1-jsnow@redhat.com>\n\t<20170829204934.9039-9-jsnow@redhat.com>","MIME-Version":"1.0","Content-Type":"text/plain; charset=us-ascii","Content-Disposition":"inline","In-Reply-To":"<20170829204934.9039-9-jsnow@redhat.com>","User-Agent":"Mutt/1.8.3 (2017-05-23)","X-detected-operating-system":"by eggs.gnu.org: Genre and OS details not\n\trecognized.","X-Received-From":"2a00:1450:400c:c09::241","Subject":"Re: [Qemu-devel] [Qemu-block] [PATCH v2 8/9] AHCI: pretty-print FIS\n\tto buffer instead of stderr","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"qemu-devel@nongnu.org, qemu-block@nongnu.org, f4bug@amsat.org","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}},{"id":1760554,"web_url":"http://patchwork.ozlabs.org/comment/1760554/","msgid":"<cc0cf2e3-4811-c8f8-979c-9a82041766a8@redhat.com>","list_archive_url":null,"date":"2017-08-30T22:50:27","subject":"Re: [Qemu-devel] [Qemu-block] [PATCH v2 8/9] AHCI: pretty-print FIS\n\tto buffer instead of stderr","submitter":{"id":64343,"url":"http://patchwork.ozlabs.org/api/people/64343/","name":"John Snow","email":"jsnow@redhat.com"},"content":"On 08/30/2017 05:17 AM, Stefan Hajnoczi wrote:\n> On Tue, Aug 29, 2017 at 04:49:33PM -0400, John Snow wrote:\n>> The current FIS printing routines dump the FIS to screen. adjust this\n>> such that it dumps to buffer instead, then use this ability to have\n>> FIS dump mechanisms via trace-events instead of compiled defines.\n>>\n>> Signed-off-by: John Snow <jsnow@redhat.com>\n>> ---\n>>  hw/ide/ahci.c       | 54 +++++++++++++++++++++++++++++++++++++++++++----------\n>>  hw/ide/trace-events |  4 ++++\n>>  2 files changed, 48 insertions(+), 10 deletions(-)\n>>\n>> diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c\n>> index a0a4dd6..2e75f9b 100644\n>> --- a/hw/ide/ahci.c\n>> +++ b/hw/ide/ahci.c\n>> @@ -644,20 +644,45 @@ static void ahci_reset_port(AHCIState *s, int port)\n>>      ahci_init_d2h(d);\n>>  }\n>>  \n>> -static void debug_print_fis(uint8_t *fis, int cmd_len)\n>> +/* Buffer pretty output based on a raw FIS structure. */\n>> +static void ahci_pretty_buffer_fis(uint8_t *fis, int cmd_len, char **out)\n> \n> Simplified function using GString:\n> \n>   static char *ahci_pretty_buffer_fis(const uint8_t *fis, int cmd_len)\n>   {\n>       GString *s = g_string_new(\"FIS:\");\n>       int i;\n> \n>       for (i = 0; i < cmd_len; i++) {\n>           if (i % 16 == 0) {\n>               g_string_append_printf(s, \"\\n0x%02x:\", i);\n> \t  }\n> \n>           g_string_append_printf(s, \" %02x\", fis[i]);\n>       }\n> \n>       g_string_append_c('\\n');\n>       return g_string_free(s, FALSE);\n>   }\n> \n> It's less efficient due to extra mallocs but a lot easier to read.\n> \n\neeeyyyyeahhhh I guess I don't need to be bleedingly efficient with debug\nprintfs...\n\nAnd in this example I don't need to worry about the math being precisely\ncorrect. I'll make the change :(\n\n>>  {\n>> -#if DEBUG_AHCI\n>> +    size_t bufsize;\n>> +    char *pbuf;\n>> +    char *pptr;\n>> +    size_t lines = DIV_ROUND_UP(cmd_len, 16);\n>> +    const char *preamble = \"FIS:\";\n>>      int i;\n>>  \n>> -    fprintf(stderr, \"fis:\");\n>> +    /* Total amount of memory to store FISes in HBA memory */\n>> +    g_assert_cmpint(cmd_len, <=, 0x100);\n>> +    g_assert(out);\n>> +\n>> +    /* Printed like:\n>> +     * FIS:\\n\n>> +     * 0x00: 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee \\n\n>> +     * 0x10: ff \\n\n>> +     * \\0\n>> +     *\n>> +     * Four bytes for the preamble, seven for each line prefix (including a\n>> +     * newline to start a new line), three bytes for each source byte,\n>> +     * a trailing newline and a terminal null byte.\n>> +     */\n>> +\n>> +    bufsize = strlen(preamble) + ((6 + 1) * lines) + (3 * cmd_len) + 1 + 1;\n>> +    pbuf = g_malloc(bufsize);\n>> +    pptr = pbuf;\n>> +    pptr += sprintf(pptr, \"%s\", preamble);\n>>      for (i = 0; i < cmd_len; i++) {\n>>          if ((i & 0xf) == 0) {\n>> -            fprintf(stderr, \"\\n%02x:\",i);\n>> +            pptr += sprintf(pptr, \"\\n0x%02x: \", i);\n>>          }\n>> -        fprintf(stderr, \"%02x \",fis[i]);\n>> +        pptr += sprintf(pptr, \"%02x \", fis[i]);\n>>      }\n>> -    fprintf(stderr, \"\\n\");\n>> -#endif\n>> +    pptr += sprintf(pptr, \"\\n\");\n>> +    pptr += 1; /* \\0 */\n>> +    g_assert(pbuf + bufsize == pptr);\n>> +    *out = pbuf;\n>>  }\n>>  \n>>  static bool ahci_map_fis_address(AHCIDevice *ad)\n>> @@ -1201,7 +1226,12 @@ static void handle_reg_h2d_fis(AHCIState *s, int port,\n>>       * table to ide_state->io_buffer */\n>>      if (opts & AHCI_CMD_ATAPI) {\n>>          memcpy(ide_state->io_buffer, &cmd_fis[AHCI_COMMAND_TABLE_ACMD], 0x10);\n>> -        debug_print_fis(ide_state->io_buffer, 0x10);\n>> +        if (TRACE_HANDLE_REG_H2D_FIS_DUMP_ENABLED) {\n> \n> This should probably be:\n> \n>   if (trace_event_get_state_backends(TRACE_HANDLE_REG_H2D_FIS_DUMP)) {\n> \n> The difference is that TRACE_HANDLE_REG_H2D_FIS_DUMP_ENABLED is set at\n> compile time while trace_event_get_state_backends() checks if the event\n> is enabled at run-time.\n> \n> Therefore TRACE_HANDLE_REG_H2D_FIS_DUMP_ENABLED causes the trace event\n> to fire even when the user hasn't enabled the trace event yet.  That\n> would be a waste of CPU.\n> \n\nOh, cool! Nice tip!\n\n>> +            char *pretty_fis;\n>> +            ahci_pretty_buffer_fis(ide_state->io_buffer, 0x10, &pretty_fis);\n>> +            trace_handle_reg_h2d_fis_dump(s, port, pretty_fis);\n>> +            g_free(pretty_fis);\n>> +        }\n>>          s->dev[port].done_atapi_packet = false;\n>>          /* XXX send PIO setup FIS */\n>>      }\n>> @@ -1256,8 +1286,12 @@ static int handle_cmd(AHCIState *s, int port, uint8_t slot)\n>>          trace_handle_cmd_badmap(s, port, cmd_len);\n>>          goto out;\n>>      }\n>> -    debug_print_fis(cmd_fis, 0x80);\n>> -\n>> +    if (TRACE_HANDLE_CMD_FIS_DUMP_ENABLED) {\n> \n> Same here.\n> \n\nSure thing. There's probably a block in ATAPI that needs this treatment,\ntoo.\n\n>> +        char *pretty_fis;\n>> +        ahci_pretty_buffer_fis(cmd_fis, 0x80, &pretty_fis);\n>> +        trace_handle_cmd_fis_dump(s, port, pretty_fis);\n>> +        g_free(pretty_fis);\n>> +    }\n>>      switch (cmd_fis[0]) {\n>>          case SATA_FIS_TYPE_REGISTER_H2D:\n>>              handle_reg_h2d_fis(s, port, slot, cmd_fis);\n>> diff --git a/hw/ide/trace-events b/hw/ide/trace-events\n>> index e15fd77..77ed3c1 100644\n>> --- a/hw/ide/trace-events\n>> +++ b/hw/ide/trace-events\n>> @@ -105,3 +105,7 @@ ahci_cmd_done(void *s, int port) \"ahci(%p)[%d]: cmd done\"\n>>  ahci_reset(void *s) \"ahci(%p): HBA reset\"\n>>  allwinner_ahci_mem_read(void *s, void *a, uint64_t addr, uint64_t val, unsigned size) \"ahci(%p): read a=%p addr=0x%\"HWADDR_PRIx\" val=0x%\"PRIx64\", size=%d\"\n>>  allwinner_ahci_mem_write(void *s, void *a, uint64_t addr, uint64_t val, unsigned size) \"ahci(%p): write a=%p addr=0x%\"HWADDR_PRIx\" val=0x%\"PRIx64\", size=%d\"\n>> +\n>> +# Warning: Verbose\n>> +handle_reg_h2d_fis_dump(void *s, int port, char *fis) \"ahci(%p)[%d]: %s\"\n> \n> const char *fis\n> \n>> +handle_cmd_fis_dump(void *s, int port, char *fis) \"ahci(%p)[%d]: %s\"\n> \n> const char *fis\n> \n\nThanks for the 👀","headers":{"Return-Path":"<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>","X-Original-To":"incoming@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=nongnu.org\n\t(client-ip=2001:4830:134:3::11; helo=lists.gnu.org;\n\tenvelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n\treceiver=<UNKNOWN>)","ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tdmarc=none (p=none dis=none) header.from=redhat.com","ext-mx05.extmail.prod.ext.phx2.redhat.com;\n\tspf=fail smtp.mailfrom=jsnow@redhat.com"],"Received":["from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11])\n\t(using TLSv1 with cipher AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xjLMd4lnVz9s83\n\tfor <incoming@patchwork.ozlabs.org>;\n\tThu, 31 Aug 2017 08:51:08 +1000 (AEST)","from localhost ([::1]:53099 helo=lists.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.71) (envelope-from\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>)\n\tid 1dnBpB-0002h7-Ue\n\tfor incoming@patchwork.ozlabs.org; Wed, 30 Aug 2017 18:51:05 -0400","from eggs.gnu.org ([2001:4830:134:3::10]:34247)\n\tby lists.gnu.org with esmtp (Exim 4.71)\n\t(envelope-from <jsnow@redhat.com>) id 1dnBol-0002Yo-Vr\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 18:50:41 -0400","from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71)\n\t(envelope-from <jsnow@redhat.com>) id 1dnBok-0001UI-FU\n\tfor qemu-devel@nongnu.org; Wed, 30 Aug 2017 18:50:39 -0400","from mx1.redhat.com ([209.132.183.28]:33188)\n\tby eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32)\n\t(Exim 4.71) (envelope-from <jsnow@redhat.com>)\n\tid 1dnBod-0001HP-7A; Wed, 30 Aug 2017 18:50:31 -0400","from smtp.corp.redhat.com\n\t(int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14])\n\t(using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits))\n\t(No client certificate requested)\n\tby mx1.redhat.com (Postfix) with ESMTPS id B9717461FF;\n\tWed, 30 Aug 2017 22:50:29 +0000 (UTC)","from [10.18.17.130] (dhcp-17-130.bos.redhat.com [10.18.17.130])\n\tby smtp.corp.redhat.com (Postfix) with ESMTP id 0306718B99;\n\tWed, 30 Aug 2017 22:50:27 +0000 (UTC)"],"DMARC-Filter":"OpenDMARC Filter v1.3.2 mx1.redhat.com B9717461FF","To":"Stefan Hajnoczi <stefanha@gmail.com>","References":"<20170829204934.9039-1-jsnow@redhat.com>\n\t<20170829204934.9039-9-jsnow@redhat.com>\n\t<20170830091757.GD24565@stefanha-x1.localdomain>","From":"John Snow <jsnow@redhat.com>","Message-ID":"<cc0cf2e3-4811-c8f8-979c-9a82041766a8@redhat.com>","Date":"Wed, 30 Aug 2017 18:50:27 -0400","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<20170830091757.GD24565@stefanha-x1.localdomain>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-US","X-Scanned-By":"MIMEDefang 2.79 on 10.5.11.14","X-Greylist":"Sender IP whitelisted, not delayed by milter-greylist-4.5.16\n\t(mx1.redhat.com [10.5.110.29]);\n\tWed, 30 Aug 2017 22:50:29 +0000 (UTC)","Content-Transfer-Encoding":"quoted-printable","X-detected-operating-system":"by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic]\n\t[fuzzy]","X-Received-From":"209.132.183.28","Subject":"Re: [Qemu-devel] [Qemu-block] [PATCH v2 8/9] AHCI: pretty-print FIS\n\tto buffer instead of stderr","X-BeenThere":"qemu-devel@nongnu.org","X-Mailman-Version":"2.1.21","Precedence":"list","List-Id":"<qemu-devel.nongnu.org>","List-Unsubscribe":"<https://lists.nongnu.org/mailman/options/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>","List-Archive":"<http://lists.nongnu.org/archive/html/qemu-devel/>","List-Post":"<mailto:qemu-devel@nongnu.org>","List-Help":"<mailto:qemu-devel-request@nongnu.org?subject=help>","List-Subscribe":"<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n\t<mailto:qemu-devel-request@nongnu.org?subject=subscribe>","Cc":"qemu-devel@nongnu.org, qemu-block@nongnu.org, f4bug@amsat.org","Errors-To":"qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org","Sender":"\"Qemu-devel\"\n\t<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>"}}]