From: Damien Le Moal <damien.lemoal@opensource.wdc.com>
To: Manivannan Sadhasivam <mani@kernel.org>
Cc: "Bjorn Helgaas" <bhelgaas@google.com>,
linux-pci@vger.kernel.org,
"Rick Wertenbroek" <rick.wertenbroek@gmail.com>,
"Lorenzo Pieralisi" <lpieralisi@kernel.org>,
"Krzysztof Wilczyński" <kw@linux.com>,
"Kishon Vijay Abraham I" <kishon@kernel.org>,
"Arnd Bergmann" <arnd@arndb.de>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
Subject: Re: [PATCH 01/12] pci: endpoint: Automatically create a function type attributes group
Date: Thu, 16 Feb 2023 21:31:54 +0900 [thread overview]
Message-ID: <aa724af7-aa66-753b-1c00-4a5678afcb3a@opensource.wdc.com> (raw)
In-Reply-To: <20230216100438.GC2420@thinkpad>
On 2/16/23 19:04, Manivannan Sadhasivam wrote:
> On Wed, Feb 15, 2023 at 12:21:44PM +0900, Damien Le Moal wrote:
>> A PCI endpoint function driver can define function specific attributes
>> using the add_cfs() endpoint driver operation. However, this attributes
>> group is not created automatically when the function is created and
>> rather relies on the user creating a directory within the endpoint
>> function configfs directory to initialize the attributes.
>>
>
> This is not accurate. An endpoint function will only be created when a
> directory is created under /sys/kernel/debug/pci_ep/functions/<func_name>/
>
> Here, func_name is just a debugfs group created during EPF registration and
> doesn't represent a function unless a subdirectory is created.
>
>> While working, this approach is dangerous as nothing prevents the user
>> from creating multiple directories with differenti (wrong) names that
>> all will contain the same attributes.
>>
>> Fix this by modifying pci_epf_cfs_work() to execute the new function
>> pci_ep_cfs_add_type_group() which itself calls pci_epf_type_add_cfs() to
>> obtain the function specific attribute group from the function driver.
>> If the function driver defines an attribute group,
>> pci_ep_cfs_add_type_group() then proceeds to register this group using
>> configfs_register_group(), thus automatically exposing the configfs
>> attributes to the user.
>>
>> With this change, there is no need for the user to create/delete
>> directories in the endpoint function configfs directory. The
>> pci_epf_type_group_ops group operations are thus removed.
>>
>
> No. You are just automating the creation of sub-directories specific to
> functions such as NTB. Users still need to create a directory to create an
> actual endpoint function.
>
> The commit message sounds like it is automating the whole endpoint function
> creation which it is not doing.
OK. I was not clear in the wording. It is not the function directory that this
is automating. It is not about:
/sys/kernel/configfs/pci_ep/functions/<func_name>/
It is about automating the creation of the sub-directory under that that
represent the attribute group that the function defines. So it is about:
/sys/kernel/configfs/pci_ep/functions/<func_name>/<whatever-function-specific>
That directory is *not* created automatically, the user must create it, but
worse than that, can do it multiple times with really bad results when
everything is tore down (I got an oops due to bad reference counts).
This patch fixes that, not the function directory creation itself.
>
> Thanks,
> Mani
>
>> Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com>
>> ---
>> drivers/pci/endpoint/pci-ep-cfs.c | 41 ++++++++++++++-----------------
>> 1 file changed, 19 insertions(+), 22 deletions(-)
>>
>> diff --git a/drivers/pci/endpoint/pci-ep-cfs.c b/drivers/pci/endpoint/pci-ep-cfs.c
>> index d4850bdd837f..1fb31f07199f 100644
>> --- a/drivers/pci/endpoint/pci-ep-cfs.c
>> +++ b/drivers/pci/endpoint/pci-ep-cfs.c
>> @@ -23,6 +23,7 @@ struct pci_epf_group {
>> struct config_group group;
>> struct config_group primary_epc_group;
>> struct config_group secondary_epc_group;
>> + struct config_group *type_group;
>> struct delayed_work cfs_work;
>> struct pci_epf *epf;
>> int index;
>> @@ -502,34 +503,28 @@ static struct configfs_item_operations pci_epf_ops = {
>> .release = pci_epf_release,
>> };
>>
>> -static struct config_group *pci_epf_type_make(struct config_group *group,
>> - const char *name)
>> -{
>> - struct pci_epf_group *epf_group = to_pci_epf_group(&group->cg_item);
>> - struct config_group *epf_type_group;
>> -
>> - epf_type_group = pci_epf_type_add_cfs(epf_group->epf, group);
>> - return epf_type_group;
>> -}
>> -
>> -static void pci_epf_type_drop(struct config_group *group,
>> - struct config_item *item)
>> -{
>> - config_item_put(item);
>> -}
>> -
>> -static struct configfs_group_operations pci_epf_type_group_ops = {
>> - .make_group = &pci_epf_type_make,
>> - .drop_item = &pci_epf_type_drop,
>> -};
>> -
>> static const struct config_item_type pci_epf_type = {
>> - .ct_group_ops = &pci_epf_type_group_ops,
>> .ct_item_ops = &pci_epf_ops,
>> .ct_attrs = pci_epf_attrs,
>> .ct_owner = THIS_MODULE,
>> };
>>
>> +static void pci_ep_cfs_add_type_group(struct pci_epf_group *epf_group)
>> +{
>> + struct config_group *group;
>> +
>> + group = pci_epf_type_add_cfs(epf_group->epf, &epf_group->group);
>> + if (!group)
>> + return;
>> +
>> + if (IS_ERR(group)) {
>> + pr_err("failed to create epf type specific attributes\n");
>> + return;
>> + }
>> +
>> + configfs_register_group(&epf_group->group, group);
>> +}
>> +
>> static void pci_epf_cfs_work(struct work_struct *work)
>> {
>> struct pci_epf_group *epf_group;
>> @@ -547,6 +542,8 @@ static void pci_epf_cfs_work(struct work_struct *work)
>> pr_err("failed to create 'secondary' EPC interface\n");
>> return;
>> }
>> +
>> + pci_ep_cfs_add_type_group(epf_group);
>> }
>>
>> static struct config_group *pci_epf_make(struct config_group *group,
>> --
>> 2.39.1
>>
>
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2023-02-16 12:32 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-02-15 3:21 [PATCH 00/12] PCI endpoint fixes and improvements Damien Le Moal
2023-02-15 3:21 ` [PATCH 01/12] pci: endpoint: Automatically create a function type attributes group Damien Le Moal
2023-02-16 10:04 ` Manivannan Sadhasivam
2023-02-16 12:31 ` Damien Le Moal [this message]
2023-02-15 3:21 ` [PATCH 02/12] pci: endpoint: do not export pci_epf_type_add_cfs() Damien Le Moal
2023-02-16 10:15 ` Manivannan Sadhasivam
2023-02-16 12:33 ` Damien Le Moal
2023-02-15 3:21 ` [PATCH 03/12] pci: epf-test: Fix DMA transfer completion detection Damien Le Moal
2023-02-16 10:18 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 04/12] pci: epf-test: Use driver registers as volatile Damien Le Moal
2023-02-16 10:23 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 05/12] pci: epf-test: Simplify dma support checks Damien Le Moal
2023-02-16 10:27 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 06/12] pci: epf-test: Simplify transfers result print Damien Le Moal
2023-02-16 10:39 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 07/12] pci: epf-test: Add debug and error messages Damien Le Moal
2023-02-15 11:34 ` Greg Kroah-Hartman
2023-02-15 11:44 ` Damien Le Moal
2023-02-15 11:34 ` Greg Kroah-Hartman
2023-02-15 11:45 ` Damien Le Moal
2023-02-15 12:01 ` Greg Kroah-Hartman
2023-02-15 12:18 ` Damien Le Moal
2023-02-15 13:24 ` Greg Kroah-Hartman
2023-02-15 13:49 ` Arnd Bergmann
2023-02-15 22:55 ` Damien Le Moal
2023-02-15 3:21 ` [PATCH 08/12] misc: pci_endpoint_test: Free IRQs before removing the device Damien Le Moal
2023-02-16 10:46 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 09/12] misc: pci_endpoint_test: Do not write status in IRQ handler Damien Le Moal
2023-02-16 10:51 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 10/12] misc: pci_endpoint_test: Re-init completion for every test Damien Le Moal
2023-02-16 10:55 ` Manivannan Sadhasivam
2023-02-16 12:35 ` Damien Le Moal
2023-02-15 3:21 ` [PATCH 11/12] misc: pci_endpoint_test: Simplify pci_endpoint_test_msi_irq() Damien Le Moal
2023-02-16 10:57 ` Manivannan Sadhasivam
2023-02-15 3:21 ` [PATCH 12/12] misc: pci_endpoint_test: Add debug and error messages Damien Le Moal
2023-02-15 11:34 ` Greg Kroah-Hartman
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aa724af7-aa66-753b-1c00-4a5678afcb3a@opensource.wdc.com \
--to=damien.lemoal@opensource.wdc.com \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=gregkh@linuxfoundation.org \
--cc=kishon@kernel.org \
--cc=kw@linux.com \
--cc=linux-pci@vger.kernel.org \
--cc=lpieralisi@kernel.org \
--cc=mani@kernel.org \
--cc=rick.wertenbroek@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox