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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 10D59C25B74 for ; Thu, 16 May 2024 09:38:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=NueQrlOzKVqALkrH28inUdeb0UNihnQzSd1lLQCYDig=; b=AxAvkKxdXtRh4T nsPjdK1Cld4WlsZC85idz5ifvwHvesle7PUjizM1rOF7bs7tDQi2K0TpW2xdNbtK4PjVWGkn7gnys RMbkVL4XZ6rQoX0x+uHYl0gNXVUqDUXkTzAy3eI0yLcLjRJE2/U3N57j0iop+xBQiozqRco4dBmq7 eh/u+NV6iRKmolnf/UW3eanhkUSU/NlLDcbOiehe8gM9BY6DFTXtCyZZ5BymQ5IqbR1hTivGkuGwt 6rpe/qIF9c31PxboMMhcSDSQA5ysutlcmoN6W6EO1HtTWXnME8ayhv1TQe9o4/YoBoeDqU5q6aAx7 uBzD6b614OHHOzvxweWg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s7XZH-00000004Ljl-2efk; Thu, 16 May 2024 09:38:31 +0000 Received: from mx07-00178001.pphosted.com ([185.132.182.106]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s7XZE-00000004LjD-07tv for linux-arm-kernel@lists.infradead.org; Thu, 16 May 2024 09:38:29 +0000 Received: from pps.filterd (m0288072.ppops.net [127.0.0.1]) by mx07-00178001.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 44G79DP5015056; Thu, 16 May 2024 11:37:53 +0200 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=foss.st.com; h= message-id:date:mime-version:subject:to:cc:references:from :in-reply-to:content-type:content-transfer-encoding; s= selector1; bh=vjJD8Q5ZIW3BNP+cyeOls+AMVj9R7UNnLDd07n6em6U=; b=2l bLnQtwi9Gb9Ej2Agf86/kV9MJCaLw901af2vGTW6YveyzwX2dzHOlrxsOl6yX5xV iaim7Fg2cQiQMeBBtjlJIme3qmzsFSfC145P+Ulq1mKsPdRGswYkV4+x20DLeP7W stkC54pK3Wt/YyPSB8twqQddlsinoFqL4m2TDWUPIxIUMX/fpQg08c4mqZIGqEp6 VUKN1Nb4pd9g2dM2FUIY/A9h80CQw1ycS4U7r7e9a37eqC8AEmRrwEx+1uV+6Mvs kk04uWcVkA+ZgQlId9a3zu8i4VHHPaBVRsLBl5lW1XQVLmtrEjY0IjXfFMXkqFnj tL9uBJyvI1WZr9pVIkVw== Received: from beta.dmz-ap.st.com (beta.dmz-ap.st.com [138.198.100.35]) by mx07-00178001.pphosted.com (PPS) with ESMTPS id 3y4sxv4xw3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 16 May 2024 11:37:53 +0200 (MEST) Received: from euls16034.sgp.st.com (euls16034.sgp.st.com [10.75.44.20]) by beta.dmz-ap.st.com (STMicroelectronics) with ESMTP id 8471340048; Thu, 16 May 2024 11:37:44 +0200 (CEST) Received: from Webmail-eu.st.com (shfdag1node1.st.com [10.75.129.69]) by euls16034.sgp.st.com (STMicroelectronics) with ESMTP id 7CA65210753; Thu, 16 May 2024 11:37:27 +0200 (CEST) Received: from [10.48.87.204] (10.48.87.204) by SHFDAG1NODE1.st.com (10.75.129.69) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Thu, 16 May 2024 11:37:26 +0200 Message-ID: <1e2da893-efff-4f7c-9842-a9484e4c2230@foss.st.com> Date: Thu, 16 May 2024 11:37:26 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 2/2] hwrng: stm32 - cache device pointer in struct stm32_rng_private To: Marek Vasut , CC: =?UTF-8?Q?Uwe_Kleine-K=C3=B6nig?= , Alexandre Torgue , Herbert Xu , Maxime Coquelin , Olivia Mackall , Rob Herring , Yang Yingliang , , , References: <20240516012210.128307-1-marex@denx.de> <20240516012210.128307-2-marex@denx.de> Content-Language: en-US From: Gatien CHEVALLIER In-Reply-To: <20240516012210.128307-2-marex@denx.de> X-Originating-IP: [10.48.87.204] X-ClientProxiedBy: SHFCAS1NODE2.st.com (10.75.129.73) To SHFDAG1NODE1.st.com (10.75.129.69) X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-05-16_05,2024-05-15_01,2023-05-22_02 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240516_023828_603290_D98BBD02 X-CRM114-Status: GOOD ( 18.09 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpPbiA1LzE2LzI0IDAzOjIwLCBNYXJlayBWYXN1dCB3cm90ZToKPiBQbGFjZSBkZXZpY2UgcG9p bnRlciBpbiBzdHJ1Y3Qgc3RtMzJfcm5nX3ByaXZhdGUgYW5kIHVzZSBpdCBhbGwgb3ZlciB0aGUK PiBwbGFjZSB0byBnZXQgcmlkIG9mIHRoZSBob3JyaWJsZSB0eXBlIGNhc3RzIHRocm91Z2hvdXQg dGhlIGRyaXZlci4KPiAKPiBObyBmdW5jdGlvbmFsIGNoYW5nZS4KPiAKPiBTaWduZWQtb2ZmLWJ5 OiBNYXJlayBWYXN1dCA8bWFyZXhAZGVueC5kZT4KPiAtLS0KPiBDYzogIlV3ZSBLbGVpbmUtS8O2 bmlnIiA8dS5rbGVpbmUta29lbmlnQHBlbmd1dHJvbml4LmRlPgo+IENjOiBBbGV4YW5kcmUgVG9y Z3VlIDxhbGV4YW5kcmUudG9yZ3VlQGZvc3Muc3QuY29tPgo+IENjOiBHYXRpZW4gQ2hldmFsbGll ciA8Z2F0aWVuLmNoZXZhbGxpZXJAZm9zcy5zdC5jb20+Cj4gQ2M6IEhlcmJlcnQgWHUgPGhlcmJl cnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KPiBDYzogTWFyZWsgVmFzdXQgPG1hcmV4QGRlbnguZGU+ Cj4gQ2M6IE1heGltZSBDb3F1ZWxpbiA8bWNvcXVlbGluLnN0bTMyQGdtYWlsLmNvbT4KPiBDYzog T2xpdmlhIE1hY2thbGwgPG9saXZpYUBzZWxlbmljLmNvbT4KPiBDYzogUm9iIEhlcnJpbmcgPHJv YmhAa2VybmVsLm9yZz4KPiBDYzogWWFuZyBZaW5nbGlhbmcgPHlhbmd5aW5nbGlhbmdAaHVhd2Vp LmNvbT4KPiBDYzoga2VybmVsQGRoLWVsZWN0cm9uaWNzLmNvbQo+IENjOiBsaW51eC1hcm0ta2Vy bmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKPiBDYzogbGludXgtY3J5cHRvQHZnZXIua2VybmVsLm9y Zwo+IENjOiBsaW51eC1zdG0zMkBzdC1tZC1tYWlsbWFuLnN0b3JtcmVwbHkuY29tCj4gLS0tCj4g ICBkcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3N0bTMyLXJuZy5jIHwgMjUgKysrKysrKysrKysrKy0t LS0tLS0tLS0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDEzIGluc2VydGlvbnMoKyksIDEyIGRlbGV0 aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL3N0bTMyLXJu Zy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9zdG0zMi1ybmcuYwo+IGluZGV4IDZkZWM0YWRj NDk4NTMuLjAwMDEyZTZlNGNjYzggMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRv bS9zdG0zMi1ybmcuYwo+ICsrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vc3RtMzItcm5nLmMK PiBAQCAtNzAsNiArNzAsNyBAQCBzdHJ1Y3Qgc3RtMzJfcm5nX2NvbmZpZyB7Cj4gICAKPiAgIHN0 cnVjdCBzdG0zMl9ybmdfcHJpdmF0ZSB7Cj4gICAJc3RydWN0IGh3cm5nIHJuZzsKPiArCXN0cnVj dCBkZXZpY2UgKmRldjsKPiAgIAl2b2lkIF9faW9tZW0gKmJhc2U7Cj4gICAJc3RydWN0IGNsayAq Y2xrOwo+ICAgCXN0cnVjdCByZXNldF9jb250cm9sICpyc3Q7Cj4gQEAgLTk5LDcgKzEwMCw3IEBA IHN0cnVjdCBzdG0zMl9ybmdfcHJpdmF0ZSB7Cj4gICAgKi8KPiAgIHN0YXRpYyBpbnQgc3RtMzJf cm5nX2NvbmNlYWxfc2VlZF9lcnJvcl9jb25kX3Jlc2V0KHN0cnVjdCBzdG0zMl9ybmdfcHJpdmF0 ZSAqcHJpdikKPiAgIHsKPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9IChzdHJ1Y3QgZGV2aWNlICop cHJpdi0+cm5nLnByaXY7Cj4gKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwcml2LT5kZXY7Cj4gICAJ dTMyIHNyID0gcmVhZGxfcmVsYXhlZChwcml2LT5iYXNlICsgUk5HX1NSKTsKPiAgIAl1MzIgY3Ig PSByZWFkbF9yZWxheGVkKHByaXYtPmJhc2UgKyBSTkdfQ1IpOwo+ICAgCWludCBlcnI7Cj4gQEAg LTE3MSw3ICsxNzIsNyBAQCBzdGF0aWMgaW50IHN0bTMyX3JuZ19jb25jZWFsX3NlZWRfZXJyb3Io c3RydWN0IGh3cm5nICpybmcpCj4gICB7Cj4gICAJc3RydWN0IHN0bTMyX3JuZ19wcml2YXRlICpw cml2ID0gY29udGFpbmVyX29mKHJuZywgc3RydWN0IHN0bTMyX3JuZ19wcml2YXRlLCBybmcpOwo+ ICAgCj4gLQlkZXZfZGJnKChzdHJ1Y3QgZGV2aWNlICopcHJpdi0+cm5nLnByaXYsICJDb25jZWFs aW5nIHNlZWQgZXJyb3JcbiIpOwo+ICsJZGV2X2RiZyhwcml2LT5kZXYsICJDb25jZWFsaW5nIHNl ZWQgZXJyb3JcbiIpOwo+ICAgCj4gICAJaWYgKHByaXYtPmRhdGEtPmhhc19jb25kX3Jlc2V0KQo+ ICAgCQlyZXR1cm4gc3RtMzJfcm5nX2NvbmNlYWxfc2VlZF9lcnJvcl9jb25kX3Jlc2V0KHByaXYp Owo+IEBAIC0xODcsNyArMTg4LDcgQEAgc3RhdGljIGludCBzdG0zMl9ybmdfcmVhZChzdHJ1Y3Qg aHdybmcgKnJuZywgdm9pZCAqZGF0YSwgc2l6ZV90IG1heCwgYm9vbCB3YWl0KQo+ICAgCWludCBy ZXR2YWwgPSAwLCBlcnIgPSAwOwo+ICAgCXUzMiBzcjsKPiAgIAo+IC0JcmV0dmFsID0gcG1fcnVu dGltZV9yZXN1bWVfYW5kX2dldCgoc3RydWN0IGRldmljZSAqKXByaXYtPnJuZy5wcml2KTsKPiAr CXJldHZhbCA9IHBtX3J1bnRpbWVfcmVzdW1lX2FuZF9nZXQocHJpdi0+ZGV2KTsKPiAgIAlpZiAo cmV0dmFsKQo+ICAgCQlyZXR1cm4gcmV0dmFsOwo+ICAgCj4gQEAgLTIwNiw3ICsyMDcsNyBAQCBz dGF0aWMgaW50IHN0bTMyX3JuZ19yZWFkKHN0cnVjdCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBz aXplX3QgbWF4LCBib29sIHdhaXQpCj4gICAJCQkJCQkJCSAgIHNyLCBzciwKPiAgIAkJCQkJCQkJ ICAgMTAsIDUwMDAwKTsKPiAgIAkJCWlmIChlcnIpIHsKPiAtCQkJCWRldl9lcnIoKHN0cnVjdCBk ZXZpY2UgKilwcml2LT5ybmcucHJpdiwKPiArCQkJCWRldl9lcnIocHJpdi0+ZGV2LAo+ICAgCQkJ CQkiJXM6IHRpbWVvdXQgJXghXG4iLCBfX2Z1bmNfXywgc3IpOwoKTml0OiBGaXRzIGluIG9uZSBs aW5lCgo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJfQo+IEBAIC0yMjAsNyArMjIxLDcgQEAgc3RhdGlj IGludCBzdG0zMl9ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJuZywgdm9pZCAqZGF0YSwgc2l6ZV90 IG1heCwgYm9vbCB3YWl0KQo+ICAgCQkJCWVyciA9IHN0bTMyX3JuZ19jb25jZWFsX3NlZWRfZXJy b3Iocm5nKTsKPiAgIAkJCQlpKys7Cj4gICAJCQkJaWYgKGVyciAmJiBpID4gUk5HX05CX1JFQ09W RVJfVFJJRVMpIHsKPiAtCQkJCQlkZXZfZXJyKChzdHJ1Y3QgZGV2aWNlICopcHJpdi0+cm5nLnBy aXYsCj4gKwkJCQkJZGV2X2Vycihwcml2LT5kZXYsCj4gICAJCQkJCQkiQ291bGRuJ3QgcmVjb3Zl ciBmcm9tIHNlZWQgZXJyb3JcbiIpOwoKTml0OiBGaXRzIGluIG9uZSBsaW5lCgo+ICAgCQkJCQly ZXR2YWwgPSAtRU5PVFJFQ09WRVJBQkxFOwo+ICAgCQkJCQlnb3RvIGV4aXRfcnBtOwo+IEBAIC0y MzksNyArMjQwLDcgQEAgc3RhdGljIGludCBzdG0zMl9ybmdfcmVhZChzdHJ1Y3QgaHdybmcgKnJu Zywgdm9pZCAqZGF0YSwgc2l6ZV90IG1heCwgYm9vbCB3YWl0KQo+ICAgCQkJZXJyID0gc3RtMzJf cm5nX2NvbmNlYWxfc2VlZF9lcnJvcihybmcpOwo+ICAgCQkJaSsrOwo+ICAgCQkJaWYgKGVyciAm JiBpID4gUk5HX05CX1JFQ09WRVJfVFJJRVMpIHsKPiAtCQkJCWRldl9lcnIoKHN0cnVjdCBkZXZp Y2UgKilwcml2LT5ybmcucHJpdiwKPiArCQkJCWRldl9lcnIocHJpdi0+ZGV2LAo+ICAgCQkJCQki Q291bGRuJ3QgcmVjb3ZlciBmcm9tIHNlZWQgZXJyb3IiKTsKCk5pdDogRml0cyBpbiBvbmUgbGlu ZQoKPiAgIAkJCQlyZXR2YWwgPSAtRU5PVFJFQ09WRVJBQkxFOwo+ICAgCQkJCWdvdG8gZXhpdF9y cG07Cj4gQEAgLTI1NSw4ICsyNTYsOCBAQCBzdGF0aWMgaW50IHN0bTMyX3JuZ19yZWFkKHN0cnVj dCBod3JuZyAqcm5nLCB2b2lkICpkYXRhLCBzaXplX3QgbWF4LCBib29sIHdhaXQpCj4gICAJfQo+ ICAgCj4gICBleGl0X3JwbToKPiAtCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koKHN0cnVjdCBk ZXZpY2UgKikgcHJpdi0+cm5nLnByaXYpOwo+IC0JcG1fcnVudGltZV9wdXRfc3luY19hdXRvc3Vz cGVuZCgoc3RydWN0IGRldmljZSAqKSBwcml2LT5ybmcucHJpdik7Cj4gKwlwbV9ydW50aW1lX21h cmtfbGFzdF9idXN5KHByaXYtPmRldik7Cj4gKwlwbV9ydW50aW1lX3B1dF9zeW5jX2F1dG9zdXNw ZW5kKHByaXYtPmRldik7Cj4gICAKPiAgIAlyZXR1cm4gcmV0dmFsIHx8ICF3YWl0ID8gcmV0dmFs IDogLUVJTzsKPiAgIH0KPiBAQCAtMzMxLDggKzMzMiw3IEBAIHN0YXRpYyBpbnQgc3RtMzJfcm5n X2luaXQoc3RydWN0IGh3cm5nICpybmcpCj4gICAJCQkJCQkJMTAsIDUwMDAwKTsKPiAgIAkJaWYg KGVycikgewo+ICAgCQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHByaXYtPmNsayk7Cj4gLQkJCWRl dl9lcnIoKHN0cnVjdCBkZXZpY2UgKilwcml2LT5ybmcucHJpdiwKPiAtCQkJCSIlczogdGltZW91 dCAleCFcbiIsIF9fZnVuY19fLCByZWcpOwo+ICsJCQlkZXZfZXJyKHByaXYtPmRldiwgIiVzOiB0 aW1lb3V0ICV4IVxuIiwgX19mdW5jX18sIHJlZyk7Cj4gICAJCQlyZXR1cm4gLUVJTlZBTDsKPiAg IAkJfQo+ICAgCX0gZWxzZSB7Cj4gQEAgLTM2MCw3ICszNjAsNyBAQCBzdGF0aWMgaW50IHN0bTMy X3JuZ19pbml0KHN0cnVjdCBod3JuZyAqcm5nKQo+ICAgCQkJCQkJMTAsIDEwMDAwMCk7Cj4gICAJ aWYgKGVyciB8fCAocmVnICYgflJOR19TUl9EUkRZKSkgewo+ICAgCQljbGtfZGlzYWJsZV91bnBy ZXBhcmUocHJpdi0+Y2xrKTsKPiAtCQlkZXZfZXJyKChzdHJ1Y3QgZGV2aWNlICopcHJpdi0+cm5n LnByaXYsCj4gKwkJZGV2X2Vycihwcml2LT5kZXYsCj4gICAJCQkiJXM6IHRpbWVvdXQ6JXggU1I6 ICV4IVxuIiwgX19mdW5jX18sIGVyciwgcmVnKTsKCk5pdDogRml0cyBpbiBvbmUgbGluZQoKPiAg IAkJcmV0dXJuIC1FSU5WQUw7Cj4gICAJfQo+IEBAIC00NjcsNyArNDY3LDcgQEAgc3RhdGljIGlu dCBfX21heWJlX3VudXNlZCBzdG0zMl9ybmdfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKPiAg IAo+ICAgCQlpZiAoZXJyKSB7Cj4gICAJCQljbGtfZGlzYWJsZV91bnByZXBhcmUocHJpdi0+Y2xr KTsKPiAtCQkJZGV2X2Vycigoc3RydWN0IGRldmljZSAqKXByaXYtPnJuZy5wcml2LAo+ICsJCQlk ZXZfZXJyKHByaXYtPmRldiwKPiAgIAkJCQkiJXM6IHRpbWVvdXQ6JXggQ1I6ICV4IVxuIiwgX19m dW5jX18sIGVyciwgcmVnKTsKPiAgIAkJCXJldHVybiAtRUlOVkFMOwo+ICAgCQl9Cj4gQEAgLTU0 Myw2ICs1NDMsNyBAQCBzdGF0aWMgaW50IHN0bTMyX3JuZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1f ZGV2aWNlICpvZmRldikKPiAgIAo+ICAgCXByaXYtPmNlZCA9IG9mX3Byb3BlcnR5X3JlYWRfYm9v bChucCwgImNsb2NrLWVycm9yLWRldGVjdCIpOwo+ICAgCXByaXYtPmxvY2tfY29uZiA9IG9mX3By b3BlcnR5X3JlYWRfYm9vbChucCwgInN0LHJuZy1sb2NrLWNvbmYiKTsKPiArCXByaXYtPmRldiA9 IGRldjsKPiAgIAo+ICAgCXByaXYtPmRhdGEgPSBvZl9kZXZpY2VfZ2V0X21hdGNoX2RhdGEoZGV2 KTsKPiAgIAlpZiAoIXByaXYtPmRhdGEpCgpXaXRoIG5pdHMgYXBwbGllZCwKCkFja2VkLWJ5OiBH YXRpZW4gQ2hldmFsbGllciA8Z2F0aWVuLmNoZXZhbGxpZXJAZm9zcy5zdC5jb20+CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVs IG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==