mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 14:04:26 -04:00 
			
		
		
		
	Refreshed all patches Remove upstreamed patches. - 103-MIPS-ath79-fix-register-address-in-ath79_ddr_wb_flus.patch - 403-mtd_fix_cfi_cmdset_0002_status_check.patch - 001-4.11-01-mtd-m25p80-consider-max-message-size-in-m25p80_read.patch - 001-4.15-08-bcm63xx_enet-correct-clock-usage.patch - 001-4.15-09-bcm63xx_enet-do-not-write-to-random-DMA-channel-on-B.patch - 900-gen_stats-fix-netlink-stats-padding.patch Introduce a new backported patch to address ext4 breakage, introduced in 4.9.112 - backport-4.9/500-ext4-fix-check-to-prevent-initializing-reserved-inod.patch This patch has been slightly altered to compensate for a new helper function introduced in later kernels. Also add ARM64_SSBD symbol to ARM64 targets still running kernel 4.9 Compile-tested on: ar71xx, bcm2710 Runtime-tested on: ar71xx Signed-off-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
		
			
				
	
	
		
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From a9b204d1564702b704ad6fe74f10a102c7b87ba3 Mon Sep 17 00:00:00 2001
 | |
| From: Eric Dumazet <edumazet@google.com>
 | |
| Date: Sat, 3 Dec 2016 11:14:53 -0800
 | |
| Subject: [PATCH 04/10] tcp: tsq: avoid one atomic in tcp_wfree()
 | |
| 
 | |
| Under high load, tcp_wfree() has an atomic operation trying
 | |
| to schedule a tasklet over and over.
 | |
| 
 | |
| We can schedule it only if our per cpu list was empty.
 | |
| 
 | |
| Signed-off-by: Eric Dumazet <edumazet@google.com>
 | |
| Signed-off-by: David S. Miller <davem@davemloft.net>
 | |
| ---
 | |
|  net/ipv4/tcp_output.c | 5 ++++-
 | |
|  1 file changed, 4 insertions(+), 1 deletion(-)
 | |
| 
 | |
| --- a/net/ipv4/tcp_output.c
 | |
| +++ b/net/ipv4/tcp_output.c
 | |
| @@ -885,6 +885,7 @@ void tcp_wfree(struct sk_buff *skb)
 | |
|  
 | |
|  	for (oval = READ_ONCE(tp->tsq_flags);; oval = nval) {
 | |
|  		struct tsq_tasklet *tsq;
 | |
| +		bool empty;
 | |
|  
 | |
|  		if (!(oval & TSQF_THROTTLED) || (oval & TSQF_QUEUED))
 | |
|  			goto out;
 | |
| @@ -897,8 +898,10 @@ void tcp_wfree(struct sk_buff *skb)
 | |
|  		/* queue this socket to tasklet queue */
 | |
|  		local_irq_save(flags);
 | |
|  		tsq = this_cpu_ptr(&tsq_tasklet);
 | |
| +		empty = list_empty(&tsq->head);
 | |
|  		list_add(&tp->tsq_node, &tsq->head);
 | |
| -		tasklet_schedule(&tsq->tasklet);
 | |
| +		if (empty)
 | |
| +			tasklet_schedule(&tsq->tasklet);
 | |
|  		local_irq_restore(flags);
 | |
|  		return;
 | |
|  	}
 |