forked from mirrors/linux
		
	gen_stats: Add gnet_stats_add_queue().
This function will replace __gnet_stats_copy_queue(). It reads all arguments and adds them into the passed gnet_stats_queue argument. In contrast to __gnet_stats_copy_queue() it also copies the qlen member. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									fbf307c89e
								
							
						
					
					
						commit
						448e163f8b
					
				
					 2 changed files with 35 additions and 0 deletions
				
			
		|  | @ -62,6 +62,9 @@ int gnet_stats_copy_queue(struct gnet_dump *d, | ||||||
| void __gnet_stats_copy_queue(struct gnet_stats_queue *qstats, | void __gnet_stats_copy_queue(struct gnet_stats_queue *qstats, | ||||||
| 			     const struct gnet_stats_queue __percpu *cpu_q, | 			     const struct gnet_stats_queue __percpu *cpu_q, | ||||||
| 			     const struct gnet_stats_queue *q, __u32 qlen); | 			     const struct gnet_stats_queue *q, __u32 qlen); | ||||||
|  | void gnet_stats_add_queue(struct gnet_stats_queue *qstats, | ||||||
|  | 			  const struct gnet_stats_queue __percpu *cpu_q, | ||||||
|  | 			  const struct gnet_stats_queue *q); | ||||||
| int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len); | int gnet_stats_copy_app(struct gnet_dump *d, void *st, int len); | ||||||
| 
 | 
 | ||||||
| int gnet_stats_finish_copy(struct gnet_dump *d); | int gnet_stats_finish_copy(struct gnet_dump *d); | ||||||
|  |  | ||||||
|  | @ -321,6 +321,38 @@ void __gnet_stats_copy_queue(struct gnet_stats_queue *qstats, | ||||||
| } | } | ||||||
| EXPORT_SYMBOL(__gnet_stats_copy_queue); | EXPORT_SYMBOL(__gnet_stats_copy_queue); | ||||||
| 
 | 
 | ||||||
|  | static void gnet_stats_add_queue_cpu(struct gnet_stats_queue *qstats, | ||||||
|  | 				     const struct gnet_stats_queue __percpu *q) | ||||||
|  | { | ||||||
|  | 	int i; | ||||||
|  | 
 | ||||||
|  | 	for_each_possible_cpu(i) { | ||||||
|  | 		const struct gnet_stats_queue *qcpu = per_cpu_ptr(q, i); | ||||||
|  | 
 | ||||||
|  | 		qstats->qlen += qcpu->backlog; | ||||||
|  | 		qstats->backlog += qcpu->backlog; | ||||||
|  | 		qstats->drops += qcpu->drops; | ||||||
|  | 		qstats->requeues += qcpu->requeues; | ||||||
|  | 		qstats->overlimits += qcpu->overlimits; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void gnet_stats_add_queue(struct gnet_stats_queue *qstats, | ||||||
|  | 			  const struct gnet_stats_queue __percpu *cpu, | ||||||
|  | 			  const struct gnet_stats_queue *q) | ||||||
|  | { | ||||||
|  | 	if (cpu) { | ||||||
|  | 		gnet_stats_add_queue_cpu(qstats, cpu); | ||||||
|  | 	} else { | ||||||
|  | 		qstats->qlen += q->qlen; | ||||||
|  | 		qstats->backlog += q->backlog; | ||||||
|  | 		qstats->drops += q->drops; | ||||||
|  | 		qstats->requeues += q->requeues; | ||||||
|  | 		qstats->overlimits += q->overlimits; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | EXPORT_SYMBOL(gnet_stats_add_queue); | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * gnet_stats_copy_queue - copy queue statistics into statistics TLV |  * gnet_stats_copy_queue - copy queue statistics into statistics TLV | ||||||
|  * @d: dumping handle |  * @d: dumping handle | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Sebastian Andrzej Siewior
						Sebastian Andrzej Siewior