mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Jeffrey Hugo <quic_jhugo@quicinc.com>
To: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>,
	<airlied@linux.ie>, <daniel@ffwll.ch>,
	<maarten.lankhorst@linux.intel.com>, <mripard@kernel.org>,
	<tzimmermann@suse.de>
Cc: <quic_carlv@quicinc.com>, <quic_ajitpals@quicinc.com>,
	<quic_pkanojiy@quicinc.com>, <dri-devel@lists.freedesktop.org>,
	<linux-arm-msm@vger.kernel.org>, <linux-kernel@vger.kernel.org>
Subject: Re: [RFC PATCH 02/14] drm/qaic: Add uapi and core driver file
Date: Tue, 16 Aug 2022 12:22:54 -0600	[thread overview]
Message-ID: <9eba0937-b4cb-4c62-e339-8ff33aebdbde@quicinc.com> (raw)
In-Reply-To: <3f755d24-969b-1804-7979-880a9fe10cba@linaro.org>

On 8/16/2022 12:00 PM, Krzysztof Kozlowski wrote:
> On 16/08/2022 20:47, Jeffrey Hugo wrote:
>>>> +static int qaic_pci_probe(struct pci_dev *pdev,
>>>> +			  const struct pci_device_id *id)
>>>> +{
>>>> +	int ret;
>>>> +	int i;
>>>> +	int mhi_irq;
>>>> +	struct qaic_device *qdev;
>>>> +
>>>> +	qdev = kzalloc(sizeof(*qdev), GFP_KERNEL);
>>>> +	if (!qdev) {
>>>
>>> return -ENOMEM;
>>
>> So, no centralized exit per the coding style?  Ok.
> 
> Centralized exit except for cases where it is simply return. >
>>
>>>
>>>> +		ret = -ENOMEM;
>>>> +		goto qdev_fail;
>>>> +	}
>>>> +
>>>> +	if (id->device == PCI_DEV_AIC100) {
>>>> +		qdev->num_dbc = 16;
>>>> +		qdev->dbc = kcalloc(qdev->num_dbc, sizeof(*qdev->dbc),
>>>> +				    GFP_KERNEL);
>>>
>>> Why not devm?
>>
>> We were having issues with devm and the PCI stuff.  Looking at this
>> again, I think we can apply that here.
>>
>>>
>>>> +		if (!qdev->dbc) {
>>>> +			ret = -ENOMEM;
>>>> +			goto device_id_fail;
>>>> +		}
>>>> +	} else {
>>>> +		pci_dbg(pdev, "%s: No matching device found for device id %d\n",
>>>> +			__func__, id->device);
>>>
>>> How this can happen?
>>
>> Badly functioning hardware.  That hardware has been removed from
>> circulation.  Given that this is an init path and not performance
>> critical, having this handle the scenario in a sane way instead of
>> having the driver blow up in a weird way much later on makes me feel better.
> 
> How badly functioning hardware can bind and then report some different
> ID? If it reports different ID, it cannot bind...

It was one of those issues that was painful enough that I still remember 
it occurring, but long ago enough that I don't remember the specifics.

I don't think I'll be able to recreate the issue to re-debug it, so I'll 
just remove this.

>>>> +static int __init qaic_init(void)
>>>> +{
>>>> +	int ret;
>>>> +
>>>> +	if (datapath_polling) {
>>>> +		poll_datapath = true;
>>>> +		pr_info("qaic: driver initializing in datapath polling mode\n");
>>>
>>> No pr() in normal path of init/exit.
>>
>> This is not the normal path.  datapath_polling is a module parameter.
>> This is something the user can enable, and so it would be good to have
>> the user informed that the option took effect.
> 
> No, not really. User always can check via sysfs and there is no point in
> polluting dmesg on module load. It might be printed (if someone has such
> modprobe setting) on every system, even without the actual device.

So, I guess this is limited to platform devices?
I see GIC, IOMMU, and PCI doing the same
I guess, will remove.

> 
>>
>>>
>>>> +	}
>>>> +
>>>> +	qaic_logging_register();
>>>> +
>>>> +	ret = mhi_driver_register(&qaic_mhi_driver);
>>>> +	if (ret) {
>>>> +		pr_debug("qaic: mhi_driver_register failed %d\n", ret);
>>>> +		goto free_class;
>>>> +	}
>>>> +
>>>> +	ret = pci_register_driver(&qaic_pci_driver);
>>>> +
>>>
>>> No need for such blank lines.
>>
>> Agreed.
>>
>>>
>>>> +	if (ret) {
>>>> +		pr_debug("qaic: pci_register_driver failed %d\n", ret);
>>>> +		goto free_mhi;
>>>> +	}
>>>> +
>>>> +	qaic_telemetry_register();
>>>> +	qaic_ras_register();
>>>> +	qaic_ssr_register();
>>>> +	goto out;
>>>
>>> return 0.
>>
>> Ok.
>>
>>>
>>>> +
>>>> +free_mhi:
>>>> +	mhi_driver_unregister(&qaic_mhi_driver);
>>>> +free_class:
>>>> +out:
>>>> +	if (ret)
>>>> +		qaic_logging_unregister();
>>>> +
>>>> +	return ret;
>>>> +}
>>>> +
>>>> +static void __exit qaic_exit(void)
>>>> +{
>>>> +	pr_debug("qaic: exit\n");
>>>
>>> No pr() in normal path of init/exit.
>>
>> Sure.
>>
>>>
>>>> +	link_up = true;
>>>
>>> This is confusing...
>>
>> Will add a comment.  This ties into MHI, and how it can tear down in two
>> different ways, usually based on the link state.
> 
> Shouldn't this be link_up=false?

No.  module_exit() will be triggered on rmmod.  exit() will unregister 
the driver, which will cause qaic_pci_remove() to be called.  remove() 
calls qaic_mhi_free_controller() which uses the link state.

However, a hotplug event will also trigger qaic_pci_remove().

rmmod - link is up
hotplug - link is down

>> In this case, we are doing a clean tear down where the link is still up,
>> and so we should have MHI do the extra tear down that leaves the device
>> in a good state, in the event the driver gets added again.
>>
>>>
> 
> 
> 
> Best regards,
> Krzysztof


  reply	other threads:[~2022-08-16 18:23 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-15 18:42 [RFC PATCH 00/14] QAIC DRM accelerator driver Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 01/14] drm/qaic: Add documentation for AIC100 " Jeffrey Hugo
2022-08-16 10:55   ` Krzysztof Kozlowski
2022-08-16 14:50     ` Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 02/14] drm/qaic: Add uapi and core driver file Jeffrey Hugo
2022-08-16 11:06   ` Krzysztof Kozlowski
2022-08-16 17:47     ` Jeffrey Hugo
2022-08-16 18:00       ` Krzysztof Kozlowski
2022-08-16 18:22         ` Jeffrey Hugo [this message]
2022-08-17  5:38           ` Krzysztof Kozlowski
2022-08-15 18:42 ` [RFC PATCH 03/14] drm/qaic: Add qaic.h internal header Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 04/14] drm/qaic: Add MHI controller Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 05/14] drm/qaic: Add control path Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 06/14] drm/qaic: Add datapath Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 07/14] drm/qaic: Add debugfs Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 08/14] drm/qaic: Add RAS component Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 09/14] drm/qaic: Add ssr component Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 10/14] drm/qaic: Add sysfs Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 11/14] drm/qaic: Add telemetry Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 12/14] drm/qaic: Add tracepoints Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 13/14] drm/qaic: Add qaic driver to the build system Jeffrey Hugo
2022-08-15 18:42 ` [RFC PATCH 14/14] MAINTAINERS: Add entry for QAIC driver Jeffrey Hugo

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=9eba0937-b4cb-4c62-e339-8ff33aebdbde@quicinc.com \
    --to=quic_jhugo@quicinc.com \
    --cc=airlied@linux.ie \
    --cc=daniel@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=krzysztof.kozlowski@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=mripard@kernel.org \
    --cc=quic_ajitpals@quicinc.com \
    --cc=quic_carlv@quicinc.com \
    --cc=quic_pkanojiy@quicinc.com \
    --cc=tzimmermann@suse.de \
    /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

all inboxes | Powered by JetHome®