diff mbox

[v2] e1000e: don't modify SYSTIM registers during SIOCSHWTSTAMP ioctl

Message ID 20160415213655.28072-1-jacob.e.keller@intel.com
State Superseded
Headers show

Commit Message

Keller, Jacob E April 15, 2016, 9:36 p.m. UTC
The e1000e_config_hwtstamp function was incorrectly resetting the SYSTIM
registers every time the ioctl was being run. If you happened to be
running ptp4l and lost the PTP connect (removing cable, or blocking the
UDP traffic for example), then ptp4l will eventually perform a restart
which involves re-requesting timestamp settings. In e1000e this has the
unfortunate and incorrect result of resetting SYSTIME to the kernel
time. Since kernel time is usually in UTC, and PTP time is in TAI, this
results in the leap second being re-applied.

Fix this by extracting the SYSTIME reset out into its own function,
e1000e_ptp_reset, which we call during reset to restore the hardware
registers. This function will (a) restart the timecounter based on the
new system time, (b) restore the previous PPB setting, and (c) restore
the previous hwtstamp settings.

In order to perform (b), I had to modify the adjfreq ptp function
pointer to store the old delta each time it is called. This also has the
side effect of restoring the correct base timinca register correctly.
The driver does not need to explicitly zero the ptp_delta variable since
the entire adapter structure comes zero-initialized.

Reported-by: Brian Walsh <brian@walsh.ws>
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
---

Notes:
    This patch conflicts with Brian's "e1000e fix ptp time reset on newtork
    interruption", and that patch MUST be removed from the queue before applying
    this one.
    
    - Changes since v2
    * move e1000e_init_ptp prior to reset so that PTP clock is created first
    * handle NULL ptp_clock_info gracefully.

 drivers/net/ethernet/intel/e1000e/e1000.h  |  1 +
 drivers/net/ethernet/intel/e1000e/netdev.c | 64 ++++++++++++++++++++++--------
 drivers/net/ethernet/intel/e1000e/ptp.c    |  2 +
 3 files changed, 51 insertions(+), 16 deletions(-)

Comments

kernel test robot April 15, 2016, 10:05 p.m. UTC | #1
Hi Jacob,

[auto build test ERROR on v4.6-rc3]
[also build test ERROR on next-20160415]
[cannot apply to jkirsher-next-queue/dev-queue]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Jacob-Keller/e1000e-don-t-modify-SYSTIM-registers-during-SIOCSHWTSTAMP-ioctl/20160416-054018
config: x86_64-randconfig-x011-201615 (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

    static int e1000e_pm_runtime_idle(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6645:12: error: invalid storage class for function 'e1000e_pm_runtime_resume'
    static int e1000e_pm_runtime_resume(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6662:12: error: invalid storage class for function 'e1000e_pm_runtime_suspend'
    static int e1000e_pm_runtime_suspend(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6689:13: error: invalid storage class for function 'e1000_shutdown'
    static void e1000_shutdown(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6700:20: error: invalid storage class for function 'e1000_intr_msix'
    static irqreturn_t e1000_intr_msix(int __always_unused irq, void *data)
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6738:13: error: invalid storage class for function 'e1000_netpoll'
    static void e1000_netpoll(struct net_device *netdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6768:25: error: invalid storage class for function 'e1000_io_error_detected'
    static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
                            ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6794:25: error: invalid storage class for function 'e1000_io_slot_reset'
    static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
                            ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6841:13: error: invalid storage class for function 'e1000_io_resume'
    static void e1000_io_resume(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6861:13: error: invalid storage class for function 'e1000_print_device_info'
    static void e1000_print_device_info(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6885:13: error: invalid storage class for function 'e1000_eeprom_checks'
    static void e1000_eeprom_checks(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6903:26: error: invalid storage class for function 'e1000_fix_features'
    static netdev_features_t e1000_fix_features(struct net_device *netdev,
                             ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6916:12: error: invalid storage class for function 'e1000_set_features'
    static int e1000_set_features(struct net_device *netdev,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6955:15: error: initializer element is not constant
     .ndo_open  = e1000_open,
                  ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6955:15: note: (near initialization for 'e1000e_netdev_ops.ndo_open')
   drivers/net/ethernet/intel/e1000e/netdev.c:6956:15: error: initializer element is not constant
     .ndo_stop  = e1000_close,
                  ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6956:15: note: (near initialization for 'e1000e_netdev_ops.ndo_stop')
   drivers/net/ethernet/intel/e1000e/netdev.c:6957:21: error: initializer element is not constant
     .ndo_start_xmit  = e1000_xmit_frame,
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6957:21: note: (near initialization for 'e1000e_netdev_ops.ndo_start_xmit')
   drivers/net/ethernet/intel/e1000e/netdev.c:6958:21: error: initializer element is not constant
     .ndo_get_stats64 = e1000e_get_stats64,
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6958:21: note: (near initialization for 'e1000e_netdev_ops.ndo_get_stats64')
   drivers/net/ethernet/intel/e1000e/netdev.c:6960:25: error: initializer element is not constant
     .ndo_set_mac_address = e1000_set_mac,
                            ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6960:25: note: (near initialization for 'e1000e_netdev_ops.ndo_set_mac_address')
   drivers/net/ethernet/intel/e1000e/netdev.c:6961:21: error: initializer element is not constant
     .ndo_change_mtu  = e1000_change_mtu,
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6961:21: note: (near initialization for 'e1000e_netdev_ops.ndo_change_mtu')
   drivers/net/ethernet/intel/e1000e/netdev.c:6962:19: error: initializer element is not constant
     .ndo_do_ioctl  = e1000_ioctl,
                      ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6962:19: note: (near initialization for 'e1000e_netdev_ops.ndo_do_ioctl')
   drivers/net/ethernet/intel/e1000e/netdev.c:6963:21: error: initializer element is not constant
     .ndo_tx_timeout  = e1000_tx_timeout,
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6963:21: note: (near initialization for 'e1000e_netdev_ops.ndo_tx_timeout')
   drivers/net/ethernet/intel/e1000e/netdev.c:6969:25: error: initializer element is not constant
     .ndo_poll_controller = e1000_netpoll,
                            ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6969:25: note: (near initialization for 'e1000e_netdev_ops.ndo_poll_controller')
   drivers/net/ethernet/intel/e1000e/netdev.c:6971:22: error: initializer element is not constant
     .ndo_set_features = e1000_set_features,
                         ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6971:22: note: (near initialization for 'e1000e_netdev_ops.ndo_set_features')
   drivers/net/ethernet/intel/e1000e/netdev.c:6972:22: error: initializer element is not constant
     .ndo_fix_features = e1000_fix_features,
                         ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6972:22: note: (near initialization for 'e1000e_netdev_ops.ndo_fix_features')
   drivers/net/ethernet/intel/e1000e/netdev.c:6987:12: error: invalid storage class for function 'e1000_probe'
    static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7336:13: error: invalid storage class for function 'e1000_remove'
    static void e1000_remove(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7400:20: error: initializer element is not constant
     .error_detected = e1000_io_error_detected,
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7400:20: note: (near initialization for 'e1000_err_handler.error_detected')
   drivers/net/ethernet/intel/e1000e/netdev.c:7401:16: error: initializer element is not constant
     .slot_reset = e1000_io_slot_reset,
                   ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7401:16: note: (near initialization for 'e1000_err_handler.slot_reset')
   drivers/net/ethernet/intel/e1000e/netdev.c:7402:12: error: initializer element is not constant
     .resume = e1000_io_resume,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7402:12: note: (near initialization for 'e1000_err_handler.resume')
>> drivers/net/ethernet/intel/e1000e/netdev.c:7494:1: warning: 'alias' attribute ignored [-Wattributes]
    MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
    ^
   In file included from include/linux/device.h:25:0,
                    from include/linux/pci.h:30,
                    from drivers/net/ethernet/intel/e1000e/netdev.c:27:
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:21: error: initializer element is not constant
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                        ^
   include/linux/pm.h:359:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_suspend = suspend_fn, \
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:21: note: (near initialization for 'e1000_pm_ops.runtime_suspend')
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                        ^
   include/linux/pm.h:359:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_suspend = suspend_fn, \
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:48: error: initializer element is not constant
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                                                   ^
   include/linux/pm.h:360:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_resume = resume_fn, \
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:48: note: (near initialization for 'e1000_pm_ops.runtime_resume')
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                                                   ^
   include/linux/pm.h:360:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_resume = resume_fn, \
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7506:7: error: initializer element is not constant
          e1000e_pm_runtime_idle)
          ^
   include/linux/pm.h:361:18: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_idle = idle_fn,
                     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7506:7: note: (near initialization for 'e1000_pm_ops.runtime_idle')
          e1000e_pm_runtime_idle)
          ^
   include/linux/pm.h:361:18: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_idle = idle_fn,
                     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7513:14: error: initializer element is not constant
     .probe    = e1000_probe,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7513:14: note: (near initialization for 'e1000_driver.probe')
   drivers/net/ethernet/intel/e1000e/netdev.c:7514:14: error: initializer element is not constant
     .remove   = e1000_remove,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7514:14: note: (near initialization for 'e1000_driver.remove')
   drivers/net/ethernet/intel/e1000e/netdev.c:7518:14: error: initializer element is not constant
     .shutdown = e1000_shutdown,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7518:14: note: (near initialization for 'e1000_driver.shutdown')
   drivers/net/ethernet/intel/e1000e/netdev.c:7528:19: error: invalid storage class for function 'e1000_init_module'
    static int __init e1000_init_module(void)
                      ^
   In file included from drivers/net/ethernet/intel/e1000e/netdev.c:24:0:
>> include/linux/module.h:128:27: error: invalid storage class for function '__inittest'
     static inline initcall_t __inittest(void)  \
                              ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7536:1: note: in expansion of macro 'module_init'
    module_init(e1000_init_module);
    ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7536:1: warning: 'alias' attribute ignored [-Wattributes]
   drivers/net/ethernet/intel/e1000e/netdev.c:7544:20: error: invalid storage class for function 'e1000_exit_module'
    static void __exit e1000_exit_module(void)
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7544:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    static void __exit e1000_exit_module(void)
    ^
   In file included from drivers/net/ethernet/intel/e1000e/netdev.c:24:0:
>> include/linux/module.h:134:27: error: invalid storage class for function '__exittest'
     static inline exitcall_t __exittest(void)  \
                              ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7548:1: note: in expansion of macro 'module_exit'
    module_exit(e1000_exit_module);
    ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7548:1: warning: 'alias' attribute ignored [-Wattributes]
   In file included from include/linux/module.h:18:0,
                    from drivers/net/ethernet/intel/e1000e/netdev.c:24:
   include/linux/moduleparam.h:21:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    static const char __UNIQUE_ID(name)[]       \
    ^
   include/linux/module.h:171:32: note: in expansion of macro '__MODULE_INFO'
    #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
                                   ^
   include/linux/module.h:215:32: note: in expansion of macro 'MODULE_INFO'
    #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
                                   ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7550:1: note: in expansion of macro 'MODULE_AUTHOR'
    MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
    ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7553:1: error: expected declaration or statement at end of input
    MODULE_VERSION(DRV_VERSION);
    ^
   cc1: some warnings being treated as errors

vim +/alias +7494 drivers/net/ethernet/intel/e1000e/netdev.c

111b9dc5 drivers/net/e1000e/netdev.c                Jesse Brandeburg  2009-02-10  7394  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7395  	pci_disable_device(pdev);
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7396  }
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7397  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7398  /* PCI Error Recovery (ERS) */
3646f0e5 drivers/net/ethernet/intel/e1000e/netdev.c Stephen Hemminger 2012-09-07  7399  static const struct pci_error_handlers e1000_err_handler = {
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17 @7400  	.error_detected = e1000_io_error_detected,
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7401  	.slot_reset = e1000_io_slot_reset,
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7402  	.resume = e1000_io_resume,
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7403  };
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7404  
0e8e842b drivers/net/ethernet/intel/e1000e/netdev.c David Ertman      2014-04-08  7405  static const struct pci_device_id e1000_pci_tbl[] = {
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7406  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_COPPER), board_82571 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7407  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_FIBER), board_82571 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7408  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_QUAD_COPPER), board_82571 },
c29c3ba5 drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2013-02-20  7409  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_QUAD_COPPER_LP),
c29c3ba5 drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2013-02-20  7410  	  board_82571 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7411  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_QUAD_FIBER), board_82571 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7412  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_SERDES), board_82571 },
040babf9 drivers/net/e1000e/netdev.c                Auke Kok          2007-10-31  7413  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_SERDES_DUAL), board_82571 },
040babf9 drivers/net/e1000e/netdev.c                Auke Kok          2007-10-31  7414  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571EB_SERDES_QUAD), board_82571 },
040babf9 drivers/net/e1000e/netdev.c                Auke Kok          2007-10-31  7415  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82571PT_QUAD_COPPER), board_82571 },
ad68076e drivers/net/e1000e/netdev.c                Bruce Allan       2008-03-28  7416  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7417  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82572EI), board_82572 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7418  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82572EI_COPPER), board_82572 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7419  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82572EI_FIBER), board_82572 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7420  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82572EI_SERDES), board_82572 },
ad68076e drivers/net/e1000e/netdev.c                Bruce Allan       2008-03-28  7421  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7422  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82573E), board_82573 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7423  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82573E_IAMT), board_82573 },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7424  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82573L), board_82573 },
ad68076e drivers/net/e1000e/netdev.c                Bruce Allan       2008-03-28  7425  
4662e82b drivers/net/e1000e/netdev.c                Bruce Allan       2008-08-26  7426  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82574L), board_82574 },
bef28b11 drivers/net/e1000e/netdev.c                Bruce Allan       2009-03-24  7427  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82574LA), board_82574 },
8c81c9c3 drivers/net/e1000e/netdev.c                Alexander Duyck   2009-03-19  7428  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_82583V), board_82583 },
4662e82b drivers/net/e1000e/netdev.c                Bruce Allan       2008-08-26  7429  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7430  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_80003ES2LAN_COPPER_DPT),
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7431  	  board_80003es2lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7432  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_80003ES2LAN_COPPER_SPT),
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7433  	  board_80003es2lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7434  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_80003ES2LAN_SERDES_DPT),
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7435  	  board_80003es2lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7436  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_80003ES2LAN_SERDES_SPT),
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7437  	  board_80003es2lan },
ad68076e drivers/net/e1000e/netdev.c                Bruce Allan       2008-03-28  7438  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7439  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IFE), board_ich8lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7440  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IFE_G), board_ich8lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7441  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IFE_GT), board_ich8lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7442  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_AMT), board_ich8lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7443  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_C), board_ich8lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7444  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_M), board_ich8lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7445  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_IGP_M_AMT), board_ich8lan },
9e135a2e drivers/net/e1000e/netdev.c                Bruce Allan       2009-12-01  7446  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH8_82567V_3), board_ich8lan },
ad68076e drivers/net/e1000e/netdev.c                Bruce Allan       2008-03-28  7447  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7448  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE), board_ich9lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7449  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_G), board_ich9lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7450  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IFE_GT), board_ich9lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7451  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_AMT), board_ich9lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7452  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_C), board_ich9lan },
2f15f9d6 drivers/net/e1000e/netdev.c                Bruce Allan       2008-08-26  7453  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_BM), board_ich9lan },
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7454  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M), board_ich9lan },
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7455  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_AMT), board_ich9lan },
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7456  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH9_IGP_M_V), board_ich9lan },
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7457  
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7458  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LM), board_ich9lan },
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7459  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_LF), board_ich9lan },
97ac8cae drivers/net/e1000e/netdev.c                Bruce Allan       2008-04-29  7460  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_R_BM_V), board_ich9lan },
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7461  
f4187b56 drivers/net/e1000e/netdev.c                Bruce Allan       2008-08-26  7462  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_D_BM_LM), board_ich10lan },
f4187b56 drivers/net/e1000e/netdev.c                Bruce Allan       2008-08-26  7463  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_D_BM_LF), board_ich10lan },
10df0b91 drivers/net/e1000e/netdev.c                Bruce Allan       2010-05-10  7464  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_ICH10_D_BM_V), board_ich10lan },
f4187b56 drivers/net/e1000e/netdev.c                Bruce Allan       2008-08-26  7465  
a4f58f54 drivers/net/e1000e/netdev.c                Bruce Allan       2009-06-02  7466  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_M_HV_LM), board_pchlan },
a4f58f54 drivers/net/e1000e/netdev.c                Bruce Allan       2009-06-02  7467  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_M_HV_LC), board_pchlan },
a4f58f54 drivers/net/e1000e/netdev.c                Bruce Allan       2009-06-02  7468  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_D_HV_DM), board_pchlan },
a4f58f54 drivers/net/e1000e/netdev.c                Bruce Allan       2009-06-02  7469  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_D_HV_DC), board_pchlan },
a4f58f54 drivers/net/e1000e/netdev.c                Bruce Allan       2009-06-02  7470  
d3738bb8 drivers/net/e1000e/netdev.c                Bruce Allan       2010-06-16  7471  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_LM), board_pch2lan },
d3738bb8 drivers/net/e1000e/netdev.c                Bruce Allan       2010-06-16  7472  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH2_LV_V), board_pch2lan },
d3738bb8 drivers/net/e1000e/netdev.c                Bruce Allan       2010-06-16  7473  
2fbe4526 drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2012-04-19  7474  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LPT_I217_LM), board_pch_lpt },
2fbe4526 drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2012-04-19  7475  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LPT_I217_V), board_pch_lpt },
16e310ae drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2012-10-09  7476  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LPTLP_I218_LM), board_pch_lpt },
16e310ae drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2012-10-09  7477  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LPTLP_I218_V), board_pch_lpt },
91a3d82f drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2013-06-29  7478  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_I218_LM2), board_pch_lpt },
91a3d82f drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2013-06-29  7479  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_I218_V2), board_pch_lpt },
91a3d82f drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2013-06-29  7480  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_I218_LM3), board_pch_lpt },
91a3d82f drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2013-06-29  7481  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_I218_V3), board_pch_lpt },
79849ebc drivers/net/ethernet/intel/e1000e/netdev.c David Ertman      2015-02-10  7482  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_LM), board_pch_spt },
79849ebc drivers/net/ethernet/intel/e1000e/netdev.c David Ertman      2015-02-10  7483  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_V), board_pch_spt },
79849ebc drivers/net/ethernet/intel/e1000e/netdev.c David Ertman      2015-02-10  7484  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_LM2), board_pch_spt },
79849ebc drivers/net/ethernet/intel/e1000e/netdev.c David Ertman      2015-02-10  7485  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_V2), board_pch_spt },
f3ed935d drivers/net/ethernet/intel/e1000e/netdev.c Raanan Avargil    2015-10-20  7486  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_LBG_I219_LM3), board_pch_spt },
9cd34b3a drivers/net/ethernet/intel/e1000e/netdev.c Raanan Avargil    2015-12-22  7487  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_LM4), board_pch_spt },
9cd34b3a drivers/net/ethernet/intel/e1000e/netdev.c Raanan Avargil    2015-12-22  7488  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_V4), board_pch_spt },
9cd34b3a drivers/net/ethernet/intel/e1000e/netdev.c Raanan Avargil    2015-12-22  7489  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_LM5), board_pch_spt },
9cd34b3a drivers/net/ethernet/intel/e1000e/netdev.c Raanan Avargil    2015-12-22  7490  	{ PCI_VDEVICE(INTEL, E1000_DEV_ID_PCH_SPT_I219_V5), board_pch_spt },
2fbe4526 drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2012-04-19  7491  
f36bb6ca drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan       2012-01-31  7492  	{ 0, 0, 0, 0, 0, 0, 0 }	/* terminate list */
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7493  };
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17 @7494  MODULE_DEVICE_TABLE(pci, e1000_pci_tbl);
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok          2007-09-17  7495  
23606cf5 drivers/net/e1000e/netdev.c                Rafael J. Wysocki 2010-03-14  7496  static const struct dev_pm_ops e1000_pm_ops = {
72f72dcc drivers/net/ethernet/intel/e1000e/netdev.c Kevin Hao         2014-03-18  7497  #ifdef CONFIG_PM_SLEEP

:::::: The code at line 7494 was first introduced by commit
:::::: bc7f75fa97884d41efbfde1397b621fefb2550b4 [E1000E]: New pci-express e1000 driver (currently for ICH9 devices only)

:::::: TO: Auke Kok <auke-jan.h.kok@intel.com>
:::::: CC: David S. Miller <davem@sunset.davemloft.net>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot April 15, 2016, 10:08 p.m. UTC | #2
Hi Jacob,

[auto build test WARNING on v4.6-rc3]
[also build test WARNING on next-20160415]
[cannot apply to jkirsher-next-queue/dev-queue]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Jacob-Keller/e1000e-don-t-modify-SYSTIM-registers-during-SIOCSHWTSTAMP-ioctl/20160416-054018
config: x86_64-allyesconfig (attached as .config)
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All warnings (new ones prefixed by >>):

   drivers/net/ethernet/intel/e1000e/netdev.c:7499:13: error: initializer element is not constant
     .resume  = e1000e_pm_resume,
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7499:13: note: (near initialization for 'e1000_pm_ops.resume')
   drivers/net/ethernet/intel/e1000e/netdev.c:7500:13: error: initializer element is not constant
     .freeze  = e1000e_pm_freeze,
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7500:13: note: (near initialization for 'e1000_pm_ops.freeze')
   drivers/net/ethernet/intel/e1000e/netdev.c:7501:11: error: initializer element is not constant
     .thaw  = e1000e_pm_thaw,
              ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7501:11: note: (near initialization for 'e1000_pm_ops.thaw')
   drivers/net/ethernet/intel/e1000e/netdev.c:7502:14: error: initializer element is not constant
     .poweroff = e1000e_pm_suspend,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7502:14: note: (near initialization for 'e1000_pm_ops.poweroff')
   drivers/net/ethernet/intel/e1000e/netdev.c:7503:13: error: initializer element is not constant
     .restore = e1000e_pm_resume,
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7503:13: note: (near initialization for 'e1000_pm_ops.restore')
   In file included from arch/x86/include/asm/apic.h:5:0,
                    from arch/x86/include/asm/smp.h:12,
                    from arch/x86/include/asm/mmzone_64.h:10,
                    from arch/x86/include/asm/mmzone.h:4,
                    from include/linux/mmzone.h:869,
                    from include/linux/gfp.h:5,
                    from include/linux/kmod.h:22,
                    from include/linux/module.h:13,
                    from drivers/net/ethernet/intel/e1000e/netdev.c:24:
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:21: error: initializer element is not constant
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                        ^
   include/linux/pm.h:359:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_suspend = suspend_fn, \
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:21: note: (near initialization for 'e1000_pm_ops.runtime_suspend')
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                        ^
   include/linux/pm.h:359:21: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_suspend = suspend_fn, \
                        ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:48: error: initializer element is not constant
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                                                   ^
   include/linux/pm.h:360:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_resume = resume_fn, \
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7505:48: note: (near initialization for 'e1000_pm_ops.runtime_resume')
     SET_RUNTIME_PM_OPS(e1000e_pm_runtime_suspend, e1000e_pm_runtime_resume,
                                                   ^
   include/linux/pm.h:360:20: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_resume = resume_fn, \
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7506:7: error: initializer element is not constant
          e1000e_pm_runtime_idle)
          ^
   include/linux/pm.h:361:18: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_idle = idle_fn,
                     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7506:7: note: (near initialization for 'e1000_pm_ops.runtime_idle')
          e1000e_pm_runtime_idle)
          ^
   include/linux/pm.h:361:18: note: in definition of macro 'SET_RUNTIME_PM_OPS'
     .runtime_idle = idle_fn,
                     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7496:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    static const struct dev_pm_ops e1000_pm_ops = {
    ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7513:14: error: initializer element is not constant
     .probe    = e1000_probe,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7513:14: note: (near initialization for 'e1000_driver.probe')
   drivers/net/ethernet/intel/e1000e/netdev.c:7514:14: error: initializer element is not constant
     .remove   = e1000_remove,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7514:14: note: (near initialization for 'e1000_driver.remove')
   drivers/net/ethernet/intel/e1000e/netdev.c:7518:14: error: initializer element is not constant
     .shutdown = e1000_shutdown,
                 ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7518:14: note: (near initialization for 'e1000_driver.shutdown')
   drivers/net/ethernet/intel/e1000e/netdev.c:7528:19: error: invalid storage class for function 'e1000_init_module'
    static int __init e1000_init_module(void)
                      ^
   In file included from include/linux/printk.h:5:0,
                    from include/linux/kernel.h:13,
                    from include/linux/list.h:8,
                    from include/linux/module.h:9,
                    from drivers/net/ethernet/intel/e1000e/netdev.c:24:
   drivers/net/ethernet/intel/e1000e/netdev.c:7536:13: error: initializer element is not constant
    module_init(e1000_init_module);
                ^
   include/linux/init.h:188:58: note: in definition of macro '__define_initcall'
     __attribute__((__section__(".initcall" #id ".init"))) = fn; \
                                                             ^
   include/linux/init.h:223:24: note: in expansion of macro 'device_initcall'
    #define __initcall(fn) device_initcall(fn)
                           ^
   include/linux/module.h:84:24: note: in expansion of macro '__initcall'
    #define module_init(x) __initcall(x);
                           ^
>> drivers/net/ethernet/intel/e1000e/netdev.c:7536:1: note: in expansion of macro 'module_init'
    module_init(e1000_init_module);
    ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7544:20: error: invalid storage class for function 'e1000_exit_module'
    static void __exit e1000_exit_module(void)
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7544:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
    static void __exit e1000_exit_module(void)
    ^
   In file included from include/linux/printk.h:5:0,
                    from include/linux/kernel.h:13,
                    from include/linux/list.h:8,
                    from include/linux/module.h:9,
                    from drivers/net/ethernet/intel/e1000e/netdev.c:24:
   drivers/net/ethernet/intel/e1000e/netdev.c:7548:13: error: initializer element is not constant
    module_exit(e1000_exit_module);
                ^
   include/linux/init.h:226:50: note: in definition of macro '__exitcall'
     static exitcall_t __exitcall_##fn __exit_call = fn
                                                     ^
>> drivers/net/ethernet/intel/e1000e/netdev.c:7548:1: note: in expansion of macro 'module_exit'
    module_exit(e1000_exit_module);
    ^
   In file included from include/linux/module.h:18:0,
                    from drivers/net/ethernet/intel/e1000e/netdev.c:24:
   include/linux/moduleparam.h:27:3: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
      struct __UNIQUE_ID(name) {}
      ^
   include/linux/module.h:171:32: note: in expansion of macro '__MODULE_INFO'
    #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
                                   ^
   include/linux/module.h:215:32: note: in expansion of macro 'MODULE_INFO'
    #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
                                   ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7550:1: note: in expansion of macro 'MODULE_AUTHOR'
    MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
    ^
   In file included from drivers/net/ethernet/intel/e1000e/netdev.c:24:0:
   include/linux/module.h:261:22: error: expected declaration or statement at end of input
     static const struct module_version_attribute   \
                         ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7553:1: note: in expansion of macro 'MODULE_VERSION'
    MODULE_VERSION(DRV_VERSION);
    ^
   cc1: some warnings being treated as errors

vim +/module_init +7536 drivers/net/ethernet/intel/e1000e/netdev.c

8544b9f7 drivers/net/e1000e/netdev.c                Bruce Allan    2010-03-24  7530  	pr_info("Intel(R) PRO/1000 Network Driver - %s\n",
8544b9f7 drivers/net/e1000e/netdev.c                Bruce Allan    2010-03-24  7531  		e1000e_driver_version);
529498cd drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin 2015-06-02  7532  	pr_info("Copyright(c) 1999 - 2015 Intel Corporation.\n");
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7533  
5a5e889c drivers/net/ethernet/intel/e1000e/netdev.c Jean Sacren    2015-09-19  7534  	return pci_register_driver(&e1000_driver);
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7535  }
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17 @7536  module_init(e1000_init_module);
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7537  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7538  /**
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7539   * e1000_exit_module - Driver Exit Cleanup Routine
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7540   *
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7541   * e1000_exit_module is called just before the driver is removed
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7542   * from memory.
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7543   **/
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7544  static void __exit e1000_exit_module(void)
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7545  {
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7546  	pci_unregister_driver(&e1000_driver);
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7547  }
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17 @7548  module_exit(e1000_exit_module);
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7549  
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7550  MODULE_AUTHOR("Intel Corporation, <linux.nics@intel.com>");
bc7f75fa drivers/net/e1000e/netdev.c                Auke Kok       2007-09-17  7551  MODULE_DESCRIPTION("Intel(R) PRO/1000 Network Driver");

:::::: The code at line 7536 was first introduced by commit
:::::: bc7f75fa97884d41efbfde1397b621fefb2550b4 [E1000E]: New pci-express e1000 driver (currently for ICH9 devices only)

:::::: TO: Auke Kok <auke-jan.h.kok@intel.com>
:::::: CC: David S. Miller <davem@sunset.davemloft.net>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
kernel test robot April 15, 2016, 10:08 p.m. UTC | #3
Hi Jacob,

[auto build test ERROR on v4.6-rc3]
[also build test ERROR on next-20160415]
[cannot apply to jkirsher-next-queue/dev-queue]
[if your patch is applied to the wrong git tree, please drop us a note to help improving the system]

url:    https://github.com/0day-ci/linux/commits/Jacob-Keller/e1000e-don-t-modify-SYSTIM-registers-during-SIOCSHWTSTAMP-ioctl/20160416-054018
config: sparc64-allyesconfig (attached as .config)
reproduce:
        wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=sparc64 

All errors (new ones prefixed by >>):

                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:4767:13: error: invalid storage class for function 'e1000_update_phy_info'
    static void e1000_update_phy_info(unsigned long data)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:4783:13: error: invalid storage class for function 'e1000e_update_phy_stats'
    static void e1000e_update_phy_stats(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:4858:13: error: invalid storage class for function 'e1000e_update_stats'
    static void e1000e_update_stats(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:4974:13: error: invalid storage class for function 'e1000_phy_read_status'
    static void e1000_phy_read_status(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5012:13: error: invalid storage class for function 'e1000_print_link_info'
    static void e1000_print_link_info(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5026:13: error: invalid storage class for function 'e1000e_has_link'
    static bool e1000e_has_link(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5068:13: error: invalid storage class for function 'e1000e_enable_receives'
    static void e1000e_enable_receives(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5081:13: error: invalid storage class for function 'e1000e_check_82574_phy_workaround'
    static void e1000e_check_82574_phy_workaround(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5104:13: error: invalid storage class for function 'e1000_watchdog'
    static void e1000_watchdog(unsigned long data)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5114:13: error: invalid storage class for function 'e1000_watchdog_task'
    static void e1000_watchdog_task(struct work_struct *work)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5361:12: error: invalid storage class for function 'e1000_tso'
    static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5429:13: error: invalid storage class for function 'e1000_tx_csum'
    static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb,
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5483:12: error: invalid storage class for function 'e1000_tx_map'
    static int e1000_tx_map(struct e1000_ring *tx_ring, struct sk_buff *skb,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5580:13: error: invalid storage class for function 'e1000_tx_queue'
    static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5647:12: error: invalid storage class for function 'e1000_transfer_dhcp_info'
    static int e1000_transfer_dhcp_info(struct e1000_adapter *adapter,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5684:12: error: invalid storage class for function '__e1000_maybe_stop_tx'
    static int __e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5707:12: error: invalid storage class for function 'e1000_maybe_stop_tx'
    static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5716:20: error: invalid storage class for function 'e1000_xmit_frame'
    static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5873:13: error: invalid storage class for function 'e1000_tx_timeout'
    static void e1000_tx_timeout(struct net_device *netdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5882:13: error: invalid storage class for function 'e1000_reset_task'
    static void e1000_reset_task(struct work_struct *work)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:5953:12: error: invalid storage class for function 'e1000_change_mtu'
    static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6021:12: error: invalid storage class for function 'e1000_mii_ioctl'
    static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6095:12: error: invalid storage class for function 'e1000e_hwtstamp_set'
    static int e1000e_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6130:12: error: invalid storage class for function 'e1000e_hwtstamp_get'
    static int e1000e_hwtstamp_get(struct net_device *netdev, struct ifreq *ifr)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6138:12: error: invalid storage class for function 'e1000_ioctl'
    static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6154:12: error: invalid storage class for function 'e1000_init_phy_wakeup'
    static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6228:13: error: invalid storage class for function 'e1000e_flush_lpic'
    static void e1000e_flush_lpic(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6250:12: error: invalid storage class for function 'e1000e_pm_freeze'
    static int e1000e_pm_freeze(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6277:12: error: invalid storage class for function '__e1000_shutdown'
    static int __e1000_shutdown(struct pci_dev *pdev, bool runtime)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6426:13: error: invalid storage class for function '__e1000e_disable_aspm'
    static void __e1000e_disable_aspm(struct pci_dev *pdev, u16 state, int locked)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6499:13: error: invalid storage class for function 'e1000e_disable_aspm'
    static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6512:13: error: invalid storage class for function 'e1000e_disable_aspm_locked'
    static void e1000e_disable_aspm_locked(struct pci_dev *pdev, u16 state)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6518:12: error: invalid storage class for function '__e1000_resume'
    static int __e1000_resume(struct pci_dev *pdev)
               ^
>> drivers/net/ethernet/intel/e1000e/netdev.c:6584:12: error: invalid storage class for function 'e1000e_pm_thaw'
    static int e1000e_pm_thaw(struct device *dev)
               ^
>> drivers/net/ethernet/intel/e1000e/netdev.c:6604:12: error: invalid storage class for function 'e1000e_pm_suspend'
    static int e1000e_pm_suspend(struct device *dev)
               ^
>> drivers/net/ethernet/intel/e1000e/netdev.c:6615:12: error: invalid storage class for function 'e1000e_pm_resume'
    static int e1000e_pm_resume(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6628:12: error: invalid storage class for function 'e1000e_pm_runtime_idle'
    static int e1000e_pm_runtime_idle(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6645:12: error: invalid storage class for function 'e1000e_pm_runtime_resume'
    static int e1000e_pm_runtime_resume(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6662:12: error: invalid storage class for function 'e1000e_pm_runtime_suspend'
    static int e1000e_pm_runtime_suspend(struct device *dev)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6689:13: error: invalid storage class for function 'e1000_shutdown'
    static void e1000_shutdown(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6700:20: error: invalid storage class for function 'e1000_intr_msix'
    static irqreturn_t e1000_intr_msix(int __always_unused irq, void *data)
                       ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6738:13: error: invalid storage class for function 'e1000_netpoll'
    static void e1000_netpoll(struct net_device *netdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6768:25: error: invalid storage class for function 'e1000_io_error_detected'
    static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
                            ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6794:25: error: invalid storage class for function 'e1000_io_slot_reset'
    static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
                            ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6841:13: error: invalid storage class for function 'e1000_io_resume'
    static void e1000_io_resume(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6861:13: error: invalid storage class for function 'e1000_print_device_info'
    static void e1000_print_device_info(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6885:13: error: invalid storage class for function 'e1000_eeprom_checks'
    static void e1000_eeprom_checks(struct e1000_adapter *adapter)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6903:26: error: invalid storage class for function 'e1000_fix_features'
    static netdev_features_t e1000_fix_features(struct net_device *netdev,
                             ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6916:12: error: invalid storage class for function 'e1000_set_features'
    static int e1000_set_features(struct net_device *netdev,
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6955:2: error: initializer element is not constant
     .ndo_open  = e1000_open,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6955:2: error: (near initialization for 'e1000e_netdev_ops.ndo_open')
   drivers/net/ethernet/intel/e1000e/netdev.c:6956:2: error: initializer element is not constant
     .ndo_stop  = e1000_close,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6956:2: error: (near initialization for 'e1000e_netdev_ops.ndo_stop')
   drivers/net/ethernet/intel/e1000e/netdev.c:6957:2: error: initializer element is not constant
     .ndo_start_xmit  = e1000_xmit_frame,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6957:2: error: (near initialization for 'e1000e_netdev_ops.ndo_start_xmit')
   drivers/net/ethernet/intel/e1000e/netdev.c:6958:2: error: initializer element is not constant
     .ndo_get_stats64 = e1000e_get_stats64,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6958:2: error: (near initialization for 'e1000e_netdev_ops.ndo_get_stats64')
   drivers/net/ethernet/intel/e1000e/netdev.c:6960:2: error: initializer element is not constant
     .ndo_set_mac_address = e1000_set_mac,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6960:2: error: (near initialization for 'e1000e_netdev_ops.ndo_set_mac_address')
   drivers/net/ethernet/intel/e1000e/netdev.c:6961:2: error: initializer element is not constant
     .ndo_change_mtu  = e1000_change_mtu,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6961:2: error: (near initialization for 'e1000e_netdev_ops.ndo_change_mtu')
   drivers/net/ethernet/intel/e1000e/netdev.c:6962:2: error: initializer element is not constant
     .ndo_do_ioctl  = e1000_ioctl,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6962:2: error: (near initialization for 'e1000e_netdev_ops.ndo_do_ioctl')
   drivers/net/ethernet/intel/e1000e/netdev.c:6963:2: error: initializer element is not constant
     .ndo_tx_timeout  = e1000_tx_timeout,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6963:2: error: (near initialization for 'e1000e_netdev_ops.ndo_tx_timeout')
   drivers/net/ethernet/intel/e1000e/netdev.c:6969:2: error: initializer element is not constant
     .ndo_poll_controller = e1000_netpoll,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6969:2: error: (near initialization for 'e1000e_netdev_ops.ndo_poll_controller')
   drivers/net/ethernet/intel/e1000e/netdev.c:6971:2: error: initializer element is not constant
     .ndo_set_features = e1000_set_features,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6971:2: error: (near initialization for 'e1000e_netdev_ops.ndo_set_features')
   drivers/net/ethernet/intel/e1000e/netdev.c:6972:2: error: initializer element is not constant
     .ndo_fix_features = e1000_fix_features,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:6972:2: error: (near initialization for 'e1000e_netdev_ops.ndo_fix_features')
   drivers/net/ethernet/intel/e1000e/netdev.c:6987:12: error: invalid storage class for function 'e1000_probe'
    static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
               ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7336:13: error: invalid storage class for function 'e1000_remove'
    static void e1000_remove(struct pci_dev *pdev)
                ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7400:2: error: initializer element is not constant
     .error_detected = e1000_io_error_detected,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7400:2: error: (near initialization for 'e1000_err_handler.error_detected')
   drivers/net/ethernet/intel/e1000e/netdev.c:7401:2: error: initializer element is not constant
     .slot_reset = e1000_io_slot_reset,
     ^
   drivers/net/ethernet/intel/e1000e/netdev.c:7401:2: error: (near initialization for 'e1000_err_handler.slot_reset')
   drivers/net/ethernet/intel/e1000e/netdev.c:7402:2: error: initializer element is not constant

vim +/e1000e_pm_thaw +6584 drivers/net/ethernet/intel/e1000e/netdev.c

beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6493   * @pdev: pointer to PCI device struct
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6494   * @state: bit-mask of ASPM states to disable
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6495   *
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6496   * This function acquires the pci_bus_sem!
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6497   * Some devices *must* have certain ASPM states disabled per hardware errata.
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6498   **/
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10 @6499  static void e1000e_disable_aspm(struct pci_dev *pdev, u16 state)
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6500  {
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6501  	__e1000e_disable_aspm(pdev, state, 0);
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6502  }
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6503  
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6504  /**
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6505   * e1000e_disable_aspm_locked   Disable ASPM states.
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6506   * @pdev: pointer to PCI device struct
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6507   * @state: bit-mask of ASPM states to disable
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6508   *
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6509   * This function must be called with pci_bus_sem acquired!
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6510   * Some devices *must* have certain ASPM states disabled per hardware errata.
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6511   **/
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10 @6512  static void e1000e_disable_aspm_locked(struct pci_dev *pdev, u16 state)
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6513  {
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6514  	__e1000e_disable_aspm(pdev, state, 1);
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6515  }
beb0a1520 drivers/net/ethernet/intel/e1000e/netdev.c Yanir Lubetkin        2015-06-10  6516  
aa3386015 drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2011-02-11  6517  #ifdef CONFIG_PM
23606cf5d drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-14 @6518  static int __e1000_resume(struct pci_dev *pdev)
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6519  {
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6520  	struct net_device *netdev = pci_get_drvdata(pdev);
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6521  	struct e1000_adapter *adapter = netdev_priv(netdev);
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6522  	struct e1000_hw *hw = &adapter->hw;
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6523  	u16 aspm_disable_flag = 0;
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6524  
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6525  	if (adapter->flags2 & FLAG2_DISABLE_ASPM_L0S)
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6526  		aspm_disable_flag = PCIE_LINK_STATE_L0S;
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6527  	if (adapter->flags2 & FLAG2_DISABLE_ASPM_L1)
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6528  		aspm_disable_flag |= PCIE_LINK_STATE_L1;
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6529  	if (aspm_disable_flag)
2758f9edb drivers/net/ethernet/intel/e1000e/netdev.c Raanan Avargil        2015-07-06  6530  		e1000e_disable_aspm(pdev, aspm_disable_flag);
78cd29d5a drivers/net/e1000e/netdev.c                Bruce Allan           2011-03-24  6531  
66148babe drivers/net/ethernet/intel/e1000e/netdev.c Konstantin Khlebnikov 2013-03-05  6532  	pci_set_master(pdev);
6e4f6f6b4 drivers/net/e1000e/netdev.c                Taku Izumi            2008-06-20  6533  
2fbe4526e drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan           2012-04-19  6534  	if (hw->mac.type >= e1000_pch2lan)
99730e4c1 drivers/net/e1000e/netdev.c                Bruce Allan           2011-05-13  6535  		e1000_resume_workarounds_pchlan(&adapter->hw);
99730e4c1 drivers/net/e1000e/netdev.c                Bruce Allan           2011-05-13  6536  
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6537  	e1000e_power_up_phy(adapter);
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6538  
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6539  	/* report the system wakeup cause from S3/S4 */
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6540  	if (adapter->flags2 & FLAG2_HAS_PHY_WAKEUP) {
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6541  		u16 phy_data;
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6542  
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6543  		e1e_rphy(&adapter->hw, BM_WUS, &phy_data);
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6544  		if (phy_data) {
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6545  			e_info("PHY Wakeup cause - %s\n",
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6546  			       phy_data & E1000_WUS_EX ? "Unicast Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6547  			       phy_data & E1000_WUS_MC ? "Multicast Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6548  			       phy_data & E1000_WUS_BC ? "Broadcast Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6549  			       phy_data & E1000_WUS_MAG ? "Magic Packet" :
ef456f858 drivers/net/ethernet/intel/e1000e/netdev.c Jeff Kirsher          2011-11-03  6550  			       phy_data & E1000_WUS_LNKC ?
ef456f858 drivers/net/ethernet/intel/e1000e/netdev.c Jeff Kirsher          2011-11-03  6551  			       "Link Status Change" : "other");
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6552  		}
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6553  		e1e_wphy(&adapter->hw, BM_WUS, ~0);
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6554  	} else {
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6555  		u32 wus = er32(WUS);
6cf08d1c5 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-04-05  6556  
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6557  		if (wus) {
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6558  			e_info("MAC Wakeup cause - %s\n",
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6559  			       wus & E1000_WUS_EX ? "Unicast Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6560  			       wus & E1000_WUS_MC ? "Multicast Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6561  			       wus & E1000_WUS_BC ? "Broadcast Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6562  			       wus & E1000_WUS_MAG ? "Magic Packet" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6563  			       wus & E1000_WUS_LNKC ? "Link Status Change" :
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6564  			       "other");
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6565  		}
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6566  		ew32(WUS, ~0);
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6567  	}
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6568  
a4f58f545 drivers/net/e1000e/netdev.c                Bruce Allan           2009-06-02  6569  	e1000e_reset(adapter);
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6570  
cd791618c drivers/net/e1000e/netdev.c                Bruce Allan           2010-05-10  6571  	e1000_init_manageability_pt(adapter);
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6572  
e921eb1ac drivers/net/ethernet/intel/e1000e/netdev.c Bruce Allan           2012-11-28  6573  	/* If the controller has AMT, do not set DRV_LOAD until the interface
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6574  	 * is up.  For all other cases, let the f/w know that the h/w is now
ad68076e0 drivers/net/e1000e/netdev.c                Bruce Allan           2008-03-28  6575  	 * under the control of the driver.
ad68076e0 drivers/net/e1000e/netdev.c                Bruce Allan           2008-03-28  6576  	 */
c43bc57e5 drivers/net/e1000e/netdev.c                Jesse Brandeburg      2008-08-04  6577  	if (!(adapter->flags & FLAG_HAS_AMT))
31dbe5b4a drivers/net/e1000e/netdev.c                Bruce Allan           2011-01-06  6578  		e1000e_get_hw_control(adapter);
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6579  
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6580  	return 0;
bc7f75fa9 drivers/net/e1000e/netdev.c                Auke Kok              2007-09-17  6581  }
23606cf5d drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-14  6582  
3e7986f67 drivers/net/ethernet/intel/e1000e/netdev.c Hiroaki SHIMODA       2014-04-15  6583  #ifdef CONFIG_PM_SLEEP
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14 @6584  static int e1000e_pm_thaw(struct device *dev)
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6585  {
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6586  	struct net_device *netdev = pci_get_drvdata(to_pci_dev(dev));
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6587  	struct e1000_adapter *adapter = netdev_priv(netdev);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6588  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6589  	e1000e_set_interrupt_capability(adapter);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6590  	if (netif_running(netdev)) {
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6591  		u32 err = e1000_request_irq(adapter);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6592  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6593  		if (err)
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6594  			return err;
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6595  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6596  		e1000e_up(adapter);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6597  	}
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6598  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6599  	netif_device_attach(netdev);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6600  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6601  	return 0;
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6602  }
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6603  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14 @6604  static int e1000e_pm_suspend(struct device *dev)
a03401628 drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-17  6605  {
a03401628 drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-17  6606  	struct pci_dev *pdev = to_pci_dev(dev);
a03401628 drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-17  6607  
2a7e19af9 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-07-11  6608  	e1000e_flush_lpic(pdev);
2a7e19af9 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-07-11  6609  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6610  	e1000e_pm_freeze(dev);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6611  
66148babe drivers/net/ethernet/intel/e1000e/netdev.c Konstantin Khlebnikov 2013-03-05  6612  	return __e1000_shutdown(pdev, false);
a03401628 drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-17  6613  }
a03401628 drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-17  6614  
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14 @6615  static int e1000e_pm_resume(struct device *dev)
23606cf5d drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-14  6616  {
23606cf5d drivers/net/e1000e/netdev.c                Rafael J. Wysocki     2010-03-14  6617  	struct pci_dev *pdev = to_pci_dev(dev);
280020999 drivers/net/ethernet/intel/e1000e/netdev.c David Ertman          2014-02-14  6618  	int rc;

:::::: The code at line 6584 was first introduced by commit
:::::: 2800209994f878b00724ceabb65d744855c8f99a e1000e: Refactor PM flows

:::::: TO: David Ertman <davidx.m.ertman@intel.com>
:::::: CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Brian Walsh April 15, 2016, 10:09 p.m. UTC | #4
On Fri, Apr 15, 2016 at 02:36:55PM -0700, Jacob Keller wrote:
> +
> +	if (adapter->ptp_clock_info) {
> +		/* restore the previous ptp frequency delta */
> +		ret_val = adapter->ptp_clock_info.adjfreq(&adapter->ptp_clock_info,
> +							  adapter->ptp_delta);
> +		if (ret_val)
> +			dev_warn(&adapter->pdev->dev,
> +				 "Failed to restore TIMINCA clock rate delta: %d\n",
> +				 ret_val);
> +	else {
> +		ret_val = e1000e_get_base_timinca(adapter, &timinca);
> +		if (ret_val)
> +			dev_warn(&adapter->pdev->dev,
> +				 "Failed to set default TIMINCA clock rate: %d\n",
> +				 ret_val);
> +		else
> +			ew32(TIMINCA, timinca);
> +	}

Can't do a boolean check on a struct ptp_clock_info.

Testing the patch without the handle NULL ptp_clock_info change.
Keller, Jacob E April 15, 2016, 10:16 p.m. UTC | #5
On Fri, 2016-04-15 at 18:09 -0400, Brian Walsh wrote:
> On Fri, Apr 15, 2016 at 02:36:55PM -0700, Jacob Keller wrote:

> > 

> > +

> > +	if (adapter->ptp_clock_info) {

> > +		/* restore the previous ptp frequency delta */

> > +		ret_val = adapter-

> > >ptp_clock_info.adjfreq(&adapter->ptp_clock_info,

> > +							  adapter-

> > >ptp_delta);

> > +		if (ret_val)

> > +			dev_warn(&adapter->pdev->dev,

> > +				 "Failed to restore TIMINCA clock

> > rate delta: %d\n",

> > +				 ret_val);

> > +	else {

> > +		ret_val = e1000e_get_base_timinca(adapter,

> > &timinca);

> > +		if (ret_val)

> > +			dev_warn(&adapter->pdev->dev,

> > +				 "Failed to set default TIMINCA

> > clock rate: %d\n",

> > +				 ret_val);

> > +		else

> > +			ew32(TIMINCA, timinca);

> > +	}

> Can't do a boolean check on a struct ptp_clock_info.

> 

> Testing the patch without the handle NULL ptp_clock_info change.

> 


Oops you're right it's not a pointer... Hmm I was thinking of
ptp_clock. I'll think that through a bit more.

Thanks,
Jake
Keller, Jacob E April 15, 2016, 10:29 p.m. UTC | #6
On Fri, 2016-04-15 at 14:36 -0700, Jacob Keller wrote:
> The e1000e_config_hwtstamp function was incorrectly resetting the

> SYSTIM

> registers every time the ioctl was being run. If you happened to be

> running ptp4l and lost the PTP connect (removing cable, or blocking

> the

> UDP traffic for example), then ptp4l will eventually perform a

> restart

> which involves re-requesting timestamp settings. In e1000e this has

> the

> unfortunate and incorrect result of resetting SYSTIME to the kernel

> time. Since kernel time is usually in UTC, and PTP time is in TAI,

> this

> results in the leap second being re-applied.

> 

> Fix this by extracting the SYSTIME reset out into its own function,

> e1000e_ptp_reset, which we call during reset to restore the hardware

> registers. This function will (a) restart the timecounter based on

> the

> new system time, (b) restore the previous PPB setting, and (c)

> restore

> the previous hwtstamp settings.

> 

> In order to perform (b), I had to modify the adjfreq ptp function

> pointer to store the old delta each time it is called. This also has

> the

> side effect of restoring the correct base timinca register correctly.

> The driver does not need to explicitly zero the ptp_delta variable

> since

> the entire adapter structure comes zero-initialized.

> 

> Reported-by: Brian Walsh <brian@walsh.ws>

> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>

> ---

> 

> Notes:

>     This patch conflicts with Brian's "e1000e fix ptp time reset on

> newtork

>     interruption", and that patch MUST be removed from the queue

> before applying

>     this one.

>     

>     - Changes since v2

>     * move e1000e_init_ptp prior to reset so that PTP clock is

> created first

>     * handle NULL ptp_clock_info gracefully.



This has an obvious mistake. Sorry for the thrash, I'll have a v3 soon.
(with more testing, since I was in a hurry and it bit me)

Regards,
Jake
diff mbox

Patch

diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
index 010e6d61c855..ef96cd11d6d2 100644
--- a/drivers/net/ethernet/intel/e1000e/e1000.h
+++ b/drivers/net/ethernet/intel/e1000e/e1000.h
@@ -347,6 +347,7 @@  struct e1000_adapter {
 	struct ptp_clock *ptp_clock;
 	struct ptp_clock_info ptp_clock_info;
 	struct pm_qos_request pm_qos_req;
+	s32 ptp_delta;
 
 	u16 eee_advert;
 };
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 50d2684ac146..901ecbddcd5c 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -3580,7 +3580,6 @@  static int e1000e_config_hwtstamp(struct e1000_adapter *adapter,
 	bool is_l4 = false;
 	bool is_l2 = false;
 	u32 regval;
-	s32 ret_val;
 
 	if (!(adapter->flags & FLAG_HAS_HW_TIMESTAMP))
 		return -EINVAL;
@@ -3719,16 +3718,6 @@  static int e1000e_config_hwtstamp(struct e1000_adapter *adapter,
 	er32(RXSTMPH);
 	er32(TXSTMPH);
 
-	/* Get and set the System Time Register SYSTIM base frequency */
-	ret_val = e1000e_get_base_timinca(adapter, &regval);
-	if (ret_val)
-		return ret_val;
-	ew32(TIMINCA, regval);
-
-	/* reset the ns time counter */
-	timecounter_init(&adapter->tc, &adapter->cc,
-			 ktime_to_ns(ktime_get_real()));
-
 	return 0;
 }
 
@@ -3885,6 +3874,49 @@  static void e1000_flush_desc_rings(struct e1000_adapter *adapter)
 }
 
 /**
+ * e1000e_ptp_reset - reset the timesync registers after a hardware reset
+ * @adapter: board private structure
+ *
+ * When the MAC is reset, all hardware bits for timesync will be reset to the
+ * default values. This function will restore the settings last in place.
+ * Since the clock SYSTIME registers are reset, we will simply restore the
+ * cyclecounter to the kernel real clock time.
+ **/
+static void e1000e_ptp_reset(struct e1000_adapter *adapter)
+{
+	unsigned long flags;
+	u32 timinca;
+	s32 ret_val;
+
+	if (adapter->ptp_clock_info) {
+		/* restore the previous ptp frequency delta */
+		ret_val = adapter->ptp_clock_info.adjfreq(&adapter->ptp_clock_info,
+							  adapter->ptp_delta);
+		if (ret_val)
+			dev_warn(&adapter->pdev->dev,
+				 "Failed to restore TIMINCA clock rate delta: %d\n",
+				 ret_val);
+	else {
+		ret_val = e1000e_get_base_timinca(adapter, &timinca);
+		if (ret_val)
+			dev_warn(&adapter->pdev->dev,
+				 "Failed to set default TIMINCA clock rate: %d\n",
+				 ret_val);
+		else
+			ew32(TIMINCA, timinca);
+	}
+
+	/* reset the systim ns time counter */
+	spin_lock_irqsave(&adapter->systim_lock, flags);
+	timecounter_init(&adapter->tc, &adapter->cc,
+			 ktime_to_ns(ktime_get_real()));
+	spin_unlock_irqrestore(&adapter->systim_lock, flags);
+
+	/* restore the previous hwtstamp configuration settings */
+	e1000e_config_hwtstamp(adapter, &adapter->hwtstamp_config);
+}
+
+/**
  * e1000e_reset - bring the hardware into a known good state
  *
  * This function boots the hardware and enables some settings that
@@ -4063,8 +4095,8 @@  void e1000e_reset(struct e1000_adapter *adapter)
 
 	e1000e_reset_adaptive(hw);
 
-	/* initialize systim and reset the ns time counter */
-	e1000e_config_hwtstamp(adapter, &adapter->hwtstamp_config);
+	/* restore systim and hwtstamp settings */
+	e1000e_ptp_reset(adapter);
 
 	/* Set EEE advertisement as appropriate */
 	if (adapter->flags2 & FLAG2_HAS_EEE) {
@@ -7238,6 +7270,9 @@  static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 		adapter->eeprom_vers = 0;
 	}
 
+	/* init PTP hardware clock */
+	e1000e_ptp_init(adapter);
+
 	/* reset the hardware with the new settings */
 	e1000e_reset(adapter);
 
@@ -7256,9 +7291,6 @@  static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
 	/* carrier off reporting is important to ethtool even BEFORE open */
 	netif_carrier_off(netdev);
 
-	/* init PTP hardware clock */
-	e1000e_ptp_init(adapter);
-
 	e1000_print_device_info(adapter);
 
 	if (pci_dev_run_wake(pdev))
diff --git a/drivers/net/ethernet/intel/e1000e/ptp.c b/drivers/net/ethernet/intel/e1000e/ptp.c
index e2ff3ef75d5d..2e1b17ad52a3 100644
--- a/drivers/net/ethernet/intel/e1000e/ptp.c
+++ b/drivers/net/ethernet/intel/e1000e/ptp.c
@@ -79,6 +79,8 @@  static int e1000e_phc_adjfreq(struct ptp_clock_info *ptp, s32 delta)
 
 	ew32(TIMINCA, timinca);
 
+	adapter->ptp_delta = delta;
+
 	spin_unlock_irqrestore(&adapter->systim_lock, flags);
 
 	return 0;