forked from mirrors/linux
		
	 fc0c0548c1
			
		
	
	
		fc0c0548c1
		
	
	
	
	
		
			
			Current release - regressions:
 
  - vhost_net: fix OoB on sendmsg() failure
 
  - mlx5: bridge, fix uninitialized variable usage
 
  - bnxt_en: fix error recovery regression
 
 Current release - new code bugs:
 
  - bpf, mm: fix lockdep warning triggered by stack_map_get_build_id_offset()
 
 Previous releases - regressions:
 
  - r6040: restore MDIO clock frequency after MAC reset
 
  - tcp: fix tp->undo_retrans accounting in tcp_sacktag_one()
 
  - dsa: flush switchdev workqueue before tearing down CPU/DSA ports
 
 Previous releases - always broken:
 
  - ptp: dp83640: don't define PAGE0, avoid compiler warning
 
  - igc: fix tunnel segmentation offloads
 
  - phylink: update SFP selected interface on advertising changes
 
  - stmmac: fix system hang caused by eee_ctrl_timer during suspend/resume
 
  - mlx5e: fix mutual exclusion between CQE compression and HW TS
 
 Misc:
 
  - bpf, cgroups: fix cgroup v2 fallback on v1/v2 mixed mode
 
  - sfc: fallback for lack of xdp tx queues
 
  - hns3: add option to turn off page pool feature
 
 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCAAdFiEE6jPA+I1ugmIBA4hXMUZtbf5SIrsFAmFDnXIACgkQMUZtbf5S
 Irs+pA//UvT0UqL+G/9He9eVMaX/7mnvoShbU/hHaymLuvJE4dx6B3qw8im5fQ0i
 b7ovy1dxjMjSQI4E+2FleajRBgsdXvWgMCopFZr7h35+qPXziLxTTztwsaOIjD8U
 42HBpdwFrVtdrOhSsiKsGKe8KXqIehHhFAp4vQrRlsvsz1Yk/93o6wYaXaXqR6pQ
 qlTVgI7nAuLAw4VfFZ3k7iAiQsyrXrn5kUXq5/Wy6kK7iFnIN7X9j+epTJP/EXHn
 +17SW/iGnjUfwXsRSC2ysgICtOPatu48Cke5hq5XOGqXAtRVhhLfMDiZlr8a6+z4
 gS+QETakBXLrAfvYK6neLjlMhg1FX+Y952xd3XIU4jz+DgIh03r2Nd1xBsp17Yhu
 RRBc96w2KxuHQ6USEXbi5dY1K6o9DK52m/WRmnqXnaNX4ADeesgcrxXHqZ6O6I5R
 +ddvVWylaHxvngCQSL4DvZdYNJVoKjdlo6fHrwD1qu0Uv0rGz6O+AEI9o8DkK5Af
 ZhFBETvjTKzjCykd3UlaRo/ibYChIPYwpGTK+TTI9rUm8OWNw1+sC/Z14bx0/3Vl
 RB53rkJ93/qi6Wb9ljUxM8CPGViuPvMkQJjpJOaktrj0GOgQz3EBdDkIQMaplZx5
 r2AeHW7X5VGxCWMRg4NS/x7Do1jh8m/ch8/EulOAB5fG7KQPfYs=
 =xd6p
 -----END PGP SIGNATURE-----
Merge tag 'net-5.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Pull networking fixes from Jakub Kicinski:
 "Including fixes from bpf.
  Current release - regressions:
   - vhost_net: fix OoB on sendmsg() failure
   - mlx5: bridge, fix uninitialized variable usage
   - bnxt_en: fix error recovery regression
  Current release - new code bugs:
   - bpf, mm: fix lockdep warning triggered by stack_map_get_build_id_offset()
  Previous releases - regressions:
   - r6040: restore MDIO clock frequency after MAC reset
   - tcp: fix tp->undo_retrans accounting in tcp_sacktag_one()
   - dsa: flush switchdev workqueue before tearing down CPU/DSA ports
  Previous releases - always broken:
   - ptp: dp83640: don't define PAGE0, avoid compiler warning
   - igc: fix tunnel segmentation offloads
   - phylink: update SFP selected interface on advertising changes
   - stmmac: fix system hang caused by eee_ctrl_timer during suspend/resume
   - mlx5e: fix mutual exclusion between CQE compression and HW TS
  Misc:
   - bpf, cgroups: fix cgroup v2 fallback on v1/v2 mixed mode
   - sfc: fallback for lack of xdp tx queues
   - hns3: add option to turn off page pool feature"
* tag 'net-5.15-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net: (67 commits)
  mlxbf_gige: clear valid_polarity upon open
  igc: fix tunnel offloading
  net/{mlx5|nfp|bnxt}: Remove unnecessary RTNL lock assert
  net: wan: wanxl: define CROSS_COMPILE_M68K
  selftests: nci: replace unsigned int with int
  net: dsa: flush switchdev workqueue before tearing down CPU/DSA ports
  Revert "net: phy: Uniform PHY driver access"
  net: dsa: destroy the phylink instance on any error in dsa_slave_phy_setup
  ptp: dp83640: don't define PAGE0
  bnx2x: Fix enabling network interfaces without VFs
  Revert "Revert "ipv4: fix memory leaks in ip_cmsg_send() callers""
  tcp: fix tp->undo_retrans accounting in tcp_sacktag_one()
  net-caif: avoid user-triggerable WARN_ON(1)
  bpf, selftests: Add test case for mixed cgroup v1/v2
  bpf, selftests: Add cgroup v1 net_cls classid helpers
  bpf, cgroups: Fix cgroup v2 fallback on v1/v2 mixed mode
  bpf: Add oversize check before call kvcalloc()
  net: hns3: fix the timing issue of VF clearing interrupt sources
  net: hns3: fix the exception when query imp info
  net: hns3: disable mac in flr process
  ...
		
	
			
		
			
				
	
	
		
			170 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_MMAP_LOCK_H
 | |
| #define _LINUX_MMAP_LOCK_H
 | |
| 
 | |
| #include <linux/lockdep.h>
 | |
| #include <linux/mm_types.h>
 | |
| #include <linux/mmdebug.h>
 | |
| #include <linux/rwsem.h>
 | |
| #include <linux/tracepoint-defs.h>
 | |
| #include <linux/types.h>
 | |
| 
 | |
| #define MMAP_LOCK_INITIALIZER(name) \
 | |
| 	.mmap_lock = __RWSEM_INITIALIZER((name).mmap_lock),
 | |
| 
 | |
| DECLARE_TRACEPOINT(mmap_lock_start_locking);
 | |
| DECLARE_TRACEPOINT(mmap_lock_acquire_returned);
 | |
| DECLARE_TRACEPOINT(mmap_lock_released);
 | |
| 
 | |
| #ifdef CONFIG_TRACING
 | |
| 
 | |
| void __mmap_lock_do_trace_start_locking(struct mm_struct *mm, bool write);
 | |
| void __mmap_lock_do_trace_acquire_returned(struct mm_struct *mm, bool write,
 | |
| 					   bool success);
 | |
| void __mmap_lock_do_trace_released(struct mm_struct *mm, bool write);
 | |
| 
 | |
| static inline void __mmap_lock_trace_start_locking(struct mm_struct *mm,
 | |
| 						   bool write)
 | |
| {
 | |
| 	if (tracepoint_enabled(mmap_lock_start_locking))
 | |
| 		__mmap_lock_do_trace_start_locking(mm, write);
 | |
| }
 | |
| 
 | |
| static inline void __mmap_lock_trace_acquire_returned(struct mm_struct *mm,
 | |
| 						      bool write, bool success)
 | |
| {
 | |
| 	if (tracepoint_enabled(mmap_lock_acquire_returned))
 | |
| 		__mmap_lock_do_trace_acquire_returned(mm, write, success);
 | |
| }
 | |
| 
 | |
| static inline void __mmap_lock_trace_released(struct mm_struct *mm, bool write)
 | |
| {
 | |
| 	if (tracepoint_enabled(mmap_lock_released))
 | |
| 		__mmap_lock_do_trace_released(mm, write);
 | |
| }
 | |
| 
 | |
| #else /* !CONFIG_TRACING */
 | |
| 
 | |
| static inline void __mmap_lock_trace_start_locking(struct mm_struct *mm,
 | |
| 						   bool write)
 | |
| {
 | |
| }
 | |
| 
 | |
| static inline void __mmap_lock_trace_acquire_returned(struct mm_struct *mm,
 | |
| 						      bool write, bool success)
 | |
| {
 | |
| }
 | |
| 
 | |
| static inline void __mmap_lock_trace_released(struct mm_struct *mm, bool write)
 | |
| {
 | |
| }
 | |
| 
 | |
| #endif /* CONFIG_TRACING */
 | |
| 
 | |
| static inline void mmap_init_lock(struct mm_struct *mm)
 | |
| {
 | |
| 	init_rwsem(&mm->mmap_lock);
 | |
| }
 | |
| 
 | |
| static inline void mmap_write_lock(struct mm_struct *mm)
 | |
| {
 | |
| 	__mmap_lock_trace_start_locking(mm, true);
 | |
| 	down_write(&mm->mmap_lock);
 | |
| 	__mmap_lock_trace_acquire_returned(mm, true, true);
 | |
| }
 | |
| 
 | |
| static inline void mmap_write_lock_nested(struct mm_struct *mm, int subclass)
 | |
| {
 | |
| 	__mmap_lock_trace_start_locking(mm, true);
 | |
| 	down_write_nested(&mm->mmap_lock, subclass);
 | |
| 	__mmap_lock_trace_acquire_returned(mm, true, true);
 | |
| }
 | |
| 
 | |
| static inline int mmap_write_lock_killable(struct mm_struct *mm)
 | |
| {
 | |
| 	int ret;
 | |
| 
 | |
| 	__mmap_lock_trace_start_locking(mm, true);
 | |
| 	ret = down_write_killable(&mm->mmap_lock);
 | |
| 	__mmap_lock_trace_acquire_returned(mm, true, ret == 0);
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| static inline bool mmap_write_trylock(struct mm_struct *mm)
 | |
| {
 | |
| 	bool ret;
 | |
| 
 | |
| 	__mmap_lock_trace_start_locking(mm, true);
 | |
| 	ret = down_write_trylock(&mm->mmap_lock) != 0;
 | |
| 	__mmap_lock_trace_acquire_returned(mm, true, ret);
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| static inline void mmap_write_unlock(struct mm_struct *mm)
 | |
| {
 | |
| 	__mmap_lock_trace_released(mm, true);
 | |
| 	up_write(&mm->mmap_lock);
 | |
| }
 | |
| 
 | |
| static inline void mmap_write_downgrade(struct mm_struct *mm)
 | |
| {
 | |
| 	__mmap_lock_trace_acquire_returned(mm, false, true);
 | |
| 	downgrade_write(&mm->mmap_lock);
 | |
| }
 | |
| 
 | |
| static inline void mmap_read_lock(struct mm_struct *mm)
 | |
| {
 | |
| 	__mmap_lock_trace_start_locking(mm, false);
 | |
| 	down_read(&mm->mmap_lock);
 | |
| 	__mmap_lock_trace_acquire_returned(mm, false, true);
 | |
| }
 | |
| 
 | |
| static inline int mmap_read_lock_killable(struct mm_struct *mm)
 | |
| {
 | |
| 	int ret;
 | |
| 
 | |
| 	__mmap_lock_trace_start_locking(mm, false);
 | |
| 	ret = down_read_killable(&mm->mmap_lock);
 | |
| 	__mmap_lock_trace_acquire_returned(mm, false, ret == 0);
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| static inline bool mmap_read_trylock(struct mm_struct *mm)
 | |
| {
 | |
| 	bool ret;
 | |
| 
 | |
| 	__mmap_lock_trace_start_locking(mm, false);
 | |
| 	ret = down_read_trylock(&mm->mmap_lock) != 0;
 | |
| 	__mmap_lock_trace_acquire_returned(mm, false, ret);
 | |
| 	return ret;
 | |
| }
 | |
| 
 | |
| static inline void mmap_read_unlock(struct mm_struct *mm)
 | |
| {
 | |
| 	__mmap_lock_trace_released(mm, false);
 | |
| 	up_read(&mm->mmap_lock);
 | |
| }
 | |
| 
 | |
| static inline void mmap_read_unlock_non_owner(struct mm_struct *mm)
 | |
| {
 | |
| 	__mmap_lock_trace_released(mm, false);
 | |
| 	up_read_non_owner(&mm->mmap_lock);
 | |
| }
 | |
| 
 | |
| static inline void mmap_assert_locked(struct mm_struct *mm)
 | |
| {
 | |
| 	lockdep_assert_held(&mm->mmap_lock);
 | |
| 	VM_BUG_ON_MM(!rwsem_is_locked(&mm->mmap_lock), mm);
 | |
| }
 | |
| 
 | |
| static inline void mmap_assert_write_locked(struct mm_struct *mm)
 | |
| {
 | |
| 	lockdep_assert_held_write(&mm->mmap_lock);
 | |
| 	VM_BUG_ON_MM(!rwsem_is_locked(&mm->mmap_lock), mm);
 | |
| }
 | |
| 
 | |
| static inline int mmap_lock_is_contended(struct mm_struct *mm)
 | |
| {
 | |
| 	return rwsem_is_contended(&mm->mmap_lock);
 | |
| }
 | |
| 
 | |
| #endif /* _LINUX_MMAP_LOCK_H */
 |