From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 64E9B43A3C; Tue, 6 Feb 2024 21:27:23 +0100 (CET) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 04C3C402E1; Tue, 6 Feb 2024 21:27:23 +0100 (CET) Received: from NAM10-MW2-obe.outbound.protection.outlook.com (mail-mw2nam10on2071.outbound.protection.outlook.com [40.107.94.71]) by mails.dpdk.org (Postfix) with ESMTP id 87326402CE for ; Tue, 6 Feb 2024 21:27:21 +0100 (CET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=LjeOhUQUp+5tHYm+NThvvvXzYvwFMplITCqxef30YhyVZnv3Ovz2g6VUQkqicdo5THpqPbYLTp1AiVt/UZlfllhu2WRvhzawmYAHv5b+JXGZcz8czIJe5uRvPMTfcGUjV3rUKViCqMKvlx+KJIVIdRt8zZ71NR2janZ7J2b95fMSZ1G9sGWIKnQD4e/G+9J8+LPpYHyxeen6Tq0XsZTdShVyPAy5Ez/W8SY4r+ZMdUJxc2Hj8/Are6bQNbbcJEx1VfwKCgr3+hM78q//hK6RrWMB7nPkK5fhZMPKtUXMryGR9DwETdSJIeAFQ2wzoUGh90UsuV99IdQo8smFqHrPYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=I7vyXIAcMVb2IiIiUCRDT3yBYa27m9rjV9egXFU2o6Q=; b=ods8CP3VMs8qtb8edLkBXyz0kXr6Rb/ACoYT+3SsIxbrjMewWL4U+P8xfp5PoF1i+dK8C2e8scAE+uZYCJLTlEe8tA4MuvCAsJXS+l6xDEUCfrLY20NHYCXRlpaIRyn2AajLuJatnYbRostrcJx93YEBcJ9cXc6r+VMYDUna1O22HbnyInm3Sp9qAOk8fyGLBxNvFXOWGCPgL5ZaUGFCiH0Sa5w2eNtFuTz4Lxn/ZR9xdJlunbgugQ20Lx7pZ5R8hrDDDW7jVxCCn3kh3umOlMUceCqa+U711x2KLXqMSQkwX31APJuTlPwVDFr+GJE000DyyqX05sRMib+uOIWg+Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=I7vyXIAcMVb2IiIiUCRDT3yBYa27m9rjV9egXFU2o6Q=; b=RDY4ZiRVyVc3ghHe7ZhWjkb/KHleqIO4U3nSKuOEuHZgi1TZ0BNmBUNHj6puMsZ+884pJiIklVNo6SYFNT7CJ/psCnbLJuwpV2k+1WyS1DOPrGGvGwp1hCLzBz1w4JnYnd9gP+t2ubyiTAjnx4lwmY/B+HgLD0+r4bxkHyC62dU= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) by CY8PR12MB7196.namprd12.prod.outlook.com (2603:10b6:930:58::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7270.15; Tue, 6 Feb 2024 20:27:19 +0000 Received: from CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::815a:45e6:cf5e:479f]) by CH2PR12MB4294.namprd12.prod.outlook.com ([fe80::815a:45e6:cf5e:479f%4]) with mapi id 15.20.7270.016; Tue, 6 Feb 2024 20:27:19 +0000 Message-ID: <9a731eb1-9053-4d6d-b1c4-a743bbb1e4fd@amd.com> Date: Tue, 6 Feb 2024 20:27:13 +0000 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] ethdev: recommend against using locks in event callbacks Content-Language: en-US To: David Marchand , dev@dpdk.org Cc: ktraynor@redhat.com, Thomas Monjalon , Andrew Rybchenko References: <20240201084319.2687896-1-david.marchand@redhat.com> From: Ferruh Yigit Autocrypt: addr=ferruh.yigit@amd.com; keydata= xsFNBGJDD3EBEAC/M7Tk/DfQSmP1K96vyzdhfSBzlCaGtcxNXorq4fALruqVsD3oi0yfyEz9 4YN8x7py0o9EL8ZdpOX0skc0AMCDAaw033uWhCn0GLMeGRKUbfOAPvL6ecSDvGD7CJIO9j0J eZUvasBgPdM/435PEr9DmC6Ggzdzt8IuG4PoLi5jpFSfcqxZFCCxLUDEo/w0nuguk2FTuYJg B2zEZ4JTBZrw7hIHiFh8D8hr6YA6a5uTofq1tr+l048lbtdFUl8TR0aIExVzE4Z8qKZlcE+9 RQaewjK5Al1jLE4sHdmd3GN+IvgDF3D/fLsi25SKJDeGSdeHkOmaX0qGeM4WKIfU6iARRCiQ N3AmBIxZ/A7UXBKLaOyZ+/i3sE6Wb53nrO4i8+0K2Qwyh6LjTeiJAIjYKN43ppxz3DaI+QwQ vI+uyHr4Gg0Da9EPPz/YyKauSeOZCfCB5gIfICO0j6x0SCl8uQ2nLpjxcZkf0gjcwUzP3h+S 3x6NfDji9YEij0zczW/dcSpGgZ6vsFpPrtnP9ZXy6J53yp0kJtOJoOlkEFFdU2yCZnCDseum CoudmGLZVvS0/DzHDJejq+3kK3FDGktZBOxZIIpal+nFqS7lVgOZc4+huVv3jyhzoAUOEyXA XK5j6o7g8STUY+z33QNnHpdLvecMwuzmvqy0jR54yAbZ64mB9QARAQABzSNGZXJydWggWWln aXQgPGZlcnJ1aC55aWdpdEBhbWQuY29tPsLBlwQTAQgAQQIbAwULCQgHAgYVCgkICwIEFgID AQIeAQIXgAIZARYhBEm7aYjps5XGsPHCElRTPtCKKm/6BQJkdyEEBQkE3meNAAoJEFRTPtCK Km/6UdcP/0/kEp49aIUhkRnQfmKmNVpcBEs4NqceNCWTQlaXdEwL1lxf1L49dsF5Jz1yvWi3 tMtq0Mk1o68mQ7q8iZAzIeLxGQAlievMNE0BzLWPFmuX+ac98ITBqKdnUAn6ig5ezR+jxrAU 58utUszDl16eMabtCu76sINL5izB8zCWcDEUB4UqM8iBSQZ7/a7TSBVS0jVBldAORg1qfFIs cGMPQn/skhy3QqbK3u3Rhc44zRxvzrQJmhY6T1rpeniHSyGOeIYqjpbpnMU5n1VWzQ4NXvAD VDkZ4NDw6CpvF4S2h2Ds7w7GKvT6RRTddrl672IaLcaWRiqBNCPm+eKh4q5/XkOXTgUqYBVg Ors8uS9EbQC/SAcp9VHF9fB+3nadxZm4CLPe5ZDJnSmgu/ea7xjWQYR8ouo2THxqNZtkercc GOxGFxIaLcJIR/XChh9d0LKgc1FfVARTMW8UrPgINVEmVSFmAVSgVfsWIV+NSpG9/e90E4SV gMLPABn1YpJ8ca/IwqovctqDDXfxZOvCPOVWTzQe/ut767W+ctGR1kRkxWcz470SycOcY+PW VRPJd91Af0GdLFkwzZgNzkd6Gyc9XXcv4lwwqBLhWrBhqPYB0aZXIG1E/cVTiRp4dWpFHAFD DcuLldjIw93lCDsIeEDM9rBizGVMWEoeFmqSe7pzGTPXzsFNBGJDD3EBEAC8fBFQHej8qgIG CBzoIEd1cZgPIARlIhRudODXoNDbwA+zJMKtOVwol3Hh1qJ2/yZP11nZsqrP4fyUvMxrwhDe WBWFVDbWHLnqXMnKuUU1vQMujbzgq/4Rb9wSMW5vBL6YxhZng+h71JgS/9nVtzyaTtsOTrJi 6nzFSDx6Wbza2jYvL9rlK0yxJcMEiKwZQ/if4KcOesD0rtxomU/iSEv6DATcJbGXP6T93nPl 90XksijRKAmOwvdu3A8IIlxiSSVRP0lxiHOeR35y6PjHY2usfEDZZOVOfDfhlCVAIBZUZALv VmFOVSTYXeKgYa6Ooaf72+cHM3SgJIbYnevJfFv8YQW0MEAJ/IXE7B1Lk+pHNxwU3VBCrKnA fd/PTvviesuYRkrRD6qqZnINeu3b2DouVGGt2fVcGA38BujCd3p8i7azoGc7A6cgF7z9ETnr ANrbg1/dJyDmkDxOxVrVquTBbxJbDy2HaIe9wyJTEK2Sznpy62DaHVY+gfDQzexBXM10geHC IIUhEnOUYVaq65X3ZDjyAQnNDBQ4uMqSHZk8DpJ22X+T+IMzWzWl+VyU4UZXjkLKPvlqPjJk 1RbKScek5L2GhxHQbPaD76Hx4Jiel0vm2G+4wei8Ay1+0YRFkhySxogU/uQVXHTv63KzQMak oIfnN/V2R0ucarsvMBW+gwARAQABwsF8BBgBCAAmAhsMFiEESbtpiOmzlcaw8cISVFM+0Ioq b/oFAmR3IPsFCQTeZ44ACgkQVFM+0Ioqb/qINhAAtcor9bevHy22HvJvXX17IOpPSklZJAeQ Az43ZEo5kRlJ8mElc2g3RzYCvL/V3fSiIATxIsLq/MDtYhO8AAvklxND/u2zeBd7BkRZTZZX W1V1cM3oTvfx3LOhDu4f2ExQzCGdkzbXTRswSJIe1W0qwsDp+YPekbrsKp1maZArGeu+6FuW honeosIrWS98QJmscEhP8ooyJkLDCCOgEk+mJ/JBjzcJGuYn6+Iy/ApMw/vqiLGL1UWekcTA g18mREHqIR+A3ZvypIufSFB52oIs1zD/uh/MgmL62bY/Cw6M2SxiVxLRsav9TNkF6ZaNQCgn GqifliCEMvEuLZRBOZSYH2A/PfwjYW0Ss0Gyfywmb2IA990gcQsXxuCLG7pAbWaeYazoYYEQ NYmWatZNMAs68ERI2zvrVxdJ/fBWAllIEd0uQ4P05GtAHPdTIDQYp545+TPV7oyF0LfXcsQs SFVZE6igdvkjfYmh+QOrHGZvpWXLTmffVf/AQ81wspzbfxJ7sYM4P8Mg5kKOsaoUdyA/2qVe cMh1CLUHXF1GlofpGbe1lj4KUJVse5g3qwV7i9VrseA8c4VIZewdIjkzAhmmbxl+8rM/LKBH dZUMTzME5PFCXJIZ83qkZQ795MTe2YScp9dIV7fsS5tpDwIs7BZNVM1l3NAdK+DLHqNxKuyO 8Zk= In-Reply-To: <20240201084319.2687896-1-david.marchand@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-ClientProxiedBy: DB9PR01CA0024.eurprd01.prod.exchangelabs.com (2603:10a6:10:1d8::29) To CH2PR12MB4294.namprd12.prod.outlook.com (2603:10b6:610:a9::11) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB4294:EE_|CY8PR12MB7196:EE_ X-MS-Office365-Filtering-Correlation-Id: ea8f7951-14df-4262-98eb-08dc275203ab X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: i0JWalsTwqj0qbF5DrFM45Wh40SRH5tSyo24l8L3AMGo53cCwXp1E3cF5uRHqQEPjcU12SMNlDDmVR4nI0YeUhM5Gf00wo4lPCuqB6g30yoPn3fWokW2Y4pXQinlF3UNinLIatdZCXK5E2Rdp1TuQSrB1AZQ/+qY1QUpCw71dAxEC+gqH/7ZySyp5d0ZJYZtbak1maxiuv3q/imQamvQcRELWZnJU1CrglOacThwPuUP4NzeuPskHDmsZVlUKvcHTMYWJOd9YQkHbmQfv/lZ0hABUdODOJjvBeeGDcUKYVOkNYsTb1pyvdgTGckqYbLq1fmWsafOuOhLZZwW8e8WGh9KJrULJUTTnZ/dofOb5eL362/v8EERHMq9SXOpU7vxEr1Oy6iwEpuotDFLCN/iBF7BClchfXRdDEOVrgZYw4Jo2+nG9lQ9pHosjFM/cEnINJjWF3U3k6C1TCgZjyStfvmNve6xQBbVZEP9c4ALQaL2n07EmZWZZFE8SifV7NauypaeGUfS+zdMX+tpicYDlqs4Ojn1QjVUpRClSxlaWcDcv/auDuRKPujq70ZyBz8tFm1dNJA4UoIQa5HHxuHpudy4dEhUmjJq96opElmVuK8rJiGxT7EpmbHg8W+ZD0QTXG7iDQ5AaAs01jlNj+McHQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR12MB4294.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(346002)(39860400002)(136003)(396003)(366004)(376002)(230922051799003)(64100799003)(451199024)(186009)(1800799012)(478600001)(2616005)(36756003)(6512007)(6666004)(53546011)(31696002)(38100700002)(86362001)(41300700001)(6506007)(83380400001)(26005)(6486002)(44832011)(8936002)(8676002)(4326008)(2906002)(31686004)(66476007)(5660300002)(316002)(54906003)(66946007)(66556008)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aWxMRmRWdTJUcEp0NGorR2lHL29DeURTTEhGOVYxNSs2TzFIVExCKy9XT0dp?= =?utf-8?B?bDRHREFGSG1GUzJpOGc3MjVEWlgya0tzTlFnYzdGeVhyS3BOTWdLa2VvWGVT?= =?utf-8?B?b0ZIZWhjYlhFelRvN2Q4Sk02VDdZVmtRSWNhY2hkZFNvdzFJT0FWL2I0MkI4?= =?utf-8?B?Y3FmL1J2S1dqZWpXWms1NHh0RFpyc21SVzc4N3Z0VFprOTUwVlJtNXpMc2Rm?= =?utf-8?B?cFMzUUpaUUxtVmttRm1xNlhYZ3VYalNpTDFzUnJiWjNJK2pYT0RzRUZGRzNw?= =?utf-8?B?K002b01oek1XRzhtYzJEdVlGdU5EQUVsQTlUWmVEMXdCTzgzL0ROd3h5TmVz?= =?utf-8?B?cDZ6NWhZZXJsdk8zakVPRHhaRlJwcVAvL3gxMUJlei9DWmhtRnNHZVlkN1U1?= =?utf-8?B?cmNJVXZzdHVqMDF1ZkJnc0huY1NJUGNYZFJsWng3cFlKRVVGYjRsVnJYYWN0?= =?utf-8?B?Qnd4YTR6alo4K2RiVm5VaTNRR3ZIUjljeEtEUkJlMmZCMUpRL1NPL2JGTVc4?= =?utf-8?B?elQzNGU3Rjl6OVU5ZmFEeVEvcU01NFVDSVd3d0tOZHBFV1RKMkdZZDE0MmxZ?= =?utf-8?B?b1N0TGEyQ3l1TE9sVFpNNG9aWGNKbDV0S1NqVFJRV0FUVHRrM0ZGa0MxeWNj?= =?utf-8?B?QWlyZTd2YXVtcEpVYzNvcmtJVGRISFpKbVFJcTFIeUdEOWljNnpzTVJ0UGNs?= =?utf-8?B?N3M3OG5pUExhaG82QU1Sd1JDbkY3OWVwdm90THJ2QXh0MnlVeEg1clRWZUtF?= =?utf-8?B?Y2RoSnJiazB4ZjNaOGdQWnZoTHF5ckwzTHIrc3Z6WURCRVllNXo2THV3Qi9p?= =?utf-8?B?UGs3enIwM08xNFpYczJyUjlock9CN0thaEJvZmxGaWovZ0RCczR3OTBaeXRq?= =?utf-8?B?MHE0UitpSnV5eUxmQjN3OFoyU1dHVzMwVnM5Q2ppVGF2Y0UybGl5ekEyQWZh?= =?utf-8?B?ZmVRVnRDMUxJMUM3YVhxbTlkQmpHdkdPcmlVaGRac1d0ZloxMFZodG11QzZv?= =?utf-8?B?d1RxdkdqUXdzUnFvTU9ITDNVZEE1SjJoNjU4c001TDAzNDlaQTVUekl6dW01?= =?utf-8?B?Zm03bFlqQmJiZ0s0UStBR0Y1cTN5NlJQVm5PcFQweFR2c3dOWi9MdlZDRVY5?= =?utf-8?B?RDVDWlBqcXh0dlBYZGdETzk5R1dncnB3YnpvMkp2QU1RVWh0QkhqTlRwcm9u?= =?utf-8?B?S01BUERYS0YwMmdGWjlldzVaMzZsMllZTk0rYUVvbGNuL3JiVE1QZFBsWktm?= =?utf-8?B?Q0w2RG0vZ0g5cFF3QmQzY3RuZkRKaW50UTF3bnNwQ3NRUnFxQnFGTEdCY1Bq?= =?utf-8?B?d0x1RFgvck9nc1k4blluS1NDdCs2UUo4dG81Vmszc2drcnZiZ3BtNHl1cm10?= =?utf-8?B?cVlVb3Fab05WbmF4RUd6MFlxcnBTMDdXZHhrdktHckhTekNRa1VrdXl1ZzI3?= =?utf-8?B?bkhMRmNkektzbnAyRThhaXdKdlc3MUJhZ1duMW5IdXB3dGJhODZXa0tpOFFG?= =?utf-8?B?REtIMFQzWXhnOE9WQ2I3dnpuYko4Z2paZ1dUeUxDcWt5NUtNTHZYekM5V3A2?= =?utf-8?B?T1RhRXY1ZGliUnlqU3NEbVJRRTFXREk5MjBheE9iTm8xU3RCVHA4OFdQYll2?= =?utf-8?B?Q3JlTnNic0tZV1ZEbEZJQThmTUkvUFAvc2ZQOXczekVnR3Jtb09Dcmw3ZGJ0?= =?utf-8?B?YUxhUHlkVkxqMUpyMjlzVVlSZHdmQXprVk1nRG0veGozemVEZHAvUnVJUXhR?= =?utf-8?B?RVhhdzh3T1I2Qzd5SkdxenlSdkdBR0V4NU9YdmtmaHd6MlBuYVAyczZhS21k?= =?utf-8?B?bFJFb3hJT0k5UWU4RHFET1RZNE1oZnFEa0hLYk5HeHB4SFZta1A3bEdYY3lM?= =?utf-8?B?dkhERW04SExmS3NoWGVGNTZPWEtWSUpxTUZ6YnF1bnFsQ3ZtL0JUbHp1LzUz?= =?utf-8?B?RGwzMWJtLzY1NjRINFkzcEx6K2wrR2FNUUovR0xraGxqcUhNU2hmQXNGSElY?= =?utf-8?B?VU5WMGFtUHpoYjltUzNUNXRCdWg1SGdqRnlkQ0ovZkNaZGdscWw5OTQ0V1ov?= =?utf-8?B?bTNlRmxRQXN4UWh4UmJvRVNub2xzZ054NzhYSkhZY1N2YXBtRGxXS0FQZ1JU?= =?utf-8?Q?V3WoJTv0e31u0aZtXSKWjI1vG?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea8f7951-14df-4262-98eb-08dc275203ab X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB4294.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2024 20:27:19.1732 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XFyIrdTZLWAkzn7ATkDhyUMbvw5RLd7Mx+acCWLJkXJjRfL5vn+ByJ/iPHGs5mad X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB7196 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org On 2/1/2024 8:43 AM, David Marchand wrote: > As described in a recent bugzilla opened against the net/iavf driver, > a driver may call a event callback from other calls of the ethdev API. > > Nothing guarantees in the ethdev API against such behavior. > > Add a notice against using locks in those callbacks. > > Bugzilla ID: 1337 > > Signed-off-by: David Marchand > --- > lib/ethdev/rte_ethdev.h | 14 +++++++++++++- > 1 file changed, 13 insertions(+), 1 deletion(-) > > diff --git a/lib/ethdev/rte_ethdev.h b/lib/ethdev/rte_ethdev.h > index 21e3a21903..5c6b104fb4 100644 > --- a/lib/ethdev/rte_ethdev.h > +++ b/lib/ethdev/rte_ethdev.h > @@ -4090,7 +4090,19 @@ enum rte_eth_event_type { > RTE_ETH_EVENT_MAX /**< max value of this enum */ > }; > > -/** User application callback to be registered for interrupts. */ > +/** > + * User application callback to be registered for interrupts. > + * > + * Note: there is no guarantee in the DPDK drivers that a callback won't be > + * called in the middle of other parts of the ethdev API. For example, > + * imagine that thread A calls rte_eth_dev_start() and as part of this > + * call, a RTE_ETH_EVENT_INTR_RESET event gets generated and the > + * associated callback is ran on thread A. In that example, if the > + * application protects its internal data using locks before calling > + * rte_eth_dev_start(), and the callback takes a same lock, a deadlock > + * occurs. Because of this, it is highly recommended NOT to take locks in > + * those callbacks. > + */ > typedef int (*rte_eth_dev_cb_fn)(uint16_t port_id, > enum rte_eth_event_type event, void *cb_arg, void *ret_param); > Acked-by: Ferruh Yigit