Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932144AbbFXOB1 (ORCPT ); Wed, 24 Jun 2015 10:01:27 -0400 Received: from mail-am1on0076.outbound.protection.outlook.com ([157.56.112.76]:48349 "EHLO emea01-am1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752756AbbFXOBO (ORCPT ); Wed, 24 Jun 2015 10:01:14 -0400 Authentication-Results: spf=none (sender IP is 193.47.165.134) smtp.mailfrom=mellanox.com; vger.kernel.org; dkim=none (message not signed) header.d=none; Message-ID: <558AB7DC.20703@mellanox.com> Date: Wed, 24 Jun 2015 16:59:56 +0300 From: Haggai Eran User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: , CC: , , Linus Torvalds , , Mel Gorman , "H. Peter Anvin" , Peter Zijlstra , Andrea Arcangeli , "Johannes Weiner" , Larry Woodman , "Rik van Riel" , Dave Airlie , Brendan Conoboy , Joe Donohue , Duncan Poole , Sherry Cheung , Subhash Gutti , John Hubbard , Mark Hairgrove , Lucien Dunning , "Cameron Buschardt" , Arvind Gopalakrishnan , Shachar Raindel , Liran Liss , Roland Dreier , Ben Sander , Greg Stoner , John Bridgman , Michael Mantor , "Paul Blinzer" , Laurent Morichetti , Alexander Deucher , Oded Gabbay , Subject: Re: [PATCH 33/36] IB/odp/hmm: add core infiniband structure and helper for ODP with HMM. References: <1432236705-4209-1-git-send-email-j.glisse@gmail.com> <1432239792-5002-1-git-send-email-jglisse@redhat.com> <1432239792-5002-14-git-send-email-jglisse@redhat.com> In-Reply-To: <1432239792-5002-14-git-send-email-jglisse@redhat.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.0.52.254] X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1;DB3FFO11FD020;1:PcyeuDl8xQAheeS1m4bZKnnAX9P+PI4Na0DC1WjdkYQbf3SQpr5vHlNtzaMt+0boFaehkLFSsXZTEYdf+b8GHVMYtwF/MZ6vq0EGU7/jRZ//nTgaiIRbFc6fWNeGZcetE3ZWiol2T8lO0xzAMMF75MkAoGitDJZx4SdYy6HD+IOS+smNzMaUQl7TRy84GvjDXhGjcRYBjU4xHK1uVjujdW1WInTM3s8d7ahlL/Wki5yJ6jcTo1WPzGFdgujF0yBa2hyznYQ8QJ2gbeDvaXs+2UFZ7samk1WAwX+2K0TNZb0a83vVW2ULjH9OCt54aqpZPpPYbLbzzJULsB9IykwzAA== X-Forefront-Antispam-Report: CIP:193.47.165.134;CTRY:IL;IPV:NLI;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(2980300002)(428002)(479174004)(24454002)(51444003)(199003)(189002)(6806004)(46102003)(101416001)(19580395003)(19580405001)(106466001)(77096005)(47776003)(65806001)(83506001)(92566002)(23676002)(36756003)(189998001)(77156002)(62966003)(50986999)(76176999)(54356999)(33656002)(65816999)(86362001)(50466002)(2950100001)(4001350100001)(87936001)(105586002)(7059030)(3940600001);DIR:OUT;SFP:1101;SCL:1;SRVR:AM3PR05MB531;H:mtlcas13.mtl.com;FPR:;SPF:None;MLV:sfv;A:1;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;AM3PR05MB531;2:tsLRJSK060IqkqgGRt/dCD2IkOwHu0f0ircSAXTvPHepTj59rYGksh05Mk/edZRb;2:cOWrNaqtwhxmfLHiwh6qu7huR6Cr1tRjxUvTQ/bsA3jfhlThKzxgr1e1La+pW7UaNr1dHCXORhw0gKwN9Carh1rOhEiOp4Lncz+hwoZiETCWMZJ6zAp73zk9pz6ATCFdLnwQCyZhiZrnPAiMaf0YB7Jvsy+6nwl40VGZP3OtZk6ooRS9lkRlHemR/uSmfv7zu8/ZZq9Jh3Me6r1pzv1o42e83qeomRcJXPjNqBWiYnsoDbekzbQkbaGkVN1RikAG;6:IIVIvG/Yod8ZwhvBj17ZEK2fNBQdJfY7OedQE7RhVa3O0O9qINbKe2diSCaTVr5j0JvgYYKKjQhyh881VVZMOPh+3vKuOsSCamiPo1IGOqBag7csGSf22RaODO0v0Q51scexuocEciO000UybCYAov98HQEikKHJU9k2RMvm1x1/HKNCm77Vqd+/tv8e+SGHrtRB19YgBUwUJBNz5dgcpaHLeEn2G18YrcDz8vb425zOO06Znq1rOfV3DRd2awvGz/SwFqd6ld5LEAF6kV1oPEMs7UCdDEazzHYHREURtCj+/TjevAKt2K2pycYA9dayV/2JrPETiDEAdLkw3OzlGxaTu7jmqr4q9zEearV7fPbjJBJKuhd1mcmKoesmrUsRSVHiuPYxaNzGbVdmULli6/6dYddgjH05Gl3HslE+wRgQnPbHhYq06Mnac9NwL2fECx5c9bNaRYtr8zX18xo5sXx6i1JdSfMikABwhaSXuaECoUAEMxABraon/Z7/ANeF X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:AM3PR05MB531; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(5005006)(3002001);SRVR:AM3PR05MB531;BCL:0;PCL:0;RULEID:;SRVR:AM3PR05MB531; X-Microsoft-Exchange-Diagnostics: 1;AM3PR05MB531;3:1LJOLEJvpyktmfg5xWscbMxHItOMrkcNTLwtD4Po65WjWuGbEykOETLyqzLo9a8eRbgjLWCOAectMnr0lZH5IyH1cl9IueIv8s/ROe+p/TmUcvGZCwreX58iTvCaf5Yb96H7UKYwdaXHe5sX7iyoTRoc1eg6TKQ7VNEGgE/RJOaIBFWOa80kYtCPK/B8eYFy2D0yUy3mD4H2VG+Ty0ultR/nHgq2MlaHiJyxxmHb12uUIgoL8BPf2YOP2slySIm4Nd3hTHX941zSJofu9Bch/D/iUfCIk42LgZQfpMgxfFw= X-Forefront-PRVS: 061725F016 X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtBTTNQUjA1TUI1MzE7OTp6ZnpKUjY2Y2hsVUhaSGZnbGZrd1YxRVRocno2?= =?utf-8?B?SUErZnJDanZoSDgrWVZraEVCSEtUR2hpMnk0Y3JodW53WkVNeHB6VmFDcEhT?= =?utf-8?B?M2NoT25xNTQvWGFNMG4yaXVuaTQxbW5ZT3k0ZDFmcEZQeEs5N2lPaW9VaVA5?= =?utf-8?B?QWh3UXBEYWxrOUppUjYxVEdKaGRXOTkyVnJ6ZmxWZllvaTFpL2NTeUhudGdZ?= =?utf-8?B?UzBkTm81NGpkNFgxUFkvWHJ3aDZJMWphWXUwbU54anVYaSs3Z3JycWVHNkN3?= =?utf-8?B?UElzbFBCWWk4ajNFbTJqRC9DdDJmVG5rVURNRG9qSnNzTFF6QmY4UEpuYTdM?= =?utf-8?B?L21ZbDhxaDZPM2hOdEVWVmZNODM4QkluQnVwdkVnSVc2THY3bGxmdnI3ZGFK?= =?utf-8?B?TXZqZUtaQmdMOUhkUmtzRjRGUGRBZ0ZtdDR6MFdIZzVYaDFqSnd6Rnh4RG5T?= =?utf-8?B?ZUtEQ0JIRHN4L3BNcTIwWTFNK05qSkRmMkJ3cWZHT0x6dW9kNjBSNkw5S25n?= =?utf-8?B?cVA1OVBTN2U1bEJkV3FXRWg1aEl6ZG05Nkd0aGRPMjZQOVgxdEszVS9OTlNZ?= =?utf-8?B?MVNMeTN3R0FrNWxzakR5cUVldEU2LzR6akNTWW9TSm1rc2ROT1F1VUpCV0hx?= =?utf-8?B?TU5QSnpGSGl6K255T0MvSWhMWFNOTGhjbUpvd0tRVXZEOVFSVHk0bVJJZ296?= =?utf-8?B?OWFuZUVnc01RVG5nQ3huMjFrRTB5YTRCeWhwdlMwcjAxNnZBTnpRN3JUOGJM?= =?utf-8?B?WDlNWFQwSEFjQVUwWGQ3WUtJMFJPYW90cm9uR0k1ZUdmN05iVzVFNWpXL2FX?= =?utf-8?B?QmV4bEpNQXhQVllwd0FXbGgxYkk4Vk1ZZkZWbWFwYjF3OTJBSjVGRmo1bVpU?= =?utf-8?B?UnlXZ2pVcEh6Q2ttNzZ3TmxLdVZLemFPajlCYzBISDZqdUN4SUpHZ1BockZO?= =?utf-8?B?TXUyR3pTcW5iQ2M2N3U2cC9Hbk43d3R5NE8yY1p3NVVFMC9pU2NhREZiTlZs?= =?utf-8?B?dWVRaFpTdVpvdHN6MDJub1Z6QkJYSGE3UGtHaHlNY3gya1FVWWtrOFp6VUV2?= =?utf-8?B?QnJTeFlvMHEyTktHT2dWMHV2VnFHY0ZTZW45WXlpQVR6TEZIdHdPYUxEalln?= =?utf-8?B?ZjdtcENJcGlLVE1PM2JadVpheEZxRTlnTk9abTMrNTJNZ2pCOE9QQUJyZHRV?= =?utf-8?B?TkJGOXB0WTl1dVZndlJXZjlROW1vRFZPVDdwTi9TLzI1MkU3MGg3UWZlQjF1?= =?utf-8?B?STBFVjE2THFiR0czcERkOGRKNnhZYnBDMmRqeUxveUprNlZLL0FDVW9TNXc0?= =?utf-8?B?eEt0QnJWYzRBPT0=?= X-Microsoft-Exchange-Diagnostics: 1;AM3PR05MB531;3:gbVnWIZBTbilTIA5OTo17Z2wSFb6p1OniFogZKC/hgCCIxD8y1rTV8YzDKjvl7QMd5A9ZMg3E5j+xjnQTVK/+h0LuQCgVAYNIl3w9aG3gVsxsidMV6xQWsAjSjd1Dizj5vvfb4Zwfwd+ItOfmL9SYg==;10:s9MlHmxLb8ILRLMh+tSHsoLukwONWXX7WHFdpOXnC/ARUAGN320kfBNkSppFyqtb2xqKgV29NL4GbF4Q01e/DocCXQboy4LhB2ItAY6NyqU=;6:NdLHhDJeoC04FhXXgo2y6aw/8IoxpdPVBnLABW3MAV49LD9q6FwVkiZ2/mAaQVMP X-OriginatorOrg: Mellanox.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Jun 2015 14:01:09.7186 (UTC) X-MS-Exchange-CrossTenant-Id: a652971c-7d2e-4d9b-a6a4-d149256f461b X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=a652971c-7d2e-4d9b-a6a4-d149256f461b;Ip=[193.47.165.134];Helo=[mtlcas13.mtl.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM3PR05MB531 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 3312 Lines: 102 On 21/05/2015 23:23, jglisse@redhat.com wrote: > +int ib_umem_odp_get(struct ib_ucontext *context, struct ib_umem *umem) > +{ > + struct mm_struct *mm = get_task_mm(current); > + struct ib_device *ib_device = context->device; > + struct ib_mirror *ib_mirror; > + struct pid *our_pid; > + int ret; > + > + if (!mm || !ib_device->hmm_ready) > + return -EINVAL; > + > + /* FIXME can this really happen ? */ No, following Yann Droneaud's patch 8abaae62f3fd ("IB/core: disallow registering 0-sized memory region") ib_umem_get() checks against zero sized umems. > + if (unlikely(ib_umem_start(umem) == ib_umem_end(umem))) > + return -EINVAL; > + > + /* Prevent creating ODP MRs in child processes */ > + rcu_read_lock(); > + our_pid = get_task_pid(current->group_leader, PIDTYPE_PID); > + rcu_read_unlock(); > + put_pid(our_pid); > + if (context->tgid != our_pid) { > + mmput(mm); > + return -EINVAL; > + } > + > + umem->hugetlb = 0; > + umem->odp_data = kmalloc(sizeof(*umem->odp_data), GFP_KERNEL); > + if (umem->odp_data == NULL) { > + mmput(mm); > + return -ENOMEM; > + } > + umem->odp_data->private = NULL; > + umem->odp_data->umem = umem; > + > + mutex_lock(&ib_device->hmm_mutex); > + /* Is there an existing mirror for this process mm ? */ > + ib_mirror = ib_mirror_ref(context->ib_mirror); > + if (!ib_mirror) > + list_for_each_entry(ib_mirror, &ib_device->ib_mirrors, list) { > + if (ib_mirror->base.hmm->mm != mm) > + continue; > + ib_mirror = ib_mirror_ref(ib_mirror); > + break; > + } > + > + if (ib_mirror == NULL || > + ib_mirror == list_first_entry(&ib_device->ib_mirrors, > + struct ib_mirror, list)) { Is the second check an attempt to check if the list_for_each_entry above passed through all the entries and didn't break? Maybe I missing something, but I think that would cause the ib_mirror to hold a pointer such that ib_mirror->list == ib_mirrors (point to the list head), and not to the first entry. In any case, I think it would be more clear if you add another ib_mirror variable for iterating the ib_mirrors list. > + /* We need to create a new mirror. */ > + ib_mirror = kmalloc(sizeof(*ib_mirror), GFP_KERNEL); > + if (ib_mirror == NULL) { > + mutex_unlock(&ib_device->hmm_mutex); > + mmput(mm); > + return -ENOMEM; > + } > + kref_init(&ib_mirror->kref); > + init_rwsem(&ib_mirror->hmm_mr_rwsem); > + ib_mirror->umem_tree = RB_ROOT; > + ib_mirror->ib_device = ib_device; > + > + ib_mirror->base.device = &ib_device->hmm_dev; > + ret = hmm_mirror_register(&ib_mirror->base); > + if (ret) { > + mutex_unlock(&ib_device->hmm_mutex); > + kfree(ib_mirror); > + mmput(mm); > + return ret; > + } > + > + list_add(&ib_mirror->list, &ib_device->ib_mirrors); > + context->ib_mirror = ib_mirror_ref(ib_mirror); > + } > + mutex_unlock(&ib_device->hmm_mutex); > + umem->odp_data.ib_mirror = ib_mirror; > + > + down_write(&ib_mirror->umem_rwsem); > + rbt_ib_umem_insert(&umem->odp_data->interval_tree, &mirror->umem_tree); > + up_write(&ib_mirror->umem_rwsem); > + > + mmput(mm); > + return 0; > +} -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/