+++ /dev/null
-#!/usr/bin/perl
-
-use strict;
-
-sub average {
- @_ == 1 or die ('Sub usage: $average = average(\@array);');
- my ($array_ref) = @_;
- my $sum;
- my $count = scalar @$array_ref;
- foreach (@$array_ref) { $sum += $_; }
- return 0 if !$count;
- return $sum / $count;
-}
-
-sub median {
- @_ == 1 or die ('Sub usage: $median = median(\@array);');
- my ($array_ref) = @_;
- my $count = scalar @$array_ref;
-
- # Sort a COPY of the array, leaving the original untouched
- my @array = sort { $a <=> $b } @$array_ref;
- if ($count % 2) {
- return $array[int($count/2)];
- } else {
- return ($array[$count/2] + $array[$count/2 - 1]) / 2;
- }
-}
-
-open FD, "</proc/net/sdpprf" || die "Couldn't find proc file";
-
-my %create_time;
-my @skb_send_till_posted;
-my @skb_send_interval;
-my @skb_post_interval;
-my $last_send_time = -1;
-my $last_post_time = -1;
-
-while (my $line = <FD>) {
- if ($line =~ /^([0-9]*).*\[([0-9 .]*)\] Created.*skb: ([0-9a-f]*)/) {
- my $idx = $1;
- my $time = $2;
- my $skb = $3;
- $create_time{$skb} = $time;
- if ($last_send_time > -1) {
- my $delta = $time - $last_send_time;
- $delta = int($delta * 1000000);
- push @skb_send_interval, $delta;
- print "skb_send_interval: $idx $skb - $delta\n";
- }
- $last_send_time = $time;
-# print "Start: $time - $skb\n";
- } elsif ($line =~ /^([0-9]*).*\[([0-9 .]*)\] post_send mid = SDP_MID_DATA.*skb: ([0-9a-f]*)/) {
- my $idx = $1;
- my $time = $2;
- my $skb = $3;
- if ($last_post_time > -1) {
- my $delta = $time - $last_post_time;
- $delta = int($delta * 1000000);
- push @skb_post_interval, $delta;
- print "skb_post_interval: $idx $skb - $delta\n";
- }
- $last_post_time = $time;
- if ($create_time{$skb}) {
- my $delta = $time - $create_time{$skb};
- $delta = int($delta * 1000000);
-# print "create..send $skb $time..$create_time{$skb}: $delta usec\n";
- push @skb_send_till_posted, $delta;
- }
- }
-}
-
-print "skb send .. posted:\n";
-print " median : " . median(\@skb_send_till_posted) . "\n";
-print " average: " . average(\@skb_send_till_posted) . "\n";
-
-print "skb send interval:\n";
-print " median : " . median(\@skb_send_interval) . "\n";
-print " average: " . average(\@skb_send_interval) . "\n";
-
-print "skb post interval:\n";
-print " median : " . median(\@skb_post_interval) . "\n";
-print " average: " . average(\@skb_post_interval) . "\n";
-
-close FD;
static int sdpprf_show(struct seq_file *m, void *v)
{
struct sdpprf_log *l = v;
- char ts[TIMESTAMP_SIZE];
+ unsigned long nsec_rem, t;
if (!sdpprf_log_count) {
seq_printf(m, "No performance logs\n");
goto out;
}
- nsec_to_timestamp(ts, l->time - start_t);
+ t = l->time - start_t;
+ nsec_rem = do_div(t, 1000000000);
- seq_printf(m, "%-6d: %s %-50s - [%d %d:%d] skb: %p %s:%d\n",
- l->idx, ts,
+ seq_printf(m, "%-6d: [%5lu.%06lu] %-50s - [%d %d:%d] skb: %p %s:%d\n",
+ l->idx, (unsigned long)t, nsec_rem/1000,
l->msg, l->pid, l->sk_num, l->sk_dport,
l->skb, l->func, l->line);
out:
sdp_seq_afinfo.seq_fops->llseek = seq_lseek;
sdp_seq_afinfo.seq_fops->release = seq_release_private;
- p = proc_net_fops_create(sdp_seq_afinfo.name, S_IRUGO,
+ p = proc_net_fops_create(&init_net, sdp_seq_afinfo.name, S_IRUGO,
sdp_seq_afinfo.seq_fops);
if (p)
p->data = &sdp_seq_afinfo;
else
- goto no_mem;;
+ goto no_mem;
#ifdef SDPSTATS_ON
- sdpstats = proc_net_fops_create(PROC_SDP_STATS,
+ sdpstats = proc_net_fops_create(&init_net, PROC_SDP_STATS,
S_IRUGO | S_IWUGO, &sdpstats_fops);
if (!sdpstats)
- goto no_mem;;
+ goto no_mem;
#endif
- sdpprf = proc_net_fops_create(PROC_SDP_PERF,
+ sdpprf = proc_net_fops_create(&init_net, PROC_SDP_PERF,
S_IRUGO | S_IWUGO, &sdpprf_fops);
if (!sdpprf)
goto no_mem;
return 0;
no_mem:
if (sdpprf)
- proc_net_remove(PROC_SDP_PERF);
+ proc_net_remove(&init_net, PROC_SDP_PERF);
if (sdpstats)
- proc_net_remove(PROC_SDP_STATS);
+ proc_net_remove(&init_net, PROC_SDP_STATS);
if (p)
- proc_net_remove(sdp_seq_afinfo.name);
+ proc_net_remove(&init_net, sdp_seq_afinfo.name);
return -ENOMEM;
}
void sdp_proc_unregister(void)
{
- proc_net_remove(sdp_seq_afinfo.name);
+ proc_net_remove(&init_net, sdp_seq_afinfo.name);
memset(sdp_seq_afinfo.seq_fops, 0, sizeof(*sdp_seq_afinfo.seq_fops));
#ifdef SDPSTATS_ON
- proc_net_remove(PROC_SDP_STATS);
+ proc_net_remove(&init_net, PROC_SDP_STATS);
#endif
- proc_net_remove(PROC_SDP_PERF);
+ proc_net_remove(&init_net, PROC_SDP_PERF);
}
#else /* CONFIG_PROC_FS */
}
- sk_stream_mem_reclaim(sk);
+ sk_mem_reclaim(sk);
if (!sock_flag(sk, SOCK_DEAD)) {
sk->sk_state_change(sk);
/* TODO: allocate from cache */
if (unlikely(ssk->isk.sk.sk_allocation)) {
- skb = sk_stream_alloc_skb(&ssk->isk.sk, SDP_HEAD_SIZE,
+ skb = sdp_stream_alloc_skb(&ssk->isk.sk, SDP_HEAD_SIZE,
ssk->isk.sk.sk_allocation);
gfp_page = ssk->isk.sk.sk_allocation | __GFP_HIGHMEM;
} else {
- skb = sk_stream_alloc_skb(&ssk->isk.sk, SDP_HEAD_SIZE,
+ skb = sdp_stream_alloc_skb(&ssk->isk.sk, SDP_HEAD_SIZE,
GFP_KERNEL);
gfp_page = GFP_HIGHUSER;
}
sdp_process_rx_q(ssk);
sdp_xmit_poll(ssk, 1); /* if has pending tx because run out of tx_credits - xmit it */
release_sock(sk);
- sk_stream_mem_reclaim(sk);
+ sk_mem_reclaim(sk);
lock_sock(sk);
rx_cq = ssk->rx_ring.cq;
if (unlikely(!rx_cq))
SDPSTATS_HIST(send_size, skb->len);
h->mid = mid;
- if (unlikely(TCP_SKB_CB(skb)->flags & TCPCB_URG))
+ if (unlikely(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_URG))
h->flags = SDP_OOB_PRES | SDP_OOB_PEND;
else
h->flags = 0;
tx_wr.num_sge = frags + 1;
tx_wr.opcode = IB_WR_SEND;
tx_wr.send_flags = IB_SEND_SIGNALED;
- if (unlikely(TCP_SKB_CB(skb)->flags & TCPCB_URG))
+ if (unlikely(TCP_SKB_CB(skb)->flags & TCPCB_FLAG_URG))
tx_wr.send_flags |= IB_SEND_SOLICITED;
{
sdp_prf(&ssk->isk.sk, skb, "tx completion. mseq:%d", ntohl(h->mseq));
}
- sk_stream_free_skb(&ssk->isk.sk, skb);
+ sk_wmem_free_skb(&ssk->isk.sk, skb);
return 0;
}