From: Takashi Iwai <tiwai@suse.de>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: alsa-devel@alsa-project.org
Subject: Re: old bug in au88x0_core.c
Date: Wed, 29 Jun 2016 15:40:39 +0200 [thread overview]
Message-ID: <s5heg7gdsfc.wl-tiwai@suse.de> (raw)
In-Reply-To: <20160627130346.GA6787@mwanda>
On Mon, 27 Jun 2016 15:03:47 +0200,
Dan Carpenter wrote:
>
> Hi ALSA devs,
>
> The patch 1da177e4c3f4: "Linux-2.6.12-rc2" from Apr 16, 2005, leads
> to the following static checker warning:
>
> sound/pci/au88x0/au88x0_core.c:1449 vortex_wtdma_bufshift()
> warn: mask and shift to zero
>
> sound/pci/au88x0/au88x0_core.c
> 1441 static int vortex_wtdma_bufshift(vortex_t * vortex, int wtdma)
> 1442 {
> 1443 stream_t *dma = &vortex->dma_wt[wtdma];
> 1444 int page, p, pp, delta, i;
> 1445
> 1446 page =
> 1447 (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) &
> 1448 WT_SUBBUF_MASK)
> 1449 >> WT_SUBBUF_SHIFT;
>
> This is always zero because:
>
> #define WT_SUBBUF_MASK 0x3
> #define WT_SUBBUF_SHIFT 0x15
>
> 1450 if (dma->nr_periods >= 4)
> 1451 delta = (page - dma->period_real) & 3;
> 1452 else {
> 1453 delta = (page - dma->period_real);
> 1454 if (delta < 0)
> 1455 delta += dma->nr_periods;
> 1456 }
> 1457 if (delta == 0)
> 1458 return 0;
>
>
> 1493 #if 0
> 1494 static void
> 1495 vortex_wtdma_getposition(vortex_t * vortex, int wtdma, int *subbuf, int *pos)
> 1496 {
> 1497 int temp;
> 1498 temp = hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2));
> 1499 *subbuf = (temp >> WT_SUBBUF_SHIFT) & WT_SUBBUF_MASK;
>
> >From this ifdef zero code, it looks like we should shift first then do
> the mask.
>
> 1500 *pos = temp & POS_MASK;
> 1501 }
> 1502
> 1503 static int vortex_wtdma_getcursubuffer(vortex_t * vortex, int wtdma)
> 1504 {
> 1505 return ((hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) >>
> 1506 POS_SHIFT) & POS_MASK);
> 1507 }
> 1508 #endif
Correct, this should be fixed in that way. Below is the fix patch I'm
going to queue.
thanks,
Takashi
-- 8< --
From: Takashi Iwai <tiwai@suse.de>
Subject: [PATCH] ALSA: au88x0: Fix calculation in vortex_wtdma_bufshift()
vortex_wtdma_bufshift() function does calculate the page index
wrongly, first masking then shift, which always results in zero.
The proper computation is to first shift, then mask.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
sound/pci/au88x0/au88x0_core.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/sound/pci/au88x0/au88x0_core.c b/sound/pci/au88x0/au88x0_core.c
index 4a054d720112..d3125c169684 100644
--- a/sound/pci/au88x0/au88x0_core.c
+++ b/sound/pci/au88x0/au88x0_core.c
@@ -1444,9 +1444,8 @@ static int vortex_wtdma_bufshift(vortex_t * vortex, int wtdma)
int page, p, pp, delta, i;
page =
- (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) &
- WT_SUBBUF_MASK)
- >> WT_SUBBUF_SHIFT;
+ (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2))
+ >> WT_SUBBUF_SHIFT) & WT_SUBBUF_MASK;
if (dma->nr_periods >= 4)
delta = (page - dma->period_real) & 3;
else {
--
2.9.0
prev parent reply other threads:[~2016-06-29 13:40 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-27 13:03 old bug in au88x0_core.c Dan Carpenter
2016-06-29 13:40 ` Takashi Iwai [this message]
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=s5heg7gdsfc.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=alsa-devel@alsa-project.org \
--cc=dan.carpenter@oracle.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.