* [bug report] tty: cyclades, cache HW version
@ 2020-06-24 13:18 Dan Carpenter
2020-06-25 8:57 ` Jiri Slaby
2020-06-25 16:36 ` Dan Carpenter
0 siblings, 2 replies; 3+ messages in thread
From: Dan Carpenter @ 2020-06-24 13:18 UTC (permalink / raw)
To: kernel-janitors
[ 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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bug report] tty: cyclades, cache HW version
2020-06-24 13:18 [bug report] tty: cyclades, cache HW version Dan Carpenter
@ 2020-06-25 8:57 ` Jiri Slaby
2020-06-25 16:36 ` Dan Carpenter
1 sibling, 0 replies; 3+ messages in thread
From: Jiri Slaby @ 2020-06-25 8:57 UTC (permalink / raw)
To: kernel-janitors
Hi,
On 24. 06. 20, 15:18, Dan Carpenter wrote:
> [ 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;
It looks like you and/or your analyzer missed this line ^^?
> 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.
thanks,
--
js
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [bug report] tty: cyclades, cache HW version
2020-06-24 13:18 [bug report] tty: cyclades, cache HW version Dan Carpenter
2020-06-25 8:57 ` Jiri Slaby
@ 2020-06-25 16:36 ` Dan Carpenter
1 sibling, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2020-06-25 16:36 UTC (permalink / raw)
To: kernel-janitors
On Thu, Jun 25, 2020 at 10:57:46AM +0200, Jiri Slaby wrote:
> Hi,
>
> On 24. 06. 20, 15:18, Dan Carpenter wrote:
> > [ 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;
>
> It looks like you and/or your analyzer missed this line ^^?
Both of us missed it. It turns out there is a bug in Smatch and also
some missing features which triggered this warning.
Thanks for taking a look at it.
regards,
dan carpenter
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-06-25 16:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-24 13:18 [bug report] tty: cyclades, cache HW version Dan Carpenter
2020-06-25 8:57 ` Jiri Slaby
2020-06-25 16:36 ` Dan Carpenter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).