[bug report] tty: cyclades, cache HW version

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ Kees recently removed the uninitialized_var() variable so ancient
  code has started to print warnings.  GCC doesn't warn about
  uninitialized variables these days either.  It's been buggy for
  10 years so it's probably not an emergency.  -dan ]

Hello Jiri Slaby,

The patch 101b81590d8d: "tty: cyclades, cache HW version" from Jun
11, 2009, leads to the following static checker warning:

	drivers/tty/cyclades.c:3805 cy_pci_probe()
	error: uninitialized symbol 'mailbox'.

drivers/tty/cyclades.c
  3640  static int cy_pci_probe(struct pci_dev *pdev,
  3641                  const struct pci_device_id *ent)
  3642  {
  3643          struct cyclades_card *card;
  3644          void __iomem *addr0 = NULL, *addr2 = NULL;
  3645          char *card_name = NULL;
  3646          u32 mailbox;
                ^^^^^^^^^^^^

  3647          unsigned int device_id, nchan = 0, card_no, i, j;
  3648          unsigned char plx_ver;
  3649          int retval, irq;
  3650  
  3651          retval = pci_enable_device(pdev);
  3652          if (retval) {
  3653                  dev_err(&pdev->dev, "cannot enable device\n");
  3654                  goto err;
  3655          }
  3656  
  3657          /* read PCI configuration area */
  3658          irq = pdev->irq;
  3659          device_id = pdev->device & ~PCI_DEVICE_ID_MASK;
  3660  
  3661  #if defined(__alpha__)
  3662          if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo) {   /* below 1M? */
  3663                  dev_err(&pdev->dev, "Cyclom-Y/PCI not supported for low "
  3664                          "addresses on Alpha systems.\n");
  3665                  retval = -EIO;
  3666                  goto err_dis;
  3667          }
  3668  #endif
  3669          if (device_id == PCI_DEVICE_ID_CYCLOM_Z_Lo) {
  3670                  dev_err(&pdev->dev, "Cyclades-Z/PCI not supported for low "
  3671                          "addresses\n");
  3672                  retval = -EIO;
  3673                  goto err_dis;
  3674          }
  3675  
  3676          if (pci_resource_flags(pdev, 2) & IORESOURCE_IO) {
  3677                  dev_warn(&pdev->dev, "PCI I/O bit incorrectly set. Ignoring "
  3678                                  "it...\n");
  3679                  pdev->resource[2].flags &= ~IORESOURCE_IO;
  3680          }
  3681  
  3682          retval = pci_request_regions(pdev, "cyclades");
  3683          if (retval) {
  3684                  dev_err(&pdev->dev, "failed to reserve resources\n");
  3685                  goto err_dis;
  3686          }
  3687  
  3688          retval = -EIO;
  3689          if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo ||
  3690                          device_id == PCI_DEVICE_ID_CYCLOM_Y_Hi) {
  3691                  card_name = "Cyclom-Y";
  3692  
  3693                  addr0 = ioremap(pci_resource_start(pdev, 0),
  3694                                  CyPCI_Yctl);
  3695                  if (addr0 == NULL) {
  3696                          dev_err(&pdev->dev, "can't remap ctl region\n");
  3697                          goto err_reg;
  3698                  }
  3699                  addr2 = ioremap(pci_resource_start(pdev, 2),
  3700                                  CyPCI_Ywin);
  3701                  if (addr2 == NULL) {
  3702                          dev_err(&pdev->dev, "can't remap base region\n");
  3703                          goto err_unmap;
  3704                  }
  3705  
  3706                  nchan = CyPORTS_PER_CHIP * cyy_init_card(addr2, 1);
  3707                  if (nchan == 0) {
  3708                          dev_err(&pdev->dev, "Cyclom-Y PCI host card with no "
  3709                                          "Serial-Modules\n");
  3710                          goto err_unmap;
  3711                  }
  3712          } else if (device_id == PCI_DEVICE_ID_CYCLOM_Z_Hi) {
                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  3713                  struct RUNTIME_9060 __iomem *ctl_addr;
  3714  
  3715                  ctl_addr = addr0 = ioremap(pci_resource_start(pdev, 0),
  3716                                  CyPCI_Zctl);
  3717                  if (addr0 == NULL) {
  3718                          dev_err(&pdev->dev, "can't remap ctl region\n");
  3719                          goto err_reg;
  3720                  }
  3721  
  3722                  /* Disable interrupts on the PLX before resetting it */
  3723                  cy_writew(&ctl_addr->intr_ctrl_stat,
  3724                                  readw(&ctl_addr->intr_ctrl_stat) & ~0x0900);
  3725  
  3726                  plx_init(pdev, irq, addr0);
  3727  
  3728                  mailbox = readl(&ctl_addr->mail_box_0);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Only initialized for PCI_DEVICE_ID_CYCLOM_Z_Hi.

  3729  
  3730                  addr2 = ioremap(pci_resource_start(pdev, 2),
  3731                                  mailbox == ZE_V1 ? CyPCI_Ze_win : CyPCI_Zwin);
  3732                  if (addr2 == NULL) {
  3733                          dev_err(&pdev->dev, "can't remap base region\n");
  3734                          goto err_unmap;
  3735                  }
  3736  
  3737                  if (mailbox == ZE_V1) {
  3738                          card_name = "Cyclades-Ze";
  3739                  } else {
  3740                          card_name = "Cyclades-8Zo";
  3741  #ifdef CY_PCI_DEBUG
  3742                          if (mailbox == ZO_V1) {
  3743                                  cy_writel(&ctl_addr->loc_addr_base, WIN_CREG);
  3744                                  dev_info(&pdev->dev, "Cyclades-8Zo/PCI: FPGA "
  3745                                          "id %lx, ver %lx\n", (ulong)(0xff &
  3746                                          readl(&((struct CUSTOM_REG *)addr2)->
  3747                                                  fpga_id)), (ulong)(0xff &
  3748                                          readl(&((struct CUSTOM_REG *)addr2)->
  3749                                                  fpga_version)));
  3750                                  cy_writel(&ctl_addr->loc_addr_base, WIN_RAM);
  3751                          } else {
  3752                                  dev_info(&pdev->dev, "Cyclades-Z/PCI: New "
  3753                                          "Cyclades-Z board.  FPGA not loaded\n");
  3754                          }
  3755  #endif
  3756                          /* The following clears the firmware id word.  This
  3757                             ensures that the driver will not attempt to talk to
  3758                             the board until it has been properly initialized.
  3759                           */
  3760                          if ((mailbox == ZO_V1) || (mailbox == ZO_V2))
  3761                                  cy_writel(addr2 + ID_ADDRESS, 0L);
  3762                  }
  3763  
  3764                  retval = cyz_load_fw(pdev, addr2, addr0, irq);
  3765                  if (retval <= 0)
  3766                          goto err_unmap;
  3767                  nchan = retval;
  3768          }
  3769  
  3770          if ((cy_next_channel + nchan) > NR_PORTS) {
  3771                  dev_err(&pdev->dev, "Cyclades-8Zo/PCI found, but no "
  3772                          "channels are available. Change NR_PORTS in "
  3773                          "cyclades.c and recompile kernel.\n");
  3774                  goto err_unmap;
  3775          }
  3776          /* fill the next cy_card structure available */
  3777          for (card_no = 0; card_no < NR_CARDS; card_no++) {
  3778                  card = &cy_card[card_no];
  3779                  if (card->base_addr == NULL)
  3780                          break;
  3781          }
  3782          if (card_no == NR_CARDS) {      /* no more cy_cards available */
  3783                  dev_err(&pdev->dev, "Cyclades-8Zo/PCI found, but no "
  3784                          "more cards can be used. Change NR_CARDS in "
  3785                          "cyclades.c and recompile kernel.\n");
  3786                  goto err_unmap;
  3787          }
  3788  
  3789          if (device_id == PCI_DEVICE_ID_CYCLOM_Y_Lo ||
  3790                          device_id == PCI_DEVICE_ID_CYCLOM_Y_Hi) {
  3791                  /* allocate IRQ */
  3792                  retval = request_irq(irq, cyy_interrupt,
  3793                                  IRQF_SHARED, "Cyclom-Y", card);
  3794                  if (retval) {
  3795                          dev_err(&pdev->dev, "could not allocate IRQ\n");
  3796                          goto err_unmap;
  3797                  }
  3798                  card->num_chips = nchan / CyPORTS_PER_CHIP;
  3799          } else {

There are several other PCI devices besides PCI_DEVICE_ID_CYCLOM_Z_Hi.

  3800                  struct FIRM_ID __iomem *firm_id = addr2 + ID_ADDRESS;
  3801                  struct ZFW_CTRL __iomem *zfw_ctrl;
  3802  
  3803                  zfw_ctrl = addr2 + (readl(&firm_id->zfwctrl_addr) & 0xfffff);
  3804  
  3805                  card->hw_ver = mailbox;
                                       ^^^^^^^
Uninitialized.

  3806                  card->num_chips = (unsigned int)-1;
  3807                  card->board_ctrl = &zfw_ctrl->board_ctrl;
  3808  #ifdef CONFIG_CYZ_INTR
  3809                  /* allocate IRQ only if board has an IRQ */
  3810                  if (irq != 0 && irq != 255) {
  3811                          retval = request_irq(irq, cyz_interrupt,
  3812                                          IRQF_SHARED, "Cyclades-Z", card);
  3813                          if (retval) {
  3814                                  dev_err(&pdev->dev, "could not allocate IRQ\n");
  3815                                  goto err_unmap;
  3816                          }
  3817                  }
  3818  #endif                          /* CONFIG_CYZ_INTR */
  3819          }
  3820  
  3821          /* set cy_card */
  3822          card->base_addr = addr2;
  3823          card->ctl_addr.p9050 = addr0;
  3824          card->irq = irq;
  3825          card->bus_index = 1;
  3826          card->first_line = cy_next_channel;
  3827          card->nports = nchan;

regards,
dan carpenter



[Index of Archives]     [Kernel Development]     [Kernel Announce]     [Kernel Newbies]     [Linux Networking Development]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Device Mapper]

  Powered by Linux