mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
Merge branch 'ieee802154-for-davem-2018-05-08' of git://git.kernel.org/pub/scm/linux/kernel/git/sschmidt/wpan
Stefan Schmidt says: ==================== pull-request: ieee802154 2018-05-08 An update from ieee802154 for your *net* tree. Two fixes for the mcr20a driver, which was being added in the 4.17 merge window, by Gustavo and myself. The atusb driver got a change to GFP_KERNEL where no GFP_ATOMIC is needed by Jia-Ju. The last and most important fix is from Alex to get IPv6 reassembly working again for the ieee802154 6lowpan adaptation. This got broken in 4.16 so please queue this one also up for the 4.16 stable tree. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
2dabf9f281
@ -1045,7 +1045,7 @@ static int atusb_probe(struct usb_interface *interface,
|
|||||||
atusb->tx_dr.bRequest = ATUSB_TX;
|
atusb->tx_dr.bRequest = ATUSB_TX;
|
||||||
atusb->tx_dr.wValue = cpu_to_le16(0);
|
atusb->tx_dr.wValue = cpu_to_le16(0);
|
||||||
|
|
||||||
atusb->tx_urb = usb_alloc_urb(0, GFP_ATOMIC);
|
atusb->tx_urb = usb_alloc_urb(0, GFP_KERNEL);
|
||||||
if (!atusb->tx_urb)
|
if (!atusb->tx_urb)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
@ -1267,7 +1267,7 @@ mcr20a_probe(struct spi_device *spi)
|
|||||||
ret = mcr20a_get_platform_data(spi, pdata);
|
ret = mcr20a_get_platform_data(spi, pdata);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_crit(&spi->dev, "mcr20a_get_platform_data failed.\n");
|
dev_crit(&spi->dev, "mcr20a_get_platform_data failed.\n");
|
||||||
return ret;
|
goto free_pdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init reset gpio */
|
/* init reset gpio */
|
||||||
@ -1275,7 +1275,7 @@ mcr20a_probe(struct spi_device *spi)
|
|||||||
ret = devm_gpio_request_one(&spi->dev, pdata->rst_gpio,
|
ret = devm_gpio_request_one(&spi->dev, pdata->rst_gpio,
|
||||||
GPIOF_OUT_INIT_HIGH, "reset");
|
GPIOF_OUT_INIT_HIGH, "reset");
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
goto free_pdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* reset mcr20a */
|
/* reset mcr20a */
|
||||||
@ -1291,7 +1291,8 @@ mcr20a_probe(struct spi_device *spi)
|
|||||||
hw = ieee802154_alloc_hw(sizeof(*lp), &mcr20a_hw_ops);
|
hw = ieee802154_alloc_hw(sizeof(*lp), &mcr20a_hw_ops);
|
||||||
if (!hw) {
|
if (!hw) {
|
||||||
dev_crit(&spi->dev, "ieee802154_alloc_hw failed\n");
|
dev_crit(&spi->dev, "ieee802154_alloc_hw failed\n");
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto free_pdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* init mcr20a local data */
|
/* init mcr20a local data */
|
||||||
@ -1308,8 +1309,10 @@ mcr20a_probe(struct spi_device *spi)
|
|||||||
/* init buf */
|
/* init buf */
|
||||||
lp->buf = devm_kzalloc(&spi->dev, SPI_COMMAND_BUFFER, GFP_KERNEL);
|
lp->buf = devm_kzalloc(&spi->dev, SPI_COMMAND_BUFFER, GFP_KERNEL);
|
||||||
|
|
||||||
if (!lp->buf)
|
if (!lp->buf) {
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto free_dev;
|
||||||
|
}
|
||||||
|
|
||||||
mcr20a_setup_tx_spi_messages(lp);
|
mcr20a_setup_tx_spi_messages(lp);
|
||||||
mcr20a_setup_rx_spi_messages(lp);
|
mcr20a_setup_rx_spi_messages(lp);
|
||||||
@ -1366,6 +1369,8 @@ mcr20a_probe(struct spi_device *spi)
|
|||||||
|
|
||||||
free_dev:
|
free_dev:
|
||||||
ieee802154_free_hw(lp->hw);
|
ieee802154_free_hw(lp->hw);
|
||||||
|
free_pdata:
|
||||||
|
kfree(pdata);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -20,8 +20,8 @@ typedef unsigned __bitwise lowpan_rx_result;
|
|||||||
struct frag_lowpan_compare_key {
|
struct frag_lowpan_compare_key {
|
||||||
u16 tag;
|
u16 tag;
|
||||||
u16 d_size;
|
u16 d_size;
|
||||||
const struct ieee802154_addr src;
|
struct ieee802154_addr src;
|
||||||
const struct ieee802154_addr dst;
|
struct ieee802154_addr dst;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Equivalent of ipv4 struct ipq
|
/* Equivalent of ipv4 struct ipq
|
||||||
|
@ -75,14 +75,14 @@ fq_find(struct net *net, const struct lowpan_802154_cb *cb,
|
|||||||
{
|
{
|
||||||
struct netns_ieee802154_lowpan *ieee802154_lowpan =
|
struct netns_ieee802154_lowpan *ieee802154_lowpan =
|
||||||
net_ieee802154_lowpan(net);
|
net_ieee802154_lowpan(net);
|
||||||
struct frag_lowpan_compare_key key = {
|
struct frag_lowpan_compare_key key = {};
|
||||||
.tag = cb->d_tag,
|
|
||||||
.d_size = cb->d_size,
|
|
||||||
.src = *src,
|
|
||||||
.dst = *dst,
|
|
||||||
};
|
|
||||||
struct inet_frag_queue *q;
|
struct inet_frag_queue *q;
|
||||||
|
|
||||||
|
key.tag = cb->d_tag;
|
||||||
|
key.d_size = cb->d_size;
|
||||||
|
key.src = *src;
|
||||||
|
key.dst = *dst;
|
||||||
|
|
||||||
q = inet_frag_find(&ieee802154_lowpan->frags, &key);
|
q = inet_frag_find(&ieee802154_lowpan->frags, &key);
|
||||||
if (!q)
|
if (!q)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -372,7 +372,7 @@ int lowpan_frag_rcv(struct sk_buff *skb, u8 frag_type)
|
|||||||
struct lowpan_frag_queue *fq;
|
struct lowpan_frag_queue *fq;
|
||||||
struct net *net = dev_net(skb->dev);
|
struct net *net = dev_net(skb->dev);
|
||||||
struct lowpan_802154_cb *cb = lowpan_802154_cb(skb);
|
struct lowpan_802154_cb *cb = lowpan_802154_cb(skb);
|
||||||
struct ieee802154_hdr hdr;
|
struct ieee802154_hdr hdr = {};
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (ieee802154_hdr_peek_addrs(skb, &hdr) < 0)
|
if (ieee802154_hdr_peek_addrs(skb, &hdr) < 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user