| .. | .. |
|---|
| 143 | 143 | found: |
|---|
| 144 | 144 | err = pci_read_config_dword(pdev, 0x58, &pmbase); |
|---|
| 145 | 145 | if (err) |
|---|
| 146 | | - return err; |
|---|
| 146 | + goto put_dev; |
|---|
| 147 | 147 | |
|---|
| 148 | 148 | pmbase &= 0x0000FF00; |
|---|
| 149 | | - if (pmbase == 0) |
|---|
| 150 | | - return -EIO; |
|---|
| 149 | + if (pmbase == 0) { |
|---|
| 150 | + err = -EIO; |
|---|
| 151 | + goto put_dev; |
|---|
| 152 | + } |
|---|
| 151 | 153 | |
|---|
| 152 | 154 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); |
|---|
| 153 | | - if (!priv) |
|---|
| 154 | | - return -ENOMEM; |
|---|
| 155 | + if (!priv) { |
|---|
| 156 | + err = -ENOMEM; |
|---|
| 157 | + goto put_dev; |
|---|
| 158 | + } |
|---|
| 155 | 159 | |
|---|
| 156 | 160 | if (!request_region(pmbase + PMBASE_OFFSET, PMBASE_SIZE, DRV_NAME)) { |
|---|
| 157 | 161 | dev_err(&pdev->dev, DRV_NAME " region 0x%x already in use!\n", |
|---|
| .. | .. |
|---|
| 185 | 189 | release_region(pmbase + PMBASE_OFFSET, PMBASE_SIZE); |
|---|
| 186 | 190 | out: |
|---|
| 187 | 191 | kfree(priv); |
|---|
| 192 | +put_dev: |
|---|
| 193 | + pci_dev_put(pdev); |
|---|
| 188 | 194 | return err; |
|---|
| 189 | 195 | } |
|---|
| 190 | 196 | |
|---|
| .. | .. |
|---|
| 200 | 206 | |
|---|
| 201 | 207 | release_region(priv->pmbase + PMBASE_OFFSET, PMBASE_SIZE); |
|---|
| 202 | 208 | |
|---|
| 209 | + pci_dev_put(priv->pcidev); |
|---|
| 210 | + |
|---|
| 203 | 211 | kfree(priv); |
|---|
| 204 | 212 | } |
|---|
| 205 | 213 | |
|---|