kernel: lantiq: vrx518_tc: add patch fix compilation warning for ptm_tc
[openwrt/openwrt.git] / package / kernel / lantiq / vrx518_tc / patches / 205-dcdp-ptm_tc-dynamically-alloc-mib.patch
1 --- a/dcdp/ptm_tc.c
2 +++ b/dcdp/ptm_tc.c
3 @@ -298,15 +298,19 @@ static int ptm_tc_get_stats(struct ptm_e
4 )
5 {
6 struct rtnl_link_stats64 *stat;
7 - struct wan_rx_mib_table rx_mib;
8 + struct wan_rx_mib_table *rx_mib;
9 unsigned int cur_cnt, last_cnt;
10 struct intel_tc_ptm_sl_stats *ptm_sl_stats;
11 struct ptm_priv *ptm_tc;
12 + int ret = 0;
13 if (!priv || !stats)
14 return -EFAULT;
15 ptm_tc = priv->ptm_tc;
16 if (!ptm_tc)
17 return -EFAULT;
18 + rx_mib = kzalloc(sizeof(*rx_mib), GFP_KERNEL);
19 + if (!rx_mib)
20 + return -ENOMEM;
21 if (bonding)
22 stats->tc_info = TC_PTM_BND_MODE;
23 else
24 @@ -340,11 +344,11 @@ static int ptm_tc_get_stats(struct ptm_e
25 ? cur_cnt - last_cnt
26 : cur_cnt + ((unsigned int)(-1) - last_cnt);
27
28 - tc_mem_read(priv, &rx_mib,
29 + tc_mem_read(priv, rx_mib,
30 fpi_addr(__RX_GIF_MIB_BASE),
31 - sizeof(rx_mib)
32 + sizeof(*rx_mib)
33 );
34 - ptm_sl_stats->wrx_gif_drop_pdu = rx_mib.wrx_dropdes_pdu;
35 + ptm_sl_stats->wrx_gif_drop_pdu = rx_mib->wrx_dropdes_pdu;
36
37 cur_cnt = tc_r32(GIF0_RX_CRC_ERR_CNT);
38 last_cnt = priv->ptm_mib.rx_crc_err_pdu[0];
39 @@ -358,7 +362,7 @@ static int ptm_tc_get_stats(struct ptm_e
40 ? cur_cnt - last_cnt
41 : cur_cnt + ((unsigned int)(-1) - last_cnt);
42
43 - ptm_sl_stats->wrx_gif_total_bytes = rx_mib.wrx_total_bytes;
44 + ptm_sl_stats->wrx_gif_total_bytes = rx_mib->wrx_total_bytes;
45 cur_cnt = sb_r32(__US_TC_LOCAL_Q_CFG_CTXT_BASE +
46 offsetof(desq_cfg_ctxt_t, deq_pkt_cnt) / 4);
47 last_cnt = priv->ptm_mib.tx_total_pdu[0];
48 @@ -376,90 +380,108 @@ static int ptm_tc_get_stats(struct ptm_e
49 /* For bonding information */
50 if (bonding) {
51 int i;
52 - struct intel_tc_ptm_bonding_stats ptm_ds;
53 - struct intel_tc_ptm_bonding_stats ptm_us;
54 + struct intel_tc_ptm_bonding_stats *ptm_ds;
55 + struct intel_tc_ptm_bonding_stats *ptm_us;
56 struct intel_tc_ptm_bonding_stats *ptm_bonding_stats;
57 +
58 + ptm_ds = kzalloc(sizeof(*ptm_ds), GFP_KERNEL);
59 + if (!ptm_ds) {
60 + ret = -ENOMEM;
61 + goto free_rx_mib;
62 + }
63 +
64 + ptm_us = kzalloc(sizeof(*ptm_us), GFP_KERNEL);
65 + if (!ptm_us) {
66 + ret = -ENOMEM;
67 + goto free_ptm_ds;
68 + }
69 +
70 priv = tc_ep_priv(0);
71 - ptm_tc_bond_get_stats(priv, &ptm_ds);
72 + ptm_tc_bond_get_stats(priv, ptm_ds);
73 priv = tc_ep_priv(1);
74 - ptm_tc_bond_get_stats(priv, &ptm_us);
75 + ptm_tc_bond_get_stats(priv, ptm_us);
76 ptm_bonding_stats =
77 &(stats->stats.ptm_tc_stats.pmt_bonding_stats);
78 for (i = 0; i < 8; i++)
79 ptm_bonding_stats->us_gif_mib[i] =
80 - ptm_ds.us_gif_mib[i] + ptm_us.us_gif_mib[i];
81 + ptm_ds->us_gif_mib[i] + ptm_us->us_gif_mib[i];
82 for (i = 0; i < 8; i++) {
83 ptm_bonding_stats->ds_gif_mib[i].rx_frag_byte_cnt =
84 - ptm_ds.ds_gif_mib[i].rx_frag_byte_cnt
85 - + ptm_us.ds_gif_mib[i].rx_frag_byte_cnt;
86 + ptm_ds->ds_gif_mib[i].rx_frag_byte_cnt
87 + + ptm_us->ds_gif_mib[i].rx_frag_byte_cnt;
88 ptm_bonding_stats->ds_gif_mib[i].rx_byte_cnt =
89 - ptm_ds.ds_gif_mib[i].rx_byte_cnt
90 - + ptm_us.ds_gif_mib[i].rx_byte_cnt;
91 + ptm_ds->ds_gif_mib[i].rx_byte_cnt
92 + + ptm_us->ds_gif_mib[i].rx_byte_cnt;
93 ptm_bonding_stats->ds_gif_mib[i].rx_of_frag_byte_cnt =
94 - ptm_ds.ds_gif_mib[i].rx_of_frag_byte_cnt
95 - + ptm_us.ds_gif_mib[i].rx_of_frag_byte_cnt;
96 + ptm_ds->ds_gif_mib[i].rx_of_frag_byte_cnt
97 + + ptm_us->ds_gif_mib[i].rx_of_frag_byte_cnt;
98 ptm_bonding_stats->ds_gif_mib[i].rx_of_byte_cnt =
99 - ptm_ds.ds_gif_mib[i].rx_of_byte_cnt
100 - + ptm_us.ds_gif_mib[i].rx_of_byte_cnt;
101 + ptm_ds->ds_gif_mib[i].rx_of_byte_cnt
102 + + ptm_us->ds_gif_mib[i].rx_of_byte_cnt;
103 ptm_bonding_stats->ds_gif_mib[i].rx_oor_frag_byte_cnt =
104 - ptm_ds.ds_gif_mib[i].rx_oor_frag_byte_cnt
105 - + ptm_us.ds_gif_mib[i].rx_oor_frag_byte_cnt;
106 + ptm_ds->ds_gif_mib[i].rx_oor_frag_byte_cnt
107 + + ptm_us->ds_gif_mib[i].rx_oor_frag_byte_cnt;
108 ptm_bonding_stats->ds_gif_mib[i].rx_miss_frag_byte_cnt =
109 - ptm_ds.ds_gif_mib[i].rx_miss_frag_byte_cnt
110 - + ptm_us.ds_gif_mib[i].rx_miss_frag_byte_cnt;
111 + ptm_ds->ds_gif_mib[i].rx_miss_frag_byte_cnt
112 + + ptm_us->ds_gif_mib[i].rx_miss_frag_byte_cnt;
113 ptm_bonding_stats->ds_gif_mib[i].rx_to_frag_byte_cnt =
114 - ptm_ds.ds_gif_mib[i].rx_to_frag_byte_cnt
115 - + ptm_us.ds_gif_mib[i].rx_to_frag_byte_cnt;
116 + ptm_ds->ds_gif_mib[i].rx_to_frag_byte_cnt
117 + + ptm_us->ds_gif_mib[i].rx_to_frag_byte_cnt;
118 }
119 for (i = 0; i < 4; i++) {
120 ptm_bonding_stats->ds_bg_mib[i].conform_pkt_cnt =
121 - ptm_ds.ds_bg_mib[i].conform_pkt_cnt
122 - + ptm_us.ds_bg_mib[i].conform_pkt_cnt;
123 + ptm_ds->ds_bg_mib[i].conform_pkt_cnt
124 + + ptm_us->ds_bg_mib[i].conform_pkt_cnt;
125 ptm_bonding_stats->ds_bg_mib[i].conform_frag_cnt =
126 - ptm_ds.ds_bg_mib[i].conform_frag_cnt
127 - + ptm_us.ds_bg_mib[i].conform_frag_cnt;
128 + ptm_ds->ds_bg_mib[i].conform_frag_cnt
129 + + ptm_us->ds_bg_mib[i].conform_frag_cnt;
130 ptm_bonding_stats->ds_bg_mib[i].conform_byte_cnt =
131 - ptm_ds.ds_bg_mib[i].conform_byte_cnt
132 - + ptm_us.ds_bg_mib[i].conform_byte_cnt;
133 + ptm_ds->ds_bg_mib[i].conform_byte_cnt
134 + + ptm_us->ds_bg_mib[i].conform_byte_cnt;
135 ptm_bonding_stats->ds_bg_mib[i].no_sop_pkt_cnt =
136 - ptm_ds.ds_bg_mib[i].no_sop_pkt_cnt
137 - + ptm_us.ds_bg_mib[i].no_sop_pkt_cnt;
138 + ptm_ds->ds_bg_mib[i].no_sop_pkt_cnt
139 + + ptm_us->ds_bg_mib[i].no_sop_pkt_cnt;
140 ptm_bonding_stats->ds_bg_mib[i].no_sop_frag_cnt =
141 - ptm_ds.ds_bg_mib[i].no_sop_frag_cnt
142 - + ptm_us.ds_bg_mib[i].no_sop_frag_cnt;
143 + ptm_ds->ds_bg_mib[i].no_sop_frag_cnt
144 + + ptm_us->ds_bg_mib[i].no_sop_frag_cnt;
145 ptm_bonding_stats->ds_bg_mib[i].no_sop_byte_cnt =
146 - ptm_ds.ds_bg_mib[i].no_sop_byte_cnt
147 - + ptm_us.ds_bg_mib[i].no_sop_byte_cnt;
148 + ptm_ds->ds_bg_mib[i].no_sop_byte_cnt
149 + + ptm_us->ds_bg_mib[i].no_sop_byte_cnt;
150 ptm_bonding_stats->ds_bg_mib[i].no_eop_pkt_cnt =
151 - ptm_ds.ds_bg_mib[i].no_eop_pkt_cnt
152 - + ptm_us.ds_bg_mib[i].no_eop_pkt_cnt;
153 + ptm_ds->ds_bg_mib[i].no_eop_pkt_cnt
154 + + ptm_us->ds_bg_mib[i].no_eop_pkt_cnt;
155 ptm_bonding_stats->ds_bg_mib[i].no_eop_frag_cnt =
156 - ptm_ds.ds_bg_mib[i].no_eop_frag_cnt
157 - + ptm_us.ds_bg_mib[i].no_eop_frag_cnt;
158 + ptm_ds->ds_bg_mib[i].no_eop_frag_cnt
159 + + ptm_us->ds_bg_mib[i].no_eop_frag_cnt;
160 ptm_bonding_stats->ds_bg_mib[i].no_eop_byte_cnt =
161 - ptm_ds.ds_bg_mib[i].no_eop_byte_cnt
162 - + ptm_us.ds_bg_mib[i].no_eop_byte_cnt;
163 + ptm_ds->ds_bg_mib[i].no_eop_byte_cnt
164 + + ptm_us->ds_bg_mib[i].no_eop_byte_cnt;
165 ptm_bonding_stats->ds_bg_mib[i].oversize_pkt_cnt =
166 - ptm_ds.ds_bg_mib[i].oversize_pkt_cnt
167 - + ptm_us.ds_bg_mib[i].oversize_pkt_cnt;
168 + ptm_ds->ds_bg_mib[i].oversize_pkt_cnt
169 + + ptm_us->ds_bg_mib[i].oversize_pkt_cnt;
170 ptm_bonding_stats->ds_bg_mib[i].oversize_frag_cnt =
171 - ptm_ds.ds_bg_mib[i].oversize_frag_cnt
172 - + ptm_us.ds_bg_mib[i].oversize_frag_cnt;
173 + ptm_ds->ds_bg_mib[i].oversize_frag_cnt
174 + + ptm_us->ds_bg_mib[i].oversize_frag_cnt;
175 ptm_bonding_stats->ds_bg_mib[i].oversize_byte_cnt =
176 - ptm_ds.ds_bg_mib[i].oversize_byte_cnt
177 - + ptm_us.ds_bg_mib[i].oversize_byte_cnt;
178 + ptm_ds->ds_bg_mib[i].oversize_byte_cnt
179 + + ptm_us->ds_bg_mib[i].oversize_byte_cnt;
180 ptm_bonding_stats->ds_bg_mib[i].noncosec_pkt_cnt =
181 - ptm_ds.ds_bg_mib[i].noncosec_pkt_cnt
182 - + ptm_us.ds_bg_mib[i].noncosec_pkt_cnt;
183 + ptm_ds->ds_bg_mib[i].noncosec_pkt_cnt
184 + + ptm_us->ds_bg_mib[i].noncosec_pkt_cnt;
185 ptm_bonding_stats->ds_bg_mib[i].noncosec_frag_cnt =
186 - ptm_ds.ds_bg_mib[i].noncosec_frag_cnt
187 - + ptm_us.ds_bg_mib[i].noncosec_frag_cnt;
188 + ptm_ds->ds_bg_mib[i].noncosec_frag_cnt
189 + + ptm_us->ds_bg_mib[i].noncosec_frag_cnt;
190 ptm_bonding_stats->ds_bg_mib[i].noncosec_byte_cnt =
191 - ptm_ds.ds_bg_mib[i].noncosec_byte_cnt
192 - + ptm_us.ds_bg_mib[i].noncosec_byte_cnt;
193 + ptm_ds->ds_bg_mib[i].noncosec_byte_cnt
194 + + ptm_us->ds_bg_mib[i].noncosec_byte_cnt;
195 }
196 + kfree(ptm_us);
197 +free_ptm_ds:
198 + kfree(ptm_ds);
199 }
200 - return 0;
201 +free_rx_mib:
202 + kfree(rx_mib);
203 + return ret;
204 }
205 static int ptm_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
206 {