Kernel
  Threads by month 
                
            - ----- 2025 -----
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2024 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2023 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2022 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2021 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2020 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2019 -----
 - December
 
- 28 participants
 - 21057 discussions
 
                        
                            
                                
                            
                            [PATCH OLK-6.6] kbuild: userprogs: use correct linker when mixing clang and GNU ld
                        
                        
by Tengda Wu 06 Aug '25
                    by Tengda Wu 06 Aug '25
06 Aug '25
                    
                        From: Thomas Weißschuh <thomas.weissschuh(a)linutronix.de>
mainline inclusion
from mainline-v6.17
commit 936599ca514973d44a766b7376c6bbdc96b6a8cc
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/ICRNOY
Reference: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?…
--------------------------------
The userprogs infrastructure does not expect clang being used with GNU ld
and in that case uses /usr/bin/ld for linking, not the configured $(LD).
This fallback is problematic as it will break when cross-compiling.
Mixing clang and GNU ld is used for example when building for SPARC64,
as ld.lld is not sufficient; see Documentation/kbuild/llvm.rst.
Relax the check around --ld-path so it gets used for all linkers.
Fixes: dfc1b168a8c4 ("kbuild: userprogs: use correct lld when linking through clang")
Cc: stable(a)vger.kernel.org
Signed-off-by: Thomas Weißschuh <thomas.weissschuh(a)linutronix.de>
Reviewed-by: Nathan Chancellor <nathan(a)kernel.org>
Signed-off-by: Masahiro Yamada <masahiroy(a)kernel.org>
Conflicts:
	Makefile
[Context conflicts]
Signed-off-by: Tengda Wu <wutengda2(a)huawei.com>
---
 Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Makefile b/Makefile
index 4cbc72182f6b..2a6541892eea 100644
--- a/Makefile
+++ b/Makefile
@@ -1060,7 +1060,7 @@ KBUILD_USERCFLAGS  += $(filter -m32 -m64 --target=%, $(KBUILD_CPPFLAGS) $(KBUILD
 KBUILD_USERLDFLAGS += $(filter -m32 -m64 --target=%, $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS))
 
 # userspace programs are linked via the compiler, use the correct linker
-ifeq ($(CONFIG_CC_IS_CLANG)$(CONFIG_LD_IS_LLD),yy)
+ifdef CONFIG_CC_IS_CLANG
 KBUILD_USERLDFLAGS += $(call cc-option, --ld-path=$(LD))
 endif
 
-- 
2.34.1
                    
                  
                  
                          
                            
                            2
                            
                          
                          
                            
                            1
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-5.10 3106/3106] block/bfq-cgroup.c:692: warning: Function parameter or member 'bfqg' not described in '__bfq_bic_change_cgroup'
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-5.10
head:   a8c621aa031669a6835da1431d9765e3bbbc3621
commit: b8fcf506e7428600d59004a436f0ce98a21874d7 [3106/3106] bfq: Get rid of __bio_blkcg() usage
config: arm64-randconfig-003-20250806 (https://download.01.org/0day-ci/archive/20250806/202508062043.ijR1VTdp-lkp@…)
compiler: aarch64-linux-gcc (GCC) 9.5.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508062043.ijR1VTdp-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508062043.ijR1VTdp-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> block/bfq-cgroup.c:692: warning: Function parameter or member 'bfqg' not described in '__bfq_bic_change_cgroup'
>> block/bfq-cgroup.c:692: warning: Excess function parameter 'blkcg' description in '__bfq_bic_change_cgroup'
   block/bfq-cgroup.c:841: warning: Function parameter or member 'ioprio_class' not described in 'bfq_reparent_leaf_entity'
   block/bfq-cgroup.c:871: warning: Function parameter or member 'ioprio_class' not described in 'bfq_reparent_active_queues'
vim +692 block/bfq-cgroup.c
ea25da48086d3b Paolo Valente 2017-04-19  678  
ea25da48086d3b Paolo Valente 2017-04-19  679  /**
ea25da48086d3b Paolo Valente 2017-04-19  680   * __bfq_bic_change_cgroup - move @bic to @cgroup.
ea25da48086d3b Paolo Valente 2017-04-19  681   * @bfqd: the queue descriptor.
ea25da48086d3b Paolo Valente 2017-04-19  682   * @bic: the bic to move.
ea25da48086d3b Paolo Valente 2017-04-19  683   * @blkcg: the blk-cgroup to move to.
ea25da48086d3b Paolo Valente 2017-04-19  684   *
8f9bebc33dd718 Paolo Valente 2017-06-05  685   * Move bic to blkcg, assuming that bfqd->lock is held; which makes
8f9bebc33dd718 Paolo Valente 2017-06-05  686   * sure that the reference to cgroup is valid across the call (see
8f9bebc33dd718 Paolo Valente 2017-06-05  687   * comments in bfq_bic_update_cgroup on this issue)
ea25da48086d3b Paolo Valente 2017-04-19  688   */
b8fcf506e74286 Jan Kara      2022-11-21  689  static void *__bfq_bic_change_cgroup(struct bfq_data *bfqd,
ea25da48086d3b Paolo Valente 2017-04-19  690  				     struct bfq_io_cq *bic,
b8fcf506e74286 Jan Kara      2022-11-21  691  				     struct bfq_group *bfqg)
ea25da48086d3b Paolo Valente 2017-04-19 @692  {
ea25da48086d3b Paolo Valente 2017-04-19  693  	struct bfq_queue *async_bfqq = bic_to_bfqq(bic, 0);
ea25da48086d3b Paolo Valente 2017-04-19  694  	struct bfq_queue *sync_bfqq = bic_to_bfqq(bic, 1);
ea25da48086d3b Paolo Valente 2017-04-19  695  	struct bfq_entity *entity;
ea25da48086d3b Paolo Valente 2017-04-19  696  
ea25da48086d3b Paolo Valente 2017-04-19  697  	if (async_bfqq) {
ea25da48086d3b Paolo Valente 2017-04-19  698  		entity = &async_bfqq->entity;
ea25da48086d3b Paolo Valente 2017-04-19  699  
ea25da48086d3b Paolo Valente 2017-04-19  700  		if (entity->sched_data != &bfqg->sched_data) {
ea25da48086d3b Paolo Valente 2017-04-19  701  			bic_set_bfqq(bic, NULL, 0);
c8997736650060 Paolo Valente 2020-03-21  702  			bfq_release_process_ref(bfqd, async_bfqq);
ea25da48086d3b Paolo Valente 2017-04-19  703  		}
ea25da48086d3b Paolo Valente 2017-04-19  704  	}
ea25da48086d3b Paolo Valente 2017-04-19  705  
ea25da48086d3b Paolo Valente 2017-04-19  706  	if (sync_bfqq) {
0154382317ee69 Jan Kara      2022-09-29  707  		if (!sync_bfqq->new_bfqq && !bfq_bfqq_coop(sync_bfqq)) {
0154382317ee69 Jan Kara      2022-09-29  708  			/* We are the only user of this bfqq, just move it */
0154382317ee69 Jan Kara      2022-09-29  709  			if (sync_bfqq->entity.sched_data != &bfqg->sched_data)
ea25da48086d3b Paolo Valente 2017-04-19  710  				bfq_bfqq_move(bfqd, sync_bfqq, bfqg);
0154382317ee69 Jan Kara      2022-09-29  711  		} else {
0154382317ee69 Jan Kara      2022-09-29  712  			struct bfq_queue *bfqq;
0154382317ee69 Jan Kara      2022-09-29  713  
0154382317ee69 Jan Kara      2022-09-29  714  			/*
0154382317ee69 Jan Kara      2022-09-29  715  			 * The queue was merged to a different queue. Check
0154382317ee69 Jan Kara      2022-09-29  716  			 * that the merge chain still belongs to the same
0154382317ee69 Jan Kara      2022-09-29  717  			 * cgroup.
0154382317ee69 Jan Kara      2022-09-29  718  			 */
0154382317ee69 Jan Kara      2022-09-29  719  			for (bfqq = sync_bfqq; bfqq; bfqq = bfqq->new_bfqq)
0154382317ee69 Jan Kara      2022-09-29  720  				if (bfqq->entity.sched_data !=
0154382317ee69 Jan Kara      2022-09-29  721  				    &bfqg->sched_data)
0154382317ee69 Jan Kara      2022-09-29  722  					break;
0154382317ee69 Jan Kara      2022-09-29  723  			if (bfqq) {
0154382317ee69 Jan Kara      2022-09-29  724  				/*
0154382317ee69 Jan Kara      2022-09-29  725  				 * Some queue changed cgroup so the merge is
0154382317ee69 Jan Kara      2022-09-29  726  				 * not valid anymore. We cannot easily just
0154382317ee69 Jan Kara      2022-09-29  727  				 * cancel the merge (by clearing new_bfqq) as
0154382317ee69 Jan Kara      2022-09-29  728  				 * there may be other processes using this
0154382317ee69 Jan Kara      2022-09-29  729  				 * queue and holding refs to all queues below
0154382317ee69 Jan Kara      2022-09-29  730  				 * sync_bfqq->new_bfqq. Similarly if the merge
0154382317ee69 Jan Kara      2022-09-29  731  				 * already happened, we need to detach from
0154382317ee69 Jan Kara      2022-09-29  732  				 * bfqq now so that we cannot merge bio to a
0154382317ee69 Jan Kara      2022-09-29  733  				 * request from the old cgroup.
0154382317ee69 Jan Kara      2022-09-29  734  				 */
0154382317ee69 Jan Kara      2022-09-29  735  				bfq_put_cooperator(sync_bfqq);
0154382317ee69 Jan Kara      2022-09-29  736  				bfq_release_process_ref(bfqd, sync_bfqq);
0154382317ee69 Jan Kara      2022-09-29  737  				bic_set_bfqq(bic, NULL, 1);
0154382317ee69 Jan Kara      2022-09-29  738  			}
0154382317ee69 Jan Kara      2022-09-29  739  		}
ea25da48086d3b Paolo Valente 2017-04-19  740  	}
ea25da48086d3b Paolo Valente 2017-04-19  741  
ea25da48086d3b Paolo Valente 2017-04-19  742  	return bfqg;
ea25da48086d3b Paolo Valente 2017-04-19  743  }
ea25da48086d3b Paolo Valente 2017-04-19  744  
:::::: The code at line 692 was first introduced by commit
:::::: ea25da48086d3bbebf3a2eeff387ea00ed96f5c4 block, bfq: split bfq-iosched.c into multiple source files
:::::: TO: Paolo Valente <paolo.valente(a)linaro.org>
:::::: CC: Jens Axboe <axboe(a)fb.com>
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-5.10 3106/3106] drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:752:6: warning: no previous prototype for 'ngbe_add_uc_addr'
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-5.10
head:   a8c621aa031669a6835da1431d9765e3bbbc3621
commit: a5961b4bc6ce09a70902686ecc848a47493a9251 [3106/3106] openeuler: net: ngbe: add ngbe module support
config: x86_64-buildonly-randconfig-2003-20250806 (https://download.01.org/0day-ci/archive/20250806/202508061443.vbBAmdyk-lkp@…)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508061443.vbBAmdyk-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508061443.vbBAmdyk-lkp@intel.com/
All warnings (new ones prefixed by >>):
   In file included from drivers/net/ethernet/netswift/ngbe/ngbe_phy.h:8,
                    from drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:6:
   drivers/net/ethernet/netswift/ngbe/ngbe.h: In function 'ngbe_misc_isb':
   drivers/net/ethernet/netswift/ngbe/ngbe.h:741:13: warning: variable 'cur_diff' set but not used [-Wunused-but-set-variable]
     741 |         u32 cur_diff = 0;
         |             ^~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c: At top level:
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:752:6: warning: no previous prototype for 'ngbe_add_uc_addr' [-Wmissing-prototypes]
     752 | void ngbe_add_uc_addr(struct ngbe_hw *hw, u8 *addr, u32 vmdq)
         |      ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:885:6: warning: no previous prototype for 'ngbe_set_mta' [-Wmissing-prototypes]
     885 | void ngbe_set_mta(struct ngbe_hw *hw, u8 *mc_addr)
         |      ^~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:1889:5: warning: no previous prototype for 'ngbe_host_interface_pass_command' [-Wmissing-prototypes]
    1889 | s32 ngbe_host_interface_pass_command(struct ngbe_hw *hw, u32 *buffer,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2186:5: warning: no previous prototype for 'ngbe_setup_mac_link_hostif' [-Wmissing-prototypes]
    2186 | s32 ngbe_setup_mac_link_hostif(struct ngbe_hw *hw, u32 speed)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2222:5: warning: no previous prototype for 'ngbe_crc16_ccitt' [-Wmissing-prototypes]
    2222 | u16 ngbe_crc16_ccitt(const u8 *buf, int size)
         |     ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2339:4: warning: no previous prototype for 'fmgr_cmd_op' [-Wmissing-prototypes]
    2339 | u8 fmgr_cmd_op(struct ngbe_hw *hw, u32 cmd, u32 cmd_addr)
         |    ^~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2360:4: warning: no previous prototype for 'fmgr_usr_cmd_op' [-Wmissing-prototypes]
    2360 | u8 fmgr_usr_cmd_op(struct ngbe_hw *hw, u32 usr_cmd)
         |    ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2370:4: warning: no previous prototype for 'flash_erase_chip' [-Wmissing-prototypes]
    2370 | u8 flash_erase_chip(struct ngbe_hw *hw)
         |    ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2376:4: warning: no previous prototype for 'flash_erase_sector' [-Wmissing-prototypes]
    2376 | u8 flash_erase_sector(struct ngbe_hw *hw, u32 sec_addr)
         |    ^~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2392:4: warning: no previous prototype for 'flash_write_dword' [-Wmissing-prototypes]
    2392 | u8 flash_write_dword(struct ngbe_hw *hw, u32 addr, u32 dword)
         |    ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:3296:5: warning: no previous prototype for 'ngbe_get_copper_link_capabilities' [-Wmissing-prototypes]
    3296 | s32 ngbe_get_copper_link_capabilities(struct ngbe_hw *hw,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:3456:5: warning: no previous prototype for 'ngbe_reset_misc' [-Wmissing-prototypes]
    3456 | int ngbe_reset_misc(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:3910:5: warning: no previous prototype for 'ngbe_read_ee_hostif_data' [-Wmissing-prototypes]
    3910 | s32 ngbe_read_ee_hostif_data(struct ngbe_hw *hw, u16 offset,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:3981:5: warning: no previous prototype for 'ngbe_phy_led_oem_chk' [-Wmissing-prototypes]
    3981 | s32 ngbe_phy_led_oem_chk(struct ngbe_hw *hw, u32 *data)
         |     ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:4163:5: warning: no previous prototype for 'ngbe_read_ee_hostif_data32' [-Wmissing-prototypes]
    4163 | s32 ngbe_read_ee_hostif_data32(struct ngbe_hw *hw, u16 offset,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:4225:5: warning: no previous prototype for 'ngbe_write_ee_hostif_data' [-Wmissing-prototypes]
    4225 | s32 ngbe_write_ee_hostif_data(struct ngbe_hw *hw, u16 offset,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:4282:5: warning: no previous prototype for 'ngbe_write_ee_hostif_data32' [-Wmissing-prototypes]
    4282 | s32 ngbe_write_ee_hostif_data32(struct ngbe_hw *hw, u16 offset,
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2689:17: warning: 'ngbe_emc_therm_limit' defined but not used [-Wunused-const-variable=]
    2689 | static const u8 ngbe_emc_therm_limit[4] = {
         |                 ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2682:17: warning: 'ngbe_emc_temp_data' defined but not used [-Wunused-const-variable=]
    2682 | static const u8 ngbe_emc_temp_data[4] = {
         |                 ^~~~~~~~~~~~~~~~~~
--
   In file included from drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:5:
   drivers/net/ethernet/netswift/ngbe/ngbe.h: In function 'ngbe_misc_isb':
   drivers/net/ethernet/netswift/ngbe/ngbe.h:741:13: warning: variable 'cur_diff' set but not used [-Wunused-but-set-variable]
     741 |         u32 cur_diff = 0;
         |             ^~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c: At top level:
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:113:5: warning: no previous prototype for 'ngbe_poll_for_msg' [-Wmissing-prototypes]
     113 | int ngbe_poll_for_msg(struct ngbe_hw *hw, u16 mbx_id)
         |     ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:143:5: warning: no previous prototype for 'ngbe_poll_for_ack' [-Wmissing-prototypes]
     143 | int ngbe_poll_for_ack(struct ngbe_hw *hw, u16 mbx_id)
         |     ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:244:5: warning: no previous prototype for 'ngbe_read_v2p_mailbox' [-Wmissing-prototypes]
     244 | u32 ngbe_read_v2p_mailbox(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:262:5: warning: no previous prototype for 'ngbe_check_for_bit_vf' [-Wmissing-prototypes]
     262 | int ngbe_check_for_bit_vf(struct ngbe_hw *hw, u32 mask)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:278:5: warning: no previous prototype for 'ngbe_check_for_msg_vf' [-Wmissing-prototypes]
     278 | int ngbe_check_for_msg_vf(struct ngbe_hw *hw, u16 __always_unused mbx_id)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:298:5: warning: no previous prototype for 'ngbe_check_for_ack_vf' [-Wmissing-prototypes]
     298 | int ngbe_check_for_ack_vf(struct ngbe_hw *hw, u16 __always_unused mbx_id)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:318:5: warning: no previous prototype for 'ngbe_check_for_rst_vf' [-Wmissing-prototypes]
     318 | int ngbe_check_for_rst_vf(struct ngbe_hw *hw, u16 __always_unused mbx_id)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:337:5: warning: no previous prototype for 'ngbe_obtain_mbx_lock_vf' [-Wmissing-prototypes]
     337 | int ngbe_obtain_mbx_lock_vf(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:365:5: warning: no previous prototype for 'ngbe_write_mbx_vf' [-Wmissing-prototypes]
     365 | int ngbe_write_mbx_vf(struct ngbe_hw *hw, u32 *msg, u16 size,
         |     ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:403:5: warning: no previous prototype for 'ngbe_read_mbx_vf' [-Wmissing-prototypes]
     403 | int ngbe_read_mbx_vf(struct ngbe_hw *hw, u32 *msg, u16 size,
         |     ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:461:5: warning: no previous prototype for 'ngbe_check_for_bit_pf' [-Wmissing-prototypes]
     461 | int ngbe_check_for_bit_pf(struct ngbe_hw *hw, u32 mask)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:481:5: warning: no previous prototype for 'ngbe_check_for_msg_pf' [-Wmissing-prototypes]
     481 | int ngbe_check_for_msg_pf(struct ngbe_hw *hw, u16 vf)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:501:5: warning: no previous prototype for 'ngbe_check_for_ack_pf' [-Wmissing-prototypes]
     501 | int ngbe_check_for_ack_pf(struct ngbe_hw *hw, u16 vf)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:521:5: warning: no previous prototype for 'ngbe_check_for_rst_pf' [-Wmissing-prototypes]
     521 | int ngbe_check_for_rst_pf(struct ngbe_hw *hw, u16 vf)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:544:5: warning: no previous prototype for 'ngbe_obtain_mbx_lock_pf' [-Wmissing-prototypes]
     544 | int ngbe_obtain_mbx_lock_pf(struct ngbe_hw *hw, u16 vf)
         |     ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:572:5: warning: no previous prototype for 'ngbe_write_mbx_pf' [-Wmissing-prototypes]
     572 | int ngbe_write_mbx_pf(struct ngbe_hw *hw, u32 *msg, u16 size,
         |     ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_mbx.c:612:5: warning: no previous prototype for 'ngbe_read_mbx_pf' [-Wmissing-prototypes]
     612 | int ngbe_read_mbx_pf(struct ngbe_hw *hw, u32 *msg, u16 size,
         |     ^~~~~~~~~~~~~~~~
--
   In file included from drivers/net/ethernet/netswift/ngbe/ngbe_ptp.c:4:
   drivers/net/ethernet/netswift/ngbe/ngbe.h: In function 'ngbe_misc_isb':
   drivers/net/ethernet/netswift/ngbe/ngbe.h:741:13: warning: variable 'cur_diff' set but not used [-Wunused-but-set-variable]
     741 |         u32 cur_diff = 0;
         |             ^~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_ptp.c: In function 'ngbe_ptp_check_pps_event':
>> drivers/net/ethernet/netswift/ngbe/ngbe_ptp.c:253:32: warning: variable 'event' set but not used [-Wunused-but-set-variable]
     253 |         struct ptp_clock_event event;
         |                                ^~~~~
--
   In file included from drivers/net/ethernet/netswift/ngbe/ngbe_phy.h:8,
                    from drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:4:
   drivers/net/ethernet/netswift/ngbe/ngbe.h: In function 'ngbe_misc_isb':
   drivers/net/ethernet/netswift/ngbe/ngbe.h:741:13: warning: variable 'cur_diff' set but not used [-Wunused-but-set-variable]
     741 |         u32 cur_diff = 0;
         |             ^~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_phy.c: At top level:
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:16:6: warning: no previous prototype for 'ngbe_check_reset_blocked' [-Wmissing-prototypes]
      16 | bool ngbe_check_reset_blocked(struct ngbe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:33:5: warning: no previous prototype for 'ngbe_phy_read_reg' [-Wmissing-prototypes]
      33 | s32 ngbe_phy_read_reg(struct ngbe_hw *hw,
         |     ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:56:5: warning: no previous prototype for 'ngbe_phy_write_reg' [-Wmissing-prototypes]
      56 | s32 ngbe_phy_write_reg(struct ngbe_hw *hw,
         |     ^~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:74:5: warning: no previous prototype for 'ngbe_check_internal_phy_id' [-Wmissing-prototypes]
      74 | s32 ngbe_check_internal_phy_id(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:273:5: warning: no previous prototype for 'ngbe_check_mdi_phy_id' [-Wmissing-prototypes]
     273 | s32 ngbe_check_mdi_phy_id(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:337:6: warning: no previous prototype for 'ngbe_validate_phy_addr' [-Wmissing-prototypes]
     337 | bool ngbe_validate_phy_addr(struct ngbe_hw *hw, u32 phy_addr)
         |      ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:353:5: warning: no previous prototype for 'ngbe_check_yt_phy_id' [-Wmissing-prototypes]
     353 | s32 ngbe_check_yt_phy_id(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:1242:5: warning: no previous prototype for 'ngbe_phy_get_advertised_pause' [-Wmissing-prototypes]
    1242 | s32 ngbe_phy_get_advertised_pause(struct ngbe_hw *hw, u8 *pause_bit)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:1279:5: warning: no previous prototype for 'ngbe_phy_get_lp_advertised_pause' [-Wmissing-prototypes]
    1279 | s32 ngbe_phy_get_lp_advertised_pause(struct ngbe_hw *hw, u8 *pause_bit)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:1324:5: warning: no previous prototype for 'ngbe_phy_set_pause_advertisement' [-Wmissing-prototypes]
    1324 | s32 ngbe_phy_set_pause_advertisement(struct ngbe_hw *hw, u16 pause_bit)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_phy.c:1450:5: warning: no previous prototype for 'ngbe_phy_setup' [-Wmissing-prototypes]
    1450 | s32 ngbe_phy_setup(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~
--
   In file included from drivers/net/ethernet/netswift/ngbe/ngbe_ethtool.c:15:
   drivers/net/ethernet/netswift/ngbe/ngbe.h: In function 'ngbe_misc_isb':
   drivers/net/ethernet/netswift/ngbe/ngbe.h:741:13: warning: variable 'cur_diff' set but not used [-Wunused-but-set-variable]
     741 |         u32 cur_diff = 0;
         |             ^~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_ethtool.c: At top level:
>> drivers/net/ethernet/netswift/ngbe/ngbe_ethtool.c:128:5: warning: no previous prototype for 'ngbe_get_link_ksettings' [-Wmissing-prototypes]
     128 | int ngbe_get_link_ksettings(struct net_device *netdev,
         |     ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_ethtool.c: In function 'ngbe_set_link_ksettings':
>> drivers/net/ethernet/netswift/ngbe/ngbe_ethtool.c:318:25: warning: variable 'old' set but not used [-Wunused-but-set-variable]
     318 |         u32 advertised, old;
         |                         ^~~
--
   In file included from drivers/net/ethernet/netswift/ngbe/ngbe_main.c:23:
   drivers/net/ethernet/netswift/ngbe/ngbe.h: In function 'ngbe_misc_isb':
   drivers/net/ethernet/netswift/ngbe/ngbe.h:741:13: warning: variable 'cur_diff' set but not used [-Wunused-but-set-variable]
     741 |         u32 cur_diff = 0;
         |             ^~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c: At top level:
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:139:6: warning: no previous prototype for 'ngbe_service_event_schedule' [-Wmissing-prototypes]
     139 | void ngbe_service_event_schedule(struct ngbe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c: In function 'ngbe_tx_timeout':
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:401:14: warning: variable 'real_tx_hang' set but not used [-Wunused-but-set-variable]
     401 |         bool real_tx_hang = false;
         |              ^~~~~~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c: At top level:
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:3159:6: warning: no previous prototype for 'ngbe_configure_isb' [-Wmissing-prototypes]
    3159 | void ngbe_configure_isb(struct ngbe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:3173:6: warning: no previous prototype for 'ngbe_configure_port' [-Wmissing-prototypes]
    3173 | void ngbe_configure_port(struct ngbe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:3529:6: warning: no previous prototype for 'ngbe_disable_device' [-Wmissing-prototypes]
    3529 | void ngbe_disable_device(struct ngbe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:3644:5: warning: no previous prototype for 'ngbe_init_shared_code' [-Wmissing-prototypes]
    3644 | s32 ngbe_init_shared_code(struct ngbe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:5791:5: warning: no previous prototype for 'ngbe_skb_pad_nonzero' [-Wmissing-prototypes]
    5791 | int ngbe_skb_pad_nonzero(struct sk_buff *skb, int pad)
         |     ^~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c: In function 'ngbe_mii_ioctl':
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:5989:20: warning: variable 'devad' set but not used [-Wunused-but-set-variable]
    5989 |         int prtad, devad, ret = 0;
         |                    ^~~~~
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:5989:13: warning: variable 'prtad' set but not used [-Wunused-but-set-variable]
    5989 |         int prtad, devad, ret = 0;
         |             ^~~~~
--
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:602: warning: Function parameter or member 'pools' not described in 'ngbe_set_rar'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:602: warning: Excess function parameter 'vmdq' description in 'ngbe_set_rar'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:753: warning: Function parameter or member 'vmdq' not described in 'ngbe_add_uc_addr'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:886: warning: Function parameter or member 'mc_addr' not described in 'ngbe_set_mta'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:886: warning: Excess function parameter 'hash_value' description in 'ngbe_set_mta'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:1505: warning: Function parameter or member 'pool' not described in 'ngbe_set_vmdq'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:1505: warning: Excess function parameter 'vmdq' description in 'ngbe_set_vmdq'
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2340: warning: Function parameter or member 'hw' not described in 'fmgr_cmd_op'
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2340: warning: Function parameter or member 'cmd' not described in 'fmgr_cmd_op'
>> drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2340: warning: Function parameter or member 'cmd_addr' not described in 'fmgr_cmd_op'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2703: warning: bad line:                        (8.1542E-08)N^3 + (-1.6743E-11)N^4
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:2710: warning: Excess function parameter 'data' description in 'ngbe_get_thermal_sensor_data'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:3441: warning: Function parameter or member 'need_restart_AN' not described in 'ngbe_setup_copper_link'
   drivers/net/ethernet/netswift/ngbe/ngbe_hw.c:3441: warning: Excess function parameter 'autoneg_wait_to_complete' description in 'ngbe_setup_copper_link'
--
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:226: warning: Function parameter or member 'quiet' not described in 'ngbe_read_reg'
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:398: warning: Function parameter or member 'txqueue' not described in 'ngbe_tx_timeout'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:1608: warning: Function parameter or member 'queues' not described in 'ngbe_irq_enable'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:1608: warning: Function parameter or member 'flush' not described in 'ngbe_irq_enable'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:1997: warning: Function parameter or member 'adapter' not described in 'ngbe_configure_msi_and_legacy'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:2389: warning: Function parameter or member 'adapter' not described in 'ngbe_configure_bridge_mode'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:2856: warning: Function parameter or member 'pool' not described in 'ngbe_write_uc_addr_list'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:3684: warning: cannot understand function prototype: 'const u32 def_rss_key[10] = '
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4267: warning: Function parameter or member 'pdev' not described in '__ngbe_shutdown'
>> drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4267: warning: Function parameter or member 'enable_wake' not described in '__ngbe_shutdown'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4558: warning: Function parameter or member 'adapter' not described in 'ngbe_check_hang_subtask'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4620: warning: Function parameter or member 'adapter' not described in 'ngbe_watchdog_update_link_status'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4716: warning: Function parameter or member 'adapter' not described in 'ngbe_watchdog_link_is_up'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4761: warning: Function parameter or member 'adapter' not described in 'ngbe_watchdog_link_is_down'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4828: warning: Function parameter or member 'adapter' not described in 'ngbe_watchdog_flush_tx'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4898: warning: Function parameter or member 'adapter' not described in 'ngbe_watchdog_subtask'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4927: warning: Function parameter or member 't' not described in 'ngbe_service_timer'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:4927: warning: Excess function parameter 'data' description in 'ngbe_service_timer'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:6022: warning: Function parameter or member 'dev' not described in 'ngbe_setup_tc'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:6022: warning: Excess function parameter 'netdev' description in 'ngbe_setup_tc'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:6273: warning: Excess function parameter 'device_id' description in 'ngbe_wol_supported'
   drivers/net/ethernet/netswift/ngbe/ngbe_main.c:6273: warning: Excess function parameter 'subdev_id' description in 'ngbe_wol_supported'
vim +/ngbe_add_uc_addr +752 drivers/net/ethernet/netswift/ngbe/ngbe_hw.c
   589	
   590	/**
   591	 *  ngbe_set_rar - Set Rx address register
   592	 *  @hw: pointer to hardware structure
   593	 *  @index: Receive address register to write
   594	 *  @addr: Address to put into receive address register
   595	 *  @vmdq: VMDq "set" or "pool" index
   596	 *  @enable_addr: set flag that address is active
   597	 *
   598	 *  Puts an ethernet address into a receive address register.
   599	 **/
   600	s32 ngbe_set_rar(struct ngbe_hw *hw, u32 index, u8 *addr, u64 pools,
   601				  u32 enable_addr)
 > 602	{
   603		u32 rar_low, rar_high;
   604		u32 rar_entries = hw->mac.num_rar_entries;
   605	
   606		/* Make sure we are using a valid rar index range */
   607		if (index >= rar_entries) {
   608			ERROR_REPORT2(NGBE_ERROR_ARGUMENT,
   609				     "RAR index %d is out of range.\n", index);
   610			return NGBE_ERR_INVALID_ARGUMENT;
   611		}
   612	
   613		/* select the MAC address */
   614		wr32(hw, NGBE_PSR_MAC_SWC_IDX, index);
   615	
   616		/* setup VMDq pool mapping */
   617		wr32(hw, NGBE_PSR_MAC_SWC_VM, pools & 0xFFFFFFFF);
   618	
   619		/* HW expects these in little endian so we reverse the byte
   620		 * order from network order (big endian) to little endian
   621		 *
   622		 * Some parts put the VMDq setting in the extra RAH bits,
   623		 * so save everything except the lower 16 bits that hold part
   624		 * of the address and the address valid bit.
   625		 */
   626		rar_low = ((u32)addr[5] |
   627			  ((u32)addr[4] << 8) |
   628			  ((u32)addr[3] << 16) |
   629			  ((u32)addr[2] << 24));
   630		rar_high = ((u32)addr[1] |
   631			   ((u32)addr[0] << 8));
   632		if (enable_addr != 0)
   633			rar_high |= NGBE_PSR_MAC_SWC_AD_H_AV;
   634	
   635		wr32(hw, NGBE_PSR_MAC_SWC_AD_L, rar_low);
   636		wr32m(hw, NGBE_PSR_MAC_SWC_AD_H,
   637			(NGBE_PSR_MAC_SWC_AD_H_AD(~0) |
   638			 NGBE_PSR_MAC_SWC_AD_H_ADTYPE(~0) |
   639			 NGBE_PSR_MAC_SWC_AD_H_AV),
   640			rar_high);
   641	
   642		return 0;
   643	}
   644	
   645	/**
   646	 *  ngbe_clear_rar - Remove Rx address register
   647	 *  @hw: pointer to hardware structure
   648	 *  @index: Receive address register to write
   649	 *
   650	 *  Clears an ethernet address from a receive address register.
   651	 **/
   652	s32 ngbe_clear_rar(struct ngbe_hw *hw, u32 index)
   653	{
   654		u32 rar_entries = hw->mac.num_rar_entries;
   655	
   656		/* Make sure we are using a valid rar index range */
   657		if (index >= rar_entries) {
   658			ERROR_REPORT2(NGBE_ERROR_ARGUMENT,
   659				     "RAR index %d is out of range.\n", index);
   660			return NGBE_ERR_INVALID_ARGUMENT;
   661		}
   662	
   663		/* Some parts put the VMDq setting in the extra RAH bits,
   664		 * so save everything except the lower 16 bits that hold part
   665		 * of the address and the address valid bit.
   666		 */
   667		wr32(hw, NGBE_PSR_MAC_SWC_IDX, index);
   668	
   669		wr32(hw, NGBE_PSR_MAC_SWC_VM, 0);
   670		wr32(hw, NGBE_PSR_MAC_SWC_AD_L, 0);
   671		wr32m(hw, NGBE_PSR_MAC_SWC_AD_H,
   672			(NGBE_PSR_MAC_SWC_AD_H_AD(~0) |
   673			 NGBE_PSR_MAC_SWC_AD_H_ADTYPE(~0) |
   674			 NGBE_PSR_MAC_SWC_AD_H_AV),
   675			0);
   676	
   677		return 0;
   678	}
   679	
   680	/**
   681	 *  ngbe_init_rx_addrs - Initializes receive address filters.
   682	 *  @hw: pointer to hardware structure
   683	 *
   684	 *  Places the MAC address in receive address register 0 and clears the rest
   685	 *  of the receive address registers. Clears the multicast table. Assumes
   686	 *  the receiver is in reset when the routine is called.
   687	 **/
   688	s32 ngbe_init_rx_addrs(struct ngbe_hw *hw)
   689	{
   690		u32 i;
   691		u32 rar_entries = hw->mac.num_rar_entries;
   692		u32 psrctl;
   693	
   694		/* If the current mac address is valid, assume it is a software override
   695		 * to the permanent address.
   696		 * Otherwise, use the permanent address from the eeprom.
   697		 */
   698		if (ngbe_validate_mac_addr(hw->mac.addr) ==
   699			NGBE_ERR_INVALID_MAC_ADDR) {
   700			/* Get the MAC address from the RAR0 for later reference */
   701			TCALL(hw, mac.ops.get_mac_addr, hw->mac.addr);
   702	
   703			DEBUGOUT3(" Keeping Current RAR0 Addr =%.2X %.2X %.2X %.2X %.2X %.2X\n",
   704				hw->mac.addr[0], hw->mac.addr[1],
   705				hw->mac.addr[2], hw->mac.addr[3],
   706				hw->mac.addr[4], hw->mac.addr[5]);
   707		} else {
   708			/* Setup the receive address. */
   709			DEBUGOUT("Overriding MAC Address in RAR[0]\n");
   710			DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X %.2X %.2X %.2X\n",
   711				hw->mac.addr[0], hw->mac.addr[1],
   712				hw->mac.addr[2], hw->mac.addr[3],
   713				hw->mac.addr[4], hw->mac.addr[5]);
   714	
   715			TCALL(hw, mac.ops.set_rar, 0, hw->mac.addr, 0,
   716				NGBE_PSR_MAC_SWC_AD_H_AV);
   717		}
   718		hw->addr_ctrl.overflow_promisc = 0;
   719	
   720		hw->addr_ctrl.rar_used_count = 1;
   721	
   722		/* Zero out the other receive addresses. */
   723		DEBUGOUT1("Clearing RAR[1-%d]\n", rar_entries - 1);
   724		for (i = 1; i < rar_entries; i++) {
   725			wr32(hw, NGBE_PSR_MAC_SWC_IDX, i);
   726			wr32(hw, NGBE_PSR_MAC_SWC_AD_L, 0);
   727			wr32(hw, NGBE_PSR_MAC_SWC_AD_H, 0);
   728		}
   729	
   730		/* Clear the MTA */
   731		hw->addr_ctrl.mta_in_use = 0;
   732		psrctl = rd32(hw, NGBE_PSR_CTL);
   733		psrctl &= ~(NGBE_PSR_CTL_MO | NGBE_PSR_CTL_MFE);
   734		psrctl |= hw->mac.mc_filter_type << NGBE_PSR_CTL_MO_SHIFT;
   735		wr32(hw, NGBE_PSR_CTL, psrctl);
   736		DEBUGOUT(" Clearing MTA\n");
   737		for (i = 0; i < hw->mac.mcft_size; i++)
   738			wr32(hw, NGBE_PSR_MC_TBL(i), 0);
   739	
   740		TCALL(hw, mac.ops.init_uta_tables);
   741	
   742		return 0;
   743	}
   744	
   745	/**
   746	 *  ngbe_add_uc_addr - Adds a secondary unicast address.
   747	 *  @hw: pointer to hardware structure
   748	 *  @addr: new address
   749	 *
   750	 *  Adds it to unused receive address register or goes into promiscuous mode.
   751	 **/
 > 752	void ngbe_add_uc_addr(struct ngbe_hw *hw, u8 *addr, u32 vmdq)
   753	{
   754		u32 rar_entries = hw->mac.num_rar_entries;
   755		u32 rar;
   756	
   757		DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n",
   758			  addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
   759	
   760		/* Place this address in the RAR if there is room,
   761		 * else put the controller into promiscuous mode
   762		 */
   763		if (hw->addr_ctrl.rar_used_count < rar_entries) {
   764			rar = hw->addr_ctrl.rar_used_count;
   765			TCALL(hw, mac.ops.set_rar, rar, addr, vmdq,
   766				NGBE_PSR_MAC_SWC_AD_H_AV);
   767			DEBUGOUT1("Added a secondary address to RAR[%d]\n", rar);
   768			hw->addr_ctrl.rar_used_count++;
   769		} else {
   770			hw->addr_ctrl.overflow_promisc++;
   771		}
   772	}
   773	
   774	/**
   775	 *  ngbe_update_uc_addr_list - Updates MAC list of secondary addresses
   776	 *  @hw: pointer to hardware structure
   777	 *  @addr_list: the list of new addresses
   778	 *  @addr_count: number of addresses
   779	 *  @next: iterator function to walk the address list
   780	 *
   781	 *  The given list replaces any existing list.  Clears the secondary addrs from
   782	 *  receive address registers.  Uses unused receive address registers for the
   783	 *  first secondary addresses, and falls back to promiscuous mode as needed.
   784	 *
   785	 *  Drivers using secondary unicast addresses must set user_set_promisc when
   786	 *  manually putting the device into promiscuous mode.
   787	 **/
   788	s32 ngbe_update_uc_addr_list(struct ngbe_hw *hw, u8 *addr_list,
   789					      u32 addr_count, ngbe_mc_addr_itr next)
   790	{
   791		u8 *addr;
   792		u32 i;
   793		u32 old_promisc_setting = hw->addr_ctrl.overflow_promisc;
   794		u32 uc_addr_in_use;
   795		u32 vmdq;
   796	
   797		/* Clear accounting of old secondary address list,
   798		 * don't count RAR[0]
   799		 */
   800		uc_addr_in_use = hw->addr_ctrl.rar_used_count - 1;
   801		hw->addr_ctrl.rar_used_count -= uc_addr_in_use;
   802		hw->addr_ctrl.overflow_promisc = 0;
   803	
   804		/* Zero out the other receive addresses */
   805		DEBUGOUT1("Clearing RAR[1-%d]\n", uc_addr_in_use + 1);
   806		for (i = 0; i < uc_addr_in_use; i++) {
   807			wr32(hw, NGBE_PSR_MAC_SWC_IDX, 1 + i);
   808			wr32(hw, NGBE_PSR_MAC_SWC_AD_L, 0);
   809			wr32(hw, NGBE_PSR_MAC_SWC_AD_H, 0);
   810		}
   811	
   812		/* Add the new addresses */
   813		for (i = 0; i < addr_count; i++) {
   814			DEBUGOUT(" Adding the secondary addresses:\n");
   815			addr = next(hw, &addr_list, &vmdq);
   816			ngbe_add_uc_addr(hw, addr, vmdq);
   817		}
   818	
   819		if (hw->addr_ctrl.overflow_promisc) {
   820			/* enable promisc if not already in overflow or set by user */
   821			if (!old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
   822				DEBUGOUT(" Entering address overflow promisc mode\n");
   823				wr32m(hw, NGBE_PSR_CTL,
   824					NGBE_PSR_CTL_UPE, NGBE_PSR_CTL_UPE);
   825			}
   826		} else {
   827			/* only disable if set by overflow, not by user */
   828			if (old_promisc_setting && !hw->addr_ctrl.user_set_promisc) {
   829				DEBUGOUT(" Leaving address overflow promisc mode\n");
   830				wr32m(hw, NGBE_PSR_CTL,
   831					NGBE_PSR_CTL_UPE, 0);
   832			}
   833		}
   834	
   835		return 0;
   836	}
   837	
   838	/**
   839	 *  ngbe_mta_vector - Determines bit-vector in multicast table to set
   840	 *  @hw: pointer to hardware structure
   841	 *  @mc_addr: the multicast address
   842	 *
   843	 *  Extracts the 12 bits, from a multicast address, to determine which
   844	 *  bit-vector to set in the multicast table. The hardware uses 12 bits, from
   845	 *  incoming rx multicast addresses, to determine the bit-vector to check in
   846	 *  the MTA. Which of the 4 combination, of 12-bits, the hardware uses is set
   847	 *  by the MO field of the MCSTCTRL. The MO field is set during initialization
   848	 *  to mc_filter_type.
   849	 **/
   850	static s32 ngbe_mta_vector(struct ngbe_hw *hw, u8 *mc_addr)
   851	{
   852		u32 vector = 0;
   853	
   854		switch (hw->mac.mc_filter_type) {
   855		case 0:   /* use bits [47:36] of the address */
   856			vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4));
   857			break;
   858		case 1:   /* use bits [46:35] of the address */
   859			vector = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5));
   860			break;
   861		case 2:   /* use bits [45:34] of the address */
   862			vector = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6));
   863			break;
   864		case 3:   /* use bits [43:32] of the address */
   865			vector = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8));
   866			break;
   867		default:  /* Invalid mc_filter_type */
   868			DEBUGOUT("MC filter type param set incorrectly\n");
   869			ASSERT(0);
   870			break;
   871		}
   872	
   873		/* vector can only be 12-bits or boundary will be exceeded */
   874		vector &= 0xFFF;
   875		return vector;
   876	}
   877	
   878	/**
   879	 *  ngbe_set_mta - Set bit-vector in multicast table
   880	 *  @hw: pointer to hardware structure
   881	 *  @hash_value: Multicast address hash value
   882	 *
   883	 *  Sets the bit-vector in the multicast table.
   884	 **/
 > 885	void ngbe_set_mta(struct ngbe_hw *hw, u8 *mc_addr)
   886	{
   887		u32 vector;
   888		u32 vector_bit;
   889		u32 vector_reg;
   890	
   891		hw->addr_ctrl.mta_in_use++;
   892	
   893		vector = ngbe_mta_vector(hw, mc_addr);
   894		DEBUGOUT1(" bit-vector = 0x%03X\n", vector);
   895	
   896		/* The MTA is a register array of 128 32-bit registers. It is treated
   897		 * like an array of 4096 bits.  We want to set bit
   898		 * BitArray[vector_value]. So we figure out what register the bit is
   899		 * in, read it, OR in the new bit, then write back the new value.  The
   900		 * register is determined by the upper 7 bits of the vector value and
   901		 * the bit within that register are determined by the lower 5 bits of
   902		 * the value.
   903		 */
   904		vector_reg = (vector >> 5) & 0x7F;
   905		vector_bit = vector & 0x1F;
   906		hw->mac.mta_shadow[vector_reg] |= (1 << vector_bit);
   907	}
   908	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2658/2658] drivers/scsi/linkdata/ps3stor/./linux/ps3_base.c:545:5: error: no previous prototype for function 'ps3_pci_init'
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        Hi liujie_answer,
FYI, the error/warning still remains.
tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   8551213150db5f8eebd27273dae93f6fe258d63a
commit: 97a2bb6ece556f3882263ee8df2b77f10c511311 [2658/2658] SCSI: Linkdata: Supports Linkdata HBA/RAID Controllers
config: loongarch-allmodconfig (https://download.01.org/0day-ci/archive/20250806/202508062054.9vtkPxs1-lkp@…)
compiler: clang version 19.1.7 (https://github.com/llvm/llvm-project cd708029e0b2869e80abe31ddb175f7c35361f90)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508062054.9vtkPxs1-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508062054.9vtkPxs1-lkp@intel.com/
All errors (new ones prefixed by >>):
   In file included from drivers/scsi/linkdata/ps3stor/ps3_ioc_manager.c:5:
   In file included from include/linux/pci.h:38:
   In file included from include/linux/device.h:32:
   In file included from include/linux/device/driver.h:21:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2253:
   include/linux/vmstat.h:508:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: error: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Werror,-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/scsi/linkdata/ps3stor/ps3_ioc_manager.c:307:5: error: no previous prototype for function 'ps3_hard_reset_to_ready' [-Werror,-Wmissing-prototypes]
     307 | int ps3_hard_reset_to_ready(struct ps3_instance *instance)
         |     ^
   drivers/scsi/linkdata/ps3stor/ps3_ioc_manager.c:307:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     307 | int ps3_hard_reset_to_ready(struct ps3_instance *instance)
         | ^
         | static 
   6 errors generated.
--
   In file included from drivers/scsi/linkdata/ps3stor/ps3_scsi_cmd_err.c:5:
   In file included from include/linux/pci.h:38:
   In file included from include/linux/device.h:32:
   In file included from include/linux/device/driver.h:21:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2253:
   include/linux/vmstat.h:508:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: error: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Werror,-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/scsi/linkdata/ps3stor/ps3_scsi_cmd_err.c:876:6: error: no previous prototype for function 'ps3_set_task_manager_busy' [-Werror,-Wmissing-prototypes]
     876 | void ps3_set_task_manager_busy(struct ps3_instance *instance,
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_scsi_cmd_err.c:876:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     876 | void ps3_set_task_manager_busy(struct ps3_instance *instance,
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_scsi_cmd_err.c:1110:5: error: no previous prototype for function 'ps3_wait_for_outstanding_complete' [-Werror,-Wmissing-prototypes]
    1110 | int ps3_wait_for_outstanding_complete(struct ps3_instance *instance)
         |     ^
   drivers/scsi/linkdata/ps3stor/ps3_scsi_cmd_err.c:1110:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    1110 | int ps3_wait_for_outstanding_complete(struct ps3_instance *instance)
         | ^
         | static 
   7 errors generated.
--
   In file included from drivers/scsi/linkdata/ps3stor/ps3_cmd_complete.c:14:
   In file included from drivers/scsi/linkdata/ps3stor/ps3_cmd_complete.h:6:
   In file included from drivers/scsi/linkdata/ps3stor/ps3_irq.h:8:
   In file included from include/scsi/scsi_host.h:5:
   In file included from include/linux/device.h:32:
   In file included from include/linux/device/driver.h:21:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2253:
   include/linux/vmstat.h:508:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: error: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Werror,-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/scsi/linkdata/ps3stor/ps3_cmd_complete.c:131:6: error: no previous prototype for function 'ps3_trigger_irq_poll' [-Werror,-Wmissing-prototypes]
     131 | void ps3_trigger_irq_poll(struct ps3_irq *irq)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_cmd_complete.c:131:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     131 | void ps3_trigger_irq_poll(struct ps3_irq *irq)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_cmd_complete.c:243:5: error: no previous prototype for function 'ps3_resp_status_convert' [-Werror,-Wmissing-prototypes]
     243 | int ps3_resp_status_convert(unsigned int resp_status)
         |     ^
   drivers/scsi/linkdata/ps3stor/ps3_cmd_complete.c:243:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     243 | int ps3_resp_status_convert(unsigned int resp_status)
         | ^
         | static 
   7 errors generated.
--
   In file included from drivers/scsi/linkdata/ps3stor/ps3_qos.c:7:
   In file included from include/scsi/scsi_host.h:5:
   In file included from include/linux/device.h:32:
   In file included from include/linux/device/driver.h:21:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2253:
   include/linux/vmstat.h:508:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: error: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Werror,-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:211:1: error: no previous prototype for function 'ps3_qos_cmd_waitq_get' [-Werror,-Wmissing-prototypes]
     211 | ps3_qos_cmd_waitq_get(struct ps3_qos_tg_context *qos_tg_ctx,
         | ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:210:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     210 | struct qos_wait_queue *
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:335:15: error: no previous prototype for function 'ps3_qos_vd_cmdword_get' [-Werror,-Wmissing-prototypes]
     335 | unsigned char ps3_qos_vd_cmdword_get(struct ps3_cmd *cmd)
         |               ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:335:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     335 | unsigned char ps3_qos_vd_cmdword_get(struct ps3_cmd *cmd)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:351:15: error: no previous prototype for function 'ps3_qos_exclusive_cmdword_get' [-Werror,-Wmissing-prototypes]
     351 | unsigned char ps3_qos_exclusive_cmdword_get(struct ps3_cmd *cmd)
         |               ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:351:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     351 | unsigned char ps3_qos_exclusive_cmdword_get(struct ps3_cmd *cmd)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:363:15: error: no previous prototype for function 'ps3_qos_tg_decision' [-Werror,-Wmissing-prototypes]
     363 | unsigned char ps3_qos_tg_decision(struct ps3_cmd *cmd)
         |               ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:363:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     363 | unsigned char ps3_qos_tg_decision(struct ps3_cmd *cmd)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:749:15: error: no previous prototype for function 'ps3_qos_all_pd_rc_get' [-Werror,-Wmissing-prototypes]
     749 | unsigned char ps3_qos_all_pd_rc_get(struct ps3_cmd *cmd)
         |               ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:749:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     749 | unsigned char ps3_qos_all_pd_rc_get(struct ps3_cmd *cmd)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:876:6: error: no previous prototype for function 'ps3_pd_quota_waitq_clear_all' [-Werror,-Wmissing-prototypes]
     876 | void ps3_pd_quota_waitq_clear_all(struct ps3_qos_pd_mgr *qos_pd_mgr,
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:876:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     876 | void ps3_pd_quota_waitq_clear_all(struct ps3_qos_pd_mgr *qos_pd_mgr,
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:892:6: error: no previous prototype for function 'ps3_pd_quota_waitq_clean' [-Werror,-Wmissing-prototypes]
     892 | void ps3_pd_quota_waitq_clean(struct ps3_qos_pd_mgr *qos_pd_mgr,
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:892:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     892 | void ps3_pd_quota_waitq_clean(struct ps3_qos_pd_mgr *qos_pd_mgr,
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:1058:6: error: no previous prototype for function 'ps3_qos_pd_waitq_ratio_update' [-Werror,-Wmissing-prototypes]
    1058 | void ps3_qos_pd_waitq_ratio_update(struct ps3_qos_pd_mgr *qos_pd_mgr)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:1058:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    1058 | void ps3_qos_pd_waitq_ratio_update(struct ps3_qos_pd_mgr *qos_pd_mgr)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:2019:15: error: no previous prototype for function 'ps3_hba_qos_decision' [-Werror,-Wmissing-prototypes]
    2019 | unsigned char ps3_hba_qos_decision(struct ps3_cmd *cmd)
         |               ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:2019:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    2019 | unsigned char ps3_hba_qos_decision(struct ps3_cmd *cmd)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:2040:6: error: no previous prototype for function 'ps3_hba_qos_waitq_notify' [-Werror,-Wmissing-prototypes]
    2040 | void ps3_hba_qos_waitq_notify(struct ps3_instance *instance)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:2040:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    2040 | void ps3_hba_qos_waitq_notify(struct ps3_instance *instance)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:2100:6: error: no previous prototype for function 'ps3_cmd_waitq_abort' [-Werror,-Wmissing-prototypes]
    2100 | bool ps3_cmd_waitq_abort(struct ps3_cmd *aborted_cmd)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:2100:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    2100 | bool ps3_cmd_waitq_abort(struct ps3_cmd *aborted_cmd)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:2463:6: error: no previous prototype for function 'ps3_hba_qos_waitq_clear_all' [-Werror,-Wmissing-prototypes]
    2463 | void ps3_hba_qos_waitq_clear_all(struct ps3_instance *instance, int resp_status)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:2463:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    2463 | void ps3_hba_qos_waitq_clear_all(struct ps3_instance *instance, int resp_status)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:2827:6: error: no previous prototype for function 'ps3_hba_qos_vd_init' [-Werror,-Wmissing-prototypes]
    2827 | void ps3_hba_qos_vd_init(struct ps3_instance *instance,
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:2827:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    2827 | void ps3_hba_qos_vd_init(struct ps3_instance *instance,
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_qos.c:2936:6: error: no previous prototype for function 'ps3_hba_qos_vd_reset' [-Werror,-Wmissing-prototypes]
    2936 | void ps3_hba_qos_vd_reset(struct ps3_instance *instance, unsigned short disk_id)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_qos.c:2936:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
    2936 | void ps3_hba_qos_vd_reset(struct ps3_instance *instance, unsigned short disk_id)
         | ^
         | static 
   fatal error: too many errors emitted, stopping now [-ferror-limit=]
   20 errors generated.
--
   In file included from drivers/scsi/linkdata/ps3stor/ps3_cmd_statistics.c:6:
   In file included from drivers/scsi/linkdata/ps3stor/ps3_cmd_statistics.h:7:
   In file included from include/scsi/scsi_cmnd.h:5:
   In file included from include/linux/dma-mapping.h:8:
   In file included from include/linux/device.h:32:
   In file included from include/linux/device/driver.h:21:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2253:
   include/linux/vmstat.h:508:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: error: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Werror,-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:536:43: error: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Werror,-Wenum-enum-conversion]
     536 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     537 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/scsi/linkdata/ps3stor/ps3_cmd_statistics.c:85:6: error: no previous prototype for function 'ps3_cmd_stat_content_clear' [-Werror,-Wmissing-prototypes]
      85 | void ps3_cmd_stat_content_clear(struct ps3_instance *instance)
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_cmd_statistics.c:85:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      85 | void ps3_cmd_stat_content_clear(struct ps3_instance *instance)
         | ^
         | static 
>> drivers/scsi/linkdata/ps3stor/ps3_cmd_statistics.c:403:6: error: no previous prototype for function 'ps3_io_recv_ok_stat_inc' [-Werror,-Wmissing-prototypes]
     403 | void ps3_io_recv_ok_stat_inc(struct ps3_instance *ins,
         |      ^
   drivers/scsi/linkdata/ps3stor/ps3_cmd_statistics.c:403:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     403 | void ps3_io_recv_ok_stat_inc(struct ps3_instance *ins,
         | ^
         | static 
   7 errors generated.
..
vim +/ps3_pci_init +545 drivers/scsi/linkdata/ps3stor/./linux/ps3_base.c
   544	
 > 545	int ps3_pci_init(struct pci_dev *pdev, struct ps3_instance *instance)
   546	{
   547		resource_size_t base_addr = 0;
   548		int ret = PS3_SUCCESS;
   549	
   550		ret = pci_enable_device_mem(pdev);
   551		if (ret != PS3_SUCCESS) {
   552			LOG_ERROR("hno:%u pci id[%u] pci enable failed\n",
   553				  PS3_HOST(instance), pdev->dev.id);
   554			goto l_pci_enable_device_mem_failed;
   555		}
   556	
   557		pci_set_master(pdev);
   558	
   559		instance->reg_bar = PS3_REGISTER_BAR_INDEX;
   560		ret = (pci_resource_flags(pdev, instance->reg_bar) & IORESOURCE_MEM);
   561		if (!ret) {
   562			LOG_ERROR("hno:%u Bar %lu isnot IORESOURCE_MEM\n",
   563				  PS3_HOST(instance), instance->reg_bar);
   564			goto l_bar_check_failed;
   565		}
   566		ret = pci_request_selected_regions(pdev, 1 << instance->reg_bar,
   567						   "PS3 pci regions");
   568		if (ret != PS3_SUCCESS) {
   569			LOG_ERROR("hno:%u IO memory region busy\n", PS3_HOST(instance));
   570			goto l_pci_request_selected_regions_failed;
   571		}
   572	#if defined(PS3_SUPPORT_PCIE_REPORT)
   573		pci_enable_pcie_error_reporting(pdev);
   574	#endif
   575		if (instance->ioc_adpter->reg_set) {
   576			instance->reg_set =
   577				(struct Ps3Fifo __iomem *)instance->ioc_adpter->reg_set(
   578					pdev, instance->reg_bar);
   579		} else {
   580			instance->reg_set = (struct Ps3Fifo __iomem *)ioremap(
   581				pci_resource_start(pdev, instance->reg_bar),
   582				PS3_REGISTER_SET_SIZE);
   583		}
   584		if (instance->reg_set == NULL) {
   585			LOG_ERROR("hno:%u ioremap failed\n", PS3_HOST(instance));
   586			goto l_ioremap_failed;
   587		} else {
   588			pci_set_drvdata(pdev, instance);
   589		}
   590	
   591		ps3_atomic_set(&instance->watchdog_reg_read_fail_count, 0);
   592		LOG_INFO(
   593			"reg_bar_idx = %lu, bar_base_paddr = 0x%llx, reg_set_vaddr = 0x%p\n",
   594			instance->reg_bar, (unsigned long long)base_addr, instance->reg_set);
   595	
   596		return PS3_SUCCESS;
   597	l_ioremap_failed:
   598		pci_release_selected_regions(instance->pdev, 1 << instance->reg_bar);
   599	#if defined(PS3_SUPPORT_PCIE_REPORT)
   600		pci_disable_pcie_error_reporting(pdev);
   601	#endif
   602	l_pci_request_selected_regions_failed:
   603		pci_disable_device(instance->pdev);
   604	l_bar_check_failed:
   605	l_pci_enable_device_mem_failed:
   606		return -PS3_FAILED;
   607	}
   608	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2658/2658] drivers/char/ipmi/ipmi_si_ls2k500.c:92:5: warning: no previous prototype for function 'ipmi_si_sim_setup'
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   8551213150db5f8eebd27273dae93f6fe258d63a
commit: 4fbeaa84ef36adce930088074f8c088e5dd780c0 [2658/2658] ipmi: add ls2k500 bmc ipmi support.
config: loongarch-randconfig-2005-20250806 (https://download.01.org/0day-ci/archive/20250806/202508061418.ItIqDS25-lkp@…)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project faa4c4c2dc804c31845d8f036345fac00e016f2d)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508061418.ItIqDS25-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508061418.ItIqDS25-lkp@intel.com/
All warnings (new ones prefixed by >>):
   In file included from drivers/char/ipmi/ipmi_si_ls2k500.c:10:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2174:
   include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/char/ipmi/ipmi_si_ls2k500.c:92:5: warning: no previous prototype for function 'ipmi_si_sim_setup' [-Wmissing-prototypes]
      92 | int ipmi_si_sim_setup(struct si_sm_io *io)
         |     ^
   drivers/char/ipmi/ipmi_si_ls2k500.c:92:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
      92 | int ipmi_si_sim_setup(struct si_sm_io *io)
         | ^
         | static 
   5 warnings generated.
vim +/ipmi_si_sim_setup +92 drivers/char/ipmi/ipmi_si_ls2k500.c
    91	
  > 92	int ipmi_si_sim_setup(struct si_sm_io *io)
    93	{
    94		io->inputb = intf_sim_inb;
    95		io->outputb = intf_sim_outb;
    96		io->io_cleanup = ipmi_ls2k500_cleanup;
    97		return 0;
    98	}
    99	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:openEuler-1.0-LTS 1743/1743] drivers/net/phy/ax88796b.o: warning: objtool: missing symbol for section .init.text
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git openEuler-1.0-LTS
head:   58693b1f5fa8f02b34ab9a02096472232731e864
commit: 56e625aa545a24e8d3fa44b5fbcdedd88e443dcc [1743/1743] net: phy: rename Asix Electronics PHY driver
config: x86_64-buildonly-randconfig-2001-20250802 (https://download.01.org/0day-ci/archive/20250806/202508061308.PqhzSJTN-lkp@…)
compiler: clang version 20.1.8 (https://github.com/llvm/llvm-project 87f0227cb60147a26a1eeb4fb06e3b505e9c7261)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508061308.PqhzSJTN-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508061308.PqhzSJTN-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/net/phy/ax88796b.o: warning: objtool: missing symbol for section .init.text
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-5.10 3106/3106] drivers/net/ethernet/linkdata/sxe/sxepf/sxe_debugfs.c:432:6: error: no previous prototype for 'sxe_debugfs_entries_init'
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        Hi liujie_answer,
FYI, the error/warning still remains.
tree:   https://gitee.com/openeuler/kernel.git OLK-5.10
head:   a8c621aa031669a6835da1431d9765e3bbbc3621
commit: 8cee206b5558245197158bd20895f95cc28d8468 [3106/3106] Ethernet: Linkdata: Supports Linkdata ethernet Controllers
config: x86_64-defconfig (https://download.01.org/0day-ci/archive/20250806/202508061906.p1Ly2hcJ-lkp@…)
compiler: gcc-11 (Debian 11.3.0-12) 11.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508061906.p1Ly2hcJ-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508061906.p1Ly2hcJ-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_xdp.c:403:6: error: no previous prototype for 'sxe_txrx_ring_enable' [-Werror=missing-prototypes]
     403 | void sxe_txrx_ring_enable(struct sxe_adapter *adapter, u32 ring_idx)
         |      ^~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_debugfs.c:432:6: error: no previous prototype for 'sxe_debugfs_entries_init' [-Werror=missing-prototypes]
     432 | void sxe_debugfs_entries_init(struct sxe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_debugfs.c:459:6: error: no previous prototype for 'sxe_debugfs_entries_exit' [-Werror=missing-prototypes]
     459 | void sxe_debugfs_entries_exit(struct sxe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_debugfs.c:465:6: error: no previous prototype for 'sxe_debugfs_init' [-Werror=missing-prototypes]
     465 | void sxe_debugfs_init(void)
         |      ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_debugfs.c:470:6: error: no previous prototype for 'sxe_debugfs_exit' [-Werror=missing-prototypes]
     470 | void sxe_debugfs_exit(void)
         |      ^~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_ethtool.c:2022:5: error: no previous prototype for 'sxe_reg_test' [-Werror=missing-prototypes]
    2022 | int sxe_reg_test(struct sxe_adapter *adapter)
         |     ^~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_ethtool.c:2644:5: error: no previous prototype for 'sxe_phys_id_set' [-Werror=missing-prototypes]
    2644 | int sxe_phys_id_set(struct net_device *netdev, enum ethtool_phys_id_state state)
         |     ^~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_ethtool.c: In function 'sxe_get_module_eeprom':
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_ethtool.c:2736:47: error: suggest braces around empty body in an 'if' statement [-Werror=empty-body]
    2736 |                 LOG_ERROR("read sfp failed\n");
         |                                               ^
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:230:6: error: no previous prototype for 'sxe_hw_no_snoop_disable' [-Werror=missing-prototypes]
     230 | void sxe_hw_no_snoop_disable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:262:6: error: no previous prototype for 'sxe_hw_uc_addr_pool_del' [-Werror=missing-prototypes]
     262 | void sxe_hw_uc_addr_pool_del(struct sxe_hw *hw, u32 rar_idx, u32 pool_idx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:283:5: error: no previous prototype for 'sxe_hw_uc_addr_pool_enable' [-Werror=missing-prototypes]
     283 | s32 sxe_hw_uc_addr_pool_enable(struct sxe_hw *hw, u8 rar_idx, u8 pool_idx)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:337:5: error: no previous prototype for 'sxe_hw_nic_reset' [-Werror=missing-prototypes]
     337 | s32 sxe_hw_nic_reset(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:367:6: error: no previous prototype for 'sxe_hw_pf_rst_done_set' [-Werror=missing-prototypes]
     367 | void sxe_hw_pf_rst_done_set(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:735:5: error: no previous prototype for 'sxe_hw_pending_irq_read_clear' [-Werror=missing-prototypes]
     735 | u32 sxe_hw_pending_irq_read_clear(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:740:6: error: no previous prototype for 'sxe_hw_pending_irq_write_clear' [-Werror=missing-prototypes]
     740 | void sxe_hw_pending_irq_write_clear(struct sxe_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:745:5: error: no previous prototype for 'sxe_hw_irq_cause_get' [-Werror=missing-prototypes]
     745 | u32 sxe_hw_irq_cause_get(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:765:6: error: no previous prototype for 'sxe_hw_ring_irq_auto_disable' [-Werror=missing-prototypes]
     765 | void sxe_hw_ring_irq_auto_disable(struct sxe_hw *hw, bool is_msix)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:775:6: error: no previous prototype for 'sxe_hw_irq_general_reg_set' [-Werror=missing-prototypes]
     775 | void sxe_hw_irq_general_reg_set(struct sxe_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:780:5: error: no previous prototype for 'sxe_hw_irq_general_reg_get' [-Werror=missing-prototypes]
     780 | u32 sxe_hw_irq_general_reg_get(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:790:6: error: no previous prototype for 'sxe_hw_event_irq_map' [-Werror=missing-prototypes]
     790 | void sxe_hw_event_irq_map(struct sxe_hw *hw, u8 offset, u16 irq_idx)
         |      ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:806:6: error: no previous prototype for 'sxe_hw_ring_irq_map' [-Werror=missing-prototypes]
     806 | void sxe_hw_ring_irq_map(struct sxe_hw *hw, bool is_tx, u16 reg_idx,
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:823:6: error: no previous prototype for 'sxe_hw_ring_irq_interval_set' [-Werror=missing-prototypes]
     823 | void sxe_hw_ring_irq_interval_set(struct sxe_hw *hw, u16 irq_idx, u32 interval)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:838:6: error: no previous prototype for 'sxe_hw_event_irq_auto_clear_set' [-Werror=missing-prototypes]
     838 | void sxe_hw_event_irq_auto_clear_set(struct sxe_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:843:6: error: no previous prototype for 'sxe_hw_specific_irq_disable' [-Werror=missing-prototypes]
     843 | void sxe_hw_specific_irq_disable(struct sxe_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:848:6: error: no previous prototype for 'sxe_hw_specific_irq_enable' [-Werror=missing-prototypes]
     848 | void sxe_hw_specific_irq_enable(struct sxe_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:876:6: error: no previous prototype for 'sxe_hw_all_irq_disable' [-Werror=missing-prototypes]
     876 | void sxe_hw_all_irq_disable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:994:5: error: no previous prototype for 'sxe_hw_link_speed_get' [-Werror=missing-prototypes]
     994 | u32 sxe_hw_link_speed_get(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1014:6: error: no previous prototype for 'sxe_hw_link_speed_set' [-Werror=missing-prototypes]
    1014 | void sxe_hw_link_speed_set(struct sxe_hw *hw, u32 speed)
         |      ^~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1033:6: error: no previous prototype for 'sxe_hw_is_link_state_up' [-Werror=missing-prototypes]
    1033 | bool sxe_hw_is_link_state_up(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1055:6: error: no previous prototype for 'sxe_hw_mac_pad_enable' [-Werror=missing-prototypes]
    1055 | void sxe_hw_mac_pad_enable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1064:5: error: no previous prototype for 'sxe_hw_fc_enable' [-Werror=missing-prototypes]
    1064 | s32 sxe_hw_fc_enable(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1135:6: error: no previous prototype for 'sxe_fc_autoneg_localcap_set' [-Werror=missing-prototypes]
    1135 | void sxe_fc_autoneg_localcap_set(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1164:5: error: no previous prototype for 'sxe_hw_pfc_enable' [-Werror=missing-prototypes]
    1164 | s32 sxe_hw_pfc_enable(struct sxe_hw *hw, u8 tc_idx)
         |     ^~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1256:6: error: no previous prototype for 'sxe_hw_crc_configure' [-Werror=missing-prototypes]
    1256 | void sxe_hw_crc_configure(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1264:6: error: no previous prototype for 'sxe_hw_loopback_switch' [-Werror=missing-prototypes]
    1264 | void sxe_hw_loopback_switch(struct sxe_hw *hw, bool is_enable)
         |      ^~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1276:6: error: no previous prototype for 'sxe_hw_mac_txrx_enable' [-Werror=missing-prototypes]
    1276 | void sxe_hw_mac_txrx_enable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1285:6: error: no previous prototype for 'sxe_hw_mac_max_frame_set' [-Werror=missing-prototypes]
    1285 | void sxe_hw_mac_max_frame_set(struct sxe_hw *hw, u32 max_frame)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1298:5: error: no previous prototype for 'sxe_hw_mac_max_frame_get' [-Werror=missing-prototypes]
    1298 | u32 sxe_hw_mac_max_frame_get(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1330:6: error: no previous prototype for 'sxe_hw_fc_tc_high_water_mark_set' [-Werror=missing-prototypes]
    1330 | void sxe_hw_fc_tc_high_water_mark_set(struct sxe_hw *hw, u8 tc_idx, u32 mark)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1335:6: error: no previous prototype for 'sxe_hw_fc_tc_low_water_mark_set' [-Werror=missing-prototypes]
    1335 | void sxe_hw_fc_tc_low_water_mark_set(struct sxe_hw *hw, u8 tc_idx, u32 mark)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1340:6: error: no previous prototype for 'sxe_hw_is_fc_autoneg_disabled' [-Werror=missing-prototypes]
    1340 | bool sxe_hw_is_fc_autoneg_disabled(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1345:6: error: no previous prototype for 'sxe_hw_fc_autoneg_disable_set' [-Werror=missing-prototypes]
    1345 | void sxe_hw_fc_autoneg_disable_set(struct sxe_hw *hw, bool is_disabled)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1360:6: error: no previous prototype for 'sxe_hw_fc_requested_mode_set' [-Werror=missing-prototypes]
    1360 | void sxe_hw_fc_requested_mode_set(struct sxe_hw *hw, enum sxe_fc_mode mode)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1388:5: error: no previous prototype for 'sxe_hw_rx_mode_get' [-Werror=missing-prototypes]
    1388 | u32 sxe_hw_rx_mode_get(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1393:5: error: no previous prototype for 'sxe_hw_pool_rx_mode_get' [-Werror=missing-prototypes]
    1393 | u32 sxe_hw_pool_rx_mode_get(struct sxe_hw *hw, u16 pool_idx)
         |     ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1398:6: error: no previous prototype for 'sxe_hw_rx_mode_set' [-Werror=missing-prototypes]
    1398 | void sxe_hw_rx_mode_set(struct sxe_hw *hw, u32 filter_ctrl)
         |      ^~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1403:6: error: no previous prototype for 'sxe_hw_pool_rx_mode_set' [-Werror=missing-prototypes]
    1403 | void sxe_hw_pool_rx_mode_set(struct sxe_hw *hw, u32 vmolr, u16 pool_idx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1408:6: error: no previous prototype for 'sxe_hw_rx_lro_enable' [-Werror=missing-prototypes]
    1408 | void sxe_hw_rx_lro_enable(struct sxe_hw *hw, bool is_enable)
         |      ^~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1420:6: error: no previous prototype for 'sxe_hw_rx_nfs_filter_disable' [-Werror=missing-prototypes]
    1420 | void sxe_hw_rx_nfs_filter_disable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1428:6: error: no previous prototype for 'sxe_hw_rx_udp_frag_checksum_disable' [-Werror=missing-prototypes]
    1428 | void sxe_hw_rx_udp_frag_checksum_disable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1437:6: error: no previous prototype for 'sxe_hw_fc_mac_addr_set' [-Werror=missing-prototypes]
    1437 | void sxe_hw_fc_mac_addr_set(struct sxe_hw *hw, u8 *mac_addr)
         |      ^~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1449:5: error: no previous prototype for 'sxe_hw_uc_addr_add' [-Werror=missing-prototypes]
    1449 | s32 sxe_hw_uc_addr_add(struct sxe_hw *hw, u32 rar_idx, u8 *addr, u32 pool_idx)
         |     ^~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1484:5: error: no previous prototype for 'sxe_hw_uc_addr_del' [-Werror=missing-prototypes]
    1484 | s32 sxe_hw_uc_addr_del(struct sxe_hw *hw, u32 index)
         |     ^~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1510:6: error: no previous prototype for 'sxe_hw_mta_hash_table_set' [-Werror=missing-prototypes]
    1510 | void sxe_hw_mta_hash_table_set(struct sxe_hw *hw, u8 index, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1515:6: error: no previous prototype for 'sxe_hw_mta_hash_table_update' [-Werror=missing-prototypes]
    1515 | void sxe_hw_mta_hash_table_update(struct sxe_hw *hw, u8 reg_idx, u8 bit_idx)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1525:5: error: no previous prototype for 'sxe_hw_mc_filter_get' [-Werror=missing-prototypes]
    1525 | u32 sxe_hw_mc_filter_get(struct sxe_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1530:6: error: no previous prototype for 'sxe_hw_mc_filter_enable' [-Werror=missing-prototypes]
    1530 | void sxe_hw_mc_filter_enable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1554:6: error: no previous prototype for 'sxe_hw_uc_addr_clear' [-Werror=missing-prototypes]
    1554 | void sxe_hw_uc_addr_clear(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1587:6: error: no previous prototype for 'sxe_hw_vt_ctrl_cfg' [-Werror=missing-prototypes]
    1587 | void sxe_hw_vt_ctrl_cfg(struct sxe_hw *hw, u8 default_pool)
         |      ^~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1601:6: error: no previous prototype for 'sxe_hw_vt_disable' [-Werror=missing-prototypes]
    1601 | void sxe_hw_vt_disable(struct sxe_hw *hw)
         |      ^~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_hw.c:1675:5: error: no previous prototype for 'sxe_hw_vlan_pool_filter_read' [-Werror=missing-prototypes]
    1675 | u32 sxe_hw_vlan_pool_filter_read(struct sxe_hw *hw, u16 reg_index)
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_irq.c:136:5: error: no previous prototype for 'sxe_msi_irq_init' [-Werror=missing-prototypes]
     136 | int sxe_msi_irq_init(struct sxe_adapter *adapter)
         |     ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_irq.c:182:6: error: no previous prototype for 'sxe_disable_dcb' [-Werror=missing-prototypes]
     182 | void sxe_disable_dcb(struct sxe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_irq.c:212:6: error: no previous prototype for 'sxe_disable_rss' [-Werror=missing-prototypes]
     212 | void sxe_disable_rss(struct sxe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_irq.c:729:6: error: no previous prototype for 'sxe_lsc_irq_handler' [-Werror=missing-prototypes]
     729 | void sxe_lsc_irq_handler(struct sxe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_irq.c:745:6: error: no previous prototype for 'sxe_mailbox_irq_handler' [-Werror=missing-prototypes]
     745 | void sxe_mailbox_irq_handler(struct sxe_adapter *adapter)
         |      ^~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_main.c:70:6: error: no previous prototype for 'sxe_allow_inval_mac' [-Werror=missing-prototypes]
      70 | bool sxe_allow_inval_mac(void)
         |      ^~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_phy.c:733:5: error: no previous prototype for 'sxe_multispeed_sfp_link_configure' [-Werror=missing-prototypes]
     733 | s32 sxe_multispeed_sfp_link_configure(struct sxe_adapter *adapter, u32 speed)
         |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_rx_proc.c:1431:6: error: no previous prototype for 'sxe_headers_cleanup' [-Werror=missing-prototypes]
    1431 | bool sxe_headers_cleanup(struct sxe_ring *rx_ring,
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_rx_proc.c:1569:6: error: no previous prototype for 'sxe_rx_buffer_page_offset_update' [-Werror=missing-prototypes]
    1569 | void sxe_rx_buffer_page_offset_update(struct sxe_ring *rx_ring,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_sriov.c: In function 'sxe_vf_uc_addr_del':
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_sriov.c:766:13: error: variable 'ret' set but not used [-Werror=unused-but-set-variable]
     766 |         s32 ret;
         |             ^~~
   drivers/net/ethernet/linkdata/sxe/sxepf/sxe_sriov.c: At top level:
>> drivers/net/ethernet/linkdata/sxe/sxepf/sxe_sriov.c:1552:6: error: no previous prototype for 'sxe_set_vf_link_enable' [-Werror=missing-prototypes]
    1552 | void sxe_set_vf_link_enable(struct sxe_adapter *adapter, s32 vf_idx, s32 state)
         |      ^~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
--
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:160:6: error: no previous prototype for 'sxevf_hw_stop' [-Werror=missing-prototypes]
     160 | void sxevf_hw_stop(struct sxevf_hw *hw)
         |      ^~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:187:6: error: no previous prototype for 'sxevf_msg_write' [-Werror=missing-prototypes]
     187 | void sxevf_msg_write(struct sxevf_hw *hw, u8 index, u32 msg)
         |      ^~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:196:5: error: no previous prototype for 'sxevf_msg_read' [-Werror=missing-prototypes]
     196 | u32 sxevf_msg_read(struct sxevf_hw *hw, u8 index)
         |     ^~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:206:5: error: no previous prototype for 'sxevf_mailbox_read' [-Werror=missing-prototypes]
     206 | u32 sxevf_mailbox_read(struct sxevf_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:211:6: error: no previous prototype for 'sxevf_mailbox_write' [-Werror=missing-prototypes]
     211 | void sxevf_mailbox_write(struct sxevf_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:216:6: error: no previous prototype for 'sxevf_pf_req_irq_trigger' [-Werror=missing-prototypes]
     216 | void sxevf_pf_req_irq_trigger(struct sxevf_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:221:6: error: no previous prototype for 'sxevf_pf_ack_irq_trigger' [-Werror=missing-prototypes]
     221 | void sxevf_pf_ack_irq_trigger(struct sxevf_hw *hw)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:226:6: error: no previous prototype for 'sxevf_event_irq_map' [-Werror=missing-prototypes]
     226 | void sxevf_event_irq_map(struct sxevf_hw *hw, u16 vector)
         |      ^~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:240:6: error: no previous prototype for 'sxevf_specific_irq_enable' [-Werror=missing-prototypes]
     240 | void sxevf_specific_irq_enable(struct sxevf_hw *hw, u32 value)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:245:6: error: no previous prototype for 'sxevf_irq_enable' [-Werror=missing-prototypes]
     245 | void sxevf_irq_enable(struct sxevf_hw *hw, u32 mask)
         |      ^~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:251:6: error: no previous prototype for 'sxevf_irq_disable' [-Werror=missing-prototypes]
     251 | void sxevf_irq_disable(struct sxevf_hw *hw)
         |      ^~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:259:6: error: no previous prototype for 'sxevf_hw_ring_irq_map' [-Werror=missing-prototypes]
     259 | void sxevf_hw_ring_irq_map(struct sxevf_hw *hw, bool is_tx, u16 hw_ring_idx,
         |      ^~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:276:6: error: no previous prototype for 'sxevf_ring_irq_interval_set' [-Werror=missing-prototypes]
     276 | void sxevf_ring_irq_interval_set(struct sxevf_hw *hw, u16 irq_idx, u32 interval)
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:313:6: error: no previous prototype for 'sxevf_hw_reset' [-Werror=missing-prototypes]
     313 | void sxevf_hw_reset(struct sxevf_hw *hw)
         |      ^~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:324:5: error: no previous prototype for 'sxevf_link_state_get' [-Werror=missing-prototypes]
     324 | u32 sxevf_link_state_get(struct sxevf_hw *hw)
         |     ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:539:6: error: no previous prototype for 'sxevf_tx_ring_switch' [-Werror=missing-prototypes]
     539 | void sxevf_tx_ring_switch(struct sxevf_hw *hw, u8 reg_idx, bool is_on)
         |      ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:594:6: error: no previous prototype for 'sxevf_rx_ring_switch' [-Werror=missing-prototypes]
     594 | void sxevf_rx_ring_switch(struct sxevf_hw *hw, u8 reg_idx, bool is_on)
         |      ^~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:626:6: error: no previous prototype for 'sxevf_rx_ring_desc_configure' [-Werror=missing-prototypes]
     626 | void sxevf_rx_ring_desc_configure(struct sxevf_hw *hw, u32 desc_mem_len,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:640:6: error: no previous prototype for 'sxevf_rx_rcv_ctl_configure' [-Werror=missing-prototypes]
     640 | void sxevf_rx_rcv_ctl_configure(struct sxevf_hw *hw, u8 reg_idx,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
>> drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:697:6: error: no previous prototype for 'sxevf_32bit_counter_update' [-Werror=missing-prototypes]
     697 | void sxevf_32bit_counter_update(struct sxevf_hw *hw,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:710:6: error: no previous prototype for 'sxevf_36bit_counter_update' [-Werror=missing-prototypes]
     710 | void sxevf_36bit_counter_update(struct sxevf_hw *hw,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:726:6: error: no previous prototype for 'sxevf_packet_stats_get' [-Werror=missing-prototypes]
     726 | void sxevf_packet_stats_get(struct sxevf_hw *hw, struct sxevf_hw_stats *stats)
         |      ^~~~~~~~~~~~~~~~~~~~~~
   drivers/net/ethernet/linkdata/sxevf/sxevf/sxevf_hw.c:740:6: error: no previous prototype for 'sxevf_stats_init_value_get' [-Werror=missing-prototypes]
     740 | void sxevf_stats_init_value_get(struct sxevf_hw *hw,
         |      ^~~~~~~~~~~~~~~~~~~~~~~~~~
   cc1: all warnings being treated as errors
..
vim +/sxe_debugfs_entries_init +432 drivers/net/ethernet/linkdata/sxe/sxepf/sxe_debugfs.c
   431	
 > 432	void sxe_debugfs_entries_init(struct sxe_adapter *adapter)
   433	{
   434		struct dentry *dir;
   435		const char *name = pci_name(adapter->pdev);
   436	
   437		adapter->debugfs_entries = debugfs_create_dir(name, sxe_debugfs_root);
   438		dir = debugfs_create_file("reg_ops", 0600, adapter->debugfs_entries,
   439					  adapter, &sxe_debugfs_reg_ops_fops);
   440		if (!dir || dir == ERR_PTR(-ENODEV))
   441			LOG_INFO_BDF("debugfs:reg_ops file create failed\n");
   442	
   443		dir = debugfs_create_file("netdev_ops", 0600, adapter->debugfs_entries,
   444					  adapter, &sxe_debugfs_netdev_ops_fops);
   445		if (!dir || dir == ERR_PTR(-ENODEV))
   446			LOG_INFO_BDF("debugfs:netdev_ops file create failed\n");
   447	
   448		dir = debugfs_create_file("hw_stats", 0400, adapter->debugfs_entries,
   449					  adapter, &sxe_debugfs_hw_stats_fops);
   450		if (!dir || dir == ERR_PTR(-ENODEV))
   451			LOG_INFO_BDF("debugfs:hw_stats file create failed\n");
   452	
   453		dir = debugfs_create_file("sfp_info", 0400, adapter->debugfs_entries,
   454					  adapter, &sxe_debugfs_sfp_info_fops);
   455		if (!dir || dir == ERR_PTR(-ENODEV))
   456			LOG_INFO_BDF("debugfs:sfp_info file create failed\n");
   457	}
   458	
 > 459	void sxe_debugfs_entries_exit(struct sxe_adapter *adapter)
   460	{
   461		debugfs_remove_recursive(adapter->debugfs_entries);
   462		adapter->debugfs_entries = NULL;
   463	}
   464	
 > 465	void sxe_debugfs_init(void)
   466	{
   467		sxe_debugfs_root = debugfs_create_dir(SXE_DRV_NAME, NULL);
   468	}
   469	
 > 470	void sxe_debugfs_exit(void)
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [openeuler:OLK-6.6 2658/2658] drivers/video/fbdev/ls2k500sfb.c:254:13: warning: no previous prototype for function 'ls2k500sfb_interrupt'
                        
                        
by kernel test robot 06 Aug '25
                    by kernel test robot 06 Aug '25
06 Aug '25
                    
                        tree:   https://gitee.com/openeuler/kernel.git OLK-6.6
head:   8551213150db5f8eebd27273dae93f6fe258d63a
commit: 8248d42b7c5f4338a54f26d8efebec8614b43466 [2658/2658] fbdev: add ls2k500sfb driver for ls2k500 bmc.
config: loongarch-randconfig-2005-20250806 (https://download.01.org/0day-ci/archive/20250806/202508061235.qxpfqpxl-lkp@…)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project faa4c4c2dc804c31845d8f036345fac00e016f2d)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250806/202508061235.qxpfqpxl-lkp@…)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp(a)intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202508061235.qxpfqpxl-lkp@intel.com/
All warnings (new ones prefixed by >>):
   In file included from drivers/video/fbdev/ls2k500sfb.c:12:
   In file included from include/linux/module.h:19:
   In file included from include/linux/elf.h:6:
   In file included from arch/loongarch/include/asm/elf.h:13:
   In file included from arch/loongarch/include/asm/vdso.h:10:
   In file included from include/linux/mm.h:2174:
   include/linux/vmstat.h:508:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     508 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     509 |                            item];
         |                            ~~~~
   include/linux/vmstat.h:515:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     515 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     516 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
   include/linux/vmstat.h:522:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     522 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
   include/linux/vmstat.h:527:43: warning: arithmetic between different enumeration types ('enum zone_stat_item' and 'enum numa_stat_item') [-Wenum-enum-conversion]
     527 |         return vmstat_text[NR_VM_ZONE_STAT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~ ^
     528 |                            NR_VM_NUMA_EVENT_ITEMS +
         |                            ~~~~~~~~~~~~~~~~~~~~~~
>> drivers/video/fbdev/ls2k500sfb.c:254:13: warning: no previous prototype for function 'ls2k500sfb_interrupt' [-Wmissing-prototypes]
     254 | irqreturn_t ls2k500sfb_interrupt(int irq, void *arg)
         |             ^
   drivers/video/fbdev/ls2k500sfb.c:254:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
     254 | irqreturn_t ls2k500sfb_interrupt(int irq, void *arg)
         | ^
         | static 
   5 warnings generated.
vim +/ls2k500sfb_interrupt +254 drivers/video/fbdev/ls2k500sfb.c
   253	
 > 254	irqreturn_t ls2k500sfb_interrupt(int irq, void *arg)
   255	{
   256		struct ls2k500sfb_struct *priv = arg;
   257		struct pci_dev *pdev = priv->dev;
   258	
   259		if (irq == pdev->irq)
   260			pr_info("ls2k500sfb pcie interrupt\n");
   261		else
   262			pr_info("ls2k500sfb gpio interrupt\n");
   263		if (system_state != SYSTEM_RUNNING)
   264			return IRQ_HANDLED;
   265	
   266		if (!priv->running) {
   267			if (!resetdelay || time_after(jiffies, priv->reset_time + resetdelay * HZ)) {
   268				priv->running = 1;
   269				queue_work(priv->wq, &priv->work);
   270			}
   271			priv->reset_time = jiffies;
   272		}
   273		return IRQ_HANDLED;
   274	}
   275	
-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    06 Aug '25
                    
                        From: Zheng Zucheng <zhengzucheng(a)huawei.com>
hulk inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/ICE7WC
--------------------------------
This feature allows users to use CPU quota more flexibly when CPU is
idle and it will cause the CPU quota to be exceeded. So, it cannot be
used in scenarios where there are strict restrictions on the use of the
CPU quota, such as some commercial scenarios that charge based on the
use of CPU quota.
Signed-off-by: Zheng Zucheng <zhengzucheng(a)huawei.com>
Signed-off-by: Liao Chang <liaochang1(a)huawei.com>
Signed-off-by: Cheng Yu <serein.chengyu(a)huawei.com>
---
 arch/arm64/Kconfig                     |   1 +
 arch/arm64/configs/openeuler_defconfig |   1 +
 arch/arm64/kernel/idle.c               |  35 +++++-
 init/Kconfig                           |  18 +++
 kernel/sched/core.c                    |  32 +++++
 kernel/sched/fair.c                    | 168 +++++++++++++++++++++++--
 kernel/sched/features.h                |   4 +
 kernel/sched/idle.c                    |   7 ++
 kernel/sched/sched.h                   |  15 +++
 9 files changed, 272 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index 5422d1502fd6..4c44afb9cc74 100644
--- a/arch/arm64/Kconfig
+++ b/arch/arm64/Kconfig
@@ -105,6 +105,7 @@ config ARM64
 	select ARCH_SUPPORTS_ATOMIC_RMW
 	select ARCH_SUPPORTS_INT128 if CC_HAS_INT128
 	select ARCH_SUPPORTS_NUMA_BALANCING
+	select ARCH_SUPPORTS_SCHED_SOFT_QUOTA
 	select ARCH_SUPPORTS_PAGE_TABLE_CHECK
 	select ARCH_SUPPORTS_PER_VMA_LOCK
 	select ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
index 3cfff0701479..eeb4d8210e2f 100644
--- a/arch/arm64/configs/openeuler_defconfig
+++ b/arch/arm64/configs/openeuler_defconfig
@@ -209,6 +209,7 @@ CONFIG_USER_NS=y
 CONFIG_PID_NS=y
 CONFIG_NET_NS=y
 CONFIG_SCHED_STEAL=y
+CONFIG_SCHED_SOFT_QUOTA=y
 CONFIG_CHECKPOINT_RESTORE=y
 CONFIG_SCHED_AUTOGROUP=y
 CONFIG_RELAY=y
diff --git a/arch/arm64/kernel/idle.c b/arch/arm64/kernel/idle.c
index 46a40b693da8..31d9bfbe10b8 100644
--- a/arch/arm64/kernel/idle.c
+++ b/arch/arm64/kernel/idle.c
@@ -45,6 +45,26 @@ void noinstr arch_cpu_idle(void)
 }
 EXPORT_SYMBOL_GPL(arch_cpu_idle);
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+static DEFINE_PER_CPU(int, sibling_idle) = 1;
+
+int is_sibling_idle(void)
+{
+	return this_cpu_read(sibling_idle);
+}
+
+static void smt_measurement_begin(void)
+{
+}
+
+static void smt_measurement_done(void)
+{
+}
+#else
+static inline void smt_measurement_begin(void) { }
+static inline void smt_measurement_done(void) { }
+#endif
+
 #ifdef CONFIG_ACTLR_XCALL_XINT
 struct arm_cpuidle_xcall_xint_context {
 	unsigned long actlr_el1;
@@ -57,6 +77,8 @@ void arch_cpu_idle_enter(void)
 {
 	struct arm_cpuidle_xcall_xint_context *context;
 
+	smt_measurement_begin();
+
 	if (!system_uses_xcall_xint())
 		return;
 
@@ -71,6 +93,8 @@ void arch_cpu_idle_exit(void)
 {
 	struct arm_cpuidle_xcall_xint_context *context;
 
+	smt_measurement_done();
+
 	if (!system_uses_xcall_xint())
 		return;
 
@@ -81,6 +105,13 @@ void arch_cpu_idle_exit(void)
 	put_cpu_var(contexts);
 }
 #else
-void arch_cpu_idle_enter(void) {}
-void arch_cpu_idle_exit(void) {}
+void arch_cpu_idle_enter(void)
+{
+	smt_measurement_begin();
+}
+
+void arch_cpu_idle_exit(void)
+{
+	smt_measurement_done();
+}
 #endif
diff --git a/init/Kconfig b/init/Kconfig
index c8bd58347a87..9310fcda2988 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1174,6 +1174,24 @@ config SCHED_SOFT_DOMAIN
 
 	  If in doubt, say N.
 
+#
+# For architectures that want to enable the support for SCHED_SOFT_QUOTA
+#
+config ARCH_SUPPORTS_SCHED_SOFT_QUOTA
+	bool
+
+config SCHED_SOFT_QUOTA
+	bool "More flexible use of CPU quota"
+	depends on ARCH_SUPPORTS_SCHED_SOFT_QUOTA
+	depends on CFS_BANDWIDTH
+	default n
+	help
+	  This option allows users to use CPU quota more flexibly when CPU
+	  is idle. It is better for users to have some understanding of
+	  CFS_BANDWIDTH. It cannot be used in scenarios where there are strict
+	  restrictions on the use of the CPU quota, such as some commercial
+	  scenarios that charge based on the use of CPU quota.
+
 config SCHED_MM_CID
 	def_bool n
 	depends on SMP && RSEQ
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 1b497efc763b..6bc9897569a9 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -11682,6 +11682,30 @@ static inline s64 cpu_qos_read(struct cgroup_subsys_state *css,
 }
 #endif
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+static int cpu_soft_quota_write(struct cgroup_subsys_state *css,
+			 struct cftype *cftype, s64 soft_quota)
+{
+	struct task_group *tg = css_tg(css);
+
+	if (soft_quota != 1 && soft_quota != 0)
+		return -EINVAL;
+
+	if (tg->soft_quota == soft_quota)
+		return 0;
+
+	tg->soft_quota = soft_quota;
+
+	return 0;
+}
+
+static inline s64 cpu_soft_quota_read(struct cgroup_subsys_state *css,
+			       struct cftype *cft)
+{
+	return css_tg(css)->soft_quota;
+}
+#endif
+
 #ifdef CONFIG_BPF_SCHED
 void sched_settag(struct task_struct *tsk, s64 tag)
 {
@@ -11928,6 +11952,14 @@ static struct cftype cpu_legacy_files[] = {
 		.write_s64 = cpu_qos_write,
 	},
 #endif
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	{
+		.name = "soft_quota",
+		.flags = CFTYPE_NOT_ON_ROOT,
+		.read_s64 = cpu_soft_quota_read,
+		.write_s64 = cpu_soft_quota_write,
+	},
+#endif
 #ifdef CONFIG_BPF_SCHED
 	{
 		.name = "tag",
diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c
index 71661d6c5b54..2e2ad083aec4 100644
--- a/kernel/sched/fair.c
+++ b/kernel/sched/fair.c
@@ -186,6 +186,10 @@ unsigned int sysctl_qos_level_weights[5] = {
 static long qos_reweight(long shares, struct task_group *tg);
 #endif
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+static DEFINE_PER_CPU_SHARED_ALIGNED(struct list_head, soft_quota_throttled_cfs_rq);
+#endif
+
 #ifdef CONFIG_CFS_BANDWIDTH
 /*
  * Amount of runtime to allocate from global (tg) to local (per-cfs_rq) pool
@@ -219,6 +223,10 @@ extern unsigned int sysctl_smart_grid_strategy_ctrl;
 static int sysctl_affinity_adjust_delay_ms = 5000;
 #endif
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+unsigned int sysctl_soft_runtime_ratio = 20;
+#endif
+
 #ifdef CONFIG_SYSCTL
 static struct ctl_table sched_fair_sysctls[] = {
 	{
@@ -318,6 +326,17 @@ static struct ctl_table sched_fair_sysctls[] = {
 		.extra1         = SYSCTL_ZERO,
 		.extra2		= &hundred_thousand,
 	},
+#endif
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	{
+		.procname       = "sched_soft_runtime_ratio",
+		.data           = &sysctl_soft_runtime_ratio,
+		.maxlen         = sizeof(sysctl_soft_runtime_ratio),
+		.mode           = 0644,
+		.proc_handler   = proc_dointvec_minmax,
+		.extra1         = SYSCTL_ONE,
+		.extra2         = SYSCTL_ONE_HUNDRED,
+	},
 #endif
 	{}
 };
@@ -588,10 +607,11 @@ static inline struct sched_entity *parent_entity(const struct sched_entity *se)
 	return se->parent;
 }
 
-static void
+static bool
 find_matching_se(struct sched_entity **se, struct sched_entity **pse)
 {
 	int se_depth, pse_depth;
+	bool ret = false;
 
 	/*
 	 * preemption test can be made between sibling entities who are in the
@@ -605,6 +625,10 @@ find_matching_se(struct sched_entity **se, struct sched_entity **pse)
 	pse_depth = (*pse)->depth;
 
 	while (se_depth > pse_depth) {
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+		if (!ret && cfs_rq_of(*se)->soft_quota_enable == 1)
+			ret = true;
+#endif
 		se_depth--;
 		*se = parent_entity(*se);
 	}
@@ -615,9 +639,15 @@ find_matching_se(struct sched_entity **se, struct sched_entity **pse)
 	}
 
 	while (!is_same_group(*se, *pse)) {
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+		if (!ret && cfs_rq_of(*se)->soft_quota_enable == 1)
+			ret = true;
+#endif
 		*se = parent_entity(*se);
 		*pse = parent_entity(*pse);
 	}
+
+	return ret;
 }
 
 static int tg_is_idle(struct task_group *tg)
@@ -663,9 +693,10 @@ static inline struct sched_entity *parent_entity(struct sched_entity *se)
 	return NULL;
 }
 
-static inline void
+static inline bool
 find_matching_se(struct sched_entity **se, struct sched_entity **pse)
 {
+	return false;
 }
 
 static inline int tg_is_idle(struct task_group *tg)
@@ -6026,6 +6057,14 @@ static bool throttle_cfs_rq(struct cfs_rq *cfs_rq)
 	SCHED_WARN_ON(cfs_rq->throttled_clock);
 	if (cfs_rq->nr_running)
 		cfs_rq->throttled_clock = rq_clock(rq);
+
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	if (cfs_rq->tg->soft_quota == 1) {
+		list_add(&cfs_rq->soft_quota_throttled_list,
+			 &per_cpu(soft_quota_throttled_cfs_rq, cpu_of(rq)));
+	}
+#endif
+
 	return true;
 }
 
@@ -6042,6 +6081,10 @@ void unthrottle_cfs_rq(struct cfs_rq *cfs_rq)
 
 	se = cfs_rq->tg->se[cpu_of(rq)];
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	list_del_init(&cfs_rq->soft_quota_throttled_list);
+#endif
+
 #ifdef CONFIG_QOS_SCHED
 	/*
 	 * if this cfs_rq throttled by qos, not need unthrottle it.
@@ -6240,6 +6283,16 @@ static bool distribute_cfs_runtime(struct cfs_bandwidth *cfs_b)
 		}
 
 		rq_lock_irqsave(rq, &rf);
+
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+		if (cfs_rq->soft_quota_enable == 1) {
+			if (cfs_rq->runtime_remaining > 0)
+				cfs_rq->runtime_remaining = 0;
+
+			cfs_rq->soft_quota_enable = 0;
+		}
+#endif
+
 		if (!cfs_rq_throttled(cfs_rq))
 			goto next;
 
@@ -6302,6 +6355,17 @@ static bool distribute_cfs_runtime(struct cfs_bandwidth *cfs_b)
 	return throttled;
 }
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+static inline void init_tg_sum_soft_runtime(struct cfs_bandwidth *cfs_b)
+{
+	unsigned int cpu;
+	struct task_group *tg = container_of(cfs_b, struct task_group, cfs_bandwidth);
+
+	for_each_possible_cpu(cpu)
+		tg->cfs_rq[cpu]->sum_soft_runtime = 0;
+}
+#endif
+
 /*
  * Responsible for refilling a task_group's bandwidth and unthrottling its
  * cfs_rqs as appropriate. If there has been no activity within the last
@@ -6319,6 +6383,10 @@ static int do_sched_cfs_period_timer(struct cfs_bandwidth *cfs_b, int overrun, u
 	throttled = !list_empty(&cfs_b->throttled_cfs_rq);
 	cfs_b->nr_periods += overrun;
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	init_tg_sum_soft_runtime(cfs_b);
+#endif
+
 	/* Refill extra burst quota even if cfs_b->idle */
 	__refill_cfs_bandwidth_runtime(cfs_b);
 
@@ -6633,6 +6701,9 @@ static void init_cfs_rq_runtime(struct cfs_rq *cfs_rq)
 #ifdef CONFIG_QOS_SCHED
 	INIT_LIST_HEAD(&cfs_rq->qos_throttled_list);
 #endif
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	INIT_LIST_HEAD(&cfs_rq->soft_quota_throttled_list);
+#endif
 }
 
 void start_cfs_bandwidth(struct cfs_bandwidth *cfs_b)
@@ -9440,6 +9511,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_
 	struct cfs_rq *cfs_rq = task_cfs_rq(curr);
 	int next_buddy_marked = 0;
 	int cse_is_idle, pse_is_idle;
+	bool ret = 0;
 
 	if (unlikely(se == pse))
 		return;
@@ -9474,7 +9546,12 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_
 	if (!sched_feat(WAKEUP_PREEMPTION))
 		return;
 
-	find_matching_se(&se, &pse);
+	ret = find_matching_se(&se, &pse);
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	if (ret)
+		goto preempt;
+#endif
+
 	WARN_ON_ONCE(!pse);
 
 	cse_is_idle = se_is_idle(se);
@@ -14959,6 +15036,9 @@ void unregister_fair_sched_group(struct task_group *tg)
 	unsigned long flags;
 	struct rq *rq;
 	int cpu;
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	struct cfs_rq *cfs_rq;
+#endif
 
 	destroy_cfs_bandwidth(tg_cfs_bandwidth(tg));
 	destroy_auto_affinity(tg);
@@ -14968,10 +15048,16 @@ void unregister_fair_sched_group(struct task_group *tg)
 		if (tg->se[cpu])
 			remove_entity_load_avg(tg->se[cpu]);
 
-		#ifdef CONFIG_QOS_SCHED
-			if (tg->cfs_rq && tg->cfs_rq[cpu])
-				unthrottle_qos_sched_group(tg->cfs_rq[cpu]);
-		#endif
+#ifdef CONFIG_QOS_SCHED
+		if (tg->cfs_rq && tg->cfs_rq[cpu])
+			unthrottle_qos_sched_group(tg->cfs_rq[cpu]);
+#endif
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+		if (tg->cfs_rq && tg->cfs_rq[cpu]) {
+			cfs_rq = tg->cfs_rq[cpu];
+			list_del_init(&cfs_rq->soft_quota_throttled_list);
+		}
+#endif
 
 		/*
 		 * Only empty task groups can be destroyed; so we can speculatively
@@ -15286,6 +15372,11 @@ __init void init_sched_fair_class(void)
 		INIT_LIST_HEAD(&per_cpu(qos_throttled_cfs_rq, i));
 #endif
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	for_each_possible_cpu(i)
+		INIT_LIST_HEAD(&per_cpu(soft_quota_throttled_cfs_rq, i));
+#endif
+
 	open_softirq(SCHED_SOFTIRQ, run_rebalance_domains);
 
 #ifdef CONFIG_NO_HZ_COMMON
@@ -15296,3 +15387,66 @@ __init void init_sched_fair_class(void)
 #endif /* SMP */
 
 }
+
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+static bool check_soft_runtime(struct task_group *tg, int slice)
+{
+	int cpu;
+	u64 sum_soft_runtime = slice;
+	struct cfs_bandwidth *cfs_b = &tg->cfs_bandwidth;
+
+	if (cfs_b->quota == RUNTIME_INF)
+		return true;
+
+	for_each_possible_cpu(cpu)
+		sum_soft_runtime += tg->cfs_rq[cpu]->sum_soft_runtime;
+
+	return sum_soft_runtime < sysctl_soft_runtime_ratio * cfs_b->quota / 100;
+}
+
+int __weak is_sibling_idle(void)
+{
+	return 0;
+}
+
+bool unthrottle_cfs_rq_soft_quota(struct rq *rq)
+{
+	int max_cnt = 0;
+	bool ret = false;
+	struct cfs_rq *cfs_rq, *tmp_rq;
+	struct cfs_bandwidth *cfs_b;
+	int slice = sched_cfs_bandwidth_slice();
+
+	if (!is_sibling_idle())
+		return ret;
+
+	list_for_each_entry_safe(cfs_rq, tmp_rq, &per_cpu(soft_quota_throttled_cfs_rq, cpu_of(rq)),
+				 soft_quota_throttled_list) {
+		if (max_cnt++ > 20)
+			break;
+
+		if (cfs_rq->throttled) {
+			cfs_b = tg_cfs_bandwidth(cfs_rq->tg);
+			raw_spin_lock(&cfs_b->lock);
+
+			if (!check_soft_runtime(cfs_rq->tg, slice)) {
+				raw_spin_unlock(&cfs_b->lock);
+				continue;
+			}
+
+			raw_spin_unlock(&cfs_b->lock);
+
+			if (cfs_rq->runtime_remaining + slice > 0) {
+				cfs_rq->runtime_remaining += slice;
+				cfs_rq->sum_soft_runtime += slice;
+				cfs_rq->soft_quota_enable = 1;
+				unthrottle_cfs_rq(cfs_rq);
+				ret = true;
+				break;
+			}
+		}
+	}
+
+	return ret;
+}
+#endif
diff --git a/kernel/sched/features.h b/kernel/sched/features.h
index ea7ba74810e3..d587b7a12629 100644
--- a/kernel/sched/features.h
+++ b/kernel/sched/features.h
@@ -110,3 +110,7 @@ SCHED_FEAT(DA_UTIL_TASKGROUP, true)
 #ifdef CONFIG_SCHED_SOFT_DOMAIN
 SCHED_FEAT(SOFT_DOMAIN, false)
 #endif
+
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+SCHED_FEAT(SOFT_QUOTA, false)
+#endif
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 5007b25c5bc6..3518a1a28e8c 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -427,6 +427,13 @@ struct task_struct *pick_next_task_idle(struct rq *rq)
 {
 	struct task_struct *next = rq->idle;
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	if (sched_feat(SOFT_QUOTA)) {
+		if (unthrottle_cfs_rq_soft_quota(rq) && rq->cfs.nr_running)
+			return pick_next_task_fair(rq, NULL, NULL);
+	}
+#endif
+
 	set_next_task_idle(rq, next, true);
 
 	return next;
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index f6a3f93d1f75..0e21ad151ec9 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -484,7 +484,11 @@ struct task_group {
 #else
 	KABI_RESERVE(1)
 #endif
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	KABI_USE(2, u64 soft_quota)
+#else
 	KABI_RESERVE(2)
+#endif
 	KABI_RESERVE(3)
 	KABI_RESERVE(4)
 	KABI_RESERVE(5)
@@ -578,6 +582,10 @@ static inline void tg_update_affinity_domains(int cpu, int online) {}
 static inline void offline_auto_affinity(struct task_group *tg) { }
 #endif
 
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+extern bool unthrottle_cfs_rq_soft_quota(struct rq *rq);
+#endif
+
 #ifdef CONFIG_FAIR_GROUP_SCHED
 extern int sched_group_set_shares(struct task_group *tg, unsigned long shares);
 
@@ -769,10 +777,17 @@ struct cfs_rq {
 		unsigned long           qos_idle_h_nr_running_padding;
 	};
 #endif
+#ifdef CONFIG_SCHED_SOFT_QUOTA
+	KABI_USE(1, u64 soft_quota_enable)
+	KABI_USE(2, u64 sum_soft_runtime)
+	KABI_REPLACE(_KABI_RESERVE(3); _KABI_RESERVE(4),
+		struct list_head soft_quota_throttled_list)
+#else
 	KABI_RESERVE(1)
 	KABI_RESERVE(2)
 	KABI_RESERVE(3)
 	KABI_RESERVE(4)
+#endif
 	KABI_RESERVE(5)
 	KABI_RESERVE(6)
 	KABI_RESERVE(7)
-- 
2.25.1
                    
                  
                  
                          
                            
                            2
                            
                          
                          
                            
                            1
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            [PATCH OLK-6.6] crypto: hisilicon/qm - clear the memory before enabling the device
                        
                        
by Weili Qian 06 Aug '25
                    by Weili Qian 06 Aug '25
06 Aug '25
                    
                        From: lizhi <lizhi206(a)huawei.com>
driver inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/ICRCS6
CVE: NA
----------------------------------------------------------------------
When the driver enables the device, memory will be allocated and
configured for the device via the mailbox. As the device executes tasks,
it modifies the memory to notify the software of the task status. When
the device is re-enabled, the memory must be cleared before being
configured for the device again. Otherwise, when the device executes
new operations, the software may read incorrect task status from the
memory, leading to operational failures. Currently, memory clearing
is implemented in the qm_invalid_queues(). However, The qm_invalid_queues()
is not called during device suspension and resumption, which results in
operational failures after resuming. To address this issue, the memory
clearing process should be moved to the hisi_qm_start().
Fixes: 25eef041f26c ("crypto: hisilicon/qm - invalidate queues in use")
Signed-off-by: lizhi <lizhi206(a)huawei.com>
Signed-off-by: JiangShui Yang <yangjiangshui(a)h-partners.com>
---
 drivers/crypto/hisilicon/qm.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/drivers/crypto/hisilicon/qm.c b/drivers/crypto/hisilicon/qm.c
index 4ebf38cf1af7..a8fb2d8c774e 100644
--- a/drivers/crypto/hisilicon/qm.c
+++ b/drivers/crypto/hisilicon/qm.c
@@ -3357,6 +3357,9 @@ static int qm_eq_aeq_ctx_cfg(struct hisi_qm *qm)
 
 	qm_init_eq_aeq_status(qm);
 
+	/* Before starting the dev, clear previous task info in dma memory */
+	memset(qm->qdma.va, 0, qm->qdma.size);
+
 	ret = qm_eq_ctx_cfg(qm);
 	if (ret) {
 		dev_err(dev, "Set eqc failed!\n");
@@ -3368,9 +3371,13 @@ static int qm_eq_aeq_ctx_cfg(struct hisi_qm *qm)
 
 static int __hisi_qm_start(struct hisi_qm *qm)
 {
+	struct device *dev = &qm->pdev->dev;
 	int ret;
 
-	WARN_ON(!qm->qdma.va);
+	if (unlikely(!qm->qdma.va)) {
+		dev_err(dev, "dma virtual address should not be NULL\n");
+		return -EINVAL;
+	}
 
 	if (qm->fun_type == QM_HW_PF) {
 		ret = hisi_qm_set_vft(qm, 0, qm->qp_base, qm->qp_num);
@@ -3500,7 +3507,6 @@ static void qm_invalid_queues(struct hisi_qm *qm)
 	if (qm->status.stop_reason == QM_DOWN)
 		hisi_qm_cache_wb(qm);
 
-	memset(qm->qdma.va, 0, qm->qdma.size);
 	for (i = 0; i < qm->qp_num; i++) {
 		qp = &qm->qp_array[i];
 		if (!qp->is_resetting)
-- 
2.43.0
                    
                  
                  
                          
                            
                            2
                            
                          
                          
                            
                            1