TO: Alan Stern <[email protected]>
CC: Felipe Balbi <[email protected]>
CC: Peter Chen <[email protected]>
tree: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master
head: ebc7163fafb29c390519378897c201748acc2756
commit: 5ca1ccdaa88ac15d1468c5e8bb40885dc6b8a364 [5861/6262] usb: gadget:
net2272: use udc-core's reset notifier
reproduce:
# apt-get install sparse
git checkout 5ca1ccdaa88ac15d1468c5e8bb40885dc6b8a364
make ARCH=x86_64 allmodconfig
make C=1 CF=-D__CHECK_ENDIAN__
:::::: branch date: 6 hours ago
:::::: commit date: 2 days ago
drivers/usb/gadget/udc/net2272.c:1828:68: sparse: incorrect type in argument
2 (different base types)
drivers/usb/gadget/udc/net2272.c:1828:68: expected unsigned short
[unsigned] [usertype] wIndex
drivers/usb/gadget/udc/net2272.c:1828:68: got restricted __le16
[assigned] [usertype] wIndex
drivers/usb/gadget/udc/net2272.c:1829:46: sparse: restricted __le16 degrades
to integer
drivers/usb/gadget/udc/net2272.c:1832:48: sparse: incorrect type in
assignment (different base types)
drivers/usb/gadget/udc/net2272.c:1832:48: expected unsigned short
[unsigned] [usertype] status
drivers/usb/gadget/udc/net2272.c:1832:48: got restricted __le16
[usertype] <noident>
drivers/usb/gadget/udc/net2272.c:1834:48: sparse: incorrect type in
assignment (different base types)
drivers/usb/gadget/udc/net2272.c:1834:48: expected unsigned short
[unsigned] [usertype] status
drivers/usb/gadget/udc/net2272.c:1834:48: got restricted __le16
[usertype] <noident>
drivers/usb/gadget/udc/net2272.c:1845:40: sparse: restricted __le16 degrades
to integer
drivers/usb/gadget/udc/net2272.c:1858:40: sparse: restricted __le16 degrades
to integer
drivers/usb/gadget/udc/net2272.c:1880:60: sparse: incorrect type in argument
2 (different base types)
drivers/usb/gadget/udc/net2272.c:1880:60: expected unsigned short
[unsigned] [usertype] wIndex
drivers/usb/gadget/udc/net2272.c:1880:60: got restricted __le16
[assigned] [usertype] wIndex
drivers/usb/gadget/udc/net2272.c:1898:72: sparse: restricted __le16 degrades
to integer
drivers/usb/gadget/udc/net2272.c:1907:60: sparse: incorrect type in argument
2 (different base types)
drivers/usb/gadget/udc/net2272.c:1907:60: expected unsigned short
[unsigned] [usertype] wIndex
drivers/usb/gadget/udc/net2272.c:1907:60: got restricted __le16
[assigned] [usertype] wIndex
drivers/usb/gadget/udc/net2272.c:1916:56: sparse: restricted __le16 degrades
to integer
>> drivers/usb/gadget/udc/net2272.c:2009:33: sparse: context imbalance in
>> 'net2272_handle_stat1_irqs' - unexpected unlock
git remote add next
git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
git remote update next
git checkout 5ca1ccdaa88ac15d1468c5e8bb40885dc6b8a364
vim +/net2272_handle_stat1_irqs +2009 drivers/usb/gadget/udc/net2272.c
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1852
writew(status, net2272_reg_addr(dev, EP_DATA));
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1853
set_fifo_bytecount(&dev->ep[0], 0);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1854
allow_status(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1855
dev_vdbg(dev->dev, "device stat %02x\n", status);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1856
goto next_endpoints;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1857
case USB_RECIP_INTERFACE:
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 @1858
if (u.r.wLength > 2)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1859
goto do_stall;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1860
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1861
/* don't bother with a request object! */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1862
net2272_ep_write(&dev->ep[0], EP_IRQENB, 0);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1863
writew(status, net2272_reg_addr(dev, EP_DATA));
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1864
set_fifo_bytecount(&dev->ep[0], 0);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1865
allow_status(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1866
dev_vdbg(dev->dev, "interface status %02x\n", status);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1867
goto next_endpoints;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1868
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1869
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1870
break;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1871
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1872
case USB_REQ_CLEAR_FEATURE: {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1873
struct net2272_ep *e;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1874
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1875
if (u.r.bRequestType != USB_RECIP_ENDPOINT)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1876
goto delegate;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1877
if (u.r.wValue != USB_ENDPOINT_HALT ||
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1878
u.r.wLength != 0)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1879
goto do_stall;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1880
e = net2272_get_ep_by_addr(dev, u.r.wIndex);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1881
if (!e)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1882
goto do_stall;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1883
if (e->wedged) {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1884
dev_vdbg(dev->dev, "%s wedged, halt not cleared\n",
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1885
ep->ep.name);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1886
} else {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1887
dev_vdbg(dev->dev, "%s clear halt\n", ep->ep.name);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1888
clear_halt(e);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1889
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1890
allow_status(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1891
goto next_endpoints;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1892
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1893
case USB_REQ_SET_FEATURE: {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1894
struct net2272_ep *e;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1895
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1896
if (u.r.bRequestType == USB_RECIP_DEVICE) {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1897
if (u.r.wIndex != NORMAL_OPERATION)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1898
net2272_set_test_mode(dev, (u.r.wIndex >> 8));
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1899
allow_status(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1900
dev_vdbg(dev->dev, "test mode: %d\n", u.r.wIndex);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1901
goto next_endpoints;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1902
} else if (u.r.bRequestType != USB_RECIP_ENDPOINT)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1903
goto delegate;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1904
if (u.r.wValue != USB_ENDPOINT_HALT ||
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1905
u.r.wLength != 0)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1906
goto do_stall;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1907
e = net2272_get_ep_by_addr(dev, u.r.wIndex);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1908
if (!e)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1909
goto do_stall;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1910
set_halt(e);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1911
allow_status(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1912
dev_vdbg(dev->dev, "%s set halt\n", ep->ep.name);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1913
goto next_endpoints;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1914
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1915
case USB_REQ_SET_ADDRESS: {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1916
net2272_write(dev, OURADDR, u.r.wValue & 0xff);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1917
allow_status(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1918
break;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1919
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1920
default:
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1921
delegate:
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1922
dev_vdbg(dev->dev, "setup %02x.%02x v%04x i%04x "
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1923
"ep_cfg %08x\n",
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1924
u.r.bRequestType, u.r.bRequest,
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1925
u.r.wValue, u.r.wIndex,
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1926
net2272_ep_read(ep, EP_CFG));
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1927
spin_unlock(&dev->lock);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1928
tmp = dev->driver->setup(&dev->gadget, &u.r);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1929
spin_lock(&dev->lock);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1930
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1931
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1932
/* stall ep0 on error */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1933
if (tmp < 0) {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1934
do_stall:
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1935
dev_vdbg(dev->dev, "req %02x.%02x protocol STALL; stat %d\n",
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1936
u.r.bRequestType, u.r.bRequest, tmp);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1937
dev->protocol_stall = 1;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1938
}
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1939 /*
endpoint dma irq? */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1940 } else
if (stat & (1 << DMA_DONE_INTERRUPT)) {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1941
net2272_cancel_dma(dev);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1942
net2272_write(dev, IRQSTAT0, 1 << DMA_DONE_INTERRUPT);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1943
stat &= ~(1 << DMA_DONE_INTERRUPT);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1944
num = (net2272_read(dev, DMAREQ) & (1 << DMA_ENDPOINT_SELECT))
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1945
? 2 : 1;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1946
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1947
ep = &dev->ep[num];
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1948
net2272_handle_dma(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1949 }
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1950
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1951
next_endpoints:
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1952 /*
endpoint data irq? */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1953 scratch
= stat & 0x0f;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1954 stat &=
~0x0f;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1955 for
(num = 0; scratch; num++) {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1956
u8 t;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1957
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1958
/* does this endpoint's FIFO and queue need tending? */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1959
t = 1 << num;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1960
if ((scratch & t) == 0)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1961
continue;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1962
scratch ^= t;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1963
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1964
ep = &dev->ep[num];
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1965
net2272_handle_ep(ep);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1966 }
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1967
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1968 /* some
interrupts we can just ignore */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1969 stat &=
~(1 << SOF_INTERRUPT);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1970
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1971 if
(stat)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1972
dev_dbg(dev->dev, "unhandled irqstat0 %02x\n", stat);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1973 }
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1974
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1975 static
void
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1976
net2272_handle_stat1_irqs(struct net2272 *dev, u8 stat)
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1977 {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1978 u8 tmp,
mask;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1979
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1980 /*
after disconnect there's nothing else to do! */
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1981 tmp =
(1 << VBUS_INTERRUPT) | (1 << ROOT_PORT_RESET_INTERRUPT);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1982 mask =
(1 << USB_HIGH_SPEED) | (1 << USB_FULL_SPEED);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1983
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1984 if
(stat & tmp) {
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1985
bool reset = false;
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1986
bool disconnect = false;
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1987
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1988
/*
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1989
* Ignore disconnects and resets if the speed hasn't been set.
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1990
* VBUS can bounce and there's always an initial reset.
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1991
*/
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1992
net2272_write(dev, IRQSTAT1, tmp);
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1993
if (dev->gadget.speed != USB_SPEED_UNKNOWN) {
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1994
if ((stat & (1 << VBUS_INTERRUPT)) &&
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1995
(net2272_read(dev, USBCTL1) &
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1996
(1 << VBUS_PIN)) == 0) {
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 1997
disconnect = true;
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1998
dev_dbg(dev->dev, "disconnect %s\n",
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 1999
dev->driver->driver.name);
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2000
} else if ((stat & (1 << ROOT_PORT_RESET_INTERRUPT)) &&
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2001
(net2272_read(dev, USBCTL1) & mask)
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2002
== 0) {
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2003
reset = true;
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2004
dev_dbg(dev->dev, "reset %s\n",
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2005
dev->driver->driver.name);
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2006
}
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2007
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2008
if (disconnect || reset) {
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 @2009
stop_activity(dev, dev->driver);
ceb80363 drivers/usb/gadget/net2272.c Seth Levy 2011-06-06 2010
net2272_ep0_start(dev);
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2011
spin_unlock(&dev->lock);
5ca1ccda drivers/usb/gadget/udc/net2272.c Alan Stern 2014-11-06 2012
if (reset)
:::::: The code at line 2009 was first introduced by commit
:::::: ceb80363b2ec1091dffd78064771e3d4679f69c7 USB: net2272: driver for PLX
NET2272 USB device controller
:::::: TO: Seth Levy <[email protected]>
:::::: CC: Greg Kroah-Hartman <[email protected]>
---
0-DAY kernel test infrastructure Open Source Technology Center
http://lists.01.org/mailman/listinfo/kbuild Intel Corporation
_______________________________________________
kbuild mailing list
[email protected]
https://lists.01.org/mailman/listinfo/kbuild