From: Arnd Bergmann <arnd@arndb.de>
To: John Garry <john.garry@huawei.com>
Cc: JBottomley@odin.com, robh+dt@kernel.org, pawel.moll@arm.com,
mark.rutland@arm.com, ijc+devicetree@hellion.org.uk,
galak@codeaurora.org, linux-scsi@vger.kernel.org,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
linuxarm@huawei.com, john.garry2@mail.dcu.ie, hare@suse.de,
xuwei5@hisilicon.com, zhangfei.gao@linaro.org
Subject: Re: [PATCH v2 25/32] scsi: hisi_sas: add abnormal irq handler
Date: Fri, 30 Oct 2015 15:10:24 +0100 [thread overview]
Message-ID: <3709094.hsDE2JcmxW@wuerfel> (raw)
In-Reply-To: <1445868903-183817-26-git-send-email-john.garry@huawei.com>
On Monday 26 October 2015 22:14:56 John Garry wrote:
> Add abnormal irq handler. This handler is concerned with
> phy down event.
> Also add port formed and port deformed handlers.
>
> Signed-off-by: John Garry <john.garry@huawei.com>
I noticed a couple more coding style issues in this patch than elsewhere, so here
is a slightly more detailed review.
> +static void hisi_sas_port_notify_formed(struct asd_sas_phy *sas_phy, int lock)
> +{
> + struct sas_ha_struct *sas_ha = sas_phy->ha;
> + struct hisi_hba *hisi_hba = NULL;
> + int i = 0;
> + struct hisi_sas_phy *phy = sas_phy->lldd_phy;
> + struct asd_sas_port *sas_port = sas_phy->port;
> + struct hisi_sas_port *port;
> + unsigned long flags = 0;
Here and in general, please avoid initializing local variables
to zero, as that prevents gcc from warning about uses that
come before the real initialization.
The flags that get passed into spin_lock_irqsave() are architecture
specific, so you cannot rely on '0' to have a particular meaning.
> + if (!sas_port)
> + return;
> +
> + while (sas_ha->sas_phy[i]) {
Using a for() loop would avoid the initialization here.
> + if (sas_ha->sas_phy[i] == sas_phy) {
> + hisi_hba = (struct hisi_hba *)sas_ha->lldd_ha;
lldd_ha is a void pointer, so you don't need a cast.
> + port = &hisi_hba->port[i];
> + break;
> + }
> + i++;
> + }
The loop is really odd, as you apparently only try to find the
array index to a pointer you already have. Is there no space for
driver-specific data in 'asd_sas_phy'? If there is, just point to
per-phy structure that you define yourself and put the index into
that structure. I believe you already have a struct like that.
> + if (hisi_hba == NULL) {
When checking a pointer for validity, do not compare against
NULL, but write this as 'if (!hisi_hba)', which is the more
normal coding style.
> + pr_err("%s: could not find hba\n", __func__);
> + return;
> + }
Better use dev_err() to print the device name, but remove the __func__
argument. Again, when you have the per-phy structure, put a pointer
to the device in there.
> +
> + if (lock)
> + spin_lock_irqsave(&hisi_hba->lock, flags);
> + port->port_attached = 1;
> + port->id = phy->port_id;
> + phy->port = port;
> + sas_port->lldd_port = port;
> +
> + if (lock)
> + spin_unlock_irqrestore(&hisi_hba->lock, flags);
> +}
This breaks some checking tools that try to validate the uses of
locks. Better wrap the function in another one depending on the
caller. When using spinlocks in general, it's also better to replace
the "I have no clue where I'm called from" spin_lock_irqsave()
call with either spin_lock() or spin_lock_irq() if at all possible.
Arnd
next prev parent reply other threads:[~2015-10-30 14:10 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-10-26 14:14 [PATCH v2 00/32] HiSilicon SAS driver John Garry
2015-10-26 14:14 ` [PATCH v2 01/32] [SCSI] sas: centralise ssp frame information units John Garry
2015-10-26 14:14 ` [PATCH v2 02/32] devicetree: bindings: scsi: HiSi SAS John Garry
2015-10-26 14:45 ` Mark Rutland
2015-10-27 13:09 ` John Garry
2015-10-27 14:39 ` Mark Rutland
2015-10-27 14:54 ` zhangfei
2015-10-27 15:03 ` Mark Rutland
2015-10-27 15:06 ` John Garry
2015-10-26 14:55 ` John Garry
2015-10-26 14:14 ` [PATCH v2 03/32] scsi: hisi_sas: add initial bare main driver John Garry
2015-10-26 14:14 ` [PATCH v2 04/32] scsi: hisi_sas: add scsi host registration John Garry
2015-10-26 14:14 ` [PATCH v2 05/32] scsi: hisi_sas: scan device tree John Garry
2015-10-26 14:48 ` Mark Rutland
2015-10-26 14:51 ` John Garry
2015-10-26 19:55 ` kbuild test robot
2015-10-26 14:14 ` [PATCH v2 06/32] scsi: hisi_sas: add HW DMA structures John Garry
2015-10-26 14:14 ` [PATCH v2 07/32] scsi: hisi_sas: allocate memories and create pools John Garry
2015-10-26 14:14 ` [PATCH v2 08/32] scsi: hisi_sas: add hisi_sas_remove John Garry
2015-10-26 14:14 ` [PATCH v2 09/32] scsi: hisi_sas: add slot init code John Garry
2015-10-26 14:14 ` [PATCH v2 10/32] scsi: hisi_sas: add cq structure initialization John Garry
2015-10-26 14:14 ` [PATCH v2 11/32] scsi: hisi_sas: add phy SAS ADDR initialization John Garry
2015-10-26 14:14 ` [PATCH v2 12/32] scsi: hisi_sas: set dev DMA mask John Garry
2015-10-26 14:14 ` [PATCH v2 13/32] scsi: hisi_sas: add hisi_hba workqueue John Garry
2015-10-26 14:14 ` [PATCH v2 14/32] scsi: hisi_sas: add hisi sas device type John Garry
2015-10-26 14:14 ` [PATCH v2 15/32] scsi: hisi_sas: add phy and port init John Garry
2015-10-26 14:14 ` [PATCH v2 16/32] scsi: hisi_sas: add timer and spinlock init John Garry
2015-10-26 14:14 ` [PATCH v2 17/32] scsi: hisi_sas: add v1 hw module init John Garry
2015-10-26 14:14 ` [PATCH v2 18/32] scsi: hisi_sas: add v1 hardware register definitions John Garry
2015-10-26 14:14 ` [PATCH v2 19/32] scsi: hisi_sas: add v1 HW initialisation code John Garry
2015-10-26 14:14 ` [PATCH v2 20/32] scsi: hisi_sas: add v1 hw interrupt init John Garry
2015-10-26 14:14 ` [PATCH v2 21/32] scsi: hisi_sas: add path from phyup irq to SAS framework John Garry
2015-10-26 14:14 ` [PATCH v2 22/32] scsi: hisi_sas: add ssp command function John Garry
2015-10-26 14:14 ` [PATCH v2 23/32] scsi: hisi_sas: add cq interrupt handler John Garry
2015-10-26 14:14 ` [PATCH v2 24/32] scsi: hisi_sas: add dev_found and port_formed John Garry
2015-10-26 14:14 ` [PATCH v2 25/32] scsi: hisi_sas: add abnormal irq handler John Garry
2015-10-30 14:10 ` Arnd Bergmann [this message]
2015-10-30 16:58 ` John Garry
2015-10-26 14:14 ` [PATCH v2 26/32] scsi: hisi_sas: add bcast interrupt handler John Garry
2015-10-26 14:14 ` [PATCH v2 27/32] scsi: hisi_sas: add smp protocol support John Garry
2015-10-30 13:53 ` Arnd Bergmann
2015-10-30 16:22 ` John Garry
2015-11-02 17:03 ` John Garry
2015-11-02 20:29 ` Arnd Bergmann
2015-11-03 11:42 ` John Garry
2015-11-03 12:27 ` Arnd Bergmann
2015-10-26 14:14 ` [PATCH v2 28/32] scsi: hisi_sas: add scan finished and start John Garry
2015-10-26 14:15 ` [PATCH v2 29/32] scsi: hisi_sas: add tmf methods John Garry
2015-10-26 14:15 ` [PATCH v2 30/32] scsi: hisi_sas: add control phy handler John Garry
2015-10-26 14:15 ` [PATCH v2 31/32] scsi: hisi_sas: add fatal irq handler John Garry
2015-10-26 14:15 ` [PATCH v2 32/32] MAINTAINERS: add maintainer for HiSi SAS driver John Garry
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=3709094.hsDE2JcmxW@wuerfel \
--to=arnd@arndb.de \
--cc=JBottomley@odin.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=hare@suse.de \
--cc=ijc+devicetree@hellion.org.uk \
--cc=john.garry2@mail.dcu.ie \
--cc=john.garry@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=robh+dt@kernel.org \
--cc=xuwei5@hisilicon.com \
--cc=zhangfei.gao@linaro.org \
/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