.. | .. |
---|
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 | |
---|