[alsa-devel] old bug in au88x0_core.c

Dan Carpenter dan.carpenter at oracle.com
Mon Jun 27 15:03:47 CEST 2016


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


regards,
dan carpenter


More information about the Alsa-devel mailing list