From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A64E2C433B4 for ; Mon, 3 May 2021 15:44:31 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6645761183 for ; Mon, 3 May 2021 15:44:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230443AbhECPpY (ORCPT ); Mon, 3 May 2021 11:45:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230416AbhECPpX (ORCPT ); Mon, 3 May 2021 11:45:23 -0400 Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EF9C1C06174A for ; Mon, 3 May 2021 08:44:28 -0700 (PDT) Received: by mail-ed1-x52b.google.com with SMTP id i24so6794845edy.8 for ; Mon, 03 May 2021 08:44:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dOMhIDQcj6FbPcrDgTY+DqGjm9zmhAQ5MfYxilunNmQ=; b=sSRUP/1hhlH2g/zHKqxj/36ugp9QXIdmj3kzHFO9ShrVx/h2y+5Lb/hBbVyXYE/wJz ulIklWHyN8Dc6L9HoLraR4N1pQtdGvy2TCFbezrwB5s48r6O9wwlegKpS3HAG1MXxcKm Y/i+jjLFdLzt/qlltytBwKurhFNz3eV6XjKEzqJCuesfUl1EN8ikGKHFaQM3CXSeN25U 2ho995Ko9DCypdiuNIWW8+dhrBX/YkzOHYfCdH8TCO2JcRPLIcmzPWsgPf9dP2dCpgRU TzqCCLOBKEEg6XXIYh8nGJat3HI/gC+ZhE3GUUpfDMTu7BcTHq1Ah7/w9/2TsGN2NEb3 0VpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dOMhIDQcj6FbPcrDgTY+DqGjm9zmhAQ5MfYxilunNmQ=; b=GQwHKo+uflO/LKkeQVXghnlQkM38hvgl1dgwq3ewl+NF4NosTz0+aRUJ/Wnt+VndOP BYurOrWb/nmSq3zScCcyqsxRzsRAbfUpboTXsZH9EVCepOYf/dBwuOuB5hl6h/4s5zB+ C/th7SrMgFZ1F2ueEHF3k+trc0derTFaf5P3L0mkhSLKQinqkWt8/EkyuqWX+Evpg4GI nLGX3cgHbm3RLogu7I4uiIo77LzeLUXIXB2d1UmOIyrBz3PXLAa9J8H6WqQGox3FH+Lm 6eX+jL9oeRQj1PR4ju3Vva10erMD+h0X4/hWW8T09ESXRU9jIKzaF3qSE8KVuvOotM8R JgBA== X-Gm-Message-State: AOAM532DAMPSxyuIPikBTZUiVUpZVnJ7BRohLfcvlcR3fzlDUmfSgJvn MarW/bKnbgkcMm60O884vDbgIjsPUeWk9WLP9YM= X-Google-Smtp-Source: ABdhPJxXs1WGxfy3MynteKLLKryZ4Dkabn/JEfLYdYpiJN0QWceNiV+U9bGKqUG5xVq+WHpL4Xf+/0VtGQXC+YUfNEU= X-Received: by 2002:a05:6402:1a2f:: with SMTP id be15mr20567642edb.207.1620056667619; Mon, 03 May 2021 08:44:27 -0700 (PDT) MIME-Version: 1.0 References: <20210429190926.5086-1-smalin@marvell.com> <20210429190926.5086-8-smalin@marvell.com> <8b17f15c-4776-1744-8183-fb783b7a4c97@suse.de> In-Reply-To: <8b17f15c-4776-1744-8183-fb783b7a4c97@suse.de> From: Shai Malin Date: Mon, 3 May 2021 18:44:16 +0300 Message-ID: Subject: Re: [RFC PATCH v4 07/27] qed: Add IP services APIs support To: Hannes Reinecke Cc: Shai Malin , netdev@vger.kernel.org, linux-nvme@lists.infradead.org, davem@davemloft.net, kuba@kernel.org, sagi@grimberg.me, hch@lst.de, axboe@fb.com, kbusch@kernel.org, Ariel Elior , Michal Kalderon , okulkarni@marvell.com, pkushwaha@marvell.com, Nikolay Assa Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 5/2/21 2:26 PM, Hannes Reinecke wrote: > On 4/29/21 9:09 PM, Shai Malin wrote: > > From: Nikolay Assa > > > > This patch introduces APIs which the NVMeTCP Offload device (qedn) > > will use through the paired net-device (qede). > > It includes APIs for: > > - ipv4/ipv6 routing > > - get VLAN from net-device > > - TCP ports reservation > > > > Acked-by: Igor Russkikh > > Signed-off-by: Nikolay Assa > > Signed-off-by: Prabhakar Kushwaha > > Signed-off-by: Omkar Kulkarni > > Signed-off-by: Michal Kalderon > > Signed-off-by: Ariel Elior > > Signed-off-by: Shai Malin > > --- > > .../qlogic/qed/qed_nvmetcp_ip_services.c | 239 +++++++++++++++++= + > > .../linux/qed/qed_nvmetcp_ip_services_if.h | 29 +++ > > 2 files changed, 268 insertions(+) > > create mode 100644 drivers/net/ethernet/qlogic/qed/qed_nvmetcp_ip_ser= vices.c > > create mode 100644 include/linux/qed/qed_nvmetcp_ip_services_if.h > > > > diff --git a/drivers/net/ethernet/qlogic/qed/qed_nvmetcp_ip_services.c = b/drivers/net/ethernet/qlogic/qed/qed_nvmetcp_ip_services.c > > new file mode 100644 > > index 000000000000..2904b1a0830a > > --- /dev/null > > +++ b/drivers/net/ethernet/qlogic/qed/qed_nvmetcp_ip_services.c > > @@ -0,0 +1,239 @@ > > +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) > > +/* > > + * Copyright 2021 Marvell. All rights reserved. > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#include > > + > > +#include > > + > > +#define QED_IP_RESOL_TIMEOUT 4 > > + > > +int qed_route_ipv4(struct sockaddr_storage *local_addr, > > + struct sockaddr_storage *remote_addr, > > + struct sockaddr *hardware_address, > > + struct net_device **ndev) > > +{ > > + struct neighbour *neigh =3D NULL; > > + __be32 *loc_ip, *rem_ip; > > + struct rtable *rt; > > + int rc =3D -ENXIO; > > + int retry; > > + > > + loc_ip =3D &((struct sockaddr_in *)local_addr)->sin_addr.s_addr; > > + rem_ip =3D &((struct sockaddr_in *)remote_addr)->sin_addr.s_addr; > > + *ndev =3D NULL; > > + rt =3D ip_route_output(&init_net, *rem_ip, *loc_ip, 0/*tos*/, 0/*= oif*/); > > + if (IS_ERR(rt)) { > > + pr_err("lookup route failed\n"); > > + rc =3D PTR_ERR(rt); > > + goto return_err; > > + } > > + > > + neigh =3D dst_neigh_lookup(&rt->dst, rem_ip); > > + if (!neigh) { > > + rc =3D -ENOMEM; > > + ip_rt_put(rt); > > + goto return_err; > > + } > > + > > + *ndev =3D rt->dst.dev; > > + ip_rt_put(rt); > > + > > + /* If not resolved, kick-off state machine towards resolution */ > > + if (!(neigh->nud_state & NUD_VALID)) > > + neigh_event_send(neigh, NULL); > > + > > + /* query neighbor until resolved or timeout */ > > + retry =3D QED_IP_RESOL_TIMEOUT; > > + while (!(neigh->nud_state & NUD_VALID) && retry > 0) { > > + msleep(1000); > > + retry--; > > + } > > + > > + if (neigh->nud_state & NUD_VALID) { > > + /* copy resolved MAC address */ > > + neigh_ha_snapshot(hardware_address->sa_data, neigh, *ndev= ); > > + > > + hardware_address->sa_family =3D (*ndev)->type; > > + rc =3D 0; > > + } > > + > > + neigh_release(neigh); > > + if (!(*loc_ip)) { > > + *loc_ip =3D inet_select_addr(*ndev, *rem_ip, RT_SCOPE_UNI= VERSE); > > + local_addr->ss_family =3D AF_INET; > > + } > > + > > +return_err: > > + > > + return rc; > > +} > > +EXPORT_SYMBOL(qed_route_ipv4); > > + > > +int qed_route_ipv6(struct sockaddr_storage *local_addr, > > + struct sockaddr_storage *remote_addr, > > + struct sockaddr *hardware_address, > > + struct net_device **ndev) > > +{ > > + struct neighbour *neigh =3D NULL; > > + struct dst_entry *dst; > > + struct flowi6 fl6; > > + int rc =3D -ENXIO; > > + int retry; > > + > > + memset(&fl6, 0, sizeof(fl6)); > > + fl6.saddr =3D ((struct sockaddr_in6 *)local_addr)->sin6_addr; > > + fl6.daddr =3D ((struct sockaddr_in6 *)remote_addr)->sin6_addr; > > + > > + dst =3D ip6_route_output(&init_net, NULL, &fl6); > > + if (!dst || dst->error) { > > + if (dst) { > > + dst_release(dst); > > + pr_err("lookup route failed %d\n", dst->error); > > + } > > + > > + goto out; > > + } > > + > > + neigh =3D dst_neigh_lookup(dst, &fl6.daddr); > > + if (neigh) { > > + *ndev =3D ip6_dst_idev(dst)->dev; > > + > > + /* If not resolved, kick-off state machine towards resolu= tion */ > > + if (!(neigh->nud_state & NUD_VALID)) > > + neigh_event_send(neigh, NULL); > > + > > + /* query neighbor until resolved or timeout */ > > + retry =3D QED_IP_RESOL_TIMEOUT; > > + while (!(neigh->nud_state & NUD_VALID) && retry > 0) { > > + msleep(1000); > > + retry--; > > + } > > + > > + if (neigh->nud_state & NUD_VALID) { > > + neigh_ha_snapshot((u8 *)hardware_address->sa_data= , neigh, *ndev); > > + > > + hardware_address->sa_family =3D (*ndev)->type; > > + rc =3D 0; > > + } > > + > > + neigh_release(neigh); > > + > > + if (ipv6_addr_any(&fl6.saddr)) { > > + if (ipv6_dev_get_saddr(dev_net(*ndev), *ndev, > > + &fl6.daddr, 0, &fl6.saddr)= ) { > > + pr_err("Unable to find source IP address\= n"); > > + goto out; > > + } > > + > > + local_addr->ss_family =3D AF_INET6; > > + ((struct sockaddr_in6 *)local_addr)->sin6_addr = =3D > > + fl6.saddr= ; > > + } > > + } > > + > > + dst_release(dst); > > + > > +out: > > + > > + return rc; > > +} > > +EXPORT_SYMBOL(qed_route_ipv6); > > + > > +void qed_vlan_get_ndev(struct net_device **ndev, u16 *vlan_id) > > +{ > > + if (is_vlan_dev(*ndev)) { > > + *vlan_id =3D vlan_dev_vlan_id(*ndev); > > + *ndev =3D vlan_dev_real_dev(*ndev); > > + } > > +} > > +EXPORT_SYMBOL(qed_vlan_get_ndev); > > + > > +struct pci_dev *qed_validate_ndev(struct net_device *ndev) > > +{ > > + struct pci_dev *pdev =3D NULL; > > + struct net_device *upper; > > + > > + for_each_pci_dev(pdev) { > > + if (pdev && pdev->driver && > > + !strcmp(pdev->driver->name, "qede")) { > > + upper =3D pci_get_drvdata(pdev); > > + if (upper->ifindex =3D=3D ndev->ifindex) > > + return pdev; > > + } > > + } > > + > > + return NULL; > > +} > > +EXPORT_SYMBOL(qed_validate_ndev); > > + > > +__be16 qed_get_in_port(struct sockaddr_storage *sa) > > +{ > > + return sa->ss_family =3D=3D AF_INET > > + ? ((struct sockaddr_in *)sa)->sin_port > > + : ((struct sockaddr_in6 *)sa)->sin6_port; > > +} > > +EXPORT_SYMBOL(qed_get_in_port); > > + > > +int qed_fetch_tcp_port(struct sockaddr_storage local_ip_addr, > > + struct socket **sock, u16 *port) > > +{ > > + struct sockaddr_storage sa; > > + int rc =3D 0; > > + > > + rc =3D sock_create(local_ip_addr.ss_family, SOCK_STREAM, IPPROTO_= TCP, sock); > > + if (rc) { > > + pr_warn("failed to create socket: %d\n", rc); > > + goto err; > > + } > > + > > + (*sock)->sk->sk_allocation =3D GFP_KERNEL; > > + sk_set_memalloc((*sock)->sk); > > + > > + rc =3D kernel_bind(*sock, (struct sockaddr *)&local_ip_addr, > > + sizeof(local_ip_addr)); > > + > > + if (rc) { > > + pr_warn("failed to bind socket: %d\n", rc); > > + goto err_sock; > > + } > > + > > + rc =3D kernel_getsockname(*sock, (struct sockaddr *)&sa); > > + if (rc < 0) { > > + pr_warn("getsockname() failed: %d\n", rc); > > + goto err_sock; > > + } > > + > > + *port =3D ntohs(qed_get_in_port(&sa)); > > + > > + return 0; > > + > > +err_sock: > > + sock_release(*sock); > > + sock =3D NULL; > > +err: > > + > > + return rc; > > +} > > +EXPORT_SYMBOL(qed_fetch_tcp_port); > > + > > +void qed_return_tcp_port(struct socket *sock) > > +{ > > + if (sock && sock->sk) { > > + tcp_set_state(sock->sk, TCP_CLOSE); > > + sock_release(sock); > > + } > > +} > > +EXPORT_SYMBOL(qed_return_tcp_port); > > diff --git a/include/linux/qed/qed_nvmetcp_ip_services_if.h b/include/l= inux/qed/qed_nvmetcp_ip_services_if.h > > new file mode 100644 > > index 000000000000..3604aee53796 > > --- /dev/null > > +++ b/include/linux/qed/qed_nvmetcp_ip_services_if.h > > @@ -0,0 +1,29 @@ > > +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ > > +/* > > + * Copyright 2021 Marvell. All rights reserved. > > + */ > > + > > +#ifndef _QED_IP_SERVICES_IF_H > > +#define _QED_IP_SERVICES_IF_H > > + > > +#include > > +#include > > +#include > > +#include > > + > > +int qed_route_ipv4(struct sockaddr_storage *local_addr, > > + struct sockaddr_storage *remote_addr, > > + struct sockaddr *hardware_address, > > + struct net_device **ndev); > > +int qed_route_ipv6(struct sockaddr_storage *local_addr, > > + struct sockaddr_storage *remote_addr, > > + struct sockaddr *hardware_address, > > + struct net_device **ndev); > > +void qed_vlan_get_ndev(struct net_device **ndev, u16 *vlan_id); > > +struct pci_dev *qed_validate_ndev(struct net_device *ndev); > > +void qed_return_tcp_port(struct socket *sock); > > +int qed_fetch_tcp_port(struct sockaddr_storage local_ip_addr, > > + struct socket **sock, u16 *port); > > +__be16 qed_get_in_port(struct sockaddr_storage *sa); > > + > > +#endif /* _QED_IP_SERVICES_IF_H */ > > > Reviewed-by: Hannes Reinecke > Thanks. > Cheers, > > Hannes > -- > Dr. Hannes Reinecke Kernel Storage Architect > hare@suse.de +49 911 74053 688 > SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 N=C3=BCrnberg > HRB 36809 (AG N=C3=BCrnberg), Gesch=C3=A4ftsf=C3=BChrer: Felix Imend=C3= =B6rffer From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4067EC433ED for ; Mon, 3 May 2021 15:45:04 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 510F161159 for ; Mon, 3 May 2021 15:45:03 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 510F161159 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=e5mfogEwhldpFjHHMT/+jRAquk+2LWNn7tdiVNEdirM=; b=BLaMEDBVz73tDVR8SYs+4qlPB ZBU9M9Dnelhq5b9cqD6SOqFaxr/Cn2ene7SCKgcuY3dVFm4EgRCaTyIjHhLJbxAAMJJobzsKzX5NJ 8L8wfXtj0Eq4lNxrE74pfjZGAGtD15Rs0PcuqB5qGZEtKPrt4z4OiOxfA3pVFrfssMf9kGpae/mHT vCdr0L4uPj11sWAmOOoxwJHt9vD6uezjOG2jjY4hRyUAlOjFBKFeU5M71Rc2wRrEGKKqSdtF6aABp HrRjfLgZ5XjI+xI30VL5t1LDj25jBnaCOaD/z8kOkOQ1y82wVuezkR3jC9RO+z4yOBR0CpStWmGew fdZhlR+jg==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1ldakR-00EHU1-LQ; Mon, 03 May 2021 15:44:39 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1ldakK-00EHSw-Tm for linux-nvme@desiato.infradead.org; Mon, 03 May 2021 15:44:36 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References: MIME-Version:Sender:Reply-To:Content-ID:Content-Description; bh=dOMhIDQcj6FbPcrDgTY+DqGjm9zmhAQ5MfYxilunNmQ=; b=iCfj0InDakcffB6xXHtjh2oP7V UDJKRc81MXZnmOYPFwBu4AT1B/VJmFnj7AcabyOXYDV9oj+qVydNBJJ76STmjYMSOal4yCz+L/ueP msQHuGvP+RU7xUHiC2UsuNAjrMwklwjWMJKWPT2CJNKuKzsbWLd1gyBka+7J+GoxHAGJy4FUsC6sb 39EalJ68WI3DhjHpYlyWStJzWhsOS0Z8k/YMFQhABwQbCpuXugSrv2wEi54bf+rYW8eWwYiydO49b Oo1nHWYB3mXS9W0thK04zyOdvcwXO8U1RpNeekenLl11OX/1mrnWqcRgkRO6kUTm5ORfnNQUceen7 YLw1UtNg==; Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1ldakH-003Byl-H8 for linux-nvme@lists.infradead.org; Mon, 03 May 2021 15:44:31 +0000 Received: by mail-ed1-x52a.google.com with SMTP id c22so6811389edn.7 for ; Mon, 03 May 2021 08:44:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=dOMhIDQcj6FbPcrDgTY+DqGjm9zmhAQ5MfYxilunNmQ=; b=sSRUP/1hhlH2g/zHKqxj/36ugp9QXIdmj3kzHFO9ShrVx/h2y+5Lb/hBbVyXYE/wJz ulIklWHyN8Dc6L9HoLraR4N1pQtdGvy2TCFbezrwB5s48r6O9wwlegKpS3HAG1MXxcKm Y/i+jjLFdLzt/qlltytBwKurhFNz3eV6XjKEzqJCuesfUl1EN8ikGKHFaQM3CXSeN25U 2ho995Ko9DCypdiuNIWW8+dhrBX/YkzOHYfCdH8TCO2JcRPLIcmzPWsgPf9dP2dCpgRU TzqCCLOBKEEg6XXIYh8nGJat3HI/gC+ZhE3GUUpfDMTu7BcTHq1Ah7/w9/2TsGN2NEb3 0VpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=dOMhIDQcj6FbPcrDgTY+DqGjm9zmhAQ5MfYxilunNmQ=; b=BjSepVrTg49gN7+xfl1dmqmrxTBmoLEba7p5B6KEepUf8Y8Brps/gL4xmSpLSZBYM1 INX/tMEqSekvzxZLPMklQFb/XhiKlOeMqVawMhN6fmeAd62+a+pmOoHkGAEMpKTaJ4tx hyfMdkRESURj0rmwxvUSSssLdLMui82oJfBdrQ7QoM0G+46MLPYlgQasXn10PDWwZ80K iS2LvuypPMmXuWfwXVE+C/K6+U0OmF7ODvmPC6bbA1aQFbPvqNa7Gjgyuk00E2dnT3E3 X36A5fznbqO56uAEvPETUaYlAhx/duin1Ve6JqfVRxvXAW6LLEc7QLQu4nvpJUnR/u+m plnQ== X-Gm-Message-State: AOAM532mZjddgFOEX671MiJexDWkGi09zeLZz6TfX4pG97FSwP+6zH8i hoy7wski72AoHx4J8rKDj8tTMtP8nZ6mx8YMr8oNpCUz5OM= X-Google-Smtp-Source: ABdhPJxXs1WGxfy3MynteKLLKryZ4Dkabn/JEfLYdYpiJN0QWceNiV+U9bGKqUG5xVq+WHpL4Xf+/0VtGQXC+YUfNEU= X-Received: by 2002:a05:6402:1a2f:: with SMTP id be15mr20567642edb.207.1620056667619; Mon, 03 May 2021 08:44:27 -0700 (PDT) MIME-Version: 1.0 References: <20210429190926.5086-1-smalin@marvell.com> <20210429190926.5086-8-smalin@marvell.com> <8b17f15c-4776-1744-8183-fb783b7a4c97@suse.de> In-Reply-To: <8b17f15c-4776-1744-8183-fb783b7a4c97@suse.de> From: Shai Malin Date: Mon, 3 May 2021 18:44:16 +0300 Message-ID: Subject: Re: [RFC PATCH v4 07/27] qed: Add IP services APIs support To: Hannes Reinecke Cc: Shai Malin , netdev@vger.kernel.org, linux-nvme@lists.infradead.org, davem@davemloft.net, kuba@kernel.org, sagi@grimberg.me, hch@lst.de, axboe@fb.com, kbusch@kernel.org, Ariel Elior , Michal Kalderon , okulkarni@marvell.com, pkushwaha@marvell.com, Nikolay Assa X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210503_084429_604079_DE9C570C X-CRM114-Status: GOOD ( 26.86 ) X-BeenThere: linux-nvme@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-nvme" Errors-To: linux-nvme-bounces+linux-nvme=archiver.kernel.org@lists.infradead.org T24gNS8yLzIxIDI6MjYgUE0sIEhhbm5lcyBSZWluZWNrZSB3cm90ZToKPiBPbiA0LzI5LzIxIDk6 MDkgUE0sIFNoYWkgTWFsaW4gd3JvdGU6Cj4gPiBGcm9tOiBOaWtvbGF5IEFzc2EgPG5hc3NhQG1h cnZlbGwuY29tPgo+ID4KPiA+IFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBBUElzIHdoaWNoIHRoZSBO Vk1lVENQIE9mZmxvYWQgZGV2aWNlIChxZWRuKQo+ID4gd2lsbCB1c2UgdGhyb3VnaCB0aGUgcGFp cmVkIG5ldC1kZXZpY2UgKHFlZGUpLgo+ID4gSXQgaW5jbHVkZXMgQVBJcyBmb3I6Cj4gPiAtIGlw djQvaXB2NiByb3V0aW5nCj4gPiAtIGdldCBWTEFOIGZyb20gbmV0LWRldmljZQo+ID4gLSBUQ1Ag cG9ydHMgcmVzZXJ2YXRpb24KPiA+Cj4gPiBBY2tlZC1ieTogSWdvciBSdXNza2lraCA8aXJ1c3Nr aWtoQG1hcnZlbGwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogTmlrb2xheSBBc3NhIDxuYXNzYUBt YXJ2ZWxsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFByYWJoYWthciBLdXNod2FoYSA8cGt1c2h3 YWhhQG1hcnZlbGwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogT21rYXIgS3Vsa2FybmkgPG9rdWxr YXJuaUBtYXJ2ZWxsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IE1pY2hhbCBLYWxkZXJvbiA8bWth bGRlcm9uQG1hcnZlbGwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogQXJpZWwgRWxpb3IgPGFlbGlv ckBtYXJ2ZWxsLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFNoYWkgTWFsaW4gPHNtYWxpbkBtYXJ2 ZWxsLmNvbT4KPiA+IC0tLQo+ID4gICAuLi4vcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcF9pcF9zZXJ2 aWNlcy5jICAgICAgfCAyMzkgKysrKysrKysrKysrKysrKysrCj4gPiAgIC4uLi9saW51eC9xZWQv cWVkX252bWV0Y3BfaXBfc2VydmljZXNfaWYuaCAgICB8ICAyOSArKysKPiA+ICAgMiBmaWxlcyBj aGFuZ2VkLCAyNjggaW5zZXJ0aW9ucygrKQo+ID4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVy cy9uZXQvZXRoZXJuZXQvcWxvZ2ljL3FlZC9xZWRfbnZtZXRjcF9pcF9zZXJ2aWNlcy5jCj4gPiAg IGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L3FlZC9xZWRfbnZtZXRjcF9pcF9zZXJ2 aWNlc19pZi5oCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fsb2dp Yy9xZWQvcWVkX252bWV0Y3BfaXBfc2VydmljZXMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3Fs b2dpYy9xZWQvcWVkX252bWV0Y3BfaXBfc2VydmljZXMuYwo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQKPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjkwNGIxYTA4MzBhCj4gPiAtLS0gL2Rldi9udWxs Cj4gPiArKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9xbG9naWMvcWVkL3FlZF9udm1ldGNwX2lw X3NlcnZpY2VzLmMKPiA+IEBAIC0wLDAgKzEsMjM5IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTMtQ2xhdXNlKQo+ID4gKy8qCj4gPiArICog Q29weXJpZ2h0IDIwMjEgTWFydmVsbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KPiA+ICsgKi8KPiA+ ICsKPiA+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPiA+ICsjaW5jbHVkZSA8YXNtL2J5dGVv cmRlci5oPgo+ID4gKyNpbmNsdWRlIDxhc20vcGFyYW0uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgv ZGVsYXkuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcGNpLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4 L2RtYS1tYXBwaW5nLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Cj4gPiAr I2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4K PiA+ICsjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KPiA+ICsKPiA+ICsjaW5jbHVkZSA8bmV0L3Rj cC5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC9xZWQvcWVkX252bWV0Y3BfaXBfc2Vydmlj ZXNfaWYuaD4KPiA+ICsKPiA+ICsjZGVmaW5lIFFFRF9JUF9SRVNPTF9USU1FT1VUICA0Cj4gPiAr Cj4gPiAraW50IHFlZF9yb3V0ZV9pcHY0KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpsb2NhbF9h ZGRyLAo+ID4gKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqcmVtb3Rl X2FkZHIsCj4gPiArICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqaGFyZHdhcmVfYWRk cmVzcywKPiA+ICsgICAgICAgICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZGV2KQo+ID4g K3sKPiA+ICsgICAgIHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gTlVMTDsKPiA+ICsgICAgIF9f YmUzMiAqbG9jX2lwLCAqcmVtX2lwOwo+ID4gKyAgICAgc3RydWN0IHJ0YWJsZSAqcnQ7Cj4gPiAr ICAgICBpbnQgcmMgPSAtRU5YSU87Cj4gPiArICAgICBpbnQgcmV0cnk7Cj4gPiArCj4gPiArICAg ICBsb2NfaXAgPSAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilsb2NhbF9hZGRyKS0+c2luX2FkZHIu c19hZGRyOwo+ID4gKyAgICAgcmVtX2lwID0gJigoc3RydWN0IHNvY2thZGRyX2luICopcmVtb3Rl X2FkZHIpLT5zaW5fYWRkci5zX2FkZHI7Cj4gPiArICAgICAqbmRldiA9IE5VTEw7Cj4gPiArICAg ICBydCA9IGlwX3JvdXRlX291dHB1dCgmaW5pdF9uZXQsICpyZW1faXAsICpsb2NfaXAsIDAvKnRv cyovLCAwLypvaWYqLyk7Cj4gPiArICAgICBpZiAoSVNfRVJSKHJ0KSkgewo+ID4gKyAgICAgICAg ICAgICBwcl9lcnIoImxvb2t1cCByb3V0ZSBmYWlsZWRcbiIpOwo+ID4gKyAgICAgICAgICAgICBy YyA9IFBUUl9FUlIocnQpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIHJldHVybl9lcnI7Cj4gPiAr ICAgICB9Cj4gPiArCj4gPiArICAgICBuZWlnaCA9IGRzdF9uZWlnaF9sb29rdXAoJnJ0LT5kc3Qs IHJlbV9pcCk7Cj4gPiArICAgICBpZiAoIW5laWdoKSB7Cj4gPiArICAgICAgICAgICAgIHJjID0g LUVOT01FTTsKPiA+ICsgICAgICAgICAgICAgaXBfcnRfcHV0KHJ0KTsKPiA+ICsgICAgICAgICAg ICAgZ290byByZXR1cm5fZXJyOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgKm5kZXYgPSBy dC0+ZHN0LmRldjsKPiA+ICsgICAgIGlwX3J0X3B1dChydCk7Cj4gPiArCj4gPiArICAgICAvKiBJ ZiBub3QgcmVzb2x2ZWQsIGtpY2stb2ZmIHN0YXRlIG1hY2hpbmUgdG93YXJkcyByZXNvbHV0aW9u ICovCj4gPiArICAgICBpZiAoIShuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkKPiA+ICsg ICAgICAgICAgICAgbmVpZ2hfZXZlbnRfc2VuZChuZWlnaCwgTlVMTCk7Cj4gPiArCj4gPiArICAg ICAvKiBxdWVyeSBuZWlnaGJvciB1bnRpbCByZXNvbHZlZCBvciB0aW1lb3V0ICovCj4gPiArICAg ICByZXRyeSA9IFFFRF9JUF9SRVNPTF9USU1FT1VUOwo+ID4gKyAgICAgd2hpbGUgKCEobmVpZ2gt Pm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkgJiYgcmV0cnkgPiAwKSB7Cj4gPiArICAgICAgICAgICAg IG1zbGVlcCgxMDAwKTsKPiA+ICsgICAgICAgICAgICAgcmV0cnktLTsKPiA+ICsgICAgIH0KPiA+ ICsKPiA+ICsgICAgIGlmIChuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSB7Cj4gPiArICAg ICAgICAgICAgIC8qIGNvcHkgcmVzb2x2ZWQgTUFDIGFkZHJlc3MgKi8KPiA+ICsgICAgICAgICAg ICAgbmVpZ2hfaGFfc25hcHNob3QoaGFyZHdhcmVfYWRkcmVzcy0+c2FfZGF0YSwgbmVpZ2gsICpu ZGV2KTsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgaGFyZHdhcmVfYWRkcmVzcy0+c2FfZmFtaWx5 ID0gKCpuZGV2KS0+dHlwZTsKPiA+ICsgICAgICAgICAgICAgcmMgPSAwOwo+ID4gKyAgICAgfQo+ ID4gKwo+ID4gKyAgICAgbmVpZ2hfcmVsZWFzZShuZWlnaCk7Cj4gPiArICAgICBpZiAoISgqbG9j X2lwKSkgewo+ID4gKyAgICAgICAgICAgICAqbG9jX2lwID0gaW5ldF9zZWxlY3RfYWRkcigqbmRl diwgKnJlbV9pcCwgUlRfU0NPUEVfVU5JVkVSU0UpOwo+ID4gKyAgICAgICAgICAgICBsb2NhbF9h ZGRyLT5zc19mYW1pbHkgPSBBRl9JTkVUOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gK3JldHVybl9l cnI6Cj4gPiArCj4gPiArICAgICByZXR1cm4gcmM7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0wo cWVkX3JvdXRlX2lwdjQpOwo+ID4gKwo+ID4gK2ludCBxZWRfcm91dGVfaXB2NihzdHJ1Y3Qgc29j a2FkZHJfc3RvcmFnZSAqbG9jYWxfYWRkciwKPiA+ICsgICAgICAgICAgICAgICAgc3RydWN0IHNv Y2thZGRyX3N0b3JhZ2UgKnJlbW90ZV9hZGRyLAo+ID4gKyAgICAgICAgICAgICAgICBzdHJ1Y3Qg c29ja2FkZHIgKmhhcmR3YXJlX2FkZHJlc3MsCj4gPiArICAgICAgICAgICAgICAgIHN0cnVjdCBu ZXRfZGV2aWNlICoqbmRldikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgbmVpZ2hib3VyICpuZWln aCA9IE5VTEw7Cj4gPiArICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Cj4gPiArICAgICBzdHJ1 Y3QgZmxvd2k2IGZsNjsKPiA+ICsgICAgIGludCByYyA9IC1FTlhJTzsKPiA+ICsgICAgIGludCBy ZXRyeTsKPiA+ICsKPiA+ICsgICAgIG1lbXNldCgmZmw2LCAwLCBzaXplb2YoZmw2KSk7Cj4gPiAr ICAgICBmbDYuc2FkZHIgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilsb2NhbF9hZGRyKS0+c2lu Nl9hZGRyOwo+ID4gKyAgICAgZmw2LmRhZGRyID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVt b3RlX2FkZHIpLT5zaW42X2FkZHI7Cj4gPiArCj4gPiArICAgICBkc3QgPSBpcDZfcm91dGVfb3V0 cHV0KCZpbml0X25ldCwgTlVMTCwgJmZsNik7Cj4gPiArICAgICBpZiAoIWRzdCB8fCBkc3QtPmVy cm9yKSB7Cj4gPiArICAgICAgICAgICAgIGlmIChkc3QpIHsKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBkc3RfcmVsZWFzZShkc3QpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHByX2Vycigi bG9va3VwIHJvdXRlIGZhaWxlZCAlZFxuIiwgZHN0LT5lcnJvcik7Cj4gPiArICAgICAgICAgICAg IH0KPiA+ICsKPiA+ICsgICAgICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICB9Cj4gPiArCj4g PiArICAgICBuZWlnaCA9IGRzdF9uZWlnaF9sb29rdXAoZHN0LCAmZmw2LmRhZGRyKTsKPiA+ICsg ICAgIGlmIChuZWlnaCkgewo+ID4gKyAgICAgICAgICAgICAqbmRldiA9IGlwNl9kc3RfaWRldihk c3QpLT5kZXY7Cj4gPiArCj4gPiArICAgICAgICAgICAgIC8qIElmIG5vdCByZXNvbHZlZCwga2lj ay1vZmYgc3RhdGUgbWFjaGluZSB0b3dhcmRzIHJlc29sdXRpb24gKi8KPiA+ICsgICAgICAgICAg ICAgaWYgKCEobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkpCj4gPiArICAgICAgICAgICAg ICAgICAgICAgbmVpZ2hfZXZlbnRfc2VuZChuZWlnaCwgTlVMTCk7Cj4gPiArCj4gPiArICAgICAg ICAgICAgIC8qIHF1ZXJ5IG5laWdoYm9yIHVudGlsIHJlc29sdmVkIG9yIHRpbWVvdXQgKi8KPiA+ ICsgICAgICAgICAgICAgcmV0cnkgPSBRRURfSVBfUkVTT0xfVElNRU9VVDsKPiA+ICsgICAgICAg ICAgICAgd2hpbGUgKCEobmVpZ2gtPm51ZF9zdGF0ZSAmIE5VRF9WQUxJRCkgJiYgcmV0cnkgPiAw KSB7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMDApOwo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldHJ5LS07Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsKPiA+ICsgICAg ICAgICAgICAgaWYgKG5laWdoLT5udWRfc3RhdGUgJiBOVURfVkFMSUQpIHsKPiA+ICsgICAgICAg ICAgICAgICAgICAgICBuZWlnaF9oYV9zbmFwc2hvdCgodTggKiloYXJkd2FyZV9hZGRyZXNzLT5z YV9kYXRhLCBuZWlnaCwgKm5kZXYpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGhh cmR3YXJlX2FkZHJlc3MtPnNhX2ZhbWlseSA9ICgqbmRldiktPnR5cGU7Cj4gPiArICAgICAgICAg ICAgICAgICAgICAgcmMgPSAwOwo+ID4gKyAgICAgICAgICAgICB9Cj4gPiArCj4gPiArICAgICAg ICAgICAgIG5laWdoX3JlbGVhc2UobmVpZ2gpOwo+ID4gKwo+ID4gKyAgICAgICAgICAgICBpZiAo aXB2Nl9hZGRyX2FueSgmZmw2LnNhZGRyKSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlm IChpcHY2X2Rldl9nZXRfc2FkZHIoZGV2X25ldCgqbmRldiksICpuZGV2LAo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmZsNi5kYWRkciwgMCwgJmZsNi5z YWRkcikpIHsKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByX2VycigiVW5hYmxl IHRvIGZpbmQgc291cmNlIElQIGFkZHJlc3NcbiIpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZ290byBvdXQ7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgfQo+ID4gKwo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHItPnNzX2ZhbWlseSA9IEFGX0lORVQ2Owo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICgoc3RydWN0IHNvY2thZGRyX2luNiAqKWxvY2FsX2Fk ZHIpLT5zaW42X2FkZHIgPQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBmbDYuc2FkZHI7Cj4gPiArICAgICAgICAgICAgIH0K PiA+ICsgICAgIH0KPiA+ICsKPiA+ICsgICAgIGRzdF9yZWxlYXNlKGRzdCk7Cj4gPiArCj4gPiAr b3V0Ogo+ID4gKwo+ID4gKyAgICAgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9M KHFlZF9yb3V0ZV9pcHY2KTsKPiA+ICsKPiA+ICt2b2lkIHFlZF92bGFuX2dldF9uZGV2KHN0cnVj dCBuZXRfZGV2aWNlICoqbmRldiwgdTE2ICp2bGFuX2lkKQo+ID4gK3sKPiA+ICsgICAgIGlmIChp c192bGFuX2RldigqbmRldikpIHsKPiA+ICsgICAgICAgICAgICAgKnZsYW5faWQgPSB2bGFuX2Rl dl92bGFuX2lkKCpuZGV2KTsKPiA+ICsgICAgICAgICAgICAgKm5kZXYgPSB2bGFuX2Rldl9yZWFs X2RldigqbmRldik7Cj4gPiArICAgICB9Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0wocWVkX3Zs YW5fZ2V0X25kZXYpOwo+ID4gKwo+ID4gK3N0cnVjdCBwY2lfZGV2ICpxZWRfdmFsaWRhdGVfbmRl dihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKPiA+ICt7Cj4gPiArICAgICBzdHJ1Y3QgcGNpX2Rl diAqcGRldiA9IE5VTEw7Cj4gPiArICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqdXBwZXI7Cj4gPiAr Cj4gPiArICAgICBmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKPiA+ICsgICAgICAgICAgICAgaWYg KHBkZXYgJiYgcGRldi0+ZHJpdmVyICYmCj4gPiArICAgICAgICAgICAgICAgICAhc3RyY21wKHBk ZXYtPmRyaXZlci0+bmFtZSwgInFlZGUiKSkgewo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHVw cGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlm ICh1cHBlci0+aWZpbmRleCA9PSBuZGV2LT5pZmluZGV4KQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHBkZXY7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAgIH0K PiA+ICsKPiA+ICsgICAgIHJldHVybiBOVUxMOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKHFl ZF92YWxpZGF0ZV9uZGV2KTsKPiA+ICsKPiA+ICtfX2JlMTYgcWVkX2dldF9pbl9wb3J0KHN0cnVj dCBzb2NrYWRkcl9zdG9yYWdlICpzYSkKPiA+ICt7Cj4gPiArICAgICByZXR1cm4gc2EtPnNzX2Zh bWlseSA9PSBBRl9JTkVUCj4gPiArICAgICAgICAgICAgID8gKChzdHJ1Y3Qgc29ja2FkZHJfaW4g KilzYSktPnNpbl9wb3J0Cj4gPiArICAgICAgICAgICAgIDogKChzdHJ1Y3Qgc29ja2FkZHJfaW42 ICopc2EpLT5zaW42X3BvcnQ7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0wocWVkX2dldF9pbl9w b3J0KTsKPiA+ICsKPiA+ICtpbnQgcWVkX2ZldGNoX3RjcF9wb3J0KHN0cnVjdCBzb2NrYWRkcl9z dG9yYWdlIGxvY2FsX2lwX2FkZHIsCj4gPiArICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29j a2V0ICoqc29jaywgdTE2ICpwb3J0KQo+ID4gK3sKPiA+ICsgICAgIHN0cnVjdCBzb2NrYWRkcl9z dG9yYWdlIHNhOwo+ID4gKyAgICAgaW50IHJjID0gMDsKPiA+ICsKPiA+ICsgICAgIHJjID0gc29j a19jcmVhdGUobG9jYWxfaXBfYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RD UCwgc29jayk7Cj4gPiArICAgICBpZiAocmMpIHsKPiA+ICsgICAgICAgICAgICAgcHJfd2Fybigi ZmFpbGVkIHRvIGNyZWF0ZSBzb2NrZXQ6ICVkXG4iLCByYyk7Cj4gPiArICAgICAgICAgICAgIGdv dG8gZXJyOwo+ID4gKyAgICAgfQo+ID4gKwo+ID4gKyAgICAgKCpzb2NrKS0+c2stPnNrX2FsbG9j YXRpb24gPSBHRlBfS0VSTkVMOwo+ID4gKyAgICAgc2tfc2V0X21lbWFsbG9jKCgqc29jayktPnNr KTsKPiA+ICsKPiA+ICsgICAgIHJjID0ga2VybmVsX2JpbmQoKnNvY2ssIChzdHJ1Y3Qgc29ja2Fk ZHIgKikmbG9jYWxfaXBfYWRkciwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxv Y2FsX2lwX2FkZHIpKTsKPiA+ICsKPiA+ICsgICAgIGlmIChyYykgewo+ID4gKyAgICAgICAgICAg ICBwcl93YXJuKCJmYWlsZWQgdG8gYmluZCBzb2NrZXQ6ICVkXG4iLCByYyk7Cj4gPiArICAgICAg ICAgICAgIGdvdG8gZXJyX3NvY2s7Cj4gPiArICAgICB9Cj4gPiArCj4gPiArICAgICByYyA9IGtl cm5lbF9nZXRzb2NrbmFtZSgqc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZzYSk7Cj4gPiArICAg ICBpZiAocmMgPCAwKSB7Cj4gPiArICAgICAgICAgICAgIHByX3dhcm4oImdldHNvY2tuYW1lKCkg ZmFpbGVkOiAlZFxuIiwgcmMpOwo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9zb2NrOwo+ID4g KyAgICAgfQo+ID4gKwo+ID4gKyAgICAgKnBvcnQgPSBudG9ocyhxZWRfZ2V0X2luX3BvcnQoJnNh KSk7Cj4gPiArCj4gPiArICAgICByZXR1cm4gMDsKPiA+ICsKPiA+ICtlcnJfc29jazoKPiA+ICsg ICAgIHNvY2tfcmVsZWFzZSgqc29jayk7Cj4gPiArICAgICBzb2NrID0gTlVMTDsKPiA+ICtlcnI6 Cj4gPiArCj4gPiArICAgICByZXR1cm4gcmM7Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0wocWVk X2ZldGNoX3RjcF9wb3J0KTsKPiA+ICsKPiA+ICt2b2lkIHFlZF9yZXR1cm5fdGNwX3BvcnQoc3Ry dWN0IHNvY2tldCAqc29jaykKPiA+ICt7Cj4gPiArICAgICBpZiAoc29jayAmJiBzb2NrLT5zaykg ewo+ID4gKyAgICAgICAgICAgICB0Y3Bfc2V0X3N0YXRlKHNvY2stPnNrLCBUQ1BfQ0xPU0UpOwo+ ID4gKyAgICAgICAgICAgICBzb2NrX3JlbGVhc2Uoc29jayk7Cj4gPiArICAgICB9Cj4gPiArfQo+ ID4gK0VYUE9SVF9TWU1CT0wocWVkX3JldHVybl90Y3BfcG9ydCk7Cj4gPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC9xZWQvcWVkX252bWV0Y3BfaXBfc2VydmljZXNfaWYuaCBiL2luY2x1ZGUv bGludXgvcWVkL3FlZF9udm1ldGNwX2lwX3NlcnZpY2VzX2lmLmgKPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0Cj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjM2MDRhZWU1Mzc5Ngo+ID4gLS0tIC9kZXYv bnVsbAo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9xZWQvcWVkX252bWV0Y3BfaXBfc2VydmljZXNf aWYuaAo+ID4gQEAgLTAsMCArMSwyOSBAQAo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0zLUNsYXVzZSkgKi8KPiA+ICsvKgo+ID4gKyAqIENvcHly aWdodCAyMDIxIE1hcnZlbGwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gPiArICovCj4gPiArCj4g PiArI2lmbmRlZiBfUUVEX0lQX1NFUlZJQ0VTX0lGX0gKPiA+ICsjZGVmaW5lIF9RRURfSVBfU0VS VklDRVNfSUZfSAo+ID4gKwo+ID4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ID4gKyNpbmNs dWRlIDxuZXQvcm91dGUuaD4KPiA+ICsjaW5jbHVkZSA8bmV0L2lwNl9yb3V0ZS5oPgo+ID4gKyNp bmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+Cj4gPiArCj4gPiAraW50IHFlZF9yb3V0ZV9pcHY0 KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpsb2NhbF9hZGRyLAo+ID4gKyAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqcmVtb3RlX2FkZHIsCj4gPiArICAgICAgICAgICAg ICAgIHN0cnVjdCBzb2NrYWRkciAqaGFyZHdhcmVfYWRkcmVzcywKPiA+ICsgICAgICAgICAgICAg ICAgc3RydWN0IG5ldF9kZXZpY2UgKipuZGV2KTsKPiA+ICtpbnQgcWVkX3JvdXRlX2lwdjYoc3Ry dWN0IHNvY2thZGRyX3N0b3JhZ2UgKmxvY2FsX2FkZHIsCj4gPiArICAgICAgICAgICAgICAgIHN0 cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpyZW1vdGVfYWRkciwKPiA+ICsgICAgICAgICAgICAgICAg c3RydWN0IHNvY2thZGRyICpoYXJkd2FyZV9hZGRyZXNzLAo+ID4gKyAgICAgICAgICAgICAgICBz dHJ1Y3QgbmV0X2RldmljZSAqKm5kZXYpOwo+ID4gK3ZvaWQgcWVkX3ZsYW5fZ2V0X25kZXYoc3Ry dWN0IG5ldF9kZXZpY2UgKipuZGV2LCB1MTYgKnZsYW5faWQpOwo+ID4gK3N0cnVjdCBwY2lfZGV2 ICpxZWRfdmFsaWRhdGVfbmRldihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7Cj4gPiArdm9pZCBx ZWRfcmV0dXJuX3RjcF9wb3J0KHN0cnVjdCBzb2NrZXQgKnNvY2spOwo+ID4gK2ludCBxZWRfZmV0 Y2hfdGNwX3BvcnQoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgbG9jYWxfaXBfYWRkciwKPiA+ICsg ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrZXQgKipzb2NrLCB1MTYgKnBvcnQpOwo+ID4g K19fYmUxNiBxZWRfZ2V0X2luX3BvcnQoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNhKTsKPiA+ ICsKPiA+ICsjZW5kaWYgLyogX1FFRF9JUF9TRVJWSUNFU19JRl9IICovCj4gPgo+IFJldmlld2Vk LWJ5OiBIYW5uZXMgUmVpbmVja2UgPGhhcmVAc3VzZS5kZT4KPgoKVGhhbmtzLgoKPiBDaGVlcnMs Cj4KPiBIYW5uZXMKPiAtLQo+IERyLiBIYW5uZXMgUmVpbmVja2UgICAgICAgICAgICAgICAgS2Vy bmVsIFN0b3JhZ2UgQXJjaGl0ZWN0Cj4gaGFyZUBzdXNlLmRlICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKzQ5IDkxMSA3NDA1MyA2ODgKPiBTVVNFIFNvZnR3YXJlIFNvbHV0aW9ucyBHbWJI LCBNYXhmZWxkc3RyLiA1LCA5MDQwOSBOw7xybmJlcmcKPiBIUkIgMzY4MDkgKEFHIE7DvHJuYmVy ZyksIEdlc2Now6RmdHNmw7xocmVyOiBGZWxpeCBJbWVuZMO2cmZmZXIKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LW52bWUgbWFpbGluZyBsaXN0 CkxpbnV4LW52bWVAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LW52bWUK