--- /dev/null
+From e7d12c2f98ae1e68c7298e5028048d150fa553a1 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 27 Sep 2013 18:19:42 -0400
+Subject: drm/radeon: fix N/CTS clock matching for audio
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit e7d12c2f98ae1e68c7298e5028048d150fa553a1 upstream.
+
+The drm code that calculates the 1001 clocks rounds up
+rather than truncating. This allows the table to match
+properly on those modes.
+
+See bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=69675
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -57,15 +57,15 @@ enum r600_hdmi_iec_status_bits {
+ static const struct radeon_hdmi_acr r600_hdmi_predefined_acr[] = {
+ /* 32kHz 44.1kHz 48kHz */
+ /* Clock N CTS N CTS N CTS */
+- { 25174, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
++ { 25175, 4576, 28125, 7007, 31250, 6864, 28125 }, /* 25,20/1.001 MHz */
+ { 25200, 4096, 25200, 6272, 28000, 6144, 25200 }, /* 25.20 MHz */
+ { 27000, 4096, 27000, 6272, 30000, 6144, 27000 }, /* 27.00 MHz */
+ { 27027, 4096, 27027, 6272, 30030, 6144, 27027 }, /* 27.00*1.001 MHz */
+ { 54000, 4096, 54000, 6272, 60000, 6144, 54000 }, /* 54.00 MHz */
+ { 54054, 4096, 54054, 6272, 60060, 6144, 54054 }, /* 54.00*1.001 MHz */
+- { 74175, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
++ { 74176, 11648, 210937, 17836, 234375, 11648, 140625 }, /* 74.25/1.001 MHz */
+ { 74250, 4096, 74250, 6272, 82500, 6144, 74250 }, /* 74.25 MHz */
+- { 148351, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
++ { 148352, 11648, 421875, 8918, 234375, 5824, 140625 }, /* 148.50/1.001 MHz */
+ { 148500, 4096, 148500, 6272, 165000, 6144, 148500 }, /* 148.50 MHz */
+ { 0, 4096, 0, 6272, 0, 6144, 0 } /* Other */
+ };
--- /dev/null
+From b852c985010a77c850b7548d64bbb964ca462b02 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Thu, 10 Oct 2013 11:47:01 -0400
+Subject: drm/radeon: re-enable sw ACR support on pre-DCE4
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit b852c985010a77c850b7548d64bbb964ca462b02 upstream.
+
+HW ACR support may have issues on some older chips, so
+use SW ACR for now until we've tested further.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+CC: Rafał Miłecki <zajec5@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -320,6 +320,7 @@ void r600_hdmi_setmode(struct drm_encode
+ }
+
+ WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
++ HDMI0_ACR_SOURCE | /* select SW CTS value - XXX verify that hw CTS works on all families */
+ HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
+
+ WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
--- /dev/null
+From 062c2e4363451d49ef840232fe65e8bff0dde2a5 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 27 Sep 2013 18:09:54 -0400
+Subject: drm/radeon: use 64-bit math to calculate CTS values for audio (v2)
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit 062c2e4363451d49ef840232fe65e8bff0dde2a5 upstream.
+
+Avoid losing precision. See bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=69675
+
+v2: fix math as per Anssi's comments.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/r600_hdmi.c | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -75,8 +75,15 @@ static const struct radeon_hdmi_acr r600
+ */
+ static void r600_hdmi_calc_cts(uint32_t clock, int *CTS, int N, int freq)
+ {
+- if (*CTS == 0)
+- *CTS = clock * N / (128 * freq) * 1000;
++ u64 n;
++ u32 d;
++
++ if (*CTS == 0) {
++ n = (u64)clock * (u64)N * 1000ULL;
++ d = 128 * freq;
++ do_div(n, d);
++ *CTS = n;
++ }
+ DRM_DEBUG("Using ACR timing N=%d CTS=%d for frequency %d\n",
+ N, *CTS, freq);
+ }
--- /dev/null
+From ee0fec312a1c4e26f255955da942562cd8908a4b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexander.deucher@amd.com>
+Date: Fri, 27 Sep 2013 18:22:15 -0400
+Subject: drm/radeon: use hw generated CTS/N values for audio
+
+From: Alex Deucher <alexander.deucher@amd.com>
+
+commit ee0fec312a1c4e26f255955da942562cd8908a4b upstream.
+
+Use the hw generated values rather than calculating
+them in the driver. There may be some older r6xx
+asics where this doesn't work correctly. This remains
+to be seen.
+
+See bug:
+https://bugs.freedesktop.org/show_bug.cgi?id=69675
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/evergreen_hdmi.c | 3 +--
+ drivers/gpu/drm/radeon/r600_hdmi.c | 3 +--
+ 2 files changed, 2 insertions(+), 4 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/evergreen_hdmi.c
++++ b/drivers/gpu/drm/radeon/evergreen_hdmi.c
+@@ -219,8 +219,7 @@ void evergreen_hdmi_setmode(struct drm_e
+ /* fglrx clears sth in AFMT_AUDIO_PACKET_CONTROL2 here */
+
+ WREG32(HDMI_ACR_PACKET_CONTROL + offset,
+- HDMI_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */
+- HDMI_ACR_SOURCE); /* select SW CTS value */
++ HDMI_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
+
+ evergreen_hdmi_update_ACR(encoder, mode->clock);
+
+--- a/drivers/gpu/drm/radeon/r600_hdmi.c
++++ b/drivers/gpu/drm/radeon/r600_hdmi.c
+@@ -320,8 +320,7 @@ void r600_hdmi_setmode(struct drm_encode
+ }
+
+ WREG32(HDMI0_ACR_PACKET_CONTROL + offset,
+- HDMI0_ACR_AUTO_SEND | /* allow hw to sent ACR packets when required */
+- HDMI0_ACR_SOURCE); /* select SW CTS value */
++ HDMI0_ACR_AUTO_SEND); /* allow hw to sent ACR packets when required */
+
+ WREG32(HDMI0_VBI_PACKET_CONTROL + offset,
+ HDMI0_NULL_SEND | /* send null packets when required */
--- /dev/null
+From 43c831468b3d26dbe8f2e061ccaf1abaf9cc1b8b Mon Sep 17 00:00:00 2001
+From: Nanno Langstraat <langstr@gmail.com>
+Date: Mon, 14 Oct 2013 16:07:15 +0200
+Subject: HID: apple: option to swap the 'Option' ("Alt") and 'Command' ("Flag") keys.
+
+From: Nanno Langstraat <langstr@gmail.com>
+
+commit 43c831468b3d26dbe8f2e061ccaf1abaf9cc1b8b upstream.
+
+Use case: people who use both Apple and PC keyboards regularly, and desire to
+keep&use their PC muscle memory.
+
+A particular use case: an Apple compact external keyboard connected to a PC
+laptop. (This use case can't be covered well by X.org key remappings etc.)
+
+Signed-off-by: Nanno Langstraat <langstr@gmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-apple.c | 22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+--- a/drivers/hid/hid-apple.c
++++ b/drivers/hid/hid-apple.c
+@@ -46,6 +46,12 @@ module_param(iso_layout, uint, 0644);
+ MODULE_PARM_DESC(iso_layout, "Enable/Disable hardcoded ISO-layout of the keyboard. "
+ "(0 = disabled, [1] = enabled)");
+
++static unsigned int swap_opt_cmd = 0;
++module_param(swap_opt_cmd, uint, 0644);
++MODULE_PARM_DESC(swap_opt_cmd, "Swap the Option (\"Alt\") and Command (\"Flag\") keys. "
++ "(For people who want to keep Windows PC keyboard muscle memory. "
++ "[0] = as-is, Mac layout. 1 = swapped, Windows layout.)");
++
+ struct apple_sc {
+ unsigned long quirks;
+ unsigned int fn_on;
+@@ -150,6 +156,14 @@ static const struct apple_key_translatio
+ { }
+ };
+
++static const struct apple_key_translation swapped_option_cmd_keys[] = {
++ { KEY_LEFTALT, KEY_LEFTMETA },
++ { KEY_LEFTMETA, KEY_LEFTALT },
++ { KEY_RIGHTALT, KEY_RIGHTMETA },
++ { KEY_RIGHTMETA,KEY_RIGHTALT },
++ { }
++};
++
+ static const struct apple_key_translation *apple_find_translation(
+ const struct apple_key_translation *table, u16 from)
+ {
+@@ -242,6 +256,14 @@ static int hidinput_apple_event(struct h
+ }
+ }
+
++ if (swap_opt_cmd) {
++ trans = apple_find_translation(swapped_option_cmd_keys, usage->code);
++ if (trans) {
++ input_event(input, usage->type, trans->to, value);
++ return 1;
++ }
++ }
++
+ return 0;
+ }
+
--- /dev/null
+From e17f5d7667c5414b8f12a93ef14aae0824bd2beb Mon Sep 17 00:00:00 2001
+From: Tristan Rice <rice@outerearth.net>
+Date: Tue, 12 Nov 2013 19:06:23 +0100
+Subject: HID: enable Mayflash USB Gamecube Adapter
+
+From: Tristan Rice <rice@outerearth.net>
+
+commit e17f5d7667c5414b8f12a93ef14aae0824bd2beb upstream.
+
+This is a patch that adds the new Mayflash Gamecube Controller to USB adapter
+(ID 1a34:f705 ACRUX) to the ACRUX driver (drivers/hid/hid-axff.c) with full
+force feedback support.
+
+Signed-off-by: Tristan Rice <rice@outerearth.net>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-axff.c | 3 ++-
+ drivers/hid/hid-core.c | 1 +
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/hid/hid-axff.c
++++ b/drivers/hid/hid-axff.c
+@@ -95,7 +95,7 @@ static int axff_init(struct hid_device *
+ }
+ }
+
+- if (field_count < 4) {
++ if (field_count < 4 && hid->product != 0xf705) {
+ hid_err(hid, "not enough fields in the report: %d\n",
+ field_count);
+ return -ENODEV;
+@@ -180,6 +180,7 @@ static void ax_remove(struct hid_device
+
+ static const struct hid_device_id ax_devices[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802), },
++ { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0xf705), },
+ { }
+ };
+ MODULE_DEVICE_TABLE(hid, ax_devices);
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1562,6 +1562,7 @@ static const struct hid_device_id hid_ha
+ { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0xf705) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE) },
+ { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD) },
--- /dev/null
+From e078809df5611600965f4d3420c3256260fc3e3d Mon Sep 17 00:00:00 2001
+From: Stefan Achatz <erazor_de@users.sourceforge.net>
+Date: Fri, 8 Nov 2013 14:12:00 +0100
+Subject: HID: roccat: add missing special driver declarations
+
+From: Stefan Achatz <erazor_de@users.sourceforge.net>
+
+commit e078809df5611600965f4d3420c3256260fc3e3d upstream.
+
+Forgot two special driver declarations and sorted the list.
+
+Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-core.c | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+--- a/drivers/hid/hid-core.c
++++ b/drivers/hid/hid-core.c
+@@ -1751,12 +1751,14 @@ static const struct hid_device_id hid_ha
+ { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
+ #if IS_ENABLED(CONFIG_HID_ROCCAT)
+- { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKU) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ISKUFX) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPURE_OPTICAL) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEXTD) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_LUA) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
--- /dev/null
+From 14fc4290df2fb94a28f39dab9ed32feaa5527bef Mon Sep 17 00:00:00 2001
+From: Stefan Achatz <erazor_de@users.sourceforge.net>
+Date: Mon, 28 Oct 2013 18:52:03 +0100
+Subject: HID: roccat: add new device return value
+
+From: Stefan Achatz <erazor_de@users.sourceforge.net>
+
+commit 14fc4290df2fb94a28f39dab9ed32feaa5527bef upstream.
+
+Ryos uses a new return value for critical errors, others have been
+confirmed.
+
+Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-roccat-common.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+--- a/drivers/hid/hid-roccat-common.c
++++ b/drivers/hid/hid-roccat-common.c
+@@ -65,10 +65,11 @@ int roccat_common2_send(struct usb_devic
+ EXPORT_SYMBOL_GPL(roccat_common2_send);
+
+ enum roccat_common2_control_states {
+- ROCCAT_COMMON_CONTROL_STATUS_OVERLOAD = 0,
++ ROCCAT_COMMON_CONTROL_STATUS_CRITICAL = 0,
+ ROCCAT_COMMON_CONTROL_STATUS_OK = 1,
+ ROCCAT_COMMON_CONTROL_STATUS_INVALID = 2,
+- ROCCAT_COMMON_CONTROL_STATUS_WAIT = 3,
++ ROCCAT_COMMON_CONTROL_STATUS_BUSY = 3,
++ ROCCAT_COMMON_CONTROL_STATUS_CRITICAL_NEW = 4,
+ };
+
+ static int roccat_common2_receive_control_status(struct usb_device *usb_dev)
+@@ -88,13 +89,12 @@ static int roccat_common2_receive_contro
+ switch (control.value) {
+ case ROCCAT_COMMON_CONTROL_STATUS_OK:
+ return 0;
+- case ROCCAT_COMMON_CONTROL_STATUS_WAIT:
++ case ROCCAT_COMMON_CONTROL_STATUS_BUSY:
+ msleep(500);
+ continue;
+ case ROCCAT_COMMON_CONTROL_STATUS_INVALID:
+-
+- case ROCCAT_COMMON_CONTROL_STATUS_OVERLOAD:
+- /* seems to be critical - replug necessary */
++ case ROCCAT_COMMON_CONTROL_STATUS_CRITICAL:
++ case ROCCAT_COMMON_CONTROL_STATUS_CRITICAL_NEW:
+ return -EINVAL;
+ default:
+ dev_err(&usb_dev->dev,
--- /dev/null
+From 7be63f20b00840a6f1c718dcee00855688d64acd Mon Sep 17 00:00:00 2001
+From: Stefan Achatz <erazor_de@users.sourceforge.net>
+Date: Sun, 3 Nov 2013 06:25:33 +0100
+Subject: HID: roccat: fix Coverity CID 141438
+
+From: Stefan Achatz <erazor_de@users.sourceforge.net>
+
+commit 7be63f20b00840a6f1c718dcee00855688d64acd upstream.
+
+Add missing switch breaks.
+
+Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hid/hid-roccat-kovaplus.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/hid/hid-roccat-kovaplus.c
++++ b/drivers/hid/hid-roccat-kovaplus.c
+@@ -577,9 +577,13 @@ static void kovaplus_keep_values_up_to_d
+ break;
+ case KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_CPI:
+ kovaplus->actual_cpi = kovaplus_convert_event_cpi(button_report->data1);
++ break;
+ case KOVAPLUS_MOUSE_REPORT_BUTTON_TYPE_SENSITIVITY:
+ kovaplus->actual_x_sensitivity = button_report->data1;
+ kovaplus->actual_y_sensitivity = button_report->data2;
++ break;
++ default:
++ break;
+ }
+ }
+
--- /dev/null
+From 45fe142cefa864b685615bcb930159f6749c3667 Mon Sep 17 00:00:00 2001
+From: Eric Dumazet <edumazet@google.com>
+Date: Fri, 28 Jun 2013 08:05:06 -0700
+Subject: iwl3945: better skb management in rx path
+
+From: Eric Dumazet <edumazet@google.com>
+
+commit 45fe142cefa864b685615bcb930159f6749c3667 upstream.
+
+Steinar reported reallocations of skb->head with IPv6, leading to
+a warning in skb_try_coalesce()
+
+It turns out iwl3945 has several problems :
+
+1) skb->truesize is underestimated.
+ We really consume PAGE_SIZE bytes for a fragment,
+ not the frame length.
+2) 128 bytes of initial headroom is a bit low and forces reallocations.
+3) We can avoid consuming a full page for small enough frames.
+
+Reported-by: Steinar H. Gunderson <sesse@google.com>
+Signed-off-by: Eric Dumazet <edumazet@google.com>
+Cc: Paul Stewart <pstew@google.com>
+Acked-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/iwlegacy/3945.c | 31 +++++++++++++++++++------------
+ 1 file changed, 19 insertions(+), 12 deletions(-)
+
+--- a/drivers/net/wireless/iwlegacy/3945.c
++++ b/drivers/net/wireless/iwlegacy/3945.c
+@@ -462,6 +462,8 @@ il3945_is_network_packet(struct il_priv
+ }
+ }
+
++#define SMALL_PACKET_SIZE 256
++
+ static void
+ il3945_pass_packet_to_mac80211(struct il_priv *il, struct il_rx_buf *rxb,
+ struct ieee80211_rx_status *stats)
+@@ -470,14 +472,13 @@ il3945_pass_packet_to_mac80211(struct il
+ struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)IL_RX_DATA(pkt);
+ struct il3945_rx_frame_hdr *rx_hdr = IL_RX_HDR(pkt);
+ struct il3945_rx_frame_end *rx_end = IL_RX_END(pkt);
+- u16 len = le16_to_cpu(rx_hdr->len);
++ u32 len = le16_to_cpu(rx_hdr->len);
+ struct sk_buff *skb;
+ __le16 fc = hdr->frame_control;
++ u32 fraglen = PAGE_SIZE << il->hw_params.rx_page_order;
+
+ /* We received data from the HW, so stop the watchdog */
+- if (unlikely
+- (len + IL39_RX_FRAME_SIZE >
+- PAGE_SIZE << il->hw_params.rx_page_order)) {
++ if (unlikely(len + IL39_RX_FRAME_SIZE > fraglen)) {
+ D_DROP("Corruption detected!\n");
+ return;
+ }
+@@ -488,26 +489,32 @@ il3945_pass_packet_to_mac80211(struct il
+ return;
+ }
+
+- skb = dev_alloc_skb(128);
++ skb = dev_alloc_skb(SMALL_PACKET_SIZE);
+ if (!skb) {
+ IL_ERR("dev_alloc_skb failed\n");
+ return;
+ }
+
+ if (!il3945_mod_params.sw_crypto)
+- il_set_decrypted_flag(il, (struct ieee80211_hdr *)rxb_addr(rxb),
++ il_set_decrypted_flag(il, (struct ieee80211_hdr *)pkt,
+ le32_to_cpu(rx_end->status), stats);
+
+- skb_add_rx_frag(skb, 0, rxb->page,
+- (void *)rx_hdr->payload - (void *)pkt, len,
+- len);
+-
++ /* If frame is small enough to fit into skb->head, copy it
++ * and do not consume a full page
++ */
++ if (len <= SMALL_PACKET_SIZE) {
++ memcpy(skb_put(skb, len), rx_hdr->payload, len);
++ } else {
++ skb_add_rx_frag(skb, 0, rxb->page,
++ (void *)rx_hdr->payload - (void *)pkt, len,
++ fraglen);
++ il->alloc_rxb_page--;
++ rxb->page = NULL;
++ }
+ il_update_stats(il, false, fc, len);
+ memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats));
+
+ ieee80211_rx(il->hw, skb);
+- il->alloc_rxb_page--;
+- rxb->page = NULL;
+ }
+
+ #define IL_DELAY_NEXT_SCAN_AFTER_ASSOC (HZ*6)
--- /dev/null
+From c1de4a9557d9e25e41fc4ba034b9659152205539 Mon Sep 17 00:00:00 2001
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+Date: Mon, 1 Jul 2013 14:19:30 +0200
+Subject: iwl4965: better skb management in rx path
+
+From: Stanislaw Gruszka <sgruszka@redhat.com>
+
+commit c1de4a9557d9e25e41fc4ba034b9659152205539 upstream.
+
+4965 version of Eric patch "iwl3945: better skb management in rx path".
+It fixes several problems :
+
+1) skb->truesize is underestimated.
+ We really consume PAGE_SIZE bytes for a fragment,
+ not the frame length.
+2) 128 bytes of initial headroom is a bit low and forces reallocations.
+3) We can avoid consuming a full page for small enough frames.
+
+Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
+Acked-by: Eric Dumazet <edumazet@google.com>
+Signed-off-by: John W. Linville <linville@tuxdriver.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/iwlegacy/4965-mac.c | 18 ++++++++++++------
+ 1 file changed, 12 insertions(+), 6 deletions(-)
+
+--- a/drivers/net/wireless/iwlegacy/4965-mac.c
++++ b/drivers/net/wireless/iwlegacy/4965-mac.c
+@@ -574,9 +574,11 @@ il4965_translate_rx_status(struct il_pri
+ return decrypt_out;
+ }
+
++#define SMALL_PACKET_SIZE 256
++
+ static void
+ il4965_pass_packet_to_mac80211(struct il_priv *il, struct ieee80211_hdr *hdr,
+- u16 len, u32 ampdu_status, struct il_rx_buf *rxb,
++ u32 len, u32 ampdu_status, struct il_rx_buf *rxb,
+ struct ieee80211_rx_status *stats)
+ {
+ struct sk_buff *skb;
+@@ -593,21 +595,25 @@ il4965_pass_packet_to_mac80211(struct il
+ il_set_decrypted_flag(il, hdr, ampdu_status, stats))
+ return;
+
+- skb = dev_alloc_skb(128);
++ skb = dev_alloc_skb(SMALL_PACKET_SIZE);
+ if (!skb) {
+ IL_ERR("dev_alloc_skb failed\n");
+ return;
+ }
+
+- skb_add_rx_frag(skb, 0, rxb->page, (void *)hdr - rxb_addr(rxb), len,
+- len);
++ if (len <= SMALL_PACKET_SIZE) {
++ memcpy(skb_put(skb, len), hdr, len);
++ } else {
++ skb_add_rx_frag(skb, 0, rxb->page, (void *)hdr - rxb_addr(rxb),
++ len, PAGE_SIZE << il->hw_params.rx_page_order);
++ il->alloc_rxb_page--;
++ rxb->page = NULL;
++ }
+
+ il_update_stats(il, false, fc, len);
+ memcpy(IEEE80211_SKB_RXCB(skb), stats, sizeof(*stats));
+
+ ieee80211_rx(il->hw, skb);
+- il->alloc_rxb_page--;
+- rxb->page = NULL;
+ }
+
+ /* Called for N_RX (legacy ABG frames), or
--- /dev/null
+From 8ca95995e64f5d270889badb3e449dca91106a2b Mon Sep 17 00:00:00 2001
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Date: Sun, 15 Sep 2013 11:37:17 +0300
+Subject: iwlwifi: don't WARN on host commands sent when firmware is dead
+
+From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+
+commit 8ca95995e64f5d270889badb3e449dca91106a2b upstream.
+
+This triggers automatic bug reports and add no valuable
+information. Print a simple error instead and drop the
+host command.
+
+Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/wireless/iwlwifi/iwl-trans.h | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
++++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
+@@ -605,8 +605,10 @@ static inline int iwl_trans_send_cmd(str
+ {
+ int ret;
+
+- WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE,
+- "%s bad state = %d", __func__, trans->state);
++ if (trans->state != IWL_TRANS_FW_ALIVE) {
++ IWL_ERR(trans, "%s bad state = %d", __func__, trans->state);
++ return -EIO;
++ }
+
+ if (!(cmd->flags & CMD_ASYNC))
+ lock_map_acquire_read(&trans->sync_cmd_lockdep_map);
--- /dev/null
+From b43ea8068d2090cb1e44632c8a938ab40d2c7419 Mon Sep 17 00:00:00 2001
+From: Johannes Koch <johannes@ortsraum.de>
+Date: Wed, 17 Jul 2013 14:28:16 -0300
+Subject: media: cx23885: Fix TeVii S471 regression since introduction of ts2020
+
+From: Johannes Koch <johannes@ortsraum.de>
+
+commit b43ea8068d2090cb1e44632c8a938ab40d2c7419 upstream.
+
+Patch to make TeVii S471 cards use the ts2020 tuner, since ds3000 driver no
+longer contains tuning code.
+
+Signed-off-by: Johannes Koch <johannes@ortsraum.de>
+Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/pci/cx23885/cx23885-dvb.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/drivers/media/pci/cx23885/cx23885-dvb.c
++++ b/drivers/media/pci/cx23885/cx23885-dvb.c
+@@ -1249,6 +1249,10 @@ static int dvb_register(struct cx23885_t
+ fe0->dvb.frontend = dvb_attach(ds3000_attach,
+ &tevii_ds3000_config,
+ &i2c_bus->i2c_adap);
++ if (fe0->dvb.frontend != NULL) {
++ dvb_attach(ts2020_attach, fe0->dvb.frontend,
++ &tevii_ts2020_config, &i2c_bus->i2c_adap);
++ }
+ break;
+ case CX23885_BOARD_PROF_8000:
+ i2c_bus = &dev->i2c_bus[0];
--- /dev/null
+From c13a84a830a208fb3443628773c8ca0557773cc7 Mon Sep 17 00:00:00 2001
+From: Michal Kubecek <mkubecek@suse.cz>
+Date: Wed, 11 Sep 2013 10:17:27 +0200
+Subject: netfilter: nf_conntrack: use RCU safe kfree for conntrack extensions
+
+From: Michal Kubecek <mkubecek@suse.cz>
+
+commit c13a84a830a208fb3443628773c8ca0557773cc7 upstream.
+
+Commit 68b80f11 (netfilter: nf_nat: fix RCU races) introduced
+RCU protection for freeing extension data when reallocation
+moves them to a new location. We need the same protection when
+freeing them in nf_ct_ext_free() in order to prevent a
+use-after-free by other threads referencing a NAT extension data
+via bysource list.
+
+Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/net/netfilter/nf_conntrack_extend.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/include/net/netfilter/nf_conntrack_extend.h
++++ b/include/net/netfilter/nf_conntrack_extend.h
+@@ -80,7 +80,7 @@ static inline void nf_ct_ext_destroy(str
+ static inline void nf_ct_ext_free(struct nf_conn *ct)
+ {
+ if (ct->ext)
+- kfree(ct->ext);
++ kfree_rcu(ct->ext, rcu);
+ }
+
+ /* Add this type, returns pointer to data or NULL. */
media-dvb-frontends-again-don-t-use-dynamic-static-allocation.patch
media-s5h1420-don-t-use-dynamic-static-allocation.patch
x.509-remove-certificate-date-checks.patch
+hid-roccat-add-new-device-return-value.patch
+hid-roccat-fix-coverity-cid-141438.patch
+hid-roccat-add-missing-special-driver-declarations.patch
+hid-enable-mayflash-usb-gamecube-adapter.patch
+hid-apple-option-to-swap-the-option-alt-and-command-flag-keys.patch
+drm-radeon-use-64-bit-math-to-calculate-cts-values-for-audio-v2.patch
+drm-radeon-fix-n-cts-clock-matching-for-audio.patch
+drm-radeon-use-hw-generated-cts-n-values-for-audio.patch
+drm-radeon-re-enable-sw-acr-support-on-pre-dce4.patch
+iwlwifi-don-t-warn-on-host-commands-sent-when-firmware-is-dead.patch
+netfilter-nf_conntrack-use-rcu-safe-kfree-for-conntrack-extensions.patch
+media-cx23885-fix-tevii-s471-regression-since-introduction-of-ts2020.patch
+iwl3945-better-skb-management-in-rx-path.patch
+iwl4965-better-skb-management-in-rx-path.patch