CC: [email protected]
CC: [email protected]
TO: Herbert Xu <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   251a1524293d0a90c4d5060f65f42a3016280049
commit: be769db2f95861cc8c7c8fedcc71a8c39b803b10 net: Get rid of consume_skb 
when tracing is off
date:   12 months ago
:::::: branch date: 4 hours ago
:::::: commit date: 12 months ago
config: ia64-randconfig-m031-20210804 (attached as .config)
compiler: ia64-linux-gcc (GCC) 10.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>
Reported-by: Dan Carpenter <[email protected]>

New smatch warnings:
drivers/isdn/hardware/mISDN/hfcmulti.c:2158 hfcmulti_tx() error: dereferencing 
freed memory '*sp'

Old smatch warnings:
drivers/isdn/hardware/mISDN/hfcmulti.c:2162 hfcmulti_tx() error: dereferencing 
freed memory '*sp'
drivers/isdn/hardware/mISDN/hfcmulti.c:4411 setup_pci() warn: argument 2 to 
%#lx specifier is cast from pointer
drivers/isdn/hardware/mISDN/hfcmulti.c:4434 setup_pci() warn: argument 3 to 
%#lx specifier is cast from pointer
drivers/isdn/hardware/mISDN/hfcmulti.c:4462 setup_pci() warn: argument 3 to 
%#lx specifier is cast from pointer
drivers/isdn/hardware/mISDN/hfcmulti.c:4504 setup_pci() warn: 'hc->plx_membase' 
not released on lines: 4419.

vim +2158 drivers/isdn/hardware/mISDN/hfcmulti.c

af69fb3a8ffa37 Karsten Keil      2008-07-27  1925  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1926  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1927  /*
af69fb3a8ffa37 Karsten Keil      2008-07-27  1928   * fill fifo as much as 
possible
af69fb3a8ffa37 Karsten Keil      2008-07-27  1929   */
af69fb3a8ffa37 Karsten Keil      2008-07-27  1930  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1931  static void
af69fb3a8ffa37 Karsten Keil      2008-07-27  1932  hfcmulti_tx(struct hfc_multi 
*hc, int ch)
af69fb3a8ffa37 Karsten Keil      2008-07-27  1933  {
af69fb3a8ffa37 Karsten Keil      2008-07-27  1934       int i, ii, temp, len = 
0;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1935       int Zspace, z1, z2; /* 
must be int for calculation */
af69fb3a8ffa37 Karsten Keil      2008-07-27  1936       int Fspace, f1, f2;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1937       u_char *d;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1938       int *txpending, slot_tx;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1939       struct  bchannel *bch;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1940       struct  dchannel *dch;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1941       struct  sk_buff **sp = 
NULL;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1942       int *idxp;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1943  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1944       bch = hc->chan[ch].bch;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1945       dch = hc->chan[ch].dch;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1946       if ((!dch) && (!bch))
af69fb3a8ffa37 Karsten Keil      2008-07-27  1947               return;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1948  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1949       txpending = 
&hc->chan[ch].txpending;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1950       slot_tx = 
hc->chan[ch].slot_tx;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1951       if (dch) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  1952               if 
(!test_bit(FLG_ACTIVE, &dch->Flags))
af69fb3a8ffa37 Karsten Keil      2008-07-27  1953                       return;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1954               sp = 
&dch->tx_skb;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1955               idxp = 
&dch->tx_idx;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1956       } else {
af69fb3a8ffa37 Karsten Keil      2008-07-27  1957               if 
(!test_bit(FLG_ACTIVE, &bch->Flags))
af69fb3a8ffa37 Karsten Keil      2008-07-27  1958                       return;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1959               sp = 
&bch->tx_skb;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1960               idxp = 
&bch->tx_idx;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1961       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  1962       if (*sp)
af69fb3a8ffa37 Karsten Keil      2008-07-27  1963               len = 
(*sp)->len;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1964  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1965       if ((!len) && 
*txpending != 1)
af69fb3a8ffa37 Karsten Keil      2008-07-27  1966               return; /* no 
data */
af69fb3a8ffa37 Karsten Keil      2008-07-27  1967  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1968       if 
(test_bit(HFC_CHIP_B410P, &hc->chip) &&
af69fb3a8ffa37 Karsten Keil      2008-07-27  1969           
(hc->chan[ch].protocol == ISDN_P_B_RAW) &&
af69fb3a8ffa37 Karsten Keil      2008-07-27  1970           
(hc->chan[ch].slot_rx < 0) &&
af69fb3a8ffa37 Karsten Keil      2008-07-27  1971           
(hc->chan[ch].slot_tx < 0))
af69fb3a8ffa37 Karsten Keil      2008-07-27  1972               
HFC_outb_nodebug(hc, R_FIFO, 0x20 | (ch << 1));
af69fb3a8ffa37 Karsten Keil      2008-07-27  1973       else
af69fb3a8ffa37 Karsten Keil      2008-07-27  1974               
HFC_outb_nodebug(hc, R_FIFO, ch << 1);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1975       HFC_wait_nodebug(hc);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1976  
af69fb3a8ffa37 Karsten Keil      2008-07-27  1977       if (*txpending == 2) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  1978               /* reset fifo */
af69fb3a8ffa37 Karsten Keil      2008-07-27  1979               
HFC_outb_nodebug(hc, R_INC_RES_FIFO, V_RES_F);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1980               
HFC_wait_nodebug(hc);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1981               HFC_outb(hc, 
A_SUBCH_CFG, 0);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1982               *txpending = 1;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1983       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  1984  next_frame:
af69fb3a8ffa37 Karsten Keil      2008-07-27  1985       if (dch || 
test_bit(FLG_HDLC, &bch->Flags)) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  1986               f1 = 
HFC_inb_nodebug(hc, A_F1);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1987               f2 = 
HFC_inb_nodebug(hc, A_F2);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1988               while (f2 != 
(temp = HFC_inb_nodebug(hc, A_F2))) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  1989                       if 
(debug & DEBUG_HFCMULTI_FIFO)
af69fb3a8ffa37 Karsten Keil      2008-07-27  1990                               
printk(KERN_DEBUG
af69fb3a8ffa37 Karsten Keil      2008-07-27  1991                               
       "%s(card %d): reread f2 because %d!=%d\n",
af69fb3a8ffa37 Karsten Keil      2008-07-27  1992                               
       __func__, hc->id + 1, temp, f2);
af69fb3a8ffa37 Karsten Keil      2008-07-27  1993                       f2 = 
temp; /* repeat until F2 is equal */
af69fb3a8ffa37 Karsten Keil      2008-07-27  1994               }
af69fb3a8ffa37 Karsten Keil      2008-07-27  1995               Fspace = f2 - 
f1 - 1;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1996               if (Fspace < 0)
af69fb3a8ffa37 Karsten Keil      2008-07-27  1997                       Fspace 
+= hc->Flen;
af69fb3a8ffa37 Karsten Keil      2008-07-27  1998               /*
af69fb3a8ffa37 Karsten Keil      2008-07-27  1999                * Old FIFO 
handling doesn't give us the current Z2 read
af69fb3a8ffa37 Karsten Keil      2008-07-27  2000                * pointer, so 
we cannot send the next frame before the fifo
af69fb3a8ffa37 Karsten Keil      2008-07-27  2001                * is empty. It 
makes no difference except for a slightly
af69fb3a8ffa37 Karsten Keil      2008-07-27  2002                * lower 
performance.
af69fb3a8ffa37 Karsten Keil      2008-07-27  2003                */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2004               if 
(test_bit(HFC_CHIP_REVISION0, &hc->chip)) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2005                       if (f1 
!= f2)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2006                               
Fspace = 0;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2007                       else
af69fb3a8ffa37 Karsten Keil      2008-07-27  2008                               
Fspace = 1;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2009               }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2010               /* one frame 
only for ST D-channels, to allow resending */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2011               if (hc->ctype 
!= HFC_TYPE_E1 && dch) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2012                       if (f1 
!= f2)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2013                               
Fspace = 0;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2014               }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2015               /* F-counter 
full condition */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2016               if (Fspace == 0)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2017                       return;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2018       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2019       z1 = 
HFC_inw_nodebug(hc, A_Z1) - hc->Zmin;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2020       z2 = 
HFC_inw_nodebug(hc, A_Z2) - hc->Zmin;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2021       while (z2 != (temp = 
(HFC_inw_nodebug(hc, A_Z2) - hc->Zmin))) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2022               if (debug & 
DEBUG_HFCMULTI_FIFO)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2023                       
printk(KERN_DEBUG "%s(card %d): reread z2 because "
af69fb3a8ffa37 Karsten Keil      2008-07-27  2024                              
"%d!=%d\n", __func__, hc->id + 1, temp, z2);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2025               z2 = temp; /* 
repeat unti Z2 is equal */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2026       }
7cfa153dd709f1 Andreas Eversberg 2009-05-22  2027       hc->chan[ch].Zfill = z1 
- z2;
7cfa153dd709f1 Andreas Eversberg 2009-05-22  2028       if (hc->chan[ch].Zfill 
< 0)
7cfa153dd709f1 Andreas Eversberg 2009-05-22  2029               
hc->chan[ch].Zfill += hc->Zlen;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2030       Zspace = z2 - z1;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2031       if (Zspace <= 0)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2032               Zspace += 
hc->Zlen;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2033       Zspace -= 4; /* keep 
not too full, so pointers will not overrun */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2034       /* fill transparent 
data only to maxinum transparent load (minus 4) */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2035       if (bch && 
test_bit(FLG_TRANSPARENT, &bch->Flags))
af69fb3a8ffa37 Karsten Keil      2008-07-27  2036               Zspace = Zspace 
- hc->Zlen + hc->max_trans;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2037       if (Zspace <= 0) /* no 
space of 4 bytes */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2038               return;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2039  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2040       /* if no data */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2041       if (!len) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2042               if (z1 == z2) { 
/* empty */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2043                       /* if 
done with FIFO audio data during PCM connection */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2044                       if (bch 
&& (!test_bit(FLG_HDLC, &bch->Flags)) &&
af69fb3a8ffa37 Karsten Keil      2008-07-27  2045                           
*txpending && slot_tx >= 0) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2046                               
if (debug & DEBUG_HFCMULTI_MODE)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2047                               
        printk(KERN_DEBUG
af69fb3a8ffa37 Karsten Keil      2008-07-27  2048                               
               "%s: reconnecting PCM due to no "
af69fb3a8ffa37 Karsten Keil      2008-07-27  2049                               
               "more FIFO data: channel %d "
af69fb3a8ffa37 Karsten Keil      2008-07-27  2050                               
               "slot_tx %d\n",
af69fb3a8ffa37 Karsten Keil      2008-07-27  2051                               
               __func__, ch, slot_tx);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2052                               
/* connect slot */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2053                               
if (hc->ctype == HFC_TYPE_XHFC)
db9bb63a1b5b65 Karsten Keil      2009-05-22  2054                               
        HFC_outb(hc, A_CON_HDLC, 0xc0
db9bb63a1b5b65 Karsten Keil      2009-05-22  2055                               
                 | 0x07 << 2 | V_HDLC_TRP | V_IFF);
db9bb63a1b5b65 Karsten Keil      2009-05-22  2056                               
/* Enable FIFO, no interrupt */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2057                               
else
af69fb3a8ffa37 Karsten Keil      2008-07-27  2058                               
        HFC_outb(hc, A_CON_HDLC, 0xc0 | 0x00 |
af69fb3a8ffa37 Karsten Keil      2008-07-27  2059                               
                 V_HDLC_TRP | V_IFF);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2060                               
HFC_outb_nodebug(hc, R_FIFO, ch << 1 | 1);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2061                               
HFC_wait_nodebug(hc);
db9bb63a1b5b65 Karsten Keil      2009-05-22  2062                               
if (hc->ctype == HFC_TYPE_XHFC)
db9bb63a1b5b65 Karsten Keil      2009-05-22  2063                               
        HFC_outb(hc, A_CON_HDLC, 0xc0
db9bb63a1b5b65 Karsten Keil      2009-05-22  2064                               
                 | 0x07 << 2 | V_HDLC_TRP | V_IFF);
db9bb63a1b5b65 Karsten Keil      2009-05-22  2065                               
/* Enable FIFO, no interrupt */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2066                               
else
af69fb3a8ffa37 Karsten Keil      2008-07-27  2067                               
        HFC_outb(hc, A_CON_HDLC, 0xc0 | 0x00 |
af69fb3a8ffa37 Karsten Keil      2008-07-27  2068                               
                 V_HDLC_TRP | V_IFF);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2069                               
HFC_outb_nodebug(hc, R_FIFO, ch << 1);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2070                               
HFC_wait_nodebug(hc);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2071                       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2072                       
*txpending = 0;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2073               }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2074               return; /* no 
data */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2075       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2076  
8dd2f36f317569 Andreas Eversberg 2008-08-02  2077       /* "fill fifo if empty" 
feature */
8dd2f36f317569 Andreas Eversberg 2008-08-02  2078       if (bch && 
test_bit(FLG_FILLEMPTY, &bch->Flags)
8dd2f36f317569 Andreas Eversberg 2008-08-02  2079           && 
!test_bit(FLG_HDLC, &bch->Flags) && z2 == z1) {
8dd2f36f317569 Andreas Eversberg 2008-08-02  2080               if (debug & 
DEBUG_HFCMULTI_FILL)
8dd2f36f317569 Andreas Eversberg 2008-08-02  2081                       
printk(KERN_DEBUG "%s: buffer empty, so we have "
8dd2f36f317569 Andreas Eversberg 2008-08-02  2082                              
"underrun\n", __func__);
8dd2f36f317569 Andreas Eversberg 2008-08-02  2083               /* fill buffer, 
to prevent future underrun */
8dd2f36f317569 Andreas Eversberg 2008-08-02  2084               
hc->write_fifo(hc, hc->silence_data, poll >> 1);
8dd2f36f317569 Andreas Eversberg 2008-08-02  2085               Zspace -= (poll 
>> 1);
8dd2f36f317569 Andreas Eversberg 2008-08-02  2086       }
8dd2f36f317569 Andreas Eversberg 2008-08-02  2087  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2088       /* if audio data and 
connected slot */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2089       if (bch && 
(!test_bit(FLG_HDLC, &bch->Flags)) && (!*txpending)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2090           && slot_tx >= 0) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2091               if (debug & 
DEBUG_HFCMULTI_MODE)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2092                       
printk(KERN_DEBUG "%s: disconnecting PCM due to "
af69fb3a8ffa37 Karsten Keil      2008-07-27  2093                              
"FIFO data: channel %d slot_tx %d\n",
af69fb3a8ffa37 Karsten Keil      2008-07-27  2094                              
__func__, ch, slot_tx);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2095               /* disconnect 
slot */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2096               if (hc->ctype 
== HFC_TYPE_XHFC)
db9bb63a1b5b65 Karsten Keil      2009-05-22  2097                       
HFC_outb(hc, A_CON_HDLC, 0x80
db9bb63a1b5b65 Karsten Keil      2009-05-22  2098                               
 | 0x07 << 2 | V_HDLC_TRP | V_IFF);
db9bb63a1b5b65 Karsten Keil      2009-05-22  2099               /* Enable FIFO, 
no interrupt */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2100               else
db9bb63a1b5b65 Karsten Keil      2009-05-22  2101                       
HFC_outb(hc, A_CON_HDLC, 0x80 | 0x00 |
db9bb63a1b5b65 Karsten Keil      2009-05-22  2102                               
 V_HDLC_TRP | V_IFF);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2103               
HFC_outb_nodebug(hc, R_FIFO, ch << 1 | 1);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2104               
HFC_wait_nodebug(hc);
db9bb63a1b5b65 Karsten Keil      2009-05-22  2105               if (hc->ctype 
== HFC_TYPE_XHFC)
db9bb63a1b5b65 Karsten Keil      2009-05-22  2106                       
HFC_outb(hc, A_CON_HDLC, 0x80
db9bb63a1b5b65 Karsten Keil      2009-05-22  2107                               
 | 0x07 << 2 | V_HDLC_TRP | V_IFF);
db9bb63a1b5b65 Karsten Keil      2009-05-22  2108               /* Enable FIFO, 
no interrupt */
db9bb63a1b5b65 Karsten Keil      2009-05-22  2109               else
db9bb63a1b5b65 Karsten Keil      2009-05-22  2110                       
HFC_outb(hc, A_CON_HDLC, 0x80 | 0x00 |
db9bb63a1b5b65 Karsten Keil      2009-05-22  2111                               
 V_HDLC_TRP | V_IFF);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2112               
HFC_outb_nodebug(hc, R_FIFO, ch << 1);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2113               
HFC_wait_nodebug(hc);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2114       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2115       *txpending = 1;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2116  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2117       /* show activity */
864fd636b196e7 Andreas Eversberg 2012-04-24  2118       if (dch)
864fd636b196e7 Andreas Eversberg 2012-04-24  2119               hc->activity_tx 
|= 1 << hc->chan[ch].port;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2120  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2121       /* fill fifo to what we 
have left */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2122       ii = len;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2123       if (dch || 
test_bit(FLG_HDLC, &bch->Flags))
af69fb3a8ffa37 Karsten Keil      2008-07-27  2124               temp = 1;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2125       else
af69fb3a8ffa37 Karsten Keil      2008-07-27  2126               temp = 0;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2127       i = *idxp;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2128       d = (*sp)->data + i;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2129       if (ii - i > Zspace)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2130               ii = Zspace + i;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2131       if (debug & 
DEBUG_HFCMULTI_FIFO)
af69fb3a8ffa37 Karsten Keil      2008-07-27  2132               
printk(KERN_DEBUG "%s(card %d): fifo(%d) has %d bytes space "
af69fb3a8ffa37 Karsten Keil      2008-07-27  2133                      "left 
(z1=%04x, z2=%04x) sending %d of %d bytes %s\n",
af69fb3a8ffa37 Karsten Keil      2008-07-27  2134                      
__func__, hc->id + 1, ch, Zspace, z1, z2, ii-i, len-i,
af69fb3a8ffa37 Karsten Keil      2008-07-27  2135                      temp ? 
"HDLC" : "TRANS");
af69fb3a8ffa37 Karsten Keil      2008-07-27  2136  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2137       /* Have to prep the 
audio data */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2138       hc->write_fifo(hc, d, 
ii - i);
7cfa153dd709f1 Andreas Eversberg 2009-05-22  2139       hc->chan[ch].Zfill += 
ii - i;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2140       *idxp = ii;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2141  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2142       /* if not all data has 
been written */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2143       if (ii != len) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2144               /* NOTE: fifo 
is started by the calling function */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2145               return;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2146       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2147  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2148       /* if all data has been 
written, terminate frame */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2149       if (dch || 
test_bit(FLG_HDLC, &bch->Flags)) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2150               /* increment 
f-counter */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2151               
HFC_outb_nodebug(hc, R_INC_RES_FIFO, V_INC_F);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2152               
HFC_wait_nodebug(hc);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2153       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2154  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2155       dev_kfree_skb(*sp);
8bfddfbe210086 Karsten Keil      2012-05-15  2156       /* check for next frame 
*/
8bfddfbe210086 Karsten Keil      2012-05-15  2157       if (bch && 
get_next_bframe(bch)) {
af69fb3a8ffa37 Karsten Keil      2008-07-27 @2158               len = 
(*sp)->len;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2159               goto next_frame;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2160       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2161       if (dch && 
get_next_dframe(dch)) {
af69fb3a8ffa37 Karsten Keil      2008-07-27  2162               len = 
(*sp)->len;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2163               goto next_frame;
af69fb3a8ffa37 Karsten Keil      2008-07-27  2164       }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2165  
af69fb3a8ffa37 Karsten Keil      2008-07-27  2166       /*
af69fb3a8ffa37 Karsten Keil      2008-07-27  2167        * now we have no more 
data, so in case of transparent,
af69fb3a8ffa37 Karsten Keil      2008-07-27  2168        * we set the last byte 
in fifo to 'silence' in case we will get
af69fb3a8ffa37 Karsten Keil      2008-07-27  2169        * no more data at all. 
this prevents sending an undefined value.
af69fb3a8ffa37 Karsten Keil      2008-07-27  2170        */
af69fb3a8ffa37 Karsten Keil      2008-07-27  2171       if (bch && 
test_bit(FLG_TRANSPARENT, &bch->Flags))
8dd2f36f317569 Andreas Eversberg 2008-08-02  2172               
HFC_outb_nodebug(hc, A_FIFO_DATA0_NOINC, hc->silence);
af69fb3a8ffa37 Karsten Keil      2008-07-27  2173  }
af69fb3a8ffa37 Karsten Keil      2008-07-27  2174  

:::::: The code at line 2158 was first introduced by commit
:::::: af69fb3a8ffa37e986db00ed93099dc44babeef4 Add mISDN HFC multiport driver

:::::: TO: Karsten Keil <[email protected]>
:::::: CC: Karsten Keil <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to