diff options
author | Josh Boyer <jwboyer@redhat.com> | 2011-08-08 10:17:46 -0400 |
---|---|---|
committer | Josh Boyer <jwboyer@redhat.com> | 2011-08-08 10:17:46 -0400 |
commit | 740de53011db4b7a9537412f1c3c91e14af79721 (patch) | |
tree | f0f51c5f72ef96cd702de4584d8df685e7bdb56c /fix-cdc-ncm-dma-stack-vars.patch | |
parent | 84f976bc2833ee82b200b7ad1e16faa5b693233c (diff) | |
download | kernel-740de53011db4b7a9537412f1c3c91e14af79721.tar.gz kernel-740de53011db4b7a9537412f1c3c91e14af79721.tar.xz kernel-740de53011db4b7a9537412f1c3c91e14af79721.zip |
Linux-3.1-rc1
Adjust Makefile munging for 3.x numbering scheme
Diffstat (limited to 'fix-cdc-ncm-dma-stack-vars.patch')
-rw-r--r-- | fix-cdc-ncm-dma-stack-vars.patch | 117 |
1 files changed, 51 insertions, 66 deletions
diff --git a/fix-cdc-ncm-dma-stack-vars.patch b/fix-cdc-ncm-dma-stack-vars.patch index 6d7f5b888..17b555a85 100644 --- a/fix-cdc-ncm-dma-stack-vars.patch +++ b/fix-cdc-ncm-dma-stack-vars.patch @@ -1,25 +1,23 @@ -From 1717b6b8b1de95ed4ca53b74d2ccb563fae9b898 Mon Sep 17 00:00:00 2001 -From: Josh Boyer <jwboyer@redhat.com> -Date: Tue, 2 Aug 2011 08:09:56 -0400 -Subject: [PATCH] usbnet/cdc_ncm: Don't use stack variables for DMA buffers +commit 05511b61169da2f8dab464df61fa2bb952763a23 +Author: Josh Boyer <jwboyer@redhat.com> +Date: Tue Aug 2 08:09:56 2011 -0400 -The cdc_ncm driver still has a few places where stack variables are passed -to the cdc_ncm_do_request function. This triggers a stack trace in -lib/dma-debug.c if the CONFIG_DEBUG_DMA_API option is set. - -Adjust these calls to pass parameters that have been allocated with kzalloc. - -Signed-off-by: Josh Boyer <jwboyer@redhat.com> ---- - drivers/net/usb/cdc_ncm.c | 54 +++++++++++++++++++++++++++++++++++---------- - 1 files changed, 42 insertions(+), 12 deletions(-) + usbnet/cdc_ncm: Don't use stack variables for DMA buffers + + The cdc_ncm driver still has a few places where stack variables are passed + to the cdc_ncm_do_request function. This triggers a stack trace in + lib/dma-debug.c if the CONFIG_DEBUG_DMA_API option is set. + + Adjust these calls to pass parameters that have been allocated with kzalloc. + + Signed-off-by: Josh Boyer <jwboyer@redhat.com> diff --git a/drivers/net/usb/cdc_ncm.c b/drivers/net/usb/cdc_ncm.c -index fd622a6..bbcb133 100644 +index a03336e..f06fb78 100644 --- a/drivers/net/usb/cdc_ncm.c +++ b/drivers/net/usb/cdc_ncm.c -@@ -260,23 +260,39 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) - req.wIndex = cpu_to_le16(iface_no); +@@ -228,23 +228,40 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) + if (ctx->rx_max != le32_to_cpu(ctx->ncm_parm.dwNtbInMaxSize)) { if (flags & USB_CDC_NCM_NCAP_NTB_INPUT_SIZE) { - struct usb_cdc_ncm_ndp_input_size ndp_in_sz; @@ -30,18 +28,14 @@ index fd622a6..bbcb133 100644 + err = -ENOMEM; + goto size_err; + } - - req.wLength = 8; -- ndp_in_sz.dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); -- ndp_in_sz.wNtbInMaxDatagrams = -+ ndp_in_sz->dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); -+ ndp_in_sz->wNtbInMaxDatagrams = - cpu_to_le16(CDC_NCM_DPT_DATAGRAMS_MAX); -- ndp_in_sz.wReserved = 0; -- err = cdc_ncm_do_request(ctx, &req, &ndp_in_sz, 0, NULL, -+ ndp_in_sz->wReserved = 0; -+ err = cdc_ncm_do_request(ctx, &req, ndp_in_sz, 0, NULL, - 1000); ++ + err = usb_control_msg(ctx->udev, + usb_sndctrlpipe(ctx->udev, 0), + USB_CDC_SET_NTB_INPUT_SIZE, + USB_TYPE_CLASS | USB_DIR_OUT + | USB_RECIP_INTERFACE, +- 0, iface_no, &ndp_in_sz, 8, 1000); ++ 0, iface_no, ndp_in_sz, 8, 1000); + kfree(ndp_in_sz); } else { - __le32 dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); @@ -53,26 +47,29 @@ index fd622a6..bbcb133 100644 + goto size_err; + } + *dwNtbInMaxSize = cpu_to_le32(ctx->rx_max); - - req.wLength = 4; -- err = cdc_ncm_do_request(ctx, &req, &dwNtbInMaxSize, 0, -+ err = cdc_ncm_do_request(ctx, &req, dwNtbInMaxSize, 0, - NULL, 1000); ++ + err = usb_control_msg(ctx->udev, + usb_sndctrlpipe(ctx->udev, 0), + USB_CDC_SET_NTB_INPUT_SIZE, + USB_TYPE_CLASS | USB_DIR_OUT + | USB_RECIP_INTERFACE, +- 0, iface_no, &dwNtbInMaxSize, 4, 1000); ++ 0, iface_no, dwNtbInMaxSize, 4, 1000); + kfree(dwNtbInMaxSize); } - +- +size_err: - if (err) + if (err < 0) pr_debug("Setting NTB Input Size failed\n"); } -@@ -362,9 +378,16 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) +@@ -325,19 +342,29 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) /* set Max Datagram Size (MTU) */ if (flags & USB_CDC_NCM_NCAP_MAX_DATAGRAM_SIZE) { - __le16 max_datagram_size; + __le16 *max_datagram_size; u16 eth_max_sz = le16_to_cpu(ctx->ether_desc->wMaxSegmentSize); - ++ + max_datagram_size = kzalloc(sizeof(*max_datagram_size), + GFP_KERNEL); + if (!max_datagram_size) { @@ -80,18 +77,14 @@ index fd622a6..bbcb133 100644 + goto max_dgram_err; + } + - req.bmRequestType = USB_TYPE_CLASS | USB_DIR_IN | - USB_RECIP_INTERFACE; - req.bNotificationType = USB_CDC_GET_MAX_DATAGRAM_SIZE; -@@ -372,13 +395,17 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) - req.wIndex = cpu_to_le16(iface_no); - req.wLength = cpu_to_le16(2); - -- err = cdc_ncm_do_request(ctx, &req, &max_datagram_size, 0, NULL, -+ err = cdc_ncm_do_request(ctx, &req, max_datagram_size, 0, NULL, - 1000); -+ - if (err) { + err = usb_control_msg(ctx->udev, usb_rcvctrlpipe(ctx->udev, 0), + USB_CDC_GET_MAX_DATAGRAM_SIZE, + USB_TYPE_CLASS | USB_DIR_IN + | USB_RECIP_INTERFACE, +- 0, iface_no, &max_datagram_size, ++ 0, iface_no, max_datagram_size, + 2, 1000); + if (err < 0) { pr_debug("GET_MAX_DATAGRAM_SIZE failed, use size=%u\n", CDC_NCM_MIN_DATAGRAM_SIZE); + kfree(max_datagram_size); @@ -99,26 +92,18 @@ index fd622a6..bbcb133 100644 - ctx->max_datagram_size = le16_to_cpu(max_datagram_size); + ctx->max_datagram_size = + le16_to_cpu(*max_datagram_size); -+ /* Check Eth descriptor value */ if (eth_max_sz < CDC_NCM_MAX_DATAGRAM_SIZE) { if (ctx->max_datagram_size > eth_max_sz) -@@ -401,10 +428,13 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) - req.wValue = 0; - req.wIndex = cpu_to_le16(iface_no); - req.wLength = 2; -- max_datagram_size = cpu_to_le16(ctx->max_datagram_size); -+ *max_datagram_size = -+ cpu_to_le16(ctx->max_datagram_size); - -- err = cdc_ncm_do_request(ctx, &req, &max_datagram_size, -+ err = cdc_ncm_do_request(ctx, &req, max_datagram_size, - 0, NULL, 1000); +@@ -360,8 +387,10 @@ static u8 cdc_ncm_setup(struct cdc_ncm_ctx *ctx) + USB_TYPE_CLASS | USB_DIR_OUT + | USB_RECIP_INTERFACE, + 0, +- iface_no, &max_datagram_size, ++ iface_no, max_datagram_size, + 2, 1000); + kfree(max_datagram_size); +max_dgram_err: - if (err) + if (err < 0) pr_debug("SET_MAX_DATAGRAM_SIZE failed\n"); } --- -1.7.6 - |