Commit 2dabf9f2 authored by David S. Miller's avatar David S. Miller

Merge branch 'ieee802154-for-davem-2018-05-08' of...

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: default avatarDavid S. Miller <davem@davemloft.net>
parents 2c5d5b13 f18fa5de
...@@ -1045,7 +1045,7 @@ static int atusb_probe(struct usb_interface *interface, ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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; ...@@ -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, ...@@ -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) ...@@ -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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment