Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp4819664imd; Tue, 30 Oct 2018 07:54:50 -0700 (PDT) X-Google-Smtp-Source: AJdET5d92R1hII0biExx739dyxZbyZO932FBG4ZrEB1fjN4LoCEg3BGpqNyWgD6o2KCd+dGJgtjs X-Received: by 2002:a17:902:ea:: with SMTP id a97-v6mr18974323pla.164.1540911290209; Tue, 30 Oct 2018 07:54:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1540911290; cv=none; d=google.com; s=arc-20160816; b=Rli8i3sLtqjdR5w5Rlpnjeai6+ZL2urTH4+wyl+vvxNeV63eXCabjfRib79c+HneZG I6/v2Q8A+TUYATGvkI/agsMDQsBg/mK+QeSdF3NXO59RK656m7k8xdD3lcm5WTuPQgMC mtaeDSbliker0yvuJbKngJmhHFeq6mo1xqpIDdNbZnYnSCyzAJDJ+Q+c9KaAng85kURQ 1QOdz5M+hlsQzgbSC8sYWR8kXaWP1BA+sqvjj/UNbburR86a5JtcqlsmOi5uyJ8UY97X S5LPr0iaqZbjIAdsKiI4vdmNMdy/RFUjXV72poro+Sa1ubuUmW9c8XkxlQ38xQVIy6i9 MUAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature; bh=YGuRL4iSgxQCelHylHdRKjUZPIS29SDCvYcth+nshyk=; b=LiHewDFZevxHg3/Y6eZ8JZE06D7cI56RxhygdHXIYBzoOs4aOJSRCY6tuP6GmwdYPb 791Em+zI9c0PETYGzoPpv7bsH5I3YT/TJSxoGvTzZAlJH0Vo5qSV1yloTsh3Zim/lVtf bzCNfnoQcGxt5ZiSMOyhtIoMJtytTD6UxAhva9NBmBryB+fZPHa5E+4qm/isxdSMUMJD niHFYTQG7b9wX2ZM42e2cj87tzrr4bPQ37glDrSNO3yzf5TDK/yVytLfXluh9JLWrFFH g6Z43q99H0rbwycy4LRZD12fEB2QJvKXdAs2+IZf5bH+zeqO7lG1SB9SAfkoRu6u6sI+ A7fA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel-dk.20150623.gappssmtp.com header.s=20150623 header.b=c64Usldu; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f23-v6si23322261pfn.85.2018.10.30.07.54.33; Tue, 30 Oct 2018 07:54:50 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel-dk.20150623.gappssmtp.com header.s=20150623 header.b=c64Usldu; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726908AbeJ3Xr2 (ORCPT + 99 others); Tue, 30 Oct 2018 19:47:28 -0400 Received: from mail-it1-f196.google.com ([209.85.166.196]:35964 "EHLO mail-it1-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726537AbeJ3Xr1 (ORCPT ); Tue, 30 Oct 2018 19:47:27 -0400 Received: by mail-it1-f196.google.com with SMTP id t4-v6so5678333itf.1 for ; Tue, 30 Oct 2018 07:53:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=YGuRL4iSgxQCelHylHdRKjUZPIS29SDCvYcth+nshyk=; b=c64UslduNG90Wc5jW7k9PVnxYDloNmU2/6i8KITi4bX6j4W6Sh1JHIhY3p8ON0sct+ jahBX/mLSP/5iEwpEP3fmU6MqXH+tnXdE8nS8bdpdDHRUqPnVe+OW83ZCFSQQj8UxbmC S8y+aNwe0K3MnWzWUipqRh6bPsrgF/0aY7vQ/3zlIu93eo26WF9baFtFtwUyEIqvVH6z 2huLgPAepwehEoX7yM4DeqxB5VMHy3vWGACbEXQkwdZdDNurVabR3tCt4igiFI+vJuHm fHBmJ86a7zx1Z7+3ISnv/pjUV6yiT6gkWO4gFIZ/WF7pP3l6RyhdVpnPVQadmHcox+SS 7/Ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=YGuRL4iSgxQCelHylHdRKjUZPIS29SDCvYcth+nshyk=; b=LzqgkQ0ldgz/uFBcxX9pOuM23sGQ062IhPafxc9uY3lPBALTVreMixAt9uZoE5JFwV kAeVNLELRvXmZTBmZY/0axl6PDZ2gMifhXX2UakFFqiMyAHEv4Gs4HsrvDsa25VU7/Ge S209VABDbGOXmz+BXhkss9JnZ8FHoMt0uUPusgXP/7JPlR5zOhDTVCKNLTjTkeHOwDPy Ix866zKMGeVN9SUfm04Ipebrr6ZJRgCo6HNQkL/MK3Uxl+YvV1MopCkwZbvZtFzjRycs UnhcPNiD8LqcyjhDP9E8S+JlFNH1nbEGwcmcK4brF+ugpVqkjV6oKoHN9ADcB7EVvjaF 3P1A== X-Gm-Message-State: AGRZ1gJ0WwIrETOS6XRgWYKNbpIksynyJEAns4quRVFO2gU9M2TlekqD FQ6OoYY21iNowHaLKfRO8duKxjbxVb0= X-Received: by 2002:a05:660c:247:: with SMTP id t7mr1722892itk.107.1540911219706; Tue, 30 Oct 2018 07:53:39 -0700 (PDT) Received: from [192.168.1.56] ([216.160.245.98]) by smtp.gmail.com with ESMTPSA id w124-v6sm8869881ita.0.2018.10.30.07.53.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 30 Oct 2018 07:53:38 -0700 (PDT) Subject: Re: [PATCH 11/14] irq: add support for allocating (and affinitizing) sets of IRQs To: Keith Busch Cc: linux-block@vger.kernel.org, linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Thomas Gleixner References: <20181029163738.10172-1-axboe@kernel.dk> <20181029163738.10172-12-axboe@kernel.dk> <20181030142601.GA18906@localhost.localdomain> <20181030144527.GB18906@localhost.localdomain> From: Jens Axboe Message-ID: <46dbcbcd-799f-9970-a68f-de7e96b1a6bb@kernel.dk> Date: Tue, 30 Oct 2018 08:53:37 -0600 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.2.1 MIME-Version: 1.0 In-Reply-To: <20181030144527.GB18906@localhost.localdomain> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 10/30/18 8:45 AM, Keith Busch wrote: > On Tue, Oct 30, 2018 at 08:36:35AM -0600, Jens Axboe wrote: >> On 10/30/18 8:26 AM, Keith Busch wrote: >>> On Mon, Oct 29, 2018 at 10:37:35AM -0600, Jens Axboe wrote: >>>> diff --git a/kernel/irq/affinity.c b/kernel/irq/affinity.c >>>> index f4f29b9d90ee..2046a0f0f0f1 100644 >>>> --- a/kernel/irq/affinity.c >>>> +++ b/kernel/irq/affinity.c >>>> @@ -180,6 +180,7 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd) >>>> int curvec, usedvecs; >>>> cpumask_var_t nmsk, npresmsk, *node_to_cpumask; >>>> struct cpumask *masks = NULL; >>>> + int i, nr_sets; >>>> >>>> /* >>>> * If there aren't any vectors left after applying the pre/post >>>> @@ -210,10 +211,23 @@ irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd) >>>> get_online_cpus(); >>>> build_node_to_cpumask(node_to_cpumask); >>>> >>>> - /* Spread on present CPUs starting from affd->pre_vectors */ >>>> - usedvecs = irq_build_affinity_masks(affd, curvec, affvecs, >>>> - node_to_cpumask, cpu_present_mask, >>>> - nmsk, masks); >>>> + /* >>>> + * Spread on present CPUs starting from affd->pre_vectors. If we >>>> + * have multiple sets, build each sets affinity mask separately. >>>> + */ >>>> + nr_sets = affd->nr_sets; >>>> + if (!nr_sets) >>>> + nr_sets = 1; >>>> + >>>> + for (i = 0, usedvecs = 0; i < nr_sets; i++) { >>>> + int this_vecs = affd->sets ? affd->sets[i] : affvecs; >>>> + int nr; >>>> + >>>> + nr = irq_build_affinity_masks(affd, curvec, this_vecs, >>>> + node_to_cpumask, cpu_present_mask, >>>> + nmsk, masks + usedvecs); >>>> + usedvecs += nr; >>>> + } >>> >>> >>> While the code below returns the appropriate number of possible vectors >>> when a set requested too many, the above code is still using the value >>> from the set, which may exceed 'nvecs' used to kcalloc 'masks', so >>> 'masks + usedvecs' may go out of bounds. >> >> How so? nvecs must the max number of vecs, the sum of the sets can't >> exceed that value. > > 'nvecs' is what irq_calc_affinity_vectors() returns, which is the min > of either the requested max or the sum of the set, and the sum of the set > isn't guaranteed to be the smaller value. The sum of the set can't exceed the nvecs passed in, the nvecs passed in should be the less than or equal to nvecs. Granted this isn't enforced, and perhaps that should be the case. -- Jens Axboe