PCI: Remove most pcim_iounmap_regions() users
Subsystems (9)
v7 cover PCI: Remove most pcim_iounmap_regions() users
Ready for merge, all Reviews / Acks are in place.
Merge plan for this is the PCI-Tree.
After this series, only two users (net/ethernet/stmicro and vdpa/solidrun) will remain to be ported in the subsequent merge window. Doing them right now proved very difficult because of various conflicts as they are currently also being reworked.
Changes in v7:
- Add Paolo's Acked-by.
(- Rebase on current master)
Changes in v6:
- Remove the patches for "vdpa: solidrun" since the maintainer seems unwilling to review and discuss, not to mention approve, anything that is part of a wider patch series across other subsystems.
- Change series's name to highlight that not all callers are removed by it.
Changes in v5:
- Patch "ethernet: cavium": Re-add accidentally removed
pcim_iounmap_region(). (Me)
- Add Jens's Reviewed-by to patch "block: mtip32xx". (Jens)
Changes in v4:
- Drop the "ethernet: stmicro: [...] patch since it doesn't apply to net-next, and making it apply to that prevents it from being applyable to PCI ._. (Serge, me)
- Instead, deprecate pcim_iounmap_regions() and keep "ethernet:
stimicro" as the last user for now.
- ethernet: cavium: Use PTR_ERR_OR_ZERO(). (Andy)
- vdpa: solidrun (Bugfix) Correct wrong printf string (was "psnet" instead of
"snet"). (Christophe)
- vdpa: solidrun (Bugfix): Add missing blank line. (Andy)
- vdpa: solidrun (Portation): Use PTR_ERR_OR_ZERO(). (Andy)
- Apply Reviewed-by's from Andy and Xu Yilun.
Changes in v3:
- fpga/dfl-pci.c: remove now surplus wrapper around
pcim_iomap_region(). (Andy)
- block: mtip32xx: remove now surplus label. (Andy)
- vdpa: solidrun: Bugfix: Include forgotten place where stack UB occurs. (Andy, Christophe)
- Some minor wording improvements in commit messages. (Me)
Changes in v2:
- Add a fix for the UB stack usage bug in vdap/solidrun. Separate patch, put stable kernel on CC. (Christophe, Andy).
- Drop unnecessary pcim_release_region() in mtip32xx (Andy)
- Consequently, drop patch "PCI: Make pcim_release_region() a public function", since there's no user anymore. (obsoletes the squash requested by Damien).
- vdap/solidrun:
• make 'i' an 'unsigned short' (Andy, me)
• Use 'continue' to simplify loop (Andy)
• Remove leftover blank line
- Apply given Reviewed- / acked-bys (Andy, Damien, Bartosz)
Important things first:
This series is based on [1] and [2] which Bjorn Helgaas has currently queued for v6.12 in the PCI tree.
This series shall remove pcim_iounmap_regions() in order to make way to remove its brother, pcim_iomap_regions().
Regards,
P.
[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/all/[email protected]/
Philipp Stanner (5):
PCI: Deprecate pcim_iounmap_regions() fpga/dfl-pci.c: Replace deprecated PCI functions
block: mtip32xx: Replace deprecated PCI functions
gpio: Replace deprecated PCI functions
ethernet: cavium: Replace deprecated PCI functions
drivers/block/mtip32xx/mtip32xx.c | 18 ++++++++---------- drivers/fpga/dfl-pci.c | 16 ++++------------ drivers/gpio/gpio-merrifield.c | 14 +++++++------- .../net/ethernet/cavium/common/cavium_ptp.c | 7 +++---- drivers/pci/devres.c | 8 ++++++-- include/linux/pci.h | 1 + 6 files changed, 29 insertions(+), 35 deletions(-)
Signature · 1 line
2.46.2
PATCH v7 1/5 PCI: Deprecate pcim_iounmap_regions()
The function pcim_iounmap_regions() is problematic because it uses a bitmask mechanism to release / iounmap multiple BARs at once. It, thus, prevents getting rid of the problematic iomap table mechanism which was deprecated in commit e354bb84a4c1 ("PCI: Deprecate pcim_iomap_table(), pcim_iomap_regions_request_all()").
Make pcim_iounmap_region() public as the successor of pcim_iounmap_regions().
Mark pcim_iomap_regions() as deprecated.
--- drivers/pci/devres.c | 8 ++++++-- include/linux/pci.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-)
drivers/pci/devres.c +6 -2
@@ -773,7 +773,7 @@ EXPORT_SYMBOL(pcim_iomap_region);* Unmap a BAR and release its region manually. Only pass BARs that were * previously mapped by pcim_iomap_region(). */ -static void pcim_iounmap_region (struct pci_dev *pdev,int bar) +void pcim_iounmap_region (struct pci_dev *pdev,int bar) {struct pcim_addr_devres res_searched;
@@ -784,6 +784,7 @@ static void pcim_iounmap_region(struct pci_dev *pdev, int bar)devres_release (&pdev->dev, pcim_addr_resource_release, pcim_addr_resources_match, &res_searched); } +EXPORT_SYMBOL (pcim_iounmap_region);/** * pcim_iomap_regions - Request and iomap PCI BARs (DEPRECATED)
@@ -1015,11 +1016,14 @@ int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask,EXPORT_SYMBOL (pcim_iomap_regions_request_all);/** -* pcim_iounmap_regions - Unmap and release PCI BARs +* pcim_iounmap_regions - Unmap and release PCI BARs (DEPRECATED) * @pdev: PCI device to map IO resources for * @mask: Mask of BARs to unmap and release * * Unmap and release regions specified by @mask. +* +* This function is DEPRECATED. Do not use it in new code. +* Use pcim_iounmap_region() instead. */ void pcim_iounmap_regions (struct pci_dev *pdev,int mask) {
include/linux/pci.h +1 -0
@@ -2296,6 +2296,7 @@ static inline void pci_fixup_device(enum pci_fixup_pass pass,void __iomem *pcim_iomap (struct pci_dev *pdev,int bar,unsigned long maxlen);void __iomem *pcim_iomap_region (struct pci_dev *pdev,int bar,const char *name); +void pcim_iounmap_region (struct pci_dev *pdev,int bar);void pcim_iounmap (struct pci_dev *pdev,void __iomem *addr);void __iomem *const *pcim_iomap_table (struct pci_dev *pdev);int pcim_request_region (struct pci_dev *pdev,int bar,const char *name);
Signature · 1 line
2.46.2
PATCH v7 2/5 fpga/dfl-pci.c: Replace deprecated PCI functions
In reply to Philipp Stannerpcim_iomap_regions() and pcim_iomap_table() have been deprecated by the PCI subsystem in commit e354bb84a4c1 ("PCI: Deprecate pcim_iomap_table(), pcim_iomap_regions_request_all()").
Port dfl-pci.c to the successor, pcim_iomap_region().
Consistently, replace pcim_iounmap_regions() with pcim_iounmap_region().
--- drivers/fpga/dfl-pci.c | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-)
drivers/fpga/dfl-pci.c +4 -12
@@ -39,14 +39,6 @@ struct cci_drvdata {struct dfl_fpga_cdev *cdev;/* container device */ }; -static void __iomem *cci_pci_ioremap_bar0 (struct pci_dev *pcidev) -{ -if (pcim_iomap_regions (pcidev,BIT (0 ),DRV_NAME )) -return NULL ; - -return pcim_iomap_table (pcidev)[0 ]; -} -static int cci_pci_alloc_irq (struct pci_dev *pcidev) {int ret, nvec =pci_msix_vec_count (pcidev);
@@ -235,9 +227,9 @@ static int find_dfls_by_default(struct pci_dev *pcidev,u64 v;/* start to find Device Feature List from Bar 0 */ - base =cci_pci_ioremap_bar0 (pcidev); -if (!base) -return -ENOMEM ; + base =pcim_iomap_region (pcidev,0 ,DRV_NAME ); +if (IS_ERR (base)) +return PTR_ERR (base);/* * PF device has FME and Ports/AFUs, and VF device only has one
@@ -296,7 +288,7 @@ static int find_dfls_by_default(struct pci_dev *pcidev, }/* release I/O mappings for next step enumeration */ -pcim_iounmap_regions (pcidev,BIT (0 )); +pcim_iounmap_region (pcidev,0 );return ret; }
Signature · 1 line
2.46.2
PATCH v7 3/5 block: mtip32xx: Replace deprecated PCI functions
In reply to Philipp Stannerpcim_iomap_regions() and pcim_iomap_table() have been deprecated by the PCI subsystem in commit e354bb84a4c1 ("PCI: Deprecate pcim_iomap_table(), pcim_iomap_regions_request_all()").
In mtip32xx, these functions can easily be replaced by their respective successors, pcim_request_region() and pcim_iomap(). Moreover, the driver's calls to pcim_iounmap_regions() in probe()'s error path and in remove() are not necessary. Cleanup can be performed by PCI devres automatically.
Replace pcim_iomap_regions() and pcim_iomap_table().
Remove the calls to pcim_iounmap_regions().
--- drivers/block/mtip32xx/mtip32xx.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-)
drivers/block/mtip32xx/mtip32xx.c +8 -10
@@ -2701,7 +2701,9 @@ static int mtip_hw_init(struct driver_data *dd)int rv;unsigned long timeout, timetaken; - dd->mmio =pcim_iomap_table (dd->pdev)[MTIP_ABAR ]; + dd->mmio =pcim_iomap (dd->pdev,MTIP_ABAR ,0 ); +if (!dd->mmio) +return -ENOMEM ;mtip_detect_product (dd);if (dd->product_type ==MTIP_PRODUCT_UNKNOWN ) {
@@ -3707,14 +3709,14 @@ static int mtip_pci_probe(struct pci_dev *pdev, rv =pcim_enable_device (pdev);if (rv <0 ) {dev_err (&pdev->dev,"Unable to enable device\n" ); - goto iomap_err; + goto setmask_err; } -/* Map BAR5 to memory. */ - rv =pcim_iomap_regions (pdev,1 <<MTIP_ABAR ,MTIP_DRV_NAME ); +/* Request BAR5. */ + rv =pcim_request_region (pdev,MTIP_ABAR ,MTIP_DRV_NAME );if (rv <0 ) { -dev_err (&pdev->dev,"Unable to map regions\n" ); - goto iomap_err; +dev_err (&pdev->dev,"Unable to request regions\n" ); + goto setmask_err; } rv =dma_set_mask_and_coherent (&pdev->dev,DMA_BIT_MASK (64 ));
@@ -3834,9 +3836,6 @@ static int mtip_pci_probe(struct pci_dev *pdev,drop_cpu (dd->work[2 ].cpu_binding); } setmask_err: -pcim_iounmap_regions (pdev,1 <<MTIP_ABAR ); - -iomap_err:kfree (dd);pci_set_drvdata (pdev,NULL );return rv;
@@ -3910,7 +3909,6 @@ static void mtip_pci_remove(struct pci_dev *pdev)pci_disable_msi (pdev); -pcim_iounmap_regions (pdev,1 <<MTIP_ABAR );pci_set_drvdata (pdev,NULL );put_disk (dd->disk);
Signature · 1 line
2.46.2
PATCH v7 4/5 gpio: Replace deprecated PCI functions
In reply to Philipp Stannerpcim_iomap_regions() and pcim_iomap_table() have been deprecated by the PCI subsystem in commit e354bb84a4c1 ("PCI: Deprecate pcim_iomap_table(), pcim_iomap_regions_request_all()").
Replace those functions with calls to pcim_iomap_region().
--- drivers/gpio/gpio-merrifield.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
drivers/gpio/gpio-merrifield.c +7 -7
@@ -78,24 +78,24 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *idif (retval)return retval; - retval =pcim_iomap_regions (pdev,BIT (1 ) |BIT (0 ),pci_name (pdev)); -if (retval) -return dev_err_probe (dev, retval,"I/O memory mapping error\n" ); - - base =pcim_iomap_table (pdev)[1 ]; + base =pcim_iomap_region (pdev,1 ,pci_name (pdev)); +if (IS_ERR (base)) +return dev_err_probe (dev,PTR_ERR (base),"I/O memory mapping error\n" ); irq_base =readl (base +0 *sizeof (u32)); gpio_base =readl (base +1 *sizeof (u32));/* Release the IO mapping, since we already get the info from BAR1 */ -pcim_iounmap_regions (pdev,BIT (1 )); +pcim_iounmap_region (pdev,1 ); priv =devm_kzalloc (dev,sizeof (*priv),GFP_KERNEL );if (!priv)return -ENOMEM ; priv->dev = dev; - priv->reg_base =pcim_iomap_table (pdev)[0 ]; + priv->reg_base =pcim_iomap_region (pdev,0 ,pci_name (pdev)); +if (IS_ERR (priv->reg_base)) +return dev_err_probe (dev,PTR_ERR (base),"I/O memory mapping error\n" ); priv->pin_info.pin_ranges = mrfld_gpio_ranges; priv->pin_info.nranges =ARRAY_SIZE (mrfld_gpio_ranges);
Signature · 1 line
2.46.2
Re: [PATCH v7 4/5] gpio: Replace deprecated PCI functions
Quoted 11 lines · Philipp Stanner
pcim_iomap_regions()andpcim_iomap_table()have been deprecated by the PCI subsystem in commite354bb84a4c1("PCI: Deprecatepcim_iomap_table(),pcim_iomap_regions_request_all()").Replace those functions with calls to
pcim_iomap_region().Signed-off-by Philipp Stanner <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>---
This is part of a larger series so I acked it previously but at second glance it doesn't look like it depends on anything that comes before? Should it have been sent separately to the GPIO tree? Should I pick it up independently?
Bart
Re: [PATCH v7 4/5] gpio: Replace deprecated PCI functions
Quoted 15 lines · Bartosz Golaszewski
Quoted 6 lines · Philipp Stanner
pcim_iomap_regions()andpcim_iomap_table()have been deprecated by the
PCI subsystem in commite354bb84a4c1("PCI: Deprecatepcim_iomap_table(),pcim_iomap_regions_request_all()").Quoted 6 lines
Replace those functions with calls to
pcim_iomap_region().Signed-off-by Philipp Stanner <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>---
Quoted 6 lines
This is part of a larger series so I acked it previously but at second
glance it doesn't look like it depends on anything that comes before? Should it have been sent separately to the GPIO tree? Should I pick it
up independently?
Thx for the offer, but it depends on pcim_iounmap_region(), which only becomes a public symbol through patch No.1 of this series :)
P.
Quoted 3 lines
Bart
Re: [PATCH v7 4/5] gpio: Replace deprecated PCI functions
Quoted 24 lines · Philipp Stanner
Quoted 15 lines · Bartosz Golaszewski
Quoted 6 lines · Philipp Stanner
pcim_iomap_regions()andpcim_iomap_table()have been deprecated by the
PCI subsystem in commite354bb84a4c1("PCI: Deprecatepcim_iomap_table(),pcim_iomap_regions_request_all()").Quoted 6 lines
Replace those functions with calls to
pcim_iomap_region().Signed-off-by Philipp Stanner <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>---
Quoted 6 lines
This is part of a larger series so I acked it previously but at second
glance it doesn't look like it depends on anything that comes before? Should it have been sent separately to the GPIO tree? Should I pick it
up independently?
Quoted 3 lines
Thx for the offer, but it depends on
pcim_iounmap_region(), which only becomes a public symbol through patch No.1 of this series :)
Then a hint: to make it more obvious to maintainers, I'd change the commit title for patch 1 to say explicitly it makes this function public. In fact: I'd split it and the deprecation into two separate patches.
Bart
Re: [PATCH v7 4/5] gpio: Replace deprecated PCI functions
Quoted 35 lines · Bartosz Golaszewski
Quoted 28 lines · Philipp Stanner
Quoted 17 lines · Bartosz Golaszewski
Quoted 7 lines · Philipp Stanner
pcim_iomap_regions()andpcim_iomap_table()have been deprecated by
the
PCI subsystem in commite354bb84a4c1("PCI: Deprecatepcim_iomap_table(),pcim_iomap_regions_request_all()").Quoted 6 lines
Replace those functions with calls to
pcim_iomap_region().Signed-off-by Philipp Stanner <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>---
Quoted 8 lines
This is part of a larger series so I acked it previously but at second
glance it doesn't look like it depends on anything that comes before?
Should it have been sent separately to the GPIO tree? Should I pick
it
up independently?Quoted 4 lines
Thx for the offer, but it depends on
pcim_iounmap_region(), which only
becomes a public symbol through patch No.1 of this series :)
Quoted 4 lines
Then a hint: to make it more obvious to maintainers, I'd change the commit title for patch 1 to say explicitly it makes this function public. In fact: I'd split it and the deprecation into two separate patches.
Yeah, good idea. The maintainer could squash then if two atomic patches are deemed undesirable.
Noted.
Thank you!
P.
Quoted 3 lines
Bart
Simon Horman
reviewerRe: [PATCH v7 4/5] gpio: Replace deprecated PCI functions
In reply to Philipp StannerQuoted 36 lines · Philipp Stanner
pcim_iomap_regions()andpcim_iomap_table()have been deprecated by the PCI subsystem in commite354bb84a4c1("PCI: Deprecatepcim_iomap_table(),pcim_iomap_regions_request_all()").Replace those functions with calls to
pcim_iomap_region().Signed-off-by Philipp Stanner <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>--- drivers/gpio/gpio-merrifield.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)drivers/gpio/gpio-merrifield.c +4
-6@@ -78,24 +78,24 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *idif (retval)return retval; - retval =pcim_iomap_regions (pdev,BIT (1 ) |BIT (0 ),pci_name (pdev)); -if (retval) -return dev_err_probe (dev, retval,"I/O memory mapping error\n" ); - - base =pcim_iomap_table (pdev)[1 ]; + base =pcim_iomap_region (pdev,1 ,pci_name (pdev)); +if (IS_ERR (base)) +return dev_err_probe (dev,PTR_ERR (base),"I/O memory mapping error\n" ); irq_base =readl (base +0 *sizeof (u32)); gpio_base =readl (base +1 *sizeof (u32));/* Release the IO mapping, since we already get the info from BAR1 */ -pcim_iounmap_regions (pdev,BIT (1 )); +pcim_iounmap_region (pdev,1 );
drivers/gpio/gpio-merrifield.c static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *id · line 98
Quoted 10 lines
drivers/gpio/gpio-merrifield.c +3
-1priv =devm_kzalloc (dev,sizeof (*priv),GFP_KERNEL );if (!priv)return -ENOMEM ; priv->dev = dev; - priv->reg_base =pcim_iomap_table (pdev)[0 ]; + priv->reg_base =pcim_iomap_region (pdev,0 ,pci_name (pdev)); +if (IS_ERR (priv->reg_base)) +return dev_err_probe (dev,PTR_ERR (base),"I/O memory mapping error\n" );
Hi Philipp,
There seems to be a mismatch in the use of priv->reg_base and base above. Should the above use PTR_ERR(priv->reg_base) instead of PTR_ERR(base)?
Quoted 7 lines
drivers/gpio/gpio-merrifield.c +0
-0priv->pin_info.pin_ranges = mrfld_gpio_ranges; priv->pin_info.nranges =ARRAY_SIZE (mrfld_gpio_ranges);Signature · 1 line
2.46.2
Re: [PATCH v7 4/5] gpio: Replace deprecated PCI functions
Quoted 59 lines · Simon Horman
Quoted 54 lines · Philipp Stanner
pcim_iomap_regions()andpcim_iomap_table()have been deprecated by the
PCI subsystem in commite354bb84a4c1("PCI: Deprecatepcim_iomap_table(),pcim_iomap_regions_request_all()").Replace those functions with calls to
pcim_iomap_region().Signed-off-by Philipp Stanner <[email protected]>Reviewed-by Andy Shevchenko <[email protected]>---
drivers/gpio/gpio-merrifield.c | 14 +++++++-------1 file changed, 7 insertions(+), 7 deletions(-)drivers/gpio/gpio- renamed from drivers/gpio/gpio-merrifield.c +0
-0
merrifield.c
index421d7e3a6c66..274afcba31e6100644drivers/gpio/gpio-merrifield.c +0
-0@@ -78,24 +78,24 @@ static int mrfld_gpio_probe(struct pci_dev *pdev, const struct pci_device_id *id if (retval) return retval;drivers/gpio/gpio-merrifield.c +0
-1- retval = pcim_iomap_regions(pdev, BIT(1) | BIT(0),
pci_name(pdev));drivers/gpio/gpio-merrifield.c +0
-2-if (retval) - return dev_err_probe(dev, retval, "I/O memorymapping error\n");
drivers/gpio/gpio-merrifield.c +3
-2- - base =pcim_iomap_table (pdev)[1 ]; + base =pcim_iomap_region (pdev,1 ,pci_name (pdev)); +if (IS_ERR (base)) + return dev_err_probe(dev, PTR_ERR(base), "I/Omemory mapping error\n");
irq_base=readl(base + 0 * sizeof(u32));gpio_base=readl(base + 1 * sizeof(u32));
/* Release the IO mapping, since we already get the info from BAR1 */drivers/gpio/gpio-merrifield.c +1
-1-pcim_iounmap_regions (pdev,BIT (1 )); +pcim_iounmap_region (pdev,1 );
priv =devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); if (!priv)
return-ENOMEM;
priv->dev= dev;drivers/gpio/gpio-merrifield.c +1
-1- priv->reg_base =pcim_iomap_table (pdev)[0 ]; + priv->reg_base = pcim_iomap_region(pdev, 0,
pci_name(pdev));drivers/gpio/gpio-merrifield.c +2
-0+if (IS_ERR (priv->reg_base)) + return dev_err_probe(dev, PTR_ERR(base), "I/OQuoted 1 line
memory mapping error\n");
Hi Philipp,
Quoted 4 lines
There seems to be a mismatch in the use of
priv->reg_baseand base above.
Should the above usePTR_ERR(priv->reg_base)instead ofPTR_ERR(base)?
uff, yes, good catch!
Will fix, thx
P.
Quoted 9 lines
Quoted 8 lines
priv->pin_info.pin_ranges=mrfld_gpio_ranges;priv->pin_info.nranges=ARRAY_SIZE(mrfld_gpio_ranges);Signature · 1 line
2.46.2
PATCH v7 5/5 ethernet: cavium: Replace deprecated PCI functions
In reply to Philipp Stannerpcim_iomap_regions() and pcim_iomap_table() have been deprecated by the PCI subsystem in commit e354bb84a4c1 ("PCI: Deprecate pcim_iomap_table(), pcim_iomap_regions_request_all()").
Furthermore, the driver contains an unneeded call to pcim_iounmap_regions() in its probe() function's error unwind path.
Replace the deprecated PCI functions with pcim_iomap_region().
Remove the unnecessary call to pcim_iounmap_regions().
--- drivers/net/ethernet/cavium/common/cavium_ptp.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/net/ethernet/cavium/common/cavium_ptp.c +3 -4
@@ -239,12 +239,11 @@ static int cavium_ptp_probe(struct pci_dev *pdev,if (err) goto error_free; - err =pcim_iomap_regions (pdev,1 <<PCI_PTP_BAR_NO ,pci_name (pdev)); + clock->reg_base =pcim_iomap_region (pdev,PCI_PTP_BAR_NO ,pci_name (pdev)); + err =PTR_ERR_OR_ZERO (clock->reg_base);if (err) goto error_free; - clock->reg_base =pcim_iomap_table (pdev)[PCI_PTP_BAR_NO ]; -spin_lock_init (&clock->spin_lock); cc = &clock->cycle_counter;
@@ -292,7 +291,7 @@ static int cavium_ptp_probe(struct pci_dev *pdev, clock_cfg =readq (clock->reg_base +PTP_CLOCK_CFG ); clock_cfg &= ~PTP_CLOCK_CFG_PTP_EN ;writeq (clock_cfg, clock->reg_base +PTP_CLOCK_CFG ); -pcim_iounmap_regions (pdev,1 <<PCI_PTP_BAR_NO ); +pcim_iounmap_region (pdev,PCI_PTP_BAR_NO ); error_free:devm_kfree (dev, clock);
Signature · 1 line
2.46.2