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=-8.5 required=3.0 tests=DKIM_ADSP_ALL,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 2F270C43603 for ; Tue, 17 Dec 2019 13:33:09 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 ECC5E218AC for ; Tue, 17 Dec 2019 13:33:08 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="SFgFV7tm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org ECC5E218AC Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=amazon.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ihCxp-0005t4-WD; Tue, 17 Dec 2019 13:32:37 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ihCxo-0005sz-SJ for xen-devel@lists.xenproject.org; Tue, 17 Dec 2019 13:32:36 +0000 X-Inumbo-ID: ab056980-20d1-11ea-b6f1-bc764e2007e4 Received: from smtp-fw-6002.amazon.com (unknown [52.95.49.90]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id ab056980-20d1-11ea-b6f1-bc764e2007e4; Tue, 17 Dec 2019 13:32:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576589548; x=1608125548; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=it5l6mpYZRid1aYG4+U9jyJYzX0Xra6TMdWLnJMkqQM=; b=SFgFV7tm+ZjDQUleane20dACYUrmWdVpmF8ce8lnKMbipqFM1JFvTRRY ZmEi3u8WEodHsXdhwV+zYaydAZGWD5dCbE8rHJ/NKWN6GWzQlp6qhho6S MhNXkNo5JyvXJ6pBDGaLCm7X2CQx/kWQS/NMyKuif785rlmafZKQPbRBL c=; IronPort-SDR: /+6d9mF5v6AAess7gP70O0JF65nm7kTr8MUAi9kqTkxtmNGdDVp5rOZ124sbMmsGI20cXvDNZW pWUdudGuNskA== X-IronPort-AV: E=Sophos;i="5.69,325,1571702400"; d="scan'208";a="7995912" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2c-87a10be6.us-west-2.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP; 17 Dec 2019 13:32:27 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan2.pdx.amazon.com [10.170.41.162]) by email-inbound-relay-2c-87a10be6.us-west-2.amazon.com (Postfix) with ESMTPS id D1AE8A22AF; Tue, 17 Dec 2019 13:32:25 +0000 (UTC) Received: from EX13D32EUB004.ant.amazon.com (10.43.166.212) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 17 Dec 2019 13:32:25 +0000 Received: from EX13MTAUEA001.ant.amazon.com (10.43.61.82) by EX13D32EUB004.ant.amazon.com (10.43.166.212) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 17 Dec 2019 13:32:24 +0000 Received: from u2f063a87eabd5f.cbg10.amazon.com (10.125.106.135) by mail-relay.amazon.com (10.43.61.243) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Tue, 17 Dec 2019 13:32:22 +0000 From: Paul Durrant To: , , Date: Tue, 17 Dec 2019 13:32:16 +0000 Message-ID: <20191217133218.27085-2-pdurrant@amazon.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191217133218.27085-1-pdurrant@amazon.com> References: <20191217133218.27085-1-pdurrant@amazon.com> MIME-Version: 1.0 Precedence: Bulk Subject: [Xen-devel] [PATCH net-next 1/3] xen-netback: move netback_probe() and netback_remove() to the end... X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Paul Durrant , "David S. Miller" , Wei Liu , Paul Durrant Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Li4ub2YgeGVuYnVzLmMKClRoaXMgaXMgYSBjb3NtZXRpYyBmdW5jdGlvbiByZS1vcmRlcmluZyB0 byByZWR1Y2UgY2h1cm4gaW4gYSBzdWJzZXF1ZW50CnBhdGNoLiBTb21lIHN0eWxlIGZpeC11cCB3 YXMgZG9uZSB0byBtYWtlIGNoZWNrcGF0Y2gucGwgaGFwcGllci4KCk5vIGZ1bmN0aW9uYWwgY2hh bmdlLgoKU2lnbmVkLW9mZi1ieTogUGF1bCBEdXJyYW50IDxwZHVycmFudEBhbWF6b24uY29tPgot LS0KQ2M6IFdlaSBMaXUgPHdlaS5saXVAa2VybmVsLm9yZz4KQ2M6IFBhdWwgRHVycmFudCA8cGF1 bEB4ZW4ub3JnPgpDYzogIkRhdmlkIFMuIE1pbGxlciIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+Ci0t LQogZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMgfCAzNTMgKysrKysrKysrKysrKysr LS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCspLCAxNzkg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVz LmMgYi9kcml2ZXJzL25ldC94ZW4tbmV0YmFjay94ZW5idXMuYwppbmRleCBmNTMzYjczNzJkNTku LmJiNjEzMTZkNzlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVz LmMKKysrIGIvZHJpdmVycy9uZXQveGVuLW5ldGJhY2sveGVuYnVzLmMKQEAgLTE5NSwxODUgKzE5 NSw2IEBAIHN0YXRpYyB2b2lkIHhlbnZpZl9kZWJ1Z2ZzX2RlbGlmKHN0cnVjdCB4ZW52aWYgKnZp ZikKIH0KICNlbmRpZiAvKiBDT05GSUdfREVCVUdfRlMgKi8KIAotc3RhdGljIGludCBuZXRiYWNr X3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2KQotewotCXN0cnVjdCBiYWNrZW5kX2lu Zm8gKmJlID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7Ci0KLQlzZXRfYmFja2VuZF9zdGF0 ZShiZSwgWGVuYnVzU3RhdGVDbG9zZWQpOwotCi0JdW5yZWdpc3Rlcl9ob3RwbHVnX3N0YXR1c193 YXRjaChiZSk7Ci0JaWYgKGJlLT52aWYpIHsKLQkJa29iamVjdF91ZXZlbnQoJmRldi0+ZGV2Lmtv YmosIEtPQkpfT0ZGTElORSk7Ci0JCXhlbl91bnJlZ2lzdGVyX3dhdGNoZXJzKGJlLT52aWYpOwot CQl4ZW5idXNfcm0oWEJUX05JTCwgZGV2LT5ub2RlbmFtZSwgImhvdHBsdWctc3RhdHVzIik7Ci0J CXhlbnZpZl9mcmVlKGJlLT52aWYpOwotCQliZS0+dmlmID0gTlVMTDsKLQl9Ci0Ja2ZyZWUoYmUt PmhvdHBsdWdfc2NyaXB0KTsKLQlrZnJlZShiZSk7Ci0JZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRl diwgTlVMTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKiBFbnRyeSBwb2ludCB0byB0aGlz IGNvZGUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY3JlYXRlZC4gIEFsbG9jYXRlIHRoZSBiYXNpYwot ICogc3RydWN0dXJlcyBhbmQgc3dpdGNoIHRvIEluaXRXYWl0LgotICovCi1zdGF0aWMgaW50IG5l dGJhY2tfcHJvYmUoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldiwKLQkJCSBjb25zdCBzdHJ1Y3Qg eGVuYnVzX2RldmljZV9pZCAqaWQpCi17Ci0JY29uc3QgY2hhciAqbWVzc2FnZTsKLQlzdHJ1Y3Qg eGVuYnVzX3RyYW5zYWN0aW9uIHhidDsKLQlpbnQgZXJyOwotCWludCBzZzsKLQljb25zdCBjaGFy ICpzY3JpcHQ7Ci0Jc3RydWN0IGJhY2tlbmRfaW5mbyAqYmUgPSBremFsbG9jKHNpemVvZihzdHJ1 Y3QgYmFja2VuZF9pbmZvKSwKLQkJCQkJICBHRlBfS0VSTkVMKTsKLQlpZiAoIWJlKSB7Ci0JCXhl bmJ1c19kZXZfZmF0YWwoZGV2LCAtRU5PTUVNLAotCQkJCSAiYWxsb2NhdGluZyBiYWNrZW5kIHN0 cnVjdHVyZSIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQliZS0+ZGV2ID0gZGV2OwotCWRl dl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGJlKTsKLQotCWJlLT5zdGF0ZSA9IFhlbmJ1c1N0YXRl SW5pdGlhbGlzaW5nOwotCWVyciA9IHhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0 ZUluaXRpYWxpc2luZyk7Ci0JaWYgKGVycikKLQkJZ290byBmYWlsOwotCi0Jc2cgPSAxOwotCi0J ZG8gewotCQllcnIgPSB4ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7Ci0JCWlmIChlcnIp IHsKLQkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJzdGFydGluZyB0cmFuc2FjdGlvbiIp OwotCQkJZ290byBmYWlsOwotCQl9Ci0KLQkJZXJyID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+ bm9kZW5hbWUsICJmZWF0dXJlLXNnIiwgIiVkIiwgc2cpOwotCQlpZiAoZXJyKSB7Ci0JCQltZXNz YWdlID0gIndyaXRpbmcgZmVhdHVyZS1zZyI7Ci0JCQlnb3RvIGFib3J0X3RyYW5zYWN0aW9uOwot CQl9Ci0KLQkJZXJyID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+bm9kZW5hbWUsICJmZWF0dXJl LWdzby10Y3B2NCIsCi0JCQkJICAgICIlZCIsIHNnKTsKLQkJaWYgKGVycikgewotCQkJbWVzc2Fn ZSA9ICJ3cml0aW5nIGZlYXR1cmUtZ3NvLXRjcHY0IjsKLQkJCWdvdG8gYWJvcnRfdHJhbnNhY3Rp b247Ci0JCX0KLQotCQllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwgImZl YXR1cmUtZ3NvLXRjcHY2IiwKLQkJCQkgICAgIiVkIiwgc2cpOwotCQlpZiAoZXJyKSB7Ci0JCQlt ZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1nc28tdGNwdjYiOwotCQkJZ290byBhYm9ydF90cmFu c2FjdGlvbjsKLQkJfQotCi0JCS8qIFdlIHN1cHBvcnQgcGFydGlhbCBjaGVja3N1bSBzZXR1cCBm b3IgSVB2NiBwYWNrZXRzICovCi0JCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVu YW1lLAotCQkJCSAgICAiZmVhdHVyZS1pcHY2LWNzdW0tb2ZmbG9hZCIsCi0JCQkJICAgICIlZCIs IDEpOwotCQlpZiAoZXJyKSB7Ci0JCQltZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1pcHY2LWNz dW0tb2ZmbG9hZCI7Ci0JCQlnb3RvIGFib3J0X3RyYW5zYWN0aW9uOwotCQl9Ci0KLQkJLyogV2Ug c3VwcG9ydCByeC1jb3B5IHBhdGguICovCi0JCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYt Pm5vZGVuYW1lLAotCQkJCSAgICAiZmVhdHVyZS1yeC1jb3B5IiwgIiVkIiwgMSk7Ci0JCWlmIChl cnIpIHsKLQkJCW1lc3NhZ2UgPSAid3JpdGluZyBmZWF0dXJlLXJ4LWNvcHkiOwotCQkJZ290byBh Ym9ydF90cmFuc2FjdGlvbjsKLQkJfQotCi0JCS8qCi0JCSAqIFdlIGRvbid0IHN1cHBvcnQgcngt ZmxpcCBwYXRoIChleGNlcHQgb2xkIGd1ZXN0cyB3aG8gZG9uJ3QKLQkJICogZ3JvayB0aGlzIGZl YXR1cmUgZmxhZykuCi0JCSAqLwotCQllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2Rl bmFtZSwKLQkJCQkgICAgImZlYXR1cmUtcngtZmxpcCIsICIlZCIsIDApOwotCQlpZiAoZXJyKSB7 Ci0JCQltZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1yeC1mbGlwIjsKLQkJCWdvdG8gYWJvcnRf dHJhbnNhY3Rpb247Ci0JCX0KLQotCQkvKiBXZSBzdXBwb3J0IGR5bmFtaWMgbXVsdGljYXN0LWNv bnRyb2wuICovCi0JCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVuYW1lLAotCQkJ CSAgICAiZmVhdHVyZS1tdWx0aWNhc3QtY29udHJvbCIsICIlZCIsIDEpOwotCQlpZiAoZXJyKSB7 Ci0JCQltZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1tdWx0aWNhc3QtY29udHJvbCI7Ci0JCQln b3RvIGFib3J0X3RyYW5zYWN0aW9uOwotCQl9Ci0KLQkJZXJyID0geGVuYnVzX3ByaW50Zih4YnQs IGRldi0+bm9kZW5hbWUsCi0JCQkJICAgICJmZWF0dXJlLWR5bmFtaWMtbXVsdGljYXN0LWNvbnRy b2wiLAotCQkJCSAgICAiJWQiLCAxKTsKLQkJaWYgKGVycikgewotCQkJbWVzc2FnZSA9ICJ3cml0 aW5nIGZlYXR1cmUtZHluYW1pYy1tdWx0aWNhc3QtY29udHJvbCI7Ci0JCQlnb3RvIGFib3J0X3Ry YW5zYWN0aW9uOwotCQl9Ci0KLQkJZXJyID0geGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQsIDAp OwotCX0gd2hpbGUgKGVyciA9PSAtRUFHQUlOKTsKLQotCWlmIChlcnIpIHsKLQkJeGVuYnVzX2Rl dl9mYXRhbChkZXYsIGVyciwgImNvbXBsZXRpbmcgdHJhbnNhY3Rpb24iKTsKLQkJZ290byBmYWls OwotCX0KLQotCS8qCi0JICogU3BsaXQgZXZlbnQgY2hhbm5lbHMgc3VwcG9ydCwgdGhpcyBpcyBv cHRpb25hbCBzbyBpdCBpcyBub3QKLQkgKiBwdXQgaW5zaWRlIHRoZSBhYm92ZSBsb29wLgotCSAq LwotCWVyciA9IHhlbmJ1c19wcmludGYoWEJUX05JTCwgZGV2LT5ub2RlbmFtZSwKLQkJCSAgICAi ZmVhdHVyZS1zcGxpdC1ldmVudC1jaGFubmVscyIsCi0JCQkgICAgIiV1Iiwgc2VwYXJhdGVfdHhf cnhfaXJxKTsKLQlpZiAoZXJyKQotCQlwcl9kZWJ1ZygiRXJyb3Igd3JpdGluZyBmZWF0dXJlLXNw bGl0LWV2ZW50LWNoYW5uZWxzXG4iKTsKLQotCS8qIE11bHRpLXF1ZXVlIHN1cHBvcnQ6IFRoaXMg aXMgYW4gb3B0aW9uYWwgZmVhdHVyZS4gKi8KLQllcnIgPSB4ZW5idXNfcHJpbnRmKFhCVF9OSUws IGRldi0+bm9kZW5hbWUsCi0JCQkgICAgIm11bHRpLXF1ZXVlLW1heC1xdWV1ZXMiLCAiJXUiLCB4 ZW52aWZfbWF4X3F1ZXVlcyk7Ci0JaWYgKGVycikKLQkJcHJfZGVidWcoIkVycm9yIHdyaXRpbmcg bXVsdGktcXVldWUtbWF4LXF1ZXVlc1xuIik7Ci0KLQllcnIgPSB4ZW5idXNfcHJpbnRmKFhCVF9O SUwsIGRldi0+bm9kZW5hbWUsCi0JCQkgICAgImZlYXR1cmUtY3RybC1yaW5nIiwKLQkJCSAgICAi JXUiLCB0cnVlKTsKLQlpZiAoZXJyKQotCQlwcl9kZWJ1ZygiRXJyb3Igd3JpdGluZyBmZWF0dXJl LWN0cmwtcmluZ1xuIik7Ci0KLQlzY3JpcHQgPSB4ZW5idXNfcmVhZChYQlRfTklMLCBkZXYtPm5v ZGVuYW1lLCAic2NyaXB0IiwgTlVMTCk7Ci0JaWYgKElTX0VSUihzY3JpcHQpKSB7Ci0JCWVyciA9 IFBUUl9FUlIoc2NyaXB0KTsKLQkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgInJlYWRpbmcg c2NyaXB0Iik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0KLQliZS0+aG90cGx1Z19zY3JpcHQgPSBzY3Jp cHQ7Ci0KLQotCS8qIFRoaXMga2lja3MgaG90cGx1ZyBzY3JpcHRzLCBzbyBkbyBpdCBpbW1lZGlh dGVseS4gKi8KLQllcnIgPSBiYWNrZW5kX2NyZWF0ZV94ZW52aWYoYmUpOwotCWlmIChlcnIpCi0J CWdvdG8gZmFpbDsKLQotCXJldHVybiAwOwotCi1hYm9ydF90cmFuc2FjdGlvbjoKLQl4ZW5idXNf dHJhbnNhY3Rpb25fZW5kKHhidCwgMSk7Ci0JeGVuYnVzX2Rldl9mYXRhbChkZXYsIGVyciwgIiVz IiwgbWVzc2FnZSk7Ci1mYWlsOgotCXByX2RlYnVnKCJmYWlsZWRcbiIpOwotCW5ldGJhY2tfcmVt b3ZlKGRldik7Ci0JcmV0dXJuIGVycjsKLX0KLQotCiAvKgogICogSGFuZGxlIHRoZSBjcmVhdGlv biBvZiB0aGUgaG90cGx1ZyBzY3JpcHQgZW52aXJvbm1lbnQuICBXZSBhZGQgdGhlIHNjcmlwdAog ICogYW5kIHZpZiB2YXJpYWJsZXMgdG8gdGhlIGVudmlyb25tZW50LCBmb3IgdGhlIGJlbmVmaXQg b2YgdGhlIHZpZi0qIGhvdHBsdWcKQEAgLTExMjgsNiArOTQ5LDE4MCBAQCBzdGF0aWMgaW50IHJl YWRfeGVuYnVzX3ZpZl9mbGFncyhzdHJ1Y3QgYmFja2VuZF9pbmZvICpiZSkKIAlyZXR1cm4gMDsK IH0KIAorc3RhdGljIGludCBuZXRiYWNrX3JlbW92ZShzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2 KQoreworCXN0cnVjdCBiYWNrZW5kX2luZm8gKmJlID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRl dik7CisKKwlzZXRfYmFja2VuZF9zdGF0ZShiZSwgWGVuYnVzU3RhdGVDbG9zZWQpOworCisJdW5y ZWdpc3Rlcl9ob3RwbHVnX3N0YXR1c193YXRjaChiZSk7CisJaWYgKGJlLT52aWYpIHsKKwkJa29i amVjdF91ZXZlbnQoJmRldi0+ZGV2LmtvYmosIEtPQkpfT0ZGTElORSk7CisJCXhlbl91bnJlZ2lz dGVyX3dhdGNoZXJzKGJlLT52aWYpOworCQl4ZW5idXNfcm0oWEJUX05JTCwgZGV2LT5ub2RlbmFt ZSwgImhvdHBsdWctc3RhdHVzIik7CisJCXhlbnZpZl9mcmVlKGJlLT52aWYpOworCQliZS0+dmlm ID0gTlVMTDsKKwl9CisJa2ZyZWUoYmUtPmhvdHBsdWdfc2NyaXB0KTsKKwlrZnJlZShiZSk7CisJ ZGV2X3NldF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgor ICogRW50cnkgcG9pbnQgdG8gdGhpcyBjb2RlIHdoZW4gYSBuZXcgZGV2aWNlIGlzIGNyZWF0ZWQu ICBBbGxvY2F0ZSB0aGUgYmFzaWMKKyAqIHN0cnVjdHVyZXMgYW5kIHN3aXRjaCB0byBJbml0V2Fp dC4KKyAqLworc3RhdGljIGludCBuZXRiYWNrX3Byb2JlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpk ZXYsCisJCQkgY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgKmlkKQoreworCWNvbnN0IGNo YXIgKm1lc3NhZ2U7CisJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7CisJaW50IGVycjsK KwlpbnQgc2c7CisJY29uc3QgY2hhciAqc2NyaXB0OworCXN0cnVjdCBiYWNrZW5kX2luZm8gKmJl ID0ga3phbGxvYyhzaXplb2YoKmJlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWJlKSB7CisJCXhl bmJ1c19kZXZfZmF0YWwoZGV2LCAtRU5PTUVNLAorCQkJCSAiYWxsb2NhdGluZyBiYWNrZW5kIHN0 cnVjdHVyZSIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwliZS0+ZGV2ID0gZGV2OworCWRl dl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGJlKTsKKworCWJlLT5zdGF0ZSA9IFhlbmJ1c1N0YXRl SW5pdGlhbGlzaW5nOworCWVyciA9IHhlbmJ1c19zd2l0Y2hfc3RhdGUoZGV2LCBYZW5idXNTdGF0 ZUluaXRpYWxpc2luZyk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOworCisJc2cgPSAxOworCisJ ZG8geworCQllcnIgPSB4ZW5idXNfdHJhbnNhY3Rpb25fc3RhcnQoJnhidCk7CisJCWlmIChlcnIp IHsKKwkJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJzdGFydGluZyB0cmFuc2FjdGlvbiIp OworCQkJZ290byBmYWlsOworCQl9CisKKwkJZXJyID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+ bm9kZW5hbWUsICJmZWF0dXJlLXNnIiwgIiVkIiwgc2cpOworCQlpZiAoZXJyKSB7CisJCQltZXNz YWdlID0gIndyaXRpbmcgZmVhdHVyZS1zZyI7CisJCQlnb3RvIGFib3J0X3RyYW5zYWN0aW9uOwor CQl9CisKKwkJZXJyID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+bm9kZW5hbWUsICJmZWF0dXJl LWdzby10Y3B2NCIsCisJCQkJICAgICIlZCIsIHNnKTsKKwkJaWYgKGVycikgeworCQkJbWVzc2Fn ZSA9ICJ3cml0aW5nIGZlYXR1cmUtZ3NvLXRjcHY0IjsKKwkJCWdvdG8gYWJvcnRfdHJhbnNhY3Rp b247CisJCX0KKworCQllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwgImZl YXR1cmUtZ3NvLXRjcHY2IiwKKwkJCQkgICAgIiVkIiwgc2cpOworCQlpZiAoZXJyKSB7CisJCQlt ZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1nc28tdGNwdjYiOworCQkJZ290byBhYm9ydF90cmFu c2FjdGlvbjsKKwkJfQorCisJCS8qIFdlIHN1cHBvcnQgcGFydGlhbCBjaGVja3N1bSBzZXR1cCBm b3IgSVB2NiBwYWNrZXRzICovCisJCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVu YW1lLAorCQkJCSAgICAiZmVhdHVyZS1pcHY2LWNzdW0tb2ZmbG9hZCIsCisJCQkJICAgICIlZCIs IDEpOworCQlpZiAoZXJyKSB7CisJCQltZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1pcHY2LWNz dW0tb2ZmbG9hZCI7CisJCQlnb3RvIGFib3J0X3RyYW5zYWN0aW9uOworCQl9CisKKwkJLyogV2Ug c3VwcG9ydCByeC1jb3B5IHBhdGguICovCisJCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYt Pm5vZGVuYW1lLAorCQkJCSAgICAiZmVhdHVyZS1yeC1jb3B5IiwgIiVkIiwgMSk7CisJCWlmIChl cnIpIHsKKwkJCW1lc3NhZ2UgPSAid3JpdGluZyBmZWF0dXJlLXJ4LWNvcHkiOworCQkJZ290byBh Ym9ydF90cmFuc2FjdGlvbjsKKwkJfQorCisJCS8qIFdlIGRvbid0IHN1cHBvcnQgcngtZmxpcCBw YXRoIChleGNlcHQgb2xkIGd1ZXN0cyB3aG8KKwkJICogZG9uJ3QgZ3JvayB0aGlzIGZlYXR1cmUg ZmxhZykuCisJCSAqLworCQllcnIgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwK KwkJCQkgICAgImZlYXR1cmUtcngtZmxpcCIsICIlZCIsIDApOworCQlpZiAoZXJyKSB7CisJCQlt ZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1yeC1mbGlwIjsKKwkJCWdvdG8gYWJvcnRfdHJhbnNh Y3Rpb247CisJCX0KKworCQkvKiBXZSBzdXBwb3J0IGR5bmFtaWMgbXVsdGljYXN0LWNvbnRyb2wu ICovCisJCWVyciA9IHhlbmJ1c19wcmludGYoeGJ0LCBkZXYtPm5vZGVuYW1lLAorCQkJCSAgICAi ZmVhdHVyZS1tdWx0aWNhc3QtY29udHJvbCIsICIlZCIsIDEpOworCQlpZiAoZXJyKSB7CisJCQlt ZXNzYWdlID0gIndyaXRpbmcgZmVhdHVyZS1tdWx0aWNhc3QtY29udHJvbCI7CisJCQlnb3RvIGFi b3J0X3RyYW5zYWN0aW9uOworCQl9CisKKwkJZXJyID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+ bm9kZW5hbWUsCisJCQkJICAgICJmZWF0dXJlLWR5bmFtaWMtbXVsdGljYXN0LWNvbnRyb2wiLAor CQkJCSAgICAiJWQiLCAxKTsKKwkJaWYgKGVycikgeworCQkJbWVzc2FnZSA9ICJ3cml0aW5nIGZl YXR1cmUtZHluYW1pYy1tdWx0aWNhc3QtY29udHJvbCI7CisJCQlnb3RvIGFib3J0X3RyYW5zYWN0 aW9uOworCQl9CisKKwkJZXJyID0geGVuYnVzX3RyYW5zYWN0aW9uX2VuZCh4YnQsIDApOworCX0g d2hpbGUgKGVyciA9PSAtRUFHQUlOKTsKKworCWlmIChlcnIpIHsKKwkJeGVuYnVzX2Rldl9mYXRh bChkZXYsIGVyciwgImNvbXBsZXRpbmcgdHJhbnNhY3Rpb24iKTsKKwkJZ290byBmYWlsOworCX0K KworCS8qIFNwbGl0IGV2ZW50IGNoYW5uZWxzIHN1cHBvcnQsIHRoaXMgaXMgb3B0aW9uYWwgc28g aXQgaXMgbm90CisJICogcHV0IGluc2lkZSB0aGUgYWJvdmUgbG9vcC4KKwkgKi8KKwllcnIgPSB4 ZW5idXNfcHJpbnRmKFhCVF9OSUwsIGRldi0+bm9kZW5hbWUsCisJCQkgICAgImZlYXR1cmUtc3Bs aXQtZXZlbnQtY2hhbm5lbHMiLAorCQkJICAgICIldSIsIHNlcGFyYXRlX3R4X3J4X2lycSk7CisJ aWYgKGVycikKKwkJcHJfZGVidWcoIkVycm9yIHdyaXRpbmcgZmVhdHVyZS1zcGxpdC1ldmVudC1j aGFubmVsc1xuIik7CisKKwkvKiBNdWx0aS1xdWV1ZSBzdXBwb3J0OiBUaGlzIGlzIGFuIG9wdGlv bmFsIGZlYXR1cmUuICovCisJZXJyID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBkZXYtPm5vZGVu YW1lLAorCQkJICAgICJtdWx0aS1xdWV1ZS1tYXgtcXVldWVzIiwgIiV1IiwgeGVudmlmX21heF9x dWV1ZXMpOworCWlmIChlcnIpCisJCXByX2RlYnVnKCJFcnJvciB3cml0aW5nIG11bHRpLXF1ZXVl LW1heC1xdWV1ZXNcbiIpOworCisJZXJyID0geGVuYnVzX3ByaW50ZihYQlRfTklMLCBkZXYtPm5v ZGVuYW1lLAorCQkJICAgICJmZWF0dXJlLWN0cmwtcmluZyIsCisJCQkgICAgIiV1IiwgdHJ1ZSk7 CisJaWYgKGVycikKKwkJcHJfZGVidWcoIkVycm9yIHdyaXRpbmcgZmVhdHVyZS1jdHJsLXJpbmdc biIpOworCisJc2NyaXB0ID0geGVuYnVzX3JlYWQoWEJUX05JTCwgZGV2LT5ub2RlbmFtZSwgInNj cmlwdCIsIE5VTEwpOworCWlmIChJU19FUlIoc2NyaXB0KSkgeworCQllcnIgPSBQVFJfRVJSKHNj cmlwdCk7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCBlcnIsICJyZWFkaW5nIHNjcmlwdCIpOwor CQlnb3RvIGZhaWw7CisJfQorCisJYmUtPmhvdHBsdWdfc2NyaXB0ID0gc2NyaXB0OworCisJLyog VGhpcyBraWNrcyBob3RwbHVnIHNjcmlwdHMsIHNvIGRvIGl0IGltbWVkaWF0ZWx5LiAqLworCWVy ciA9IGJhY2tlbmRfY3JlYXRlX3hlbnZpZihiZSk7CisJaWYgKGVycikKKwkJZ290byBmYWlsOwor CisJcmV0dXJuIDA7CisKK2Fib3J0X3RyYW5zYWN0aW9uOgorCXhlbmJ1c190cmFuc2FjdGlvbl9l bmQoeGJ0LCAxKTsKKwl4ZW5idXNfZGV2X2ZhdGFsKGRldiwgZXJyLCAiJXMiLCBtZXNzYWdlKTsK K2ZhaWw6CisJcHJfZGVidWcoImZhaWxlZFxuIik7CisJbmV0YmFja19yZW1vdmUoZGV2KTsKKwly ZXR1cm4gZXJyOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgbmV0 YmFja19pZHNbXSA9IHsKIAl7ICJ2aWYiIH0sCiAJeyAiIiB9Ci0tIAoyLjIwLjEKCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGlu ZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnBy b2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs 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=-9.9 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT 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 2AB40C43603 for ; Tue, 17 Dec 2019 13:32:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DE24E21835 for ; Tue, 17 Dec 2019 13:32:32 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=amazon.com header.i=@amazon.com header.b="SFgFV7tm" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728093AbfLQNcb (ORCPT ); Tue, 17 Dec 2019 08:32:31 -0500 Received: from smtp-fw-6002.amazon.com ([52.95.49.90]:23959 "EHLO smtp-fw-6002.amazon.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726164AbfLQNcb (ORCPT ); Tue, 17 Dec 2019 08:32:31 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amazon.com; i=@amazon.com; q=dns/txt; s=amazon201209; t=1576589548; x=1608125548; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=it5l6mpYZRid1aYG4+U9jyJYzX0Xra6TMdWLnJMkqQM=; b=SFgFV7tm+ZjDQUleane20dACYUrmWdVpmF8ce8lnKMbipqFM1JFvTRRY ZmEi3u8WEodHsXdhwV+zYaydAZGWD5dCbE8rHJ/NKWN6GWzQlp6qhho6S MhNXkNo5JyvXJ6pBDGaLCm7X2CQx/kWQS/NMyKuif785rlmafZKQPbRBL c=; IronPort-SDR: /+6d9mF5v6AAess7gP70O0JF65nm7kTr8MUAi9kqTkxtmNGdDVp5rOZ124sbMmsGI20cXvDNZW pWUdudGuNskA== X-IronPort-AV: E=Sophos;i="5.69,325,1571702400"; d="scan'208";a="7995912" Received: from iad12-co-svc-p1-lb1-vlan3.amazon.com (HELO email-inbound-relay-2c-87a10be6.us-west-2.amazon.com) ([10.43.8.6]) by smtp-border-fw-out-6002.iad6.amazon.com with ESMTP; 17 Dec 2019 13:32:27 +0000 Received: from EX13MTAUEA001.ant.amazon.com (pdx4-ws-svc-p6-lb7-vlan2.pdx.amazon.com [10.170.41.162]) by email-inbound-relay-2c-87a10be6.us-west-2.amazon.com (Postfix) with ESMTPS id D1AE8A22AF; Tue, 17 Dec 2019 13:32:25 +0000 (UTC) Received: from EX13D32EUB004.ant.amazon.com (10.43.166.212) by EX13MTAUEA001.ant.amazon.com (10.43.61.243) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 17 Dec 2019 13:32:25 +0000 Received: from EX13MTAUEA001.ant.amazon.com (10.43.61.82) by EX13D32EUB004.ant.amazon.com (10.43.166.212) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 17 Dec 2019 13:32:24 +0000 Received: from u2f063a87eabd5f.cbg10.amazon.com (10.125.106.135) by mail-relay.amazon.com (10.43.61.243) with Microsoft SMTP Server id 15.0.1367.3 via Frontend Transport; Tue, 17 Dec 2019 13:32:22 +0000 From: Paul Durrant To: , , CC: Paul Durrant , Wei Liu , "Paul Durrant" , "David S. Miller" Subject: [PATCH net-next 1/3] xen-netback: move netback_probe() and netback_remove() to the end... Date: Tue, 17 Dec 2019 13:32:16 +0000 Message-ID: <20191217133218.27085-2-pdurrant@amazon.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191217133218.27085-1-pdurrant@amazon.com> References: <20191217133218.27085-1-pdurrant@amazon.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org ...of xenbus.c This is a cosmetic function re-ordering to reduce churn in a subsequent patch. Some style fix-up was done to make checkpatch.pl happier. No functional change. Signed-off-by: Paul Durrant --- Cc: Wei Liu Cc: Paul Durrant Cc: "David S. Miller" --- drivers/net/xen-netback/xenbus.c | 353 +++++++++++++++---------------- 1 file changed, 174 insertions(+), 179 deletions(-) diff --git a/drivers/net/xen-netback/xenbus.c b/drivers/net/xen-netback/xenbus.c index f533b7372d59..bb61316d79de 100644 --- a/drivers/net/xen-netback/xenbus.c +++ b/drivers/net/xen-netback/xenbus.c @@ -195,185 +195,6 @@ static void xenvif_debugfs_delif(struct xenvif *vif) } #endif /* CONFIG_DEBUG_FS */ -static int netback_remove(struct xenbus_device *dev) -{ - struct backend_info *be = dev_get_drvdata(&dev->dev); - - set_backend_state(be, XenbusStateClosed); - - unregister_hotplug_status_watch(be); - if (be->vif) { - kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); - xen_unregister_watchers(be->vif); - xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); - xenvif_free(be->vif); - be->vif = NULL; - } - kfree(be->hotplug_script); - kfree(be); - dev_set_drvdata(&dev->dev, NULL); - return 0; -} - - -/** - * Entry point to this code when a new device is created. Allocate the basic - * structures and switch to InitWait. - */ -static int netback_probe(struct xenbus_device *dev, - const struct xenbus_device_id *id) -{ - const char *message; - struct xenbus_transaction xbt; - int err; - int sg; - const char *script; - struct backend_info *be = kzalloc(sizeof(struct backend_info), - GFP_KERNEL); - if (!be) { - xenbus_dev_fatal(dev, -ENOMEM, - "allocating backend structure"); - return -ENOMEM; - } - - be->dev = dev; - dev_set_drvdata(&dev->dev, be); - - be->state = XenbusStateInitialising; - err = xenbus_switch_state(dev, XenbusStateInitialising); - if (err) - goto fail; - - sg = 1; - - do { - err = xenbus_transaction_start(&xbt); - if (err) { - xenbus_dev_fatal(dev, err, "starting transaction"); - goto fail; - } - - err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", sg); - if (err) { - message = "writing feature-sg"; - goto abort_transaction; - } - - err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", - "%d", sg); - if (err) { - message = "writing feature-gso-tcpv4"; - goto abort_transaction; - } - - err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv6", - "%d", sg); - if (err) { - message = "writing feature-gso-tcpv6"; - goto abort_transaction; - } - - /* We support partial checksum setup for IPv6 packets */ - err = xenbus_printf(xbt, dev->nodename, - "feature-ipv6-csum-offload", - "%d", 1); - if (err) { - message = "writing feature-ipv6-csum-offload"; - goto abort_transaction; - } - - /* We support rx-copy path. */ - err = xenbus_printf(xbt, dev->nodename, - "feature-rx-copy", "%d", 1); - if (err) { - message = "writing feature-rx-copy"; - goto abort_transaction; - } - - /* - * We don't support rx-flip path (except old guests who don't - * grok this feature flag). - */ - err = xenbus_printf(xbt, dev->nodename, - "feature-rx-flip", "%d", 0); - if (err) { - message = "writing feature-rx-flip"; - goto abort_transaction; - } - - /* We support dynamic multicast-control. */ - err = xenbus_printf(xbt, dev->nodename, - "feature-multicast-control", "%d", 1); - if (err) { - message = "writing feature-multicast-control"; - goto abort_transaction; - } - - err = xenbus_printf(xbt, dev->nodename, - "feature-dynamic-multicast-control", - "%d", 1); - if (err) { - message = "writing feature-dynamic-multicast-control"; - goto abort_transaction; - } - - err = xenbus_transaction_end(xbt, 0); - } while (err == -EAGAIN); - - if (err) { - xenbus_dev_fatal(dev, err, "completing transaction"); - goto fail; - } - - /* - * Split event channels support, this is optional so it is not - * put inside the above loop. - */ - err = xenbus_printf(XBT_NIL, dev->nodename, - "feature-split-event-channels", - "%u", separate_tx_rx_irq); - if (err) - pr_debug("Error writing feature-split-event-channels\n"); - - /* Multi-queue support: This is an optional feature. */ - err = xenbus_printf(XBT_NIL, dev->nodename, - "multi-queue-max-queues", "%u", xenvif_max_queues); - if (err) - pr_debug("Error writing multi-queue-max-queues\n"); - - err = xenbus_printf(XBT_NIL, dev->nodename, - "feature-ctrl-ring", - "%u", true); - if (err) - pr_debug("Error writing feature-ctrl-ring\n"); - - script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL); - if (IS_ERR(script)) { - err = PTR_ERR(script); - xenbus_dev_fatal(dev, err, "reading script"); - goto fail; - } - - be->hotplug_script = script; - - - /* This kicks hotplug scripts, so do it immediately. */ - err = backend_create_xenvif(be); - if (err) - goto fail; - - return 0; - -abort_transaction: - xenbus_transaction_end(xbt, 1); - xenbus_dev_fatal(dev, err, "%s", message); -fail: - pr_debug("failed\n"); - netback_remove(dev); - return err; -} - - /* * Handle the creation of the hotplug script environment. We add the script * and vif variables to the environment, for the benefit of the vif-* hotplug @@ -1128,6 +949,180 @@ static int read_xenbus_vif_flags(struct backend_info *be) return 0; } +static int netback_remove(struct xenbus_device *dev) +{ + struct backend_info *be = dev_get_drvdata(&dev->dev); + + set_backend_state(be, XenbusStateClosed); + + unregister_hotplug_status_watch(be); + if (be->vif) { + kobject_uevent(&dev->dev.kobj, KOBJ_OFFLINE); + xen_unregister_watchers(be->vif); + xenbus_rm(XBT_NIL, dev->nodename, "hotplug-status"); + xenvif_free(be->vif); + be->vif = NULL; + } + kfree(be->hotplug_script); + kfree(be); + dev_set_drvdata(&dev->dev, NULL); + return 0; +} + +/** + * Entry point to this code when a new device is created. Allocate the basic + * structures and switch to InitWait. + */ +static int netback_probe(struct xenbus_device *dev, + const struct xenbus_device_id *id) +{ + const char *message; + struct xenbus_transaction xbt; + int err; + int sg; + const char *script; + struct backend_info *be = kzalloc(sizeof(*be), GFP_KERNEL); + + if (!be) { + xenbus_dev_fatal(dev, -ENOMEM, + "allocating backend structure"); + return -ENOMEM; + } + + be->dev = dev; + dev_set_drvdata(&dev->dev, be); + + be->state = XenbusStateInitialising; + err = xenbus_switch_state(dev, XenbusStateInitialising); + if (err) + goto fail; + + sg = 1; + + do { + err = xenbus_transaction_start(&xbt); + if (err) { + xenbus_dev_fatal(dev, err, "starting transaction"); + goto fail; + } + + err = xenbus_printf(xbt, dev->nodename, "feature-sg", "%d", sg); + if (err) { + message = "writing feature-sg"; + goto abort_transaction; + } + + err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", + "%d", sg); + if (err) { + message = "writing feature-gso-tcpv4"; + goto abort_transaction; + } + + err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv6", + "%d", sg); + if (err) { + message = "writing feature-gso-tcpv6"; + goto abort_transaction; + } + + /* We support partial checksum setup for IPv6 packets */ + err = xenbus_printf(xbt, dev->nodename, + "feature-ipv6-csum-offload", + "%d", 1); + if (err) { + message = "writing feature-ipv6-csum-offload"; + goto abort_transaction; + } + + /* We support rx-copy path. */ + err = xenbus_printf(xbt, dev->nodename, + "feature-rx-copy", "%d", 1); + if (err) { + message = "writing feature-rx-copy"; + goto abort_transaction; + } + + /* We don't support rx-flip path (except old guests who + * don't grok this feature flag). + */ + err = xenbus_printf(xbt, dev->nodename, + "feature-rx-flip", "%d", 0); + if (err) { + message = "writing feature-rx-flip"; + goto abort_transaction; + } + + /* We support dynamic multicast-control. */ + err = xenbus_printf(xbt, dev->nodename, + "feature-multicast-control", "%d", 1); + if (err) { + message = "writing feature-multicast-control"; + goto abort_transaction; + } + + err = xenbus_printf(xbt, dev->nodename, + "feature-dynamic-multicast-control", + "%d", 1); + if (err) { + message = "writing feature-dynamic-multicast-control"; + goto abort_transaction; + } + + err = xenbus_transaction_end(xbt, 0); + } while (err == -EAGAIN); + + if (err) { + xenbus_dev_fatal(dev, err, "completing transaction"); + goto fail; + } + + /* Split event channels support, this is optional so it is not + * put inside the above loop. + */ + err = xenbus_printf(XBT_NIL, dev->nodename, + "feature-split-event-channels", + "%u", separate_tx_rx_irq); + if (err) + pr_debug("Error writing feature-split-event-channels\n"); + + /* Multi-queue support: This is an optional feature. */ + err = xenbus_printf(XBT_NIL, dev->nodename, + "multi-queue-max-queues", "%u", xenvif_max_queues); + if (err) + pr_debug("Error writing multi-queue-max-queues\n"); + + err = xenbus_printf(XBT_NIL, dev->nodename, + "feature-ctrl-ring", + "%u", true); + if (err) + pr_debug("Error writing feature-ctrl-ring\n"); + + script = xenbus_read(XBT_NIL, dev->nodename, "script", NULL); + if (IS_ERR(script)) { + err = PTR_ERR(script); + xenbus_dev_fatal(dev, err, "reading script"); + goto fail; + } + + be->hotplug_script = script; + + /* This kicks hotplug scripts, so do it immediately. */ + err = backend_create_xenvif(be); + if (err) + goto fail; + + return 0; + +abort_transaction: + xenbus_transaction_end(xbt, 1); + xenbus_dev_fatal(dev, err, "%s", message); +fail: + pr_debug("failed\n"); + netback_remove(dev); + return err; +} + static const struct xenbus_device_id netback_ids[] = { { "vif" }, { "" } -- 2.20.1