* [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg [not found] <1400276595-6965-1-git-send-email-andi@firstfloor.org> @ 2014-05-16 21:43 ` Andi Kleen 2014-05-19 9:14 ` David Laight 2014-05-19 22:00 ` Rustad, Mark D 2014-05-16 21:43 ` [PATCH 4/8] e1000e: Out of line __ew32_prepare/__ew32 Andi Kleen 1 sibling, 2 replies; 7+ messages in thread From: Andi Kleen @ 2014-05-16 21:43 UTC (permalink / raw) To: linux-kernel; +Cc: akpm, Andi Kleen, netdev, Jeff Kirsher From: Andi Kleen <ak@linux.intel.com> ixgbe_read_reg and ixgbe_write_reg are frequently called and are very big because they have complex error handling code. Moving them out of line saves ~27k text in the ixgbe driver. text data bss dec hex filename 14220873 2008072 1507328 17736273 10ea251 vmlinux-before-ixgbe 14193673 2003976 1507328 17704977 10e2811 vmlinux-ixgbe Cc: netdev@vger.kernel.org Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: Andi Kleen <ak@linux.intel.com> --- drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | 22 ++-------------------- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h index f12c40f..05f094d 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h @@ -162,28 +162,10 @@ static inline void writeq(u64 val, void __iomem *addr) } #endif -static inline void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value) -{ - u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); +void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value); +u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg); - if (ixgbe_removed(reg_addr)) - return; - writeq(value, reg_addr + reg); -} #define IXGBE_WRITE_REG64(a, reg, value) ixgbe_write_reg64((a), (reg), (value)) - -static inline u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg) -{ - u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); - u32 value; - - if (ixgbe_removed(reg_addr)) - return IXGBE_FAILED_READ_REG; - value = readl(reg_addr + reg); - if (unlikely(value == IXGBE_FAILED_READ_REG)) - ixgbe_check_remove(hw, reg); - return value; -} #define IXGBE_READ_REG(a, reg) ixgbe_read_reg((a), (reg)) #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) \ diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c index d62e7a2..5f81f62 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c @@ -371,6 +371,28 @@ void ixgbe_write_pci_cfg_word(struct ixgbe_hw *hw, u32 reg, u16 value) pci_write_config_word(adapter->pdev, reg, value); } +void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value) +{ + u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); + + if (ixgbe_removed(reg_addr)) + return; + writeq(value, reg_addr + reg); +} + +u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg) +{ + u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); + u32 value; + + if (ixgbe_removed(reg_addr)) + return IXGBE_FAILED_READ_REG; + value = readl(reg_addr + reg); + if (unlikely(value == IXGBE_FAILED_READ_REG)) + ixgbe_check_remove(hw, reg); + return value; +} + static void ixgbe_service_event_complete(struct ixgbe_adapter *adapter) { BUG_ON(!test_bit(__IXGBE_SERVICE_SCHED, &adapter->state)); -- 1.9.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg 2014-05-16 21:43 ` [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg Andi Kleen @ 2014-05-19 9:14 ` David Laight 2014-05-19 22:00 ` Rustad, Mark D 1 sibling, 0 replies; 7+ messages in thread From: David Laight @ 2014-05-19 9:14 UTC (permalink / raw) To: 'Andi Kleen', linux-kernel@vger.kernel.org Cc: akpm@linux-foundation.org, Andi Kleen, netdev@vger.kernel.org, Jeff Kirsher From: Andi Kleen > ixgbe_read_reg and ixgbe_write_reg are frequently called and are very big > because they have complex error handling code. Have you measured the performance impact? I suspect that it might me measurable. Clearly the calls during initialisation don't need to be inline, but there will be some in the normal tx and rx paths. David > Moving them out of line saves ~27k text in the ixgbe driver. > > text data bss dec hex filename > 14220873 2008072 1507328 17736273 10ea251 vmlinux-before-ixgbe > 14193673 2003976 1507328 17704977 10e2811 vmlinux-ixgbe > > Cc: netdev@vger.kernel.org > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > Signed-off-by: Andi Kleen <ak@linux.intel.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | 22 ++-------------------- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 22 ++++++++++++++++++++++ > 2 files changed, 24 insertions(+), 20 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > index f12c40f..05f094d 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > @@ -162,28 +162,10 @@ static inline void writeq(u64 val, void __iomem *addr) > } > #endif > > -static inline void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value) > -{ > - u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > +void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value); > +u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg); > > - if (ixgbe_removed(reg_addr)) > - return; > - writeq(value, reg_addr + reg); > -} > #define IXGBE_WRITE_REG64(a, reg, value) ixgbe_write_reg64((a), (reg), (value)) > - > -static inline u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg) > -{ > - u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > - u32 value; > - > - if (ixgbe_removed(reg_addr)) > - return IXGBE_FAILED_READ_REG; > - value = readl(reg_addr + reg); > - if (unlikely(value == IXGBE_FAILED_READ_REG)) > - ixgbe_check_remove(hw, reg); > - return value; > -} > #define IXGBE_READ_REG(a, reg) ixgbe_read_reg((a), (reg)) > > #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) \ > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > index d62e7a2..5f81f62 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > @@ -371,6 +371,28 @@ void ixgbe_write_pci_cfg_word(struct ixgbe_hw *hw, u32 reg, u16 value) > pci_write_config_word(adapter->pdev, reg, value); > } > > +void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value) > +{ > + u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > + > + if (ixgbe_removed(reg_addr)) > + return; > + writeq(value, reg_addr + reg); > +} > + > +u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg) > +{ > + u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > + u32 value; > + > + if (ixgbe_removed(reg_addr)) > + return IXGBE_FAILED_READ_REG; > + value = readl(reg_addr + reg); > + if (unlikely(value == IXGBE_FAILED_READ_REG)) > + ixgbe_check_remove(hw, reg); > + return value; > +} > + > static void ixgbe_service_event_complete(struct ixgbe_adapter *adapter) > { > BUG_ON(!test_bit(__IXGBE_SERVICE_SCHED, &adapter->state)); > -- > 1.9.0 > > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg 2014-05-16 21:43 ` [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg Andi Kleen 2014-05-19 9:14 ` David Laight @ 2014-05-19 22:00 ` Rustad, Mark D 2014-05-19 23:25 ` Andi Kleen 1 sibling, 1 reply; 7+ messages in thread From: Rustad, Mark D @ 2014-05-19 22:00 UTC (permalink / raw) To: Andi Kleen, Kirsher, Jeffrey T Cc: <linux-kernel@vger.kernel.org>, akpm@linux-foundation.org, Andi Kleen, Netdev On May 16, 2014, at 2:43 PM, Andi Kleen <andi@firstfloor.org> wrote: > From: Andi Kleen <ak@linux.intel.com> > > ixgbe_read_reg and ixgbe_write_reg are frequently called and are very big > because they have complex error handling code. Actually, this patch doesn't do anything to ixgbe_write_reg, which would almost certainly be very bad for performance, but instead changes ixgbe_write_reg64. The latter is not in a performance-sensitive path, but is only called from one site, so there is little reason to take it out-of-line. I already have a patch in queue to make ixgbe_read_reg out-of-line, because it does have a very costly memory footprint inline, as you have found. > Moving them out of line saves ~27k text in the ixgbe driver. > > text data bss dec hex filename > 14220873 2008072 1507328 17736273 10ea251 vmlinux-before-ixgbe > 14193673 2003976 1507328 17704977 10e2811 vmlinux-ixgbe > > Cc: netdev@vger.kernel.org > Cc: Jeff Kirsher <jeffrey.t.kirsher@intel.com> > Signed-off-by: Andi Kleen <ak@linux.intel.com> > --- > drivers/net/ethernet/intel/ixgbe/ixgbe_common.h | 22 ++-------------------- > drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 22 ++++++++++++++++++++++ > 2 files changed, 24 insertions(+), 20 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > index f12c40f..05f094d 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_common.h > @@ -162,28 +162,10 @@ static inline void writeq(u64 val, void __iomem *addr) > } > #endif > > -static inline void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value) > -{ > - u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > +void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value); > +u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg); > > - if (ixgbe_removed(reg_addr)) > - return; > - writeq(value, reg_addr + reg); > -} > #define IXGBE_WRITE_REG64(a, reg, value) ixgbe_write_reg64((a), (reg), (value)) > - > -static inline u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg) > -{ > - u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > - u32 value; > - > - if (ixgbe_removed(reg_addr)) > - return IXGBE_FAILED_READ_REG; > - value = readl(reg_addr + reg); > - if (unlikely(value == IXGBE_FAILED_READ_REG)) > - ixgbe_check_remove(hw, reg); > - return value; > -} > #define IXGBE_READ_REG(a, reg) ixgbe_read_reg((a), (reg)) > > #define IXGBE_WRITE_REG_ARRAY(a, reg, offset, value) \ > diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > index d62e7a2..5f81f62 100644 > --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c > @@ -371,6 +371,28 @@ void ixgbe_write_pci_cfg_word(struct ixgbe_hw *hw, u32 reg, u16 value) > pci_write_config_word(adapter->pdev, reg, value); > } > > +void ixgbe_write_reg64(struct ixgbe_hw *hw, u32 reg, u64 value) > +{ > + u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > + > + if (ixgbe_removed(reg_addr)) > + return; > + writeq(value, reg_addr + reg); > +} > + > +u32 ixgbe_read_reg(struct ixgbe_hw *hw, u32 reg) > +{ > + u8 __iomem *reg_addr = ACCESS_ONCE(hw->hw_addr); > + u32 value; > + > + if (ixgbe_removed(reg_addr)) > + return IXGBE_FAILED_READ_REG; > + value = readl(reg_addr + reg); > + if (unlikely(value == IXGBE_FAILED_READ_REG)) > + ixgbe_check_remove(hw, reg); > + return value; > +} > + > static void ixgbe_service_event_complete(struct ixgbe_adapter *adapter) > { > BUG_ON(!test_bit(__IXGBE_SERVICE_SCHED, &adapter->state)); > -- > 1.9.0 > > -- > To unsubscribe from this list: send the line "unsubscribe netdev" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Mark Rustad, Networking Division, Intel Corporation ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg 2014-05-19 22:00 ` Rustad, Mark D @ 2014-05-19 23:25 ` Andi Kleen 2014-05-20 17:06 ` Rustad, Mark D 0 siblings, 1 reply; 7+ messages in thread From: Andi Kleen @ 2014-05-19 23:25 UTC (permalink / raw) To: Rustad, Mark D Cc: Andi Kleen, Kirsher, Jeffrey T, <linux-kernel@vger.kernel.org>, akpm@linux-foundation.org, Netdev On Mon, May 19, 2014 at 10:00:52PM +0000, Rustad, Mark D wrote: > On May 16, 2014, at 2:43 PM, Andi Kleen <andi@firstfloor.org> wrote: > > > From: Andi Kleen <ak@linux.intel.com> > > > > ixgbe_read_reg and ixgbe_write_reg are frequently called and are very big > > because they have complex error handling code. > > Actually, this patch doesn't do anything to ixgbe_write_reg, which would almost certainly be very bad for performance, but instead changes ixgbe_write_reg64. I doubt a few cycles around the write make a lot of difference for MMIO. MMIO is dominated by other things. > The latter is not in a performance-sensitive path, but is only called from one site, so there is little reason to take it out-of-line. True I moved the wrong one. ixgbe_write_reg 3305 (0.00%) 8 409 > I already have a patch in queue to make ixgbe_read_reg out-of-line, because it does have a very costly memory footprint inline, as you have found. Please move write_reg too. -Andi ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg 2014-05-19 23:25 ` Andi Kleen @ 2014-05-20 17:06 ` Rustad, Mark D 0 siblings, 0 replies; 7+ messages in thread From: Rustad, Mark D @ 2014-05-20 17:06 UTC (permalink / raw) To: Andi Kleen Cc: Andi Kleen, Kirsher, Jeffrey T, <linux-kernel@vger.kernel.org>, akpm@linux-foundation.org, Netdev On May 19, 2014, at 4:25 PM, Andi Kleen <ak@linux.intel.com> wrote: > On Mon, May 19, 2014 at 10:00:52PM +0000, Rustad, Mark D wrote: >> On May 16, 2014, at 2:43 PM, Andi Kleen <andi@firstfloor.org> wrote: >> >>> From: Andi Kleen <ak@linux.intel.com> >>> >>> ixgbe_read_reg and ixgbe_write_reg are frequently called and are very big >>> because they have complex error handling code. >> >> Actually, this patch doesn't do anything to ixgbe_write_reg, which would almost certainly be very bad for performance, but instead changes ixgbe_write_reg64. > > I doubt a few cycles around the write make a lot of difference for MMIO. MMIO is dominated > by other things. > >> The latter is not in a performance-sensitive path, but is only called from one site, so there is little reason to take it out-of-line. > > True I moved the wrong one. > > ixgbe_write_reg 3305 (0.00%) 8 409 > > >> I already have a patch in queue to make ixgbe_read_reg out-of-line, because it does have a very costly memory footprint inline, as you have found. > > Please move write_reg too. I will take a look at moving most of them out-of-line. There are just a few in very hot paths that should remain inline. -- Mark Rustad, Networking Division, Intel Corporation ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH 4/8] e1000e: Out of line __ew32_prepare/__ew32 [not found] <1400276595-6965-1-git-send-email-andi@firstfloor.org> 2014-05-16 21:43 ` [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg Andi Kleen @ 2014-05-16 21:43 ` Andi Kleen 2014-05-17 3:23 ` Stephen Hemminger 1 sibling, 1 reply; 7+ messages in thread From: Andi Kleen @ 2014-05-16 21:43 UTC (permalink / raw) To: linux-kernel; +Cc: akpm, Andi Kleen, jeffrey.t.kirsher, netdev From: Andi Kleen <ak@linux.intel.com> Out of lining these two common inlines saves about 30k text size, due to their errata workarounds. 14131431 2008136 1507328 17646895 10d452f vmlinux-before-e1000e 14101415 2004040 1507328 17612783 10cbfef vmlinux-e1000e Cc: jeffrey.t.kirsher@intel.com Cc: netdev@vger.kernel.org Signed-off-by: Andi Kleen <ak@linux.intel.com> --- drivers/net/ethernet/intel/e1000e/e1000.h | 31 ++---------------------------- drivers/net/ethernet/intel/e1000e/netdev.c | 30 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h index 1471c54..cbe25bb 100644 --- a/drivers/net/ethernet/intel/e1000e/e1000.h +++ b/drivers/net/ethernet/intel/e1000e/e1000.h @@ -573,35 +573,8 @@ static inline u32 __er32(struct e1000_hw *hw, unsigned long reg) #define er32(reg) __er32(hw, E1000_##reg) -/** - * __ew32_prepare - prepare to write to MAC CSR register on certain parts - * @hw: pointer to the HW structure - * - * When updating the MAC CSR registers, the Manageability Engine (ME) could - * be accessing the registers at the same time. Normally, this is handled in - * h/w by an arbiter but on some parts there is a bug that acknowledges Host - * accesses later than it should which could result in the register to have - * an incorrect value. Workaround this by checking the FWSM register which - * has bit 24 set while ME is accessing MAC CSR registers, wait if it is set - * and try again a number of times. - **/ -static inline s32 __ew32_prepare(struct e1000_hw *hw) -{ - s32 i = E1000_ICH_FWSM_PCIM2PCI_COUNT; - - while ((er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI) && --i) - udelay(50); - - return i; -} - -static inline void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val) -{ - if (hw->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) - __ew32_prepare(hw); - - writel(val, hw->hw_addr + reg); -} +s32 __ew32_prepare(struct e1000_hw *hw); +void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val); #define ew32(reg, val) __ew32(hw, E1000_##reg, (val)) diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c index 3e69386..9b6cd9a 100644 --- a/drivers/net/ethernet/intel/e1000e/netdev.c +++ b/drivers/net/ethernet/intel/e1000e/netdev.c @@ -124,6 +124,36 @@ static const struct e1000_reg_info e1000_reg_info_tbl[] = { }; /** + * __ew32_prepare - prepare to write to MAC CSR register on certain parts + * @hw: pointer to the HW structure + * + * When updating the MAC CSR registers, the Manageability Engine (ME) could + * be accessing the registers at the same time. Normally, this is handled in + * h/w by an arbiter but on some parts there is a bug that acknowledges Host + * accesses later than it should which could result in the register to have + * an incorrect value. Workaround this by checking the FWSM register which + * has bit 24 set while ME is accessing MAC CSR registers, wait if it is set + * and try again a number of times. + **/ +s32 __ew32_prepare(struct e1000_hw *hw) +{ + s32 i = E1000_ICH_FWSM_PCIM2PCI_COUNT; + + while ((er32(FWSM) & E1000_ICH_FWSM_PCIM2PCI) && --i) + udelay(50); + + return i; +} + +void __ew32(struct e1000_hw *hw, unsigned long reg, u32 val) +{ + if (hw->adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) + __ew32_prepare(hw); + + writel(val, hw->hw_addr + reg); +} + +/** * e1000_regdump - register printout routine * @hw: pointer to the HW structure * @reginfo: pointer to the register info table -- 1.9.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 4/8] e1000e: Out of line __ew32_prepare/__ew32 2014-05-16 21:43 ` [PATCH 4/8] e1000e: Out of line __ew32_prepare/__ew32 Andi Kleen @ 2014-05-17 3:23 ` Stephen Hemminger 0 siblings, 0 replies; 7+ messages in thread From: Stephen Hemminger @ 2014-05-17 3:23 UTC (permalink / raw) To: Andi Kleen; +Cc: linux-kernel, akpm, Andi Kleen, jeffrey.t.kirsher, netdev On Fri, 16 May 2014 14:43:11 -0700 Andi Kleen <andi@firstfloor.org> wrote: > From: Andi Kleen <ak@linux.intel.com> > > Out of lining these two common inlines saves about 30k text size, > due to their errata workarounds. > > 14131431 2008136 1507328 17646895 10d452f vmlinux-before-e1000e > 14101415 2004040 1507328 17612783 10cbfef vmlinux-e1000e > > Cc: jeffrey.t.kirsher@intel.com > Cc: netdev@vger.kernel.org > Signed-off-by: Andi Kleen <ak@linux.intel.com> Since you are making a formerly private function global, the name should be unique. I.e prefix it with e1000_ ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2014-05-20 17:06 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <1400276595-6965-1-git-send-email-andi@firstfloor.org> 2014-05-16 21:43 ` [PATCH 1/8] ixgbe: Out of line ixgbe_read/write_reg Andi Kleen 2014-05-19 9:14 ` David Laight 2014-05-19 22:00 ` Rustad, Mark D 2014-05-19 23:25 ` Andi Kleen 2014-05-20 17:06 ` Rustad, Mark D 2014-05-16 21:43 ` [PATCH 4/8] e1000e: Out of line __ew32_prepare/__ew32 Andi Kleen 2014-05-17 3:23 ` Stephen Hemminger
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).