diff options
90 files changed, 5873 insertions, 296 deletions
diff --git a/conf/machine/include/ti33x.inc b/conf/machine/include/ti33x.inc index fc670d03..f9d8f7a7 100644 --- a/conf/machine/include/ti33x.inc +++ b/conf/machine/include/ti33x.inc | |||
@@ -3,7 +3,7 @@ SOC_FAMILY = "ti33x" | |||
3 | require conf/machine/include/tune-cortexa8.inc | 3 | require conf/machine/include/tune-cortexa8.inc |
4 | PREFERRED_PROVIDER_virtual/kernel = "linux-ti33x-psp" | 4 | PREFERRED_PROVIDER_virtual/kernel = "linux-ti33x-psp" |
5 | # Increase this everytime you change something in the kernel | 5 | # Increase this everytime you change something in the kernel |
6 | MACHINE_KERNEL_PR = "r3" | 6 | MACHINE_KERNEL_PR = "r4" |
7 | 7 | ||
8 | KERNEL_IMAGETYPE = "uImage" | 8 | KERNEL_IMAGETYPE = "uImage" |
9 | 9 | ||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0001-readahead-fix-pipeline-break-caused-by-block-plug.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0001-readahead-fix-pipeline-break-caused-by-block-plug.patch new file mode 100644 index 00000000..b6dcc0f5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0001-readahead-fix-pipeline-break-caused-by-block-plug.patch | |||
@@ -0,0 +1,99 @@ | |||
1 | From 76af79f393ad562077f79627a4c719219ef09ee8 Mon Sep 17 00:00:00 2001 | ||
2 | From: Shaohua Li <shaohua.li@intel.com> | ||
3 | Date: Fri, 3 Feb 2012 15:37:17 -0800 | ||
4 | Subject: [PATCH 01/87] readahead: fix pipeline break caused by block plug | ||
5 | |||
6 | commit 3deaa7190a8da38453c4fabd9dec7f66d17fff67 upstream. | ||
7 | |||
8 | Herbert Poetzl reported a performance regression since 2.6.39. The test | ||
9 | is a simple dd read, but with big block size. The reason is: | ||
10 | |||
11 | T1: ra (A, A+128k), (A+128k, A+256k) | ||
12 | T2: lock_page for page A, submit the 256k | ||
13 | T3: hit page A+128K, ra (A+256k, A+384). the range isn't submitted | ||
14 | because of plug and there isn't any lock_page till we hit page A+256k | ||
15 | because all pages from A to A+256k is in memory | ||
16 | T4: hit page A+256k, ra (A+384, A+ 512). Because of plug, the range isn't | ||
17 | submitted again. | ||
18 | T5: lock_page A+256k, so (A+256k, A+512k) will be submitted. The task is | ||
19 | waitting for (A+256k, A+512k) finish. | ||
20 | |||
21 | There is no request to disk in T3 and T4, so readahead pipeline breaks. | ||
22 | |||
23 | We really don't need block plug for generic_file_aio_read() for buffered | ||
24 | I/O. The readahead already has plug and has fine grained control when I/O | ||
25 | should be submitted. Deleting plug for buffered I/O fixes the regression. | ||
26 | |||
27 | One side effect is plug makes the request size 256k, the size is 128k | ||
28 | without it. This is because default ra size is 128k and not a reason we | ||
29 | need plug here. | ||
30 | |||
31 | Vivek said: | ||
32 | |||
33 | : We submit some readahead IO to device request queue but because of nested | ||
34 | : plug, queue never gets unplugged. When read logic reaches a page which is | ||
35 | : not in page cache, it waits for page to be read from the disk | ||
36 | : (lock_page_killable()) and that time we flush the plug list. | ||
37 | : | ||
38 | : So effectively read ahead logic is kind of broken in parts because of | ||
39 | : nested plugging. Removing top level plug (generic_file_aio_read()) for | ||
40 | : buffered reads, will allow unplugging queue earlier for readahead. | ||
41 | |||
42 | Signed-off-by: Shaohua Li <shaohua.li@intel.com> | ||
43 | Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> | ||
44 | Reported-by: Herbert Poetzl <herbert@13thfloor.at> | ||
45 | Tested-by: Eric Dumazet <eric.dumazet@gmail.com> | ||
46 | Cc: Christoph Hellwig <hch@infradead.org> | ||
47 | Cc: Jens Axboe <axboe@kernel.dk> | ||
48 | Cc: Vivek Goyal <vgoyal@redhat.com> | ||
49 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
50 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
51 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
52 | --- | ||
53 | mm/filemap.c | 8 ++++---- | ||
54 | 1 files changed, 4 insertions(+), 4 deletions(-) | ||
55 | |||
56 | diff --git a/mm/filemap.c b/mm/filemap.c | ||
57 | index 90286a4..03c5b0e 100644 | ||
58 | --- a/mm/filemap.c | ||
59 | +++ b/mm/filemap.c | ||
60 | @@ -1400,15 +1400,12 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov, | ||
61 | unsigned long seg = 0; | ||
62 | size_t count; | ||
63 | loff_t *ppos = &iocb->ki_pos; | ||
64 | - struct blk_plug plug; | ||
65 | |||
66 | count = 0; | ||
67 | retval = generic_segment_checks(iov, &nr_segs, &count, VERIFY_WRITE); | ||
68 | if (retval) | ||
69 | return retval; | ||
70 | |||
71 | - blk_start_plug(&plug); | ||
72 | - | ||
73 | /* coalesce the iovecs and go direct-to-BIO for O_DIRECT */ | ||
74 | if (filp->f_flags & O_DIRECT) { | ||
75 | loff_t size; | ||
76 | @@ -1424,8 +1421,12 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov, | ||
77 | retval = filemap_write_and_wait_range(mapping, pos, | ||
78 | pos + iov_length(iov, nr_segs) - 1); | ||
79 | if (!retval) { | ||
80 | + struct blk_plug plug; | ||
81 | + | ||
82 | + blk_start_plug(&plug); | ||
83 | retval = mapping->a_ops->direct_IO(READ, iocb, | ||
84 | iov, pos, nr_segs); | ||
85 | + blk_finish_plug(&plug); | ||
86 | } | ||
87 | if (retval > 0) { | ||
88 | *ppos = pos + retval; | ||
89 | @@ -1481,7 +1482,6 @@ generic_file_aio_read(struct kiocb *iocb, const struct iovec *iov, | ||
90 | break; | ||
91 | } | ||
92 | out: | ||
93 | - blk_finish_plug(&plug); | ||
94 | return retval; | ||
95 | } | ||
96 | EXPORT_SYMBOL(generic_file_aio_read); | ||
97 | -- | ||
98 | 1.7.7.4 | ||
99 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0002-ALSA-hda-Fix-the-logic-to-detect-VIA-analog-low-curr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0002-ALSA-hda-Fix-the-logic-to-detect-VIA-analog-low-curr.patch new file mode 100644 index 00000000..a25fadf5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0002-ALSA-hda-Fix-the-logic-to-detect-VIA-analog-low-curr.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From 02e85499ffcb080ef11c8cc1b092e033f90651f5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Takashi Iwai <tiwai@suse.de> | ||
3 | Date: Tue, 24 Jan 2012 13:58:36 +0100 | ||
4 | Subject: [PATCH 02/87] ALSA: hda - Fix the logic to detect VIA analog | ||
5 | low-current mode | ||
6 | |||
7 | commit 924339239fd5ba3e505f9420d41f0939196f3530 upstream. | ||
8 | |||
9 | The analog low-current mode must be enabled when the no stream is | ||
10 | running but the current detection checks it in a wrong way. | ||
11 | |||
12 | Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=741128 | ||
13 | |||
14 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | sound/pci/hda/patch_via.c | 2 +- | ||
18 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
19 | |||
20 | diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c | ||
21 | index 8d69e59..0684542 100644 | ||
22 | --- a/sound/pci/hda/patch_via.c | ||
23 | +++ b/sound/pci/hda/patch_via.c | ||
24 | @@ -1041,7 +1041,7 @@ static void analog_low_current_mode(struct hda_codec *codec) | ||
25 | bool enable; | ||
26 | unsigned int verb, parm; | ||
27 | |||
28 | - enable = is_aa_path_mute(codec) && (spec->opened_streams != 0); | ||
29 | + enable = is_aa_path_mute(codec) && !spec->opened_streams; | ||
30 | |||
31 | /* decide low current mode's verb & parameter */ | ||
32 | switch (spec->codec_type) { | ||
33 | -- | ||
34 | 1.7.7.4 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0003-ALSA-HDA-Remove-quirk-for-Asus-N53Jq.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0003-ALSA-HDA-Remove-quirk-for-Asus-N53Jq.patch new file mode 100644 index 00000000..13ad2bca --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0003-ALSA-HDA-Remove-quirk-for-Asus-N53Jq.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From ab692dfced98f2967cf710941d686e66cf519afb Mon Sep 17 00:00:00 2001 | ||
2 | From: David Henningsson <david.henningsson@canonical.com> | ||
3 | Date: Fri, 27 Jan 2012 14:31:19 +0100 | ||
4 | Subject: [PATCH 03/87] ALSA: HDA: Remove quirk for Asus N53Jq | ||
5 | |||
6 | commit a389d67cf9849aff1722ed73186a584e2196a873 upstream. | ||
7 | |||
8 | The user reports that he needs to add model=auto for audio to | ||
9 | work properly. In fact, since node 0x15 is not even a pin node, | ||
10 | the existing fixup is definitely wrong. Relevant information can | ||
11 | be found in the buglink below. | ||
12 | |||
13 | BugLink: https://bugs.launchpad.net/bugs/918254 | ||
14 | Signed-off-by: David Henningsson <david.henningsson@canonical.com> | ||
15 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | sound/pci/hda/patch_realtek.c | 1 - | ||
19 | 1 files changed, 0 insertions(+), 1 deletions(-) | ||
20 | |||
21 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
22 | index 5f03c40..d02e8e0 100644 | ||
23 | --- a/sound/pci/hda/patch_realtek.c | ||
24 | +++ b/sound/pci/hda/patch_realtek.c | ||
25 | @@ -5011,7 +5011,6 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | ||
26 | SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", | ||
27 | ALC269_FIXUP_AMIC), | ||
28 | SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269_FIXUP_AMIC), | ||
29 | - SND_PCI_QUIRK(0x1043, 0x1113, "ASUS N63Jn", ALC269_FIXUP_AMIC), | ||
30 | SND_PCI_QUIRK(0x1043, 0x1143, "ASUS B53f", ALC269_FIXUP_AMIC), | ||
31 | SND_PCI_QUIRK(0x1043, 0x1133, "ASUS UJ20ft", ALC269_FIXUP_AMIC), | ||
32 | SND_PCI_QUIRK(0x1043, 0x1183, "ASUS K72DR", ALC269_FIXUP_AMIC), | ||
33 | -- | ||
34 | 1.7.7.4 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0004-ALSA-hda-Apply-0x0f-VREF-fix-to-all-ASUS-laptops-wit.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0004-ALSA-hda-Apply-0x0f-VREF-fix-to-all-ASUS-laptops-wit.patch new file mode 100644 index 00000000..e25d66c9 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0004-ALSA-hda-Apply-0x0f-VREF-fix-to-all-ASUS-laptops-wit.patch | |||
@@ -0,0 +1,117 @@ | |||
1 | From 4f53e64f2effdcbd8f563411031fdc5172f876ce Mon Sep 17 00:00:00 2001 | ||
2 | From: Takashi Iwai <tiwai@suse.de> | ||
3 | Date: Mon, 30 Jan 2012 10:54:08 +0100 | ||
4 | Subject: [PATCH 04/87] ALSA: hda - Apply 0x0f-VREF fix to all ASUS laptops | ||
5 | with ALC861/660 | ||
6 | |||
7 | commit 31150f2327cbb66363f38e13ca1be973d2f9203a upstream. | ||
8 | |||
9 | It turned out that other ASUS laptops require the similar fix to | ||
10 | enable the VREF on the pin 0x0f for the secret output amp, not only | ||
11 | ASUS A6Rp. Moreover, it's required even when the pin is being used | ||
12 | as the output. Thus, writing a fixed value doesn't work always. | ||
13 | |||
14 | This patch applies the VREF-fix for all ASUS laptops with ALC861/660 | ||
15 | in a fixup function that checks the current value and turns on only | ||
16 | the VREF value no matter whether input or output direction is set. | ||
17 | |||
18 | The automute function is modified as well to keep the pin VREF upon | ||
19 | muting/unmuting via pin-control; otherwise the pin VREF is reset at | ||
20 | plugging/unplugging a jack. | ||
21 | |||
22 | Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=42588 | ||
23 | |||
24 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | sound/pci/hda/patch_realtek.c | 43 +++++++++++++++++++++++++++++++++------- | ||
28 | 1 files changed, 35 insertions(+), 8 deletions(-) | ||
29 | |||
30 | diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c | ||
31 | index d02e8e0..34e5fcc 100644 | ||
32 | --- a/sound/pci/hda/patch_realtek.c | ||
33 | +++ b/sound/pci/hda/patch_realtek.c | ||
34 | @@ -176,6 +176,7 @@ struct alc_spec { | ||
35 | unsigned int detect_lo:1; /* Line-out detection enabled */ | ||
36 | unsigned int automute_speaker_possible:1; /* there are speakers and either LO or HP */ | ||
37 | unsigned int automute_lo_possible:1; /* there are line outs and HP */ | ||
38 | + unsigned int keep_vref_in_automute:1; /* Don't clear VREF in automute */ | ||
39 | |||
40 | /* other flags */ | ||
41 | unsigned int no_analog :1; /* digital I/O only */ | ||
42 | @@ -519,13 +520,24 @@ static void do_automute(struct hda_codec *codec, int num_pins, hda_nid_t *pins, | ||
43 | |||
44 | for (i = 0; i < num_pins; i++) { | ||
45 | hda_nid_t nid = pins[i]; | ||
46 | + unsigned int val; | ||
47 | if (!nid) | ||
48 | break; | ||
49 | switch (spec->automute_mode) { | ||
50 | case ALC_AUTOMUTE_PIN: | ||
51 | + /* don't reset VREF value in case it's controlling | ||
52 | + * the amp (see alc861_fixup_asus_amp_vref_0f()) | ||
53 | + */ | ||
54 | + if (spec->keep_vref_in_automute) { | ||
55 | + val = snd_hda_codec_read(codec, nid, 0, | ||
56 | + AC_VERB_GET_PIN_WIDGET_CONTROL, 0); | ||
57 | + val &= ~PIN_HP; | ||
58 | + } else | ||
59 | + val = 0; | ||
60 | + val |= pin_bits; | ||
61 | snd_hda_codec_write(codec, nid, 0, | ||
62 | AC_VERB_SET_PIN_WIDGET_CONTROL, | ||
63 | - pin_bits); | ||
64 | + val); | ||
65 | break; | ||
66 | case ALC_AUTOMUTE_AMP: | ||
67 | snd_hda_codec_amp_stereo(codec, nid, HDA_OUTPUT, 0, | ||
68 | @@ -5225,6 +5237,25 @@ enum { | ||
69 | PINFIX_ASUS_A6RP, | ||
70 | }; | ||
71 | |||
72 | +/* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */ | ||
73 | +static void alc861_fixup_asus_amp_vref_0f(struct hda_codec *codec, | ||
74 | + const struct alc_fixup *fix, int action) | ||
75 | +{ | ||
76 | + struct alc_spec *spec = codec->spec; | ||
77 | + unsigned int val; | ||
78 | + | ||
79 | + if (action != ALC_FIXUP_ACT_INIT) | ||
80 | + return; | ||
81 | + val = snd_hda_codec_read(codec, 0x0f, 0, | ||
82 | + AC_VERB_GET_PIN_WIDGET_CONTROL, 0); | ||
83 | + if (!(val & (AC_PINCTL_IN_EN | AC_PINCTL_OUT_EN))) | ||
84 | + val |= AC_PINCTL_IN_EN; | ||
85 | + val |= AC_PINCTL_VREF_50; | ||
86 | + snd_hda_codec_write(codec, 0x0f, 0, | ||
87 | + AC_VERB_SET_PIN_WIDGET_CONTROL, val); | ||
88 | + spec->keep_vref_in_automute = 1; | ||
89 | +} | ||
90 | + | ||
91 | static const struct alc_fixup alc861_fixups[] = { | ||
92 | [PINFIX_FSC_AMILO_PI1505] = { | ||
93 | .type = ALC_FIXUP_PINS, | ||
94 | @@ -5235,17 +5266,13 @@ static const struct alc_fixup alc861_fixups[] = { | ||
95 | } | ||
96 | }, | ||
97 | [PINFIX_ASUS_A6RP] = { | ||
98 | - .type = ALC_FIXUP_VERBS, | ||
99 | - .v.verbs = (const struct hda_verb[]) { | ||
100 | - /* node 0x0f VREF seems controlling the master output */ | ||
101 | - { 0x0f, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF50 }, | ||
102 | - { } | ||
103 | - }, | ||
104 | + .type = ALC_FIXUP_FUNC, | ||
105 | + .v.func = alc861_fixup_asus_amp_vref_0f, | ||
106 | }, | ||
107 | }; | ||
108 | |||
109 | static const struct snd_pci_quirk alc861_fixup_tbl[] = { | ||
110 | - SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", PINFIX_ASUS_A6RP), | ||
111 | + SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP), | ||
112 | SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP), | ||
113 | SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505), | ||
114 | {} | ||
115 | -- | ||
116 | 1.7.7.4 | ||
117 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0005-ALSA-hda-Fix-calling-cs_automic-twice-for-Cirrus-cod.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0005-ALSA-hda-Fix-calling-cs_automic-twice-for-Cirrus-cod.patch new file mode 100644 index 00000000..db90e5db --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0005-ALSA-hda-Fix-calling-cs_automic-twice-for-Cirrus-cod.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From d0f03303d8a9c7c82856c50e6c7ea137c8ca7c83 Mon Sep 17 00:00:00 2001 | ||
2 | From: Dylan Reid <dgreid@chromium.org> | ||
3 | Date: Tue, 31 Jan 2012 13:04:41 -0800 | ||
4 | Subject: [PATCH 05/87] ALSA: hda - Fix calling cs_automic twice for Cirrus | ||
5 | codecs. | ||
6 | |||
7 | commit f70eecde3bca92630d3886496e73316ff353f185 upstream. | ||
8 | |||
9 | If cs_automic is called twice (like it is during init) while the mic | ||
10 | is present, it will over-write the last_input with the new one, | ||
11 | causing it to switch back to the automic input when the mic is | ||
12 | unplugged. This leaves the driver in a state (cur_input, last_input, | ||
13 | and automix_idx the same) where the internal mic can not be selected | ||
14 | until it is rebooted without the mic attached. | ||
15 | |||
16 | Check that the mic hasn't already been switched to before setting | ||
17 | last_input. | ||
18 | |||
19 | Signed-off-by: Dylan Reid <dgreid@chromium.org> | ||
20 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | sound/pci/hda/patch_cirrus.c | 6 ++++-- | ||
24 | 1 files changed, 4 insertions(+), 2 deletions(-) | ||
25 | |||
26 | diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c | ||
27 | index 5b0a9bb..ec0518e 100644 | ||
28 | --- a/sound/pci/hda/patch_cirrus.c | ||
29 | +++ b/sound/pci/hda/patch_cirrus.c | ||
30 | @@ -976,8 +976,10 @@ static void cs_automic(struct hda_codec *codec) | ||
31 | /* specific to CS421x, single ADC */ | ||
32 | if (spec->vendor_nid == CS421X_VENDOR_NID) { | ||
33 | if (present) { | ||
34 | - spec->last_input = spec->cur_input; | ||
35 | - spec->cur_input = spec->automic_idx; | ||
36 | + if (spec->cur_input != spec->automic_idx) { | ||
37 | + spec->last_input = spec->cur_input; | ||
38 | + spec->cur_input = spec->automic_idx; | ||
39 | + } | ||
40 | } else { | ||
41 | spec->cur_input = spec->last_input; | ||
42 | } | ||
43 | -- | ||
44 | 1.7.7.4 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0006-ALSA-hda-Allow-analog-low-current-mode-when-dynamic-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0006-ALSA-hda-Allow-analog-low-current-mode-when-dynamic-.patch new file mode 100644 index 00000000..fba2b6de --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0006-ALSA-hda-Allow-analog-low-current-mode-when-dynamic-.patch | |||
@@ -0,0 +1,105 @@ | |||
1 | From cb935a3a4ffa533491976365aa430ad9d586718f Mon Sep 17 00:00:00 2001 | ||
2 | From: Takashi Iwai <tiwai@suse.de> | ||
3 | Date: Wed, 1 Feb 2012 10:33:23 +0100 | ||
4 | Subject: [PATCH 06/87] ALSA: hda - Allow analog low-current mode when dynamic | ||
5 | power-control is on | ||
6 | |||
7 | commit e9d010c2e8f03952e67a6fd8aed0f0dc92084ccc upstream. | ||
8 | |||
9 | VIA codecs have several different power-saving features, and one of | ||
10 | them is the analog low-current mode. But it turned out that the ALC | ||
11 | mode causes pop-noises at each on/off time on some machines. As a | ||
12 | quick workaround, disable the ALC when another power-saving feature, | ||
13 | the dynamic pin power-control, is turned off, too, since the dynamic | ||
14 | power-control is already exposed as a mixer enum element so that user | ||
15 | can turn it on/off freely. | ||
16 | |||
17 | Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=741128 | ||
18 | |||
19 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | sound/pci/hda/patch_via.c | 27 +++++++++++++++++++++------ | ||
23 | 1 files changed, 21 insertions(+), 6 deletions(-) | ||
24 | |||
25 | diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c | ||
26 | index 0684542..d2a477d 100644 | ||
27 | --- a/sound/pci/hda/patch_via.c | ||
28 | +++ b/sound/pci/hda/patch_via.c | ||
29 | @@ -198,6 +198,9 @@ struct via_spec { | ||
30 | unsigned int no_pin_power_ctl; | ||
31 | enum VIA_HDA_CODEC codec_type; | ||
32 | |||
33 | + /* analog low-power control */ | ||
34 | + bool alc_mode; | ||
35 | + | ||
36 | /* smart51 setup */ | ||
37 | unsigned int smart51_nums; | ||
38 | hda_nid_t smart51_pins[2]; | ||
39 | @@ -748,6 +751,7 @@ static int via_pin_power_ctl_put(struct snd_kcontrol *kcontrol, | ||
40 | return 0; | ||
41 | spec->no_pin_power_ctl = val; | ||
42 | set_widgets_power_state(codec); | ||
43 | + analog_low_current_mode(codec); | ||
44 | return 1; | ||
45 | } | ||
46 | |||
47 | @@ -1035,13 +1039,19 @@ static bool is_aa_path_mute(struct hda_codec *codec) | ||
48 | } | ||
49 | |||
50 | /* enter/exit analog low-current mode */ | ||
51 | -static void analog_low_current_mode(struct hda_codec *codec) | ||
52 | +static void __analog_low_current_mode(struct hda_codec *codec, bool force) | ||
53 | { | ||
54 | struct via_spec *spec = codec->spec; | ||
55 | bool enable; | ||
56 | unsigned int verb, parm; | ||
57 | |||
58 | - enable = is_aa_path_mute(codec) && !spec->opened_streams; | ||
59 | + if (spec->no_pin_power_ctl) | ||
60 | + enable = false; | ||
61 | + else | ||
62 | + enable = is_aa_path_mute(codec) && !spec->opened_streams; | ||
63 | + if (enable == spec->alc_mode && !force) | ||
64 | + return; | ||
65 | + spec->alc_mode = enable; | ||
66 | |||
67 | /* decide low current mode's verb & parameter */ | ||
68 | switch (spec->codec_type) { | ||
69 | @@ -1073,6 +1083,11 @@ static void analog_low_current_mode(struct hda_codec *codec) | ||
70 | snd_hda_codec_write(codec, codec->afg, 0, verb, parm); | ||
71 | } | ||
72 | |||
73 | +static void analog_low_current_mode(struct hda_codec *codec) | ||
74 | +{ | ||
75 | + return __analog_low_current_mode(codec, false); | ||
76 | +} | ||
77 | + | ||
78 | /* | ||
79 | * generic initialization of ADC, input mixers and output mixers | ||
80 | */ | ||
81 | @@ -1498,10 +1513,6 @@ static int via_build_controls(struct hda_codec *codec) | ||
82 | return err; | ||
83 | } | ||
84 | |||
85 | - /* init power states */ | ||
86 | - set_widgets_power_state(codec); | ||
87 | - analog_low_current_mode(codec); | ||
88 | - | ||
89 | via_free_kctls(codec); /* no longer needed */ | ||
90 | return 0; | ||
91 | } | ||
92 | @@ -2771,6 +2782,10 @@ static int via_init(struct hda_codec *codec) | ||
93 | for (i = 0; i < spec->num_iverbs; i++) | ||
94 | snd_hda_sequence_write(codec, spec->init_verbs[i]); | ||
95 | |||
96 | + /* init power states */ | ||
97 | + set_widgets_power_state(codec); | ||
98 | + __analog_low_current_mode(codec, true); | ||
99 | + | ||
100 | via_auto_init_multi_out(codec); | ||
101 | via_auto_init_hp_out(codec); | ||
102 | via_auto_init_speaker_out(codec); | ||
103 | -- | ||
104 | 1.7.7.4 | ||
105 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0007-ALSA-HDA-Fix-duplicated-output-to-more-than-one-code.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0007-ALSA-HDA-Fix-duplicated-output-to-more-than-one-code.patch new file mode 100644 index 00000000..e3e4e6df --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0007-ALSA-HDA-Fix-duplicated-output-to-more-than-one-code.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From b23a6ba81e42ad2d95afc04840d08b558092ba24 Mon Sep 17 00:00:00 2001 | ||
2 | From: David Henningsson <david.henningsson@canonical.com> | ||
3 | Date: Wed, 1 Feb 2012 12:05:41 +0100 | ||
4 | Subject: [PATCH 07/87] ALSA: HDA: Fix duplicated output to more than one | ||
5 | codec | ||
6 | |||
7 | commit 54c2a89f60fd71b924d0f848ac892442951401a6 upstream. | ||
8 | |||
9 | This typo caused the wrong codec's nid to be checked for wcaps type. | ||
10 | As a result, sometimes speakers would duplicate the output sent to | ||
11 | HDMI output. | ||
12 | |||
13 | BugLink: https://bugs.launchpad.net/bugs/924320 | ||
14 | Signed-off-by: David Henningsson <david.henningsson@canonical.com> | ||
15 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | sound/pci/hda/hda_codec.c | 2 +- | ||
19 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
20 | |||
21 | diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c | ||
22 | index 4562e9d..05c8768 100644 | ||
23 | --- a/sound/pci/hda/hda_codec.c | ||
24 | +++ b/sound/pci/hda/hda_codec.c | ||
25 | @@ -1446,7 +1446,7 @@ void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, | ||
26 | for (i = 0; i < c->cvt_setups.used; i++) { | ||
27 | p = snd_array_elem(&c->cvt_setups, i); | ||
28 | if (!p->active && p->stream_tag == stream_tag && | ||
29 | - get_wcaps_type(get_wcaps(codec, p->nid)) == type) | ||
30 | + get_wcaps_type(get_wcaps(c, p->nid)) == type) | ||
31 | p->dirty = 1; | ||
32 | } | ||
33 | } | ||
34 | -- | ||
35 | 1.7.7.4 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0008-ALSA-hda-Disable-dynamic-power-control-for-VIA-as-de.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0008-ALSA-hda-Disable-dynamic-power-control-for-VIA-as-de.patch new file mode 100644 index 00000000..e8afd511 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0008-ALSA-hda-Disable-dynamic-power-control-for-VIA-as-de.patch | |||
@@ -0,0 +1,34 @@ | |||
1 | From 1e7c37777276bcae0ead904309644422bace8608 Mon Sep 17 00:00:00 2001 | ||
2 | From: Takashi Iwai <tiwai@suse.de> | ||
3 | Date: Thu, 2 Feb 2012 10:30:17 +0100 | ||
4 | Subject: [PATCH 08/87] ALSA: hda - Disable dynamic-power control for VIA as | ||
5 | default | ||
6 | |||
7 | commit b5bcc189401c815988b7dd37611fc56f40c9139d upstream. | ||
8 | |||
9 | Since the dynamic pin power-control and the analog low-current mode | ||
10 | may lead to pop-noise, it's safer to set it off as default. | ||
11 | |||
12 | Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=741128 | ||
13 | |||
14 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | sound/pci/hda/patch_via.c | 1 + | ||
18 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
19 | |||
20 | diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c | ||
21 | index d2a477d..a0a3f50 100644 | ||
22 | --- a/sound/pci/hda/patch_via.c | ||
23 | +++ b/sound/pci/hda/patch_via.c | ||
24 | @@ -1460,6 +1460,7 @@ static int via_build_controls(struct hda_codec *codec) | ||
25 | struct snd_kcontrol *kctl; | ||
26 | int err, i; | ||
27 | |||
28 | + spec->no_pin_power_ctl = 1; | ||
29 | if (spec->set_widgets_power_state) | ||
30 | if (!via_clone_control(spec, &via_pin_power_ctl_enum)) | ||
31 | return -ENOMEM; | ||
32 | -- | ||
33 | 1.7.7.4 | ||
34 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0009-ASoC-wm_hubs-Enable-line-out-VMID-buffer-for-single-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0009-ASoC-wm_hubs-Enable-line-out-VMID-buffer-for-single-.patch new file mode 100644 index 00000000..6e82d4b9 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0009-ASoC-wm_hubs-Enable-line-out-VMID-buffer-for-single-.patch | |||
@@ -0,0 +1,57 @@ | |||
1 | From 7e1a603295915f189e0b1b2207f5c9297ee65250 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
3 | Date: Fri, 20 Jan 2012 12:19:43 +0000 | ||
4 | Subject: [PATCH 09/87] ASoC: wm_hubs: Enable line out VMID buffer for single | ||
5 | ended line outputs | ||
6 | |||
7 | commit 77231abe55433aa17eca712718745275853fa66d upstream. | ||
8 | |||
9 | For optimal performance the single ended line outputs require that the | ||
10 | line output VMID buffer be enabled. | ||
11 | |||
12 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | sound/soc/codecs/wm_hubs.c | 6 ++++++ | ||
16 | 1 files changed, 6 insertions(+), 0 deletions(-) | ||
17 | |||
18 | diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c | ||
19 | index 48e61e9..8c26c6d 100644 | ||
20 | --- a/sound/soc/codecs/wm_hubs.c | ||
21 | +++ b/sound/soc/codecs/wm_hubs.c | ||
22 | @@ -614,6 +614,8 @@ SND_SOC_DAPM_INPUT("IN2RP:VXRP"), | ||
23 | SND_SOC_DAPM_MICBIAS("MICBIAS2", WM8993_POWER_MANAGEMENT_1, 5, 0), | ||
24 | SND_SOC_DAPM_MICBIAS("MICBIAS1", WM8993_POWER_MANAGEMENT_1, 4, 0), | ||
25 | |||
26 | +SND_SOC_DAPM_SUPPLY("LINEOUT_VMID_BUF", WM8993_ANTIPOP1, 7, 0, NULL, 0), | ||
27 | + | ||
28 | SND_SOC_DAPM_MIXER("IN1L PGA", WM8993_POWER_MANAGEMENT_2, 6, 0, | ||
29 | in1l_pga, ARRAY_SIZE(in1l_pga)), | ||
30 | SND_SOC_DAPM_MIXER("IN1R PGA", WM8993_POWER_MANAGEMENT_2, 4, 0, | ||
31 | @@ -832,9 +834,11 @@ static const struct snd_soc_dapm_route lineout1_diff_routes[] = { | ||
32 | }; | ||
33 | |||
34 | static const struct snd_soc_dapm_route lineout1_se_routes[] = { | ||
35 | + { "LINEOUT1N Mixer", NULL, "LINEOUT_VMID_BUF" }, | ||
36 | { "LINEOUT1N Mixer", "Left Output Switch", "Left Output PGA" }, | ||
37 | { "LINEOUT1N Mixer", "Right Output Switch", "Right Output PGA" }, | ||
38 | |||
39 | + { "LINEOUT1P Mixer", NULL, "LINEOUT_VMID_BUF" }, | ||
40 | { "LINEOUT1P Mixer", "Left Output Switch", "Left Output PGA" }, | ||
41 | |||
42 | { "LINEOUT1N Driver", NULL, "LINEOUT1N Mixer" }, | ||
43 | @@ -851,9 +855,11 @@ static const struct snd_soc_dapm_route lineout2_diff_routes[] = { | ||
44 | }; | ||
45 | |||
46 | static const struct snd_soc_dapm_route lineout2_se_routes[] = { | ||
47 | + { "LINEOUT2N Mixer", NULL, "LINEOUT_VMID_BUF" }, | ||
48 | { "LINEOUT2N Mixer", "Left Output Switch", "Left Output PGA" }, | ||
49 | { "LINEOUT2N Mixer", "Right Output Switch", "Right Output PGA" }, | ||
50 | |||
51 | + { "LINEOUT2P Mixer", NULL, "LINEOUT_VMID_BUF" }, | ||
52 | { "LINEOUT2P Mixer", "Right Output Switch", "Right Output PGA" }, | ||
53 | |||
54 | { "LINEOUT2N Driver", NULL, "LINEOUT2N Mixer" }, | ||
55 | -- | ||
56 | 1.7.7.4 | ||
57 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0010-ASoC-wm_hubs-fix-wrong-bits-for-LINEOUT2-N-P-mixer.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0010-ASoC-wm_hubs-fix-wrong-bits-for-LINEOUT2-N-P-mixer.patch new file mode 100644 index 00000000..13e59365 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0010-ASoC-wm_hubs-fix-wrong-bits-for-LINEOUT2-N-P-mixer.patch | |||
@@ -0,0 +1,32 @@ | |||
1 | From f886b09222d9ae6a977aa75e7b1e924fddca2d5f Mon Sep 17 00:00:00 2001 | ||
2 | From: UK KIM <w0806.kim@samsung.com> | ||
3 | Date: Sat, 28 Jan 2012 01:52:22 +0900 | ||
4 | Subject: [PATCH 10/87] ASoC: wm_hubs: fix wrong bits for LINEOUT2 N/P mixer | ||
5 | |||
6 | commit 114395c61ad2eb5a7a5cd163fcadb2414e48245a upstream. | ||
7 | |||
8 | Signed-off-by: UK KIM <w0806.kim@samsung.com> | ||
9 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
10 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
11 | --- | ||
12 | sound/soc/codecs/wm_hubs.c | 4 ++-- | ||
13 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
14 | |||
15 | diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c | ||
16 | index 8c26c6d..8547191 100644 | ||
17 | --- a/sound/soc/codecs/wm_hubs.c | ||
18 | +++ b/sound/soc/codecs/wm_hubs.c | ||
19 | @@ -593,8 +593,8 @@ SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), | ||
20 | }; | ||
21 | |||
22 | static const struct snd_kcontrol_new line2n_mix[] = { | ||
23 | -SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER2, 6, 1, 0), | ||
24 | -SOC_DAPM_SINGLE("Right Output Switch", WM8993_LINE_MIXER2, 5, 1, 0), | ||
25 | +SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER2, 5, 1, 0), | ||
26 | +SOC_DAPM_SINGLE("Right Output Switch", WM8993_LINE_MIXER2, 6, 1, 0), | ||
27 | }; | ||
28 | |||
29 | static const struct snd_kcontrol_new line2p_mix[] = { | ||
30 | -- | ||
31 | 1.7.7.4 | ||
32 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0011-ARM-7306-1-vfp-flush-thread-hwstate-before-restoring.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0011-ARM-7306-1-vfp-flush-thread-hwstate-before-restoring.patch new file mode 100644 index 00000000..116be5f5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0011-ARM-7306-1-vfp-flush-thread-hwstate-before-restoring.patch | |||
@@ -0,0 +1,60 @@ | |||
1 | From 04c6e8a2521ffa7049aa6df835d48d4bfce37a8e Mon Sep 17 00:00:00 2001 | ||
2 | From: Will Deacon <will.deacon@arm.com> | ||
3 | Date: Mon, 30 Jan 2012 20:21:42 +0100 | ||
4 | Subject: [PATCH 11/87] ARM: 7306/1: vfp: flush thread hwstate before | ||
5 | restoring context from sigframe | ||
6 | |||
7 | commit 2af276dfb1722e97b190bd2e646b079a2aa674db upstream. | ||
8 | |||
9 | Following execution of a signal handler, we currently restore the VFP | ||
10 | context from the ucontext in the signal frame. This involves copying | ||
11 | from the user stack into the current thread's vfp_hard_struct and then | ||
12 | flushing the new data out to the hardware registers. | ||
13 | |||
14 | This is problematic when using a preemptible kernel because we could be | ||
15 | context switched whilst updating the vfp_hard_struct. If the current | ||
16 | thread has made use of VFP since the last context switch, the VFP | ||
17 | notifier will copy from the hardware registers into the vfp_hard_struct, | ||
18 | overwriting any data that had been partially copied by the signal code. | ||
19 | |||
20 | Disabling preemption across copy_from_user calls is a terrible idea, so | ||
21 | instead we move the VFP thread flush *before* we update the | ||
22 | vfp_hard_struct. Since the flushing is performed lazily, this has the | ||
23 | effect of disabling VFP and clearing the CPU's VFP state pointer, | ||
24 | therefore preventing the thread from being updated with stale data on | ||
25 | the next context switch. | ||
26 | |||
27 | Tested-by: Peter Maydell <peter.maydell@linaro.org> | ||
28 | Signed-off-by: Will Deacon <will.deacon@arm.com> | ||
29 | Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | arch/arm/kernel/signal.c | 5 ++--- | ||
33 | 1 files changed, 2 insertions(+), 3 deletions(-) | ||
34 | |||
35 | diff --git a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c | ||
36 | index 0340224..9e617bd 100644 | ||
37 | --- a/arch/arm/kernel/signal.c | ||
38 | +++ b/arch/arm/kernel/signal.c | ||
39 | @@ -227,6 +227,8 @@ static int restore_vfp_context(struct vfp_sigframe __user *frame) | ||
40 | if (magic != VFP_MAGIC || size != VFP_STORAGE_SIZE) | ||
41 | return -EINVAL; | ||
42 | |||
43 | + vfp_flush_hwstate(thread); | ||
44 | + | ||
45 | /* | ||
46 | * Copy the floating point registers. There can be unused | ||
47 | * registers see asm/hwcap.h for details. | ||
48 | @@ -251,9 +253,6 @@ static int restore_vfp_context(struct vfp_sigframe __user *frame) | ||
49 | __get_user_error(h->fpinst, &frame->ufp_exc.fpinst, err); | ||
50 | __get_user_error(h->fpinst2, &frame->ufp_exc.fpinst2, err); | ||
51 | |||
52 | - if (!err) | ||
53 | - vfp_flush_hwstate(thread); | ||
54 | - | ||
55 | return err ? -EFAULT : 0; | ||
56 | } | ||
57 | |||
58 | -- | ||
59 | 1.7.7.4 | ||
60 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0012-ARM-7307-1-vfp-fix-ptrace-regset-modification-race.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0012-ARM-7307-1-vfp-fix-ptrace-regset-modification-race.patch new file mode 100644 index 00000000..139c7668 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0012-ARM-7307-1-vfp-fix-ptrace-regset-modification-race.patch | |||
@@ -0,0 +1,68 @@ | |||
1 | From c85ca4cdfafaee9fd428b934fea18e5c2d850fb6 Mon Sep 17 00:00:00 2001 | ||
2 | From: Dave Martin <dave.martin@linaro.org> | ||
3 | Date: Mon, 30 Jan 2012 20:22:28 +0100 | ||
4 | Subject: [PATCH 12/87] ARM: 7307/1: vfp: fix ptrace regset modification race | ||
5 | |||
6 | commit 247f4993a5974e6759606c4d380748eecfd273ff upstream. | ||
7 | |||
8 | In a preemptible kernel, vfp_set() can be preempted, causing the | ||
9 | hardware VFP context to be switched while the thread vfp state is | ||
10 | being read and modified. This leads to a race condition which can | ||
11 | cause the thread vfp state to become corrupted if lazy VFP context | ||
12 | save occurs due to preemption in between the time thread->vfpstate | ||
13 | is read and the time the modified state is written back. | ||
14 | |||
15 | This may occur if preemption occurs during the execution of a | ||
16 | ptrace() call which modifies the VFP register state of a thread. | ||
17 | Such instances should be very rare in most realistic scenarios -- | ||
18 | none has been reported, so far as I am aware. Only uniprocessor | ||
19 | systems should be affected, since VFP context save is not currently | ||
20 | lazy in SMP kernels. | ||
21 | |||
22 | The problem was introduced by my earlier patch migrating to use | ||
23 | regsets to implement ptrace. | ||
24 | |||
25 | This patch does a vfp_sync_hwstate() before reading | ||
26 | thread->vfpstate, to make sure that the thread's VFP state is not | ||
27 | live in the hardware registers while the registers are modified. | ||
28 | |||
29 | Thanks to Will Deacon for spotting this. | ||
30 | |||
31 | Signed-off-by: Dave Martin <dave.martin@linaro.org> | ||
32 | Signed-off-by: Will Deacon <will.deacon@arm.com> | ||
33 | Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
34 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
35 | --- | ||
36 | arch/arm/kernel/ptrace.c | 6 ++++-- | ||
37 | 1 files changed, 4 insertions(+), 2 deletions(-) | ||
38 | |||
39 | diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c | ||
40 | index 483727a..8b17fb4 100644 | ||
41 | --- a/arch/arm/kernel/ptrace.c | ||
42 | +++ b/arch/arm/kernel/ptrace.c | ||
43 | @@ -699,10 +699,13 @@ static int vfp_set(struct task_struct *target, | ||
44 | { | ||
45 | int ret; | ||
46 | struct thread_info *thread = task_thread_info(target); | ||
47 | - struct vfp_hard_struct new_vfp = thread->vfpstate.hard; | ||
48 | + struct vfp_hard_struct new_vfp; | ||
49 | const size_t user_fpregs_offset = offsetof(struct user_vfp, fpregs); | ||
50 | const size_t user_fpscr_offset = offsetof(struct user_vfp, fpscr); | ||
51 | |||
52 | + vfp_sync_hwstate(thread); | ||
53 | + new_vfp = thread->vfpstate.hard; | ||
54 | + | ||
55 | ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, | ||
56 | &new_vfp.fpregs, | ||
57 | user_fpregs_offset, | ||
58 | @@ -723,7 +726,6 @@ static int vfp_set(struct task_struct *target, | ||
59 | if (ret) | ||
60 | return ret; | ||
61 | |||
62 | - vfp_sync_hwstate(thread); | ||
63 | thread->vfpstate.hard = new_vfp; | ||
64 | vfp_flush_hwstate(thread); | ||
65 | |||
66 | -- | ||
67 | 1.7.7.4 | ||
68 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0013-ARM-7308-1-vfp-flush-thread-hwstate-before-copying-p.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0013-ARM-7308-1-vfp-flush-thread-hwstate-before-copying-p.patch new file mode 100644 index 00000000..df943e4a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0013-ARM-7308-1-vfp-flush-thread-hwstate-before-copying-p.patch | |||
@@ -0,0 +1,41 @@ | |||
1 | From a4e4a6ee0cc6e069926d006b7a6efd73d33edfcc Mon Sep 17 00:00:00 2001 | ||
2 | From: Will Deacon <will.deacon@arm.com> | ||
3 | Date: Mon, 30 Jan 2012 20:23:29 +0100 | ||
4 | Subject: [PATCH 13/87] ARM: 7308/1: vfp: flush thread hwstate before copying | ||
5 | ptrace registers | ||
6 | |||
7 | commit 8130b9d7b9d858aa04ce67805e8951e3cb6e9b2f upstream. | ||
8 | |||
9 | If we are context switched whilst copying into a thread's | ||
10 | vfp_hard_struct then the partial copy may be corrupted by the VFP | ||
11 | context switching code (see "ARM: vfp: flush thread hwstate before | ||
12 | restoring context from sigframe"). | ||
13 | |||
14 | This patch updates the ptrace VFP set code so that the thread state is | ||
15 | flushed before the copy, therefore disabling VFP and preventing | ||
16 | corruption from occurring. | ||
17 | |||
18 | Signed-off-by: Will Deacon <will.deacon@arm.com> | ||
19 | Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | arch/arm/kernel/ptrace.c | 2 +- | ||
23 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
24 | |||
25 | diff --git a/arch/arm/kernel/ptrace.c b/arch/arm/kernel/ptrace.c | ||
26 | index 8b17fb4..90fa8b3 100644 | ||
27 | --- a/arch/arm/kernel/ptrace.c | ||
28 | +++ b/arch/arm/kernel/ptrace.c | ||
29 | @@ -726,8 +726,8 @@ static int vfp_set(struct task_struct *target, | ||
30 | if (ret) | ||
31 | return ret; | ||
32 | |||
33 | - thread->vfpstate.hard = new_vfp; | ||
34 | vfp_flush_hwstate(thread); | ||
35 | + thread->vfpstate.hard = new_vfp; | ||
36 | |||
37 | return 0; | ||
38 | } | ||
39 | -- | ||
40 | 1.7.7.4 | ||
41 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0014-ARM-OMAP2-GPMC-fix-device-size-setup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0014-ARM-OMAP2-GPMC-fix-device-size-setup.patch new file mode 100644 index 00000000..a2f52fe5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0014-ARM-OMAP2-GPMC-fix-device-size-setup.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From 04712489fde65768a46fa4a4b240fff446c17aa6 Mon Sep 17 00:00:00 2001 | ||
2 | From: Yegor Yefremov <yegor_sub1@visionsystems.de> | ||
3 | Date: Mon, 23 Jan 2012 08:32:23 +0100 | ||
4 | Subject: [PATCH 14/87] ARM: OMAP2+: GPMC: fix device size setup | ||
5 | |||
6 | commit 8ef5d844cc3a644ea6f7665932a4307e9fad01fa upstream. | ||
7 | |||
8 | following statement can only change device size from 8-bit(0) to 16-bit(1), | ||
9 | but not vice versa: | ||
10 | |||
11 | regval |= GPMC_CONFIG1_DEVICESIZE(wval); | ||
12 | |||
13 | so as this field has 1 reserved bit, that could be used in future, | ||
14 | just clear both bits and then OR with the desired value | ||
15 | |||
16 | Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com> | ||
17 | Signed-off-by: Tony Lindgren <tony@atomide.com> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | arch/arm/mach-omap2/gpmc.c | 6 ++++++ | ||
21 | 1 files changed, 6 insertions(+), 0 deletions(-) | ||
22 | |||
23 | diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c | ||
24 | index 130034b..dfffbbf 100644 | ||
25 | --- a/arch/arm/mach-omap2/gpmc.c | ||
26 | +++ b/arch/arm/mach-omap2/gpmc.c | ||
27 | @@ -528,7 +528,13 @@ int gpmc_cs_configure(int cs, int cmd, int wval) | ||
28 | |||
29 | case GPMC_CONFIG_DEV_SIZE: | ||
30 | regval = gpmc_cs_read_reg(cs, GPMC_CS_CONFIG1); | ||
31 | + | ||
32 | + /* clear 2 target bits */ | ||
33 | + regval &= ~GPMC_CONFIG1_DEVICESIZE(3); | ||
34 | + | ||
35 | + /* set the proper value */ | ||
36 | regval |= GPMC_CONFIG1_DEVICESIZE(wval); | ||
37 | + | ||
38 | gpmc_cs_write_reg(cs, GPMC_CS_CONFIG1, regval); | ||
39 | break; | ||
40 | |||
41 | -- | ||
42 | 1.7.7.4 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0015-drivers-tty-vt-vt_ioctl.c-fix-KDFONTOP-32bit-compati.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0015-drivers-tty-vt-vt_ioctl.c-fix-KDFONTOP-32bit-compati.patch new file mode 100644 index 00000000..9b0e85e6 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0015-drivers-tty-vt-vt_ioctl.c-fix-KDFONTOP-32bit-compati.patch | |||
@@ -0,0 +1,44 @@ | |||
1 | From 58f75a56e37352b7dea174ee75f2ca52218370a7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Samuel Thibault <samuel.thibault@ens-lyon.org> | ||
3 | Date: Fri, 3 Feb 2012 15:37:15 -0800 | ||
4 | Subject: [PATCH 15/87] drivers/tty/vt/vt_ioctl.c: fix KDFONTOP 32bit | ||
5 | compatibility layer | ||
6 | |||
7 | commit cbcb8346054073d000ecac324763372d6abd44ac upstream. | ||
8 | |||
9 | KDFONTOP(GET) currently fails with EIO when being run in a 32bit userland | ||
10 | with a 64bit kernel if the font width is not 8. | ||
11 | |||
12 | This is because of the setting of the KD_FONT_FLAG_OLD flag, which makes | ||
13 | con_font_get return EIO in such case. | ||
14 | |||
15 | This flag should *not* be set for KDFONTOP, since it's actually the whole | ||
16 | point of this flag (see comment in con_font_set for instance). | ||
17 | |||
18 | Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org> | ||
19 | Reviewed-by: Arnd Bergmann <arnd@arndb.de> | ||
20 | Cc: Arthur Taylor <art@ified.ca> | ||
21 | Cc: Jiri Slaby <jslaby@suse.cz> | ||
22 | Cc: Jiri Olsa <jolsa@redhat.com> | ||
23 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
24 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | drivers/tty/vt/vt_ioctl.c | 1 - | ||
28 | 1 files changed, 0 insertions(+), 1 deletions(-) | ||
29 | |||
30 | diff --git a/drivers/tty/vt/vt_ioctl.c b/drivers/tty/vt/vt_ioctl.c | ||
31 | index 5e096f4..65447c5 100644 | ||
32 | --- a/drivers/tty/vt/vt_ioctl.c | ||
33 | +++ b/drivers/tty/vt/vt_ioctl.c | ||
34 | @@ -1463,7 +1463,6 @@ compat_kdfontop_ioctl(struct compat_console_font_op __user *fontop, | ||
35 | if (!perm && op->op != KD_FONT_OP_GET) | ||
36 | return -EPERM; | ||
37 | op->data = compat_ptr(((struct compat_console_font_op *)op)->data); | ||
38 | - op->flags |= KD_FONT_FLAG_OLD; | ||
39 | i = con_font_op(vc, op); | ||
40 | if (i) | ||
41 | return i; | ||
42 | -- | ||
43 | 1.7.7.4 | ||
44 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0016-proc-mem_release-should-check-mm-NULL.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0016-proc-mem_release-should-check-mm-NULL.patch new file mode 100644 index 00000000..200bc682 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0016-proc-mem_release-should-check-mm-NULL.patch | |||
@@ -0,0 +1,34 @@ | |||
1 | From 3a196fbe2650a4465d49f6e84d9360eab60e3bcb Mon Sep 17 00:00:00 2001 | ||
2 | From: Oleg Nesterov <oleg@redhat.com> | ||
3 | Date: Tue, 31 Jan 2012 17:14:38 +0100 | ||
4 | Subject: [PATCH 16/87] proc: mem_release() should check mm != NULL | ||
5 | |||
6 | commit 71879d3cb3dd8f2dfdefb252775c1b3ea04a3dd4 upstream. | ||
7 | |||
8 | mem_release() can hit mm == NULL, add the necessary check. | ||
9 | |||
10 | Signed-off-by: Oleg Nesterov <oleg@redhat.com> | ||
11 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
12 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
13 | --- | ||
14 | fs/proc/base.c | 4 ++-- | ||
15 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
16 | |||
17 | diff --git a/fs/proc/base.c b/fs/proc/base.c | ||
18 | index 1fc1dca..a43c70a 100644 | ||
19 | --- a/fs/proc/base.c | ||
20 | +++ b/fs/proc/base.c | ||
21 | @@ -886,8 +886,8 @@ loff_t mem_lseek(struct file *file, loff_t offset, int orig) | ||
22 | static int mem_release(struct inode *inode, struct file *file) | ||
23 | { | ||
24 | struct mm_struct *mm = file->private_data; | ||
25 | - | ||
26 | - mmput(mm); | ||
27 | + if (mm) | ||
28 | + mmput(mm); | ||
29 | return 0; | ||
30 | } | ||
31 | |||
32 | -- | ||
33 | 1.7.7.4 | ||
34 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0017-proc-unify-mem_read-and-mem_write.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0017-proc-unify-mem_read-and-mem_write.patch new file mode 100644 index 00000000..1c26c7fa --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0017-proc-unify-mem_read-and-mem_write.patch | |||
@@ -0,0 +1,148 @@ | |||
1 | From 034089b6f4e2ae0d0df38f3409cd73c386ad069a Mon Sep 17 00:00:00 2001 | ||
2 | From: Oleg Nesterov <oleg@redhat.com> | ||
3 | Date: Tue, 31 Jan 2012 17:14:54 +0100 | ||
4 | Subject: [PATCH 17/87] proc: unify mem_read() and mem_write() | ||
5 | |||
6 | commit 572d34b946bae070debd42db1143034d9687e13f upstream. | ||
7 | |||
8 | No functional changes, cleanup and preparation. | ||
9 | |||
10 | mem_read() and mem_write() are very similar. Move this code into the | ||
11 | new common helper, mem_rw(), which takes the additional "int write" | ||
12 | argument. | ||
13 | |||
14 | Signed-off-by: Oleg Nesterov <oleg@redhat.com> | ||
15 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | fs/proc/base.c | 90 ++++++++++++++++++++------------------------------------ | ||
19 | 1 files changed, 32 insertions(+), 58 deletions(-) | ||
20 | |||
21 | diff --git a/fs/proc/base.c b/fs/proc/base.c | ||
22 | index a43c70a..0d3a4d1 100644 | ||
23 | --- a/fs/proc/base.c | ||
24 | +++ b/fs/proc/base.c | ||
25 | @@ -782,57 +782,13 @@ static int mem_open(struct inode* inode, struct file* file) | ||
26 | return 0; | ||
27 | } | ||
28 | |||
29 | -static ssize_t mem_read(struct file * file, char __user * buf, | ||
30 | - size_t count, loff_t *ppos) | ||
31 | +static ssize_t mem_rw(struct file *file, char __user *buf, | ||
32 | + size_t count, loff_t *ppos, int write) | ||
33 | { | ||
34 | - int ret; | ||
35 | - char *page; | ||
36 | - unsigned long src = *ppos; | ||
37 | struct mm_struct *mm = file->private_data; | ||
38 | - | ||
39 | - if (!mm) | ||
40 | - return 0; | ||
41 | - | ||
42 | - page = (char *)__get_free_page(GFP_TEMPORARY); | ||
43 | - if (!page) | ||
44 | - return -ENOMEM; | ||
45 | - | ||
46 | - ret = 0; | ||
47 | - | ||
48 | - while (count > 0) { | ||
49 | - int this_len, retval; | ||
50 | - | ||
51 | - this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count; | ||
52 | - retval = access_remote_vm(mm, src, page, this_len, 0); | ||
53 | - if (!retval) { | ||
54 | - if (!ret) | ||
55 | - ret = -EIO; | ||
56 | - break; | ||
57 | - } | ||
58 | - | ||
59 | - if (copy_to_user(buf, page, retval)) { | ||
60 | - ret = -EFAULT; | ||
61 | - break; | ||
62 | - } | ||
63 | - | ||
64 | - ret += retval; | ||
65 | - src += retval; | ||
66 | - buf += retval; | ||
67 | - count -= retval; | ||
68 | - } | ||
69 | - *ppos = src; | ||
70 | - | ||
71 | - free_page((unsigned long) page); | ||
72 | - return ret; | ||
73 | -} | ||
74 | - | ||
75 | -static ssize_t mem_write(struct file * file, const char __user *buf, | ||
76 | - size_t count, loff_t *ppos) | ||
77 | -{ | ||
78 | - int copied; | ||
79 | + unsigned long addr = *ppos; | ||
80 | + ssize_t copied; | ||
81 | char *page; | ||
82 | - unsigned long dst = *ppos; | ||
83 | - struct mm_struct *mm = file->private_data; | ||
84 | |||
85 | if (!mm) | ||
86 | return 0; | ||
87 | @@ -843,30 +799,48 @@ static ssize_t mem_write(struct file * file, const char __user *buf, | ||
88 | |||
89 | copied = 0; | ||
90 | while (count > 0) { | ||
91 | - int this_len, retval; | ||
92 | + int this_len = min_t(int, count, PAGE_SIZE); | ||
93 | |||
94 | - this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count; | ||
95 | - if (copy_from_user(page, buf, this_len)) { | ||
96 | + if (write && copy_from_user(page, buf, this_len)) { | ||
97 | copied = -EFAULT; | ||
98 | break; | ||
99 | } | ||
100 | - retval = access_remote_vm(mm, dst, page, this_len, 1); | ||
101 | - if (!retval) { | ||
102 | + | ||
103 | + this_len = access_remote_vm(mm, addr, page, this_len, write); | ||
104 | + if (!this_len) { | ||
105 | if (!copied) | ||
106 | copied = -EIO; | ||
107 | break; | ||
108 | } | ||
109 | - copied += retval; | ||
110 | - buf += retval; | ||
111 | - dst += retval; | ||
112 | - count -= retval; | ||
113 | + | ||
114 | + if (!write && copy_to_user(buf, page, this_len)) { | ||
115 | + copied = -EFAULT; | ||
116 | + break; | ||
117 | + } | ||
118 | + | ||
119 | + buf += this_len; | ||
120 | + addr += this_len; | ||
121 | + copied += this_len; | ||
122 | + count -= this_len; | ||
123 | } | ||
124 | - *ppos = dst; | ||
125 | + *ppos = addr; | ||
126 | |||
127 | free_page((unsigned long) page); | ||
128 | return copied; | ||
129 | } | ||
130 | |||
131 | +static ssize_t mem_read(struct file *file, char __user *buf, | ||
132 | + size_t count, loff_t *ppos) | ||
133 | +{ | ||
134 | + return mem_rw(file, buf, count, ppos, 0); | ||
135 | +} | ||
136 | + | ||
137 | +static ssize_t mem_write(struct file *file, const char __user *buf, | ||
138 | + size_t count, loff_t *ppos) | ||
139 | +{ | ||
140 | + return mem_rw(file, (char __user*)buf, count, ppos, 1); | ||
141 | +} | ||
142 | + | ||
143 | loff_t mem_lseek(struct file *file, loff_t offset, int orig) | ||
144 | { | ||
145 | switch (orig) { | ||
146 | -- | ||
147 | 1.7.7.4 | ||
148 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0018-proc-make-sure-mem_open-doesn-t-pin-the-target-s-mem.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0018-proc-make-sure-mem_open-doesn-t-pin-the-target-s-mem.patch new file mode 100644 index 00000000..836e3029 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0018-proc-make-sure-mem_open-doesn-t-pin-the-target-s-mem.patch | |||
@@ -0,0 +1,79 @@ | |||
1 | From 43904e95ba660b59db5899a4d58a00e4ac4d3663 Mon Sep 17 00:00:00 2001 | ||
2 | From: Oleg Nesterov <oleg@redhat.com> | ||
3 | Date: Tue, 31 Jan 2012 17:15:11 +0100 | ||
4 | Subject: [PATCH 18/87] proc: make sure mem_open() doesn't pin the target's | ||
5 | memory | ||
6 | |||
7 | commit 6d08f2c7139790c268820a2e590795cb8333181a upstream. | ||
8 | |||
9 | Once /proc/pid/mem is opened, the memory can't be released until | ||
10 | mem_release() even if its owner exits. | ||
11 | |||
12 | Change mem_open() to do atomic_inc(mm_count) + mmput(), this only | ||
13 | pins mm_struct. Change mem_rw() to do atomic_inc_not_zero(mm_count) | ||
14 | before access_remote_vm(), this verifies that this mm is still alive. | ||
15 | |||
16 | I am not sure what should mem_rw() return if atomic_inc_not_zero() | ||
17 | fails. With this patch it returns zero to match the "mm == NULL" case, | ||
18 | may be it should return -EINVAL like it did before e268337d. | ||
19 | |||
20 | Perhaps it makes sense to add the additional fatal_signal_pending() | ||
21 | check into the main loop, to ensure we do not hold this memory if | ||
22 | the target task was oom-killed. | ||
23 | |||
24 | Signed-off-by: Oleg Nesterov <oleg@redhat.com> | ||
25 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | fs/proc/base.c | 14 +++++++++++++- | ||
29 | 1 files changed, 13 insertions(+), 1 deletions(-) | ||
30 | |||
31 | diff --git a/fs/proc/base.c b/fs/proc/base.c | ||
32 | index 0d3a4d1..1ace83d 100644 | ||
33 | --- a/fs/proc/base.c | ||
34 | +++ b/fs/proc/base.c | ||
35 | @@ -775,6 +775,13 @@ static int mem_open(struct inode* inode, struct file* file) | ||
36 | if (IS_ERR(mm)) | ||
37 | return PTR_ERR(mm); | ||
38 | |||
39 | + if (mm) { | ||
40 | + /* ensure this mm_struct can't be freed */ | ||
41 | + atomic_inc(&mm->mm_count); | ||
42 | + /* but do not pin its memory */ | ||
43 | + mmput(mm); | ||
44 | + } | ||
45 | + | ||
46 | /* OK to pass negative loff_t, we can catch out-of-range */ | ||
47 | file->f_mode |= FMODE_UNSIGNED_OFFSET; | ||
48 | file->private_data = mm; | ||
49 | @@ -798,6 +805,9 @@ static ssize_t mem_rw(struct file *file, char __user *buf, | ||
50 | return -ENOMEM; | ||
51 | |||
52 | copied = 0; | ||
53 | + if (!atomic_inc_not_zero(&mm->mm_users)) | ||
54 | + goto free; | ||
55 | + | ||
56 | while (count > 0) { | ||
57 | int this_len = min_t(int, count, PAGE_SIZE); | ||
58 | |||
59 | @@ -825,6 +835,8 @@ static ssize_t mem_rw(struct file *file, char __user *buf, | ||
60 | } | ||
61 | *ppos = addr; | ||
62 | |||
63 | + mmput(mm); | ||
64 | +free: | ||
65 | free_page((unsigned long) page); | ||
66 | return copied; | ||
67 | } | ||
68 | @@ -861,7 +873,7 @@ static int mem_release(struct inode *inode, struct file *file) | ||
69 | { | ||
70 | struct mm_struct *mm = file->private_data; | ||
71 | if (mm) | ||
72 | - mmput(mm); | ||
73 | + mmdrop(mm); | ||
74 | return 0; | ||
75 | } | ||
76 | |||
77 | -- | ||
78 | 1.7.7.4 | ||
79 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0019-firewire-ohci-add-reset-packet-quirk-for-SB-Audigy.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0019-firewire-ohci-add-reset-packet-quirk-for-SB-Audigy.patch new file mode 100644 index 00000000..d8f6fa03 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0019-firewire-ohci-add-reset-packet-quirk-for-SB-Audigy.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From 49b7e22b82d73e58a5335820b3f0441b2606515b Mon Sep 17 00:00:00 2001 | ||
2 | From: Clemens Ladisch <clemens@ladisch.de> | ||
3 | Date: Thu, 26 Jan 2012 22:05:58 +0100 | ||
4 | Subject: [PATCH 19/87] firewire: ohci: add reset packet quirk for SB Audigy | ||
5 | |||
6 | commit d1bb399ad03c11e792f6dea198d3b1e23061f094 upstream. | ||
7 | |||
8 | The Audigy's SB1394 controller is actually from Texas Instruments | ||
9 | and has the same bus reset packet generation bug, so it needs the | ||
10 | same quirk entry. | ||
11 | |||
12 | Signed-off-by: Clemens Ladisch <clemens@ladisch.de> | ||
13 | Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/firewire/ohci.c | 4 ++++ | ||
17 | 1 files changed, 4 insertions(+), 0 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c | ||
20 | index 6628fea..21250ec 100644 | ||
21 | --- a/drivers/firewire/ohci.c | ||
22 | +++ b/drivers/firewire/ohci.c | ||
23 | @@ -263,6 +263,7 @@ static inline struct fw_ohci *fw_ohci(struct fw_card *card) | ||
24 | static char ohci_driver_name[] = KBUILD_MODNAME; | ||
25 | |||
26 | #define PCI_DEVICE_ID_AGERE_FW643 0x5901 | ||
27 | +#define PCI_DEVICE_ID_CREATIVE_SB1394 0x4001 | ||
28 | #define PCI_DEVICE_ID_JMICRON_JMB38X_FW 0x2380 | ||
29 | #define PCI_DEVICE_ID_TI_TSB12LV22 0x8009 | ||
30 | #define PCI_DEVICE_ID_TI_TSB12LV26 0x8020 | ||
31 | @@ -289,6 +290,9 @@ static const struct { | ||
32 | {PCI_VENDOR_ID_ATT, PCI_DEVICE_ID_AGERE_FW643, 6, | ||
33 | QUIRK_NO_MSI}, | ||
34 | |||
35 | + {PCI_VENDOR_ID_CREATIVE, PCI_DEVICE_ID_CREATIVE_SB1394, PCI_ANY_ID, | ||
36 | + QUIRK_RESET_PACKET}, | ||
37 | + | ||
38 | {PCI_VENDOR_ID_JMICRON, PCI_DEVICE_ID_JMICRON_JMB38X_FW, PCI_ANY_ID, | ||
39 | QUIRK_NO_MSI}, | ||
40 | |||
41 | -- | ||
42 | 1.7.7.4 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0020-firewire-ohci-disable-MSI-on-Ricoh-controllers.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0020-firewire-ohci-disable-MSI-on-Ricoh-controllers.patch new file mode 100644 index 00000000..e758debf --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0020-firewire-ohci-disable-MSI-on-Ricoh-controllers.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From c1a1e15fd6fe7ed496d115ac9b87649e4d827d65 Mon Sep 17 00:00:00 2001 | ||
2 | From: Stefan Richter <stefanr@s5r6.in-berlin.de> | ||
3 | Date: Sun, 29 Jan 2012 12:41:15 +0100 | ||
4 | Subject: [PATCH 20/87] firewire: ohci: disable MSI on Ricoh controllers | ||
5 | |||
6 | commit 320cfa6ce0b3dc794fedfa4bae54c0f65077234d upstream. | ||
7 | |||
8 | The PCIe device | ||
9 | |||
10 | FireWire (IEEE 1394) [0c00]: Ricoh Co Ltd FireWire Host Controller | ||
11 | [1180:e832] (prog-if 10 [OHCI]) | ||
12 | |||
13 | is unable to access attached FireWire devices when MSI is enabled but | ||
14 | works if MSI is disabled. | ||
15 | http://www.mail-archive.com/alsa-user@lists.sourceforge.net/msg28251.html | ||
16 | |||
17 | Hence add the "disable MSI" quirks flag for this device, or in fact for | ||
18 | safety and simplicity for all current (R5U230, R5U231, R5U240) and | ||
19 | future Ricoh PCIe 1394 controllers. | ||
20 | |||
21 | Reported-by: Stefan Thomas <kontrapunktstefan@googlemail.com> | ||
22 | Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> | ||
23 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
24 | --- | ||
25 | drivers/firewire/ohci.c | 2 +- | ||
26 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
27 | |||
28 | diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c | ||
29 | index 21250ec..7f5f0da 100644 | ||
30 | --- a/drivers/firewire/ohci.c | ||
31 | +++ b/drivers/firewire/ohci.c | ||
32 | @@ -303,7 +303,7 @@ static const struct { | ||
33 | QUIRK_NO_MSI}, | ||
34 | |||
35 | {PCI_VENDOR_ID_RICOH, PCI_ANY_ID, PCI_ANY_ID, | ||
36 | - QUIRK_CYCLE_TIMER}, | ||
37 | + QUIRK_CYCLE_TIMER | QUIRK_NO_MSI}, | ||
38 | |||
39 | {PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_TSB12LV22, PCI_ANY_ID, | ||
40 | QUIRK_CYCLE_TIMER | QUIRK_RESET_PACKET | QUIRK_NO_1394A}, | ||
41 | -- | ||
42 | 1.7.7.4 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0021-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0021-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch new file mode 100644 index 00000000..0307b835 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0021-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch | |||
@@ -0,0 +1,90 @@ | |||
1 | From a48d135810111baaedd01dfb833c06b094aa3a68 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jack Morgenstein <jackm@mellanox.com> | ||
3 | Date: Thu, 26 Jan 2012 16:41:33 +0200 | ||
4 | Subject: [PATCH 21/87] IB/mlx4: pass SMP vendor-specific attribute MADs to | ||
5 | firmware | ||
6 | |||
7 | commit a6f7feae6d19e84253918d88b04153af09d3a243 upstream. | ||
8 | |||
9 | In the current code, vendor-specific MADs (e.g with the FDR-10 | ||
10 | attribute) are silently dropped by the driver, resulting in timeouts | ||
11 | at the sending side and inability to query/configure the relevant | ||
12 | feature. However, the ConnectX firmware is able to handle such MADs. | ||
13 | For unsupported attributes, the firmware returns a GET_RESPONSE MAD | ||
14 | containing an error status. | ||
15 | |||
16 | For example, for a FDR-10 node with LID 11: | ||
17 | |||
18 | # ibstat mlx4_0 1 | ||
19 | |||
20 | CA: 'mlx4_0' | ||
21 | Port 1: | ||
22 | State: Active | ||
23 | Physical state: LinkUp | ||
24 | Rate: 40 (FDR10) | ||
25 | Base lid: 11 | ||
26 | LMC: 0 | ||
27 | SM lid: 24 | ||
28 | Capability mask: 0x02514868 | ||
29 | Port GUID: 0x0002c903002e65d1 | ||
30 | Link layer: InfiniBand | ||
31 | |||
32 | Extended Port Query (EPI) vendor mad timeouts before the patch: | ||
33 | |||
34 | # smpquery MEPI 11 -d | ||
35 | |||
36 | ibwarn: [4196] smp_query_via: attr 0xff90 mod 0x0 route Lid 11 | ||
37 | ibwarn: [4196] _do_madrpc: retry 1 (timeout 1000 ms) | ||
38 | ibwarn: [4196] _do_madrpc: retry 2 (timeout 1000 ms) | ||
39 | ibwarn: [4196] _do_madrpc: timeout after 3 retries, 3000 ms | ||
40 | ibwarn: [4196] mad_rpc: _do_madrpc failed; dport (Lid 11) | ||
41 | smpquery: iberror: [pid 4196] main: failed: operation EPI: ext port info query failed | ||
42 | |||
43 | EPI query works OK with the patch: | ||
44 | |||
45 | # smpquery MEPI 11 -d | ||
46 | |||
47 | ibwarn: [6548] smp_query_via: attr 0xff90 mod 0x0 route Lid 11 | ||
48 | ibwarn: [6548] mad_rpc: data offs 64 sz 64 | ||
49 | mad data | ||
50 | 0000 0000 0000 0001 0000 0001 0000 0001 | ||
51 | 0000 0000 0000 0000 0000 0000 0000 0000 | ||
52 | 0000 0000 0000 0000 0000 0000 0000 0000 | ||
53 | 0000 0000 0000 0000 0000 0000 0000 0000 | ||
54 | # Ext Port info: Lid 11 port 0 | ||
55 | StateChangeEnable:...............0x00 | ||
56 | LinkSpeedSupported:..............0x01 | ||
57 | LinkSpeedEnabled:................0x01 | ||
58 | LinkSpeedActive:.................0x01 | ||
59 | |||
60 | Signed-off-by: Jack Morgenstein <jackm@mellanox.com> | ||
61 | Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> | ||
62 | Acked-by: Ira Weiny <weiny2@llnl.gov> | ||
63 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
64 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
65 | --- | ||
66 | drivers/infiniband/hw/mlx4/mad.c | 7 ++----- | ||
67 | 1 files changed, 2 insertions(+), 5 deletions(-) | ||
68 | |||
69 | diff --git a/drivers/infiniband/hw/mlx4/mad.c b/drivers/infiniband/hw/mlx4/mad.c | ||
70 | index f36da99..77702c0 100644 | ||
71 | --- a/drivers/infiniband/hw/mlx4/mad.c | ||
72 | +++ b/drivers/infiniband/hw/mlx4/mad.c | ||
73 | @@ -256,12 +256,9 @@ static int ib_process_mad(struct ib_device *ibdev, int mad_flags, u8 port_num, | ||
74 | return IB_MAD_RESULT_SUCCESS; | ||
75 | |||
76 | /* | ||
77 | - * Don't process SMInfo queries or vendor-specific | ||
78 | - * MADs -- the SMA can't handle them. | ||
79 | + * Don't process SMInfo queries -- the SMA can't handle them. | ||
80 | */ | ||
81 | - if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO || | ||
82 | - ((in_mad->mad_hdr.attr_id & IB_SMP_ATTR_VENDOR_MASK) == | ||
83 | - IB_SMP_ATTR_VENDOR_MASK)) | ||
84 | + if (in_mad->mad_hdr.attr_id == IB_SMP_ATTR_SM_INFO) | ||
85 | return IB_MAD_RESULT_SUCCESS; | ||
86 | } else if (in_mad->mad_hdr.mgmt_class == IB_MGMT_CLASS_PERF_MGMT || | ||
87 | in_mad->mad_hdr.mgmt_class == MLX4_IB_VENDOR_CLASS1 || | ||
88 | -- | ||
89 | 1.7.7.4 | ||
90 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0022-RDMA-core-Fix-kernel-panic-by-always-initializing-qp.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0022-RDMA-core-Fix-kernel-panic-by-always-initializing-qp.patch new file mode 100644 index 00000000..853d5b94 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0022-RDMA-core-Fix-kernel-panic-by-always-initializing-qp.patch | |||
@@ -0,0 +1,68 @@ | |||
1 | From 3ef7302303a7886fd1e6dea9dd33fe2c41784199 Mon Sep 17 00:00:00 2001 | ||
2 | From: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de> | ||
3 | Date: Fri, 20 Jan 2012 18:43:54 +0000 | ||
4 | Subject: [PATCH 22/87] RDMA/core: Fix kernel panic by always initializing | ||
5 | qp->usecnt | ||
6 | |||
7 | commit e47e321a35c741ee41b67976f8c6a3a7a42bc5c0 upstream. | ||
8 | |||
9 | We have just been investigating kernel panics related to | ||
10 | cq->ibcq.event_handler() completion calls. The problem is that | ||
11 | ib_destroy_qp() fails with -EBUSY. | ||
12 | |||
13 | Further investigation revealed qp->usecnt is not initialized. This | ||
14 | counter was introduced in linux-3.2 by commit 0e0ec7e0638e | ||
15 | ("RDMA/core: Export ib_open_qp() to share XRC TGT QPs") but it only | ||
16 | gets initialized for IB_QPT_XRC_TGT, but it is checked in | ||
17 | ib_destroy_qp() for any QP type. | ||
18 | |||
19 | Fix this by initializing qp->usecnt for every QP we create. | ||
20 | |||
21 | Signed-off-by: Bernd Schubert <bernd.schubert@itwm.fraunhofer.de> | ||
22 | Signed-off-by: Sven Breuner <sven.breuner@itwm.fraunhofer.de> | ||
23 | |||
24 | [ Initialize qp->usecnt in uverbs too. - Sean ] | ||
25 | |||
26 | Signed-off-by: Sean Hefty <sean.hefty@intel.com> | ||
27 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
28 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
29 | --- | ||
30 | drivers/infiniband/core/uverbs_cmd.c | 1 + | ||
31 | drivers/infiniband/core/verbs.c | 2 +- | ||
32 | 2 files changed, 2 insertions(+), 1 deletions(-) | ||
33 | |||
34 | diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c | ||
35 | index e3db8ef..a8445b8 100644 | ||
36 | --- a/drivers/infiniband/core/uverbs_cmd.c | ||
37 | +++ b/drivers/infiniband/core/uverbs_cmd.c | ||
38 | @@ -1485,6 +1485,7 @@ ssize_t ib_uverbs_create_qp(struct ib_uverbs_file *file, | ||
39 | qp->event_handler = attr.event_handler; | ||
40 | qp->qp_context = attr.qp_context; | ||
41 | qp->qp_type = attr.qp_type; | ||
42 | + atomic_set(&qp->usecnt, 0); | ||
43 | atomic_inc(&pd->usecnt); | ||
44 | atomic_inc(&attr.send_cq->usecnt); | ||
45 | if (attr.recv_cq) | ||
46 | diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c | ||
47 | index 602b1bd..575b780 100644 | ||
48 | --- a/drivers/infiniband/core/verbs.c | ||
49 | +++ b/drivers/infiniband/core/verbs.c | ||
50 | @@ -421,6 +421,7 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd, | ||
51 | qp->uobject = NULL; | ||
52 | qp->qp_type = qp_init_attr->qp_type; | ||
53 | |||
54 | + atomic_set(&qp->usecnt, 0); | ||
55 | if (qp_init_attr->qp_type == IB_QPT_XRC_TGT) { | ||
56 | qp->event_handler = __ib_shared_qp_event_handler; | ||
57 | qp->qp_context = qp; | ||
58 | @@ -430,7 +431,6 @@ struct ib_qp *ib_create_qp(struct ib_pd *pd, | ||
59 | qp->xrcd = qp_init_attr->xrcd; | ||
60 | atomic_inc(&qp_init_attr->xrcd->usecnt); | ||
61 | INIT_LIST_HEAD(&qp->open_list); | ||
62 | - atomic_set(&qp->usecnt, 0); | ||
63 | |||
64 | real_qp = qp; | ||
65 | qp = __ib_open_qp(real_qp, qp_init_attr->event_handler, | ||
66 | -- | ||
67 | 1.7.7.4 | ||
68 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0023-kprobes-fix-a-memory-leak-in-function-pre_handler_kr.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0023-kprobes-fix-a-memory-leak-in-function-pre_handler_kr.patch new file mode 100644 index 00000000..29e9a919 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0023-kprobes-fix-a-memory-leak-in-function-pre_handler_kr.patch | |||
@@ -0,0 +1,52 @@ | |||
1 | From ff016619c98fa2edcb44b6cffe5a60435328348a Mon Sep 17 00:00:00 2001 | ||
2 | From: Jiang Liu <liuj97@gmail.com> | ||
3 | Date: Fri, 3 Feb 2012 15:37:16 -0800 | ||
4 | Subject: [PATCH 23/87] kprobes: fix a memory leak in function | ||
5 | pre_handler_kretprobe() | ||
6 | |||
7 | commit 55ca6140e9bb307efc97a9301a4f501de02a6fd6 upstream. | ||
8 | |||
9 | In function pre_handler_kretprobe(), the allocated kretprobe_instance | ||
10 | object will get leaked if the entry_handler callback returns non-zero. | ||
11 | This may cause all the preallocated kretprobe_instance objects exhausted. | ||
12 | |||
13 | This issue can be reproduced by changing | ||
14 | samples/kprobes/kretprobe_example.c to probe "mutex_unlock". And the fix | ||
15 | is straightforward: just put the allocated kretprobe_instance object back | ||
16 | onto the free_instances list. | ||
17 | |||
18 | [akpm@linux-foundation.org: use raw_spin_lock/unlock] | ||
19 | Signed-off-by: Jiang Liu <jiang.liu@huawei.com> | ||
20 | Acked-by: Jim Keniston <jkenisto@us.ibm.com> | ||
21 | Acked-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com> | ||
22 | Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com> | ||
23 | Cc: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> | ||
24 | Cc: "David S. Miller" <davem@davemloft.net> | ||
25 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
26 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
27 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
28 | --- | ||
29 | kernel/kprobes.c | 6 +++++- | ||
30 | 1 files changed, 5 insertions(+), 1 deletions(-) | ||
31 | |||
32 | diff --git a/kernel/kprobes.c b/kernel/kprobes.c | ||
33 | index 52fd049..faa39d1 100644 | ||
34 | --- a/kernel/kprobes.c | ||
35 | +++ b/kernel/kprobes.c | ||
36 | @@ -1673,8 +1673,12 @@ static int __kprobes pre_handler_kretprobe(struct kprobe *p, | ||
37 | ri->rp = rp; | ||
38 | ri->task = current; | ||
39 | |||
40 | - if (rp->entry_handler && rp->entry_handler(ri, regs)) | ||
41 | + if (rp->entry_handler && rp->entry_handler(ri, regs)) { | ||
42 | + raw_spin_lock_irqsave(&rp->lock, flags); | ||
43 | + hlist_add_head(&ri->hlist, &rp->free_instances); | ||
44 | + raw_spin_unlock_irqrestore(&rp->lock, flags); | ||
45 | return 0; | ||
46 | + } | ||
47 | |||
48 | arch_prepare_kretprobe(ri, regs); | ||
49 | |||
50 | -- | ||
51 | 1.7.7.4 | ||
52 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0024-mtd-gpmi-nand-bugfix-reset-the-BCH-module-when-it-is.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0024-mtd-gpmi-nand-bugfix-reset-the-BCH-module-when-it-is.patch new file mode 100644 index 00000000..92647a55 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0024-mtd-gpmi-nand-bugfix-reset-the-BCH-module-when-it-is.patch | |||
@@ -0,0 +1,72 @@ | |||
1 | From 5e71844e1d3a9ae8681fc18781a3579eed4b2406 Mon Sep 17 00:00:00 2001 | ||
2 | From: Huang Shijie <b32955@freescale.com> | ||
3 | Date: Wed, 4 Jan 2012 11:18:46 +0800 | ||
4 | Subject: [PATCH 24/87] mtd: gpmi-nand bugfix: reset the BCH module when it is | ||
5 | not MX23 | ||
6 | |||
7 | commit 9398d1ce09b9009996f7d2468e1d3c785fa6feda upstream. | ||
8 | |||
9 | In MX28, if we do not reset the BCH module. The BCH module may | ||
10 | becomes unstable when the board reboots for several thousands times. | ||
11 | This bug has been catched in customer's production. | ||
12 | |||
13 | The patch adds some comments (some from Wolfram Sang), and fixes it now. | ||
14 | |||
15 | Also change gpmi_reset_block() to static. | ||
16 | |||
17 | Signed-off-by: Huang Shijie <b32955@freescale.com> | ||
18 | Acked-by: Marek Vasut <marek.vasut@gmail.com> | ||
19 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
20 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/mtd/nand/gpmi-nand/gpmi-lib.c | 18 ++++++++++++++---- | ||
24 | 1 files changed, 14 insertions(+), 4 deletions(-) | ||
25 | |||
26 | diff --git a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c | ||
27 | index de4db76..bb2fe60 100644 | ||
28 | --- a/drivers/mtd/nand/gpmi-nand/gpmi-lib.c | ||
29 | +++ b/drivers/mtd/nand/gpmi-nand/gpmi-lib.c | ||
30 | @@ -69,17 +69,19 @@ static int clear_poll_bit(void __iomem *addr, u32 mask) | ||
31 | * [1] enable the module. | ||
32 | * [2] reset the module. | ||
33 | * | ||
34 | - * In most of the cases, it's ok. But there is a hardware bug in the BCH block. | ||
35 | + * In most of the cases, it's ok. | ||
36 | + * But in MX23, there is a hardware bug in the BCH block (see erratum #2847). | ||
37 | * If you try to soft reset the BCH block, it becomes unusable until | ||
38 | * the next hard reset. This case occurs in the NAND boot mode. When the board | ||
39 | * boots by NAND, the ROM of the chip will initialize the BCH blocks itself. | ||
40 | * So If the driver tries to reset the BCH again, the BCH will not work anymore. | ||
41 | - * You will see a DMA timeout in this case. | ||
42 | + * You will see a DMA timeout in this case. The bug has been fixed | ||
43 | + * in the following chips, such as MX28. | ||
44 | * | ||
45 | * To avoid this bug, just add a new parameter `just_enable` for | ||
46 | * the mxs_reset_block(), and rewrite it here. | ||
47 | */ | ||
48 | -int gpmi_reset_block(void __iomem *reset_addr, bool just_enable) | ||
49 | +static int gpmi_reset_block(void __iomem *reset_addr, bool just_enable) | ||
50 | { | ||
51 | int ret; | ||
52 | int timeout = 0x400; | ||
53 | @@ -206,7 +208,15 @@ int bch_set_geometry(struct gpmi_nand_data *this) | ||
54 | if (ret) | ||
55 | goto err_out; | ||
56 | |||
57 | - ret = gpmi_reset_block(r->bch_regs, true); | ||
58 | + /* | ||
59 | + * Due to erratum #2847 of the MX23, the BCH cannot be soft reset on this | ||
60 | + * chip, otherwise it will lock up. So we skip resetting BCH on the MX23. | ||
61 | + * On the other hand, the MX28 needs the reset, because one case has been | ||
62 | + * seen where the BCH produced ECC errors constantly after 10000 | ||
63 | + * consecutive reboots. The latter case has not been seen on the MX23 yet, | ||
64 | + * still we don't know if it could happen there as well. | ||
65 | + */ | ||
66 | + ret = gpmi_reset_block(r->bch_regs, GPMI_IS_MX23(this)); | ||
67 | if (ret) | ||
68 | goto err_out; | ||
69 | |||
70 | -- | ||
71 | 1.7.7.4 | ||
72 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0025-Revert-mtd-atmel_nand-optimize-read-write-buffer-fun.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0025-Revert-mtd-atmel_nand-optimize-read-write-buffer-fun.patch new file mode 100644 index 00000000..53c40b7f --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0025-Revert-mtd-atmel_nand-optimize-read-write-buffer-fun.patch | |||
@@ -0,0 +1,113 @@ | |||
1 | From 061d6b14b3b59f140371baa0f98963f761a7080f Mon Sep 17 00:00:00 2001 | ||
2 | From: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
3 | Date: Thu, 2 Feb 2012 13:54:25 +0200 | ||
4 | Subject: [PATCH 25/87] Revert "mtd: atmel_nand: optimize read/write buffer | ||
5 | functions" | ||
6 | MIME-Version: 1.0 | ||
7 | Content-Type: text/plain; charset=UTF-8 | ||
8 | Content-Transfer-Encoding: 8bit | ||
9 | |||
10 | commit 500823195d0c9eec2a4637484f30cc93ec633d4a upstream. | ||
11 | |||
12 | This reverts commit fb5427508abbd635e877fabdf55795488119c2d6. | ||
13 | |||
14 | The reason is that it breaks 16 bits NAND flash as it was reported by | ||
15 | Nikolaus Voss and confirmed by Eric Bénard. | ||
16 | |||
17 | Nicolas Ferre <nicolas.ferre@atmel.com> alco confirmed: | ||
18 | "After double checking with designers, I must admit that I misunderstood | ||
19 | the way of optimizing accesses to SMC. 16 bit nand is not so common | ||
20 | those days..." | ||
21 | |||
22 | Reported-by: Nikolaus Voss <n.voss@weinmann.de> | ||
23 | Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com> | ||
24 | Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> | ||
25 | Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | drivers/mtd/nand/atmel_nand.c | 45 +++++++++++++++++++++++++++++++++++++--- | ||
29 | 1 files changed, 41 insertions(+), 4 deletions(-) | ||
30 | |||
31 | diff --git a/drivers/mtd/nand/atmel_nand.c b/drivers/mtd/nand/atmel_nand.c | ||
32 | index 23e5d77..ee6e26e 100644 | ||
33 | --- a/drivers/mtd/nand/atmel_nand.c | ||
34 | +++ b/drivers/mtd/nand/atmel_nand.c | ||
35 | @@ -161,6 +161,37 @@ static int atmel_nand_device_ready(struct mtd_info *mtd) | ||
36 | !!host->board->rdy_pin_active_low; | ||
37 | } | ||
38 | |||
39 | +/* | ||
40 | + * Minimal-overhead PIO for data access. | ||
41 | + */ | ||
42 | +static void atmel_read_buf8(struct mtd_info *mtd, u8 *buf, int len) | ||
43 | +{ | ||
44 | + struct nand_chip *nand_chip = mtd->priv; | ||
45 | + | ||
46 | + __raw_readsb(nand_chip->IO_ADDR_R, buf, len); | ||
47 | +} | ||
48 | + | ||
49 | +static void atmel_read_buf16(struct mtd_info *mtd, u8 *buf, int len) | ||
50 | +{ | ||
51 | + struct nand_chip *nand_chip = mtd->priv; | ||
52 | + | ||
53 | + __raw_readsw(nand_chip->IO_ADDR_R, buf, len / 2); | ||
54 | +} | ||
55 | + | ||
56 | +static void atmel_write_buf8(struct mtd_info *mtd, const u8 *buf, int len) | ||
57 | +{ | ||
58 | + struct nand_chip *nand_chip = mtd->priv; | ||
59 | + | ||
60 | + __raw_writesb(nand_chip->IO_ADDR_W, buf, len); | ||
61 | +} | ||
62 | + | ||
63 | +static void atmel_write_buf16(struct mtd_info *mtd, const u8 *buf, int len) | ||
64 | +{ | ||
65 | + struct nand_chip *nand_chip = mtd->priv; | ||
66 | + | ||
67 | + __raw_writesw(nand_chip->IO_ADDR_W, buf, len / 2); | ||
68 | +} | ||
69 | + | ||
70 | static void dma_complete_func(void *completion) | ||
71 | { | ||
72 | complete(completion); | ||
73 | @@ -235,27 +266,33 @@ err_buf: | ||
74 | static void atmel_read_buf(struct mtd_info *mtd, u8 *buf, int len) | ||
75 | { | ||
76 | struct nand_chip *chip = mtd->priv; | ||
77 | + struct atmel_nand_host *host = chip->priv; | ||
78 | |||
79 | if (use_dma && len > mtd->oobsize) | ||
80 | /* only use DMA for bigger than oob size: better performances */ | ||
81 | if (atmel_nand_dma_op(mtd, buf, len, 1) == 0) | ||
82 | return; | ||
83 | |||
84 | - /* if no DMA operation possible, use PIO */ | ||
85 | - memcpy_fromio(buf, chip->IO_ADDR_R, len); | ||
86 | + if (host->board->bus_width_16) | ||
87 | + atmel_read_buf16(mtd, buf, len); | ||
88 | + else | ||
89 | + atmel_read_buf8(mtd, buf, len); | ||
90 | } | ||
91 | |||
92 | static void atmel_write_buf(struct mtd_info *mtd, const u8 *buf, int len) | ||
93 | { | ||
94 | struct nand_chip *chip = mtd->priv; | ||
95 | + struct atmel_nand_host *host = chip->priv; | ||
96 | |||
97 | if (use_dma && len > mtd->oobsize) | ||
98 | /* only use DMA for bigger than oob size: better performances */ | ||
99 | if (atmel_nand_dma_op(mtd, (void *)buf, len, 0) == 0) | ||
100 | return; | ||
101 | |||
102 | - /* if no DMA operation possible, use PIO */ | ||
103 | - memcpy_toio(chip->IO_ADDR_W, buf, len); | ||
104 | + if (host->board->bus_width_16) | ||
105 | + atmel_write_buf16(mtd, buf, len); | ||
106 | + else | ||
107 | + atmel_write_buf8(mtd, buf, len); | ||
108 | } | ||
109 | |||
110 | /* | ||
111 | -- | ||
112 | 1.7.7.4 | ||
113 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0026-at_hdmac-bugfix-for-enabling-channel-irq.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0026-at_hdmac-bugfix-for-enabling-channel-irq.patch new file mode 100644 index 00000000..e96a322e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0026-at_hdmac-bugfix-for-enabling-channel-irq.patch | |||
@@ -0,0 +1,92 @@ | |||
1 | From 2139363dee1243badcac4da0af194ed764339c05 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nikolaus Voss <n.voss@weinmann.de> | ||
3 | Date: Tue, 17 Jan 2012 10:28:33 +0100 | ||
4 | Subject: [PATCH 26/87] at_hdmac: bugfix for enabling channel irq | ||
5 | |||
6 | commit bda3a47c886664e86ee14eb79e9072b9e341f575 upstream. | ||
7 | |||
8 | commit 463894705e4089d0ff69e7d877312d496ac70e5b deleted redundant | ||
9 | chan_id and chancnt initialization in dma drivers as this is done | ||
10 | in dma_async_device_register(). | ||
11 | |||
12 | However, atc_enable_irq() relied on chan_id set before registering | ||
13 | the device, what left only channel 0 functional for this driver. | ||
14 | |||
15 | This patch introduces atc_enable/disable_chan_irq() as a variant | ||
16 | of atc_enable/disable_irq() with the channel as explicit argument. | ||
17 | |||
18 | Signed-off-by: Nikolaus Voss <n.voss@weinmann.de> | ||
19 | Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> | ||
20 | Signed-off-by: Vinod Koul <vinod.koul@linux.intel.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/dma/at_hdmac.c | 4 ++-- | ||
24 | drivers/dma/at_hdmac_regs.h | 17 ++++++++--------- | ||
25 | 2 files changed, 10 insertions(+), 11 deletions(-) | ||
26 | |||
27 | diff --git a/drivers/dma/at_hdmac.c b/drivers/dma/at_hdmac.c | ||
28 | index fcfa0a8..a60adbf 100644 | ||
29 | --- a/drivers/dma/at_hdmac.c | ||
30 | +++ b/drivers/dma/at_hdmac.c | ||
31 | @@ -1286,7 +1286,7 @@ static int __init at_dma_probe(struct platform_device *pdev) | ||
32 | |||
33 | tasklet_init(&atchan->tasklet, atc_tasklet, | ||
34 | (unsigned long)atchan); | ||
35 | - atc_enable_irq(atchan); | ||
36 | + atc_enable_chan_irq(atdma, i); | ||
37 | } | ||
38 | |||
39 | /* set base routines */ | ||
40 | @@ -1353,7 +1353,7 @@ static int __exit at_dma_remove(struct platform_device *pdev) | ||
41 | struct at_dma_chan *atchan = to_at_dma_chan(chan); | ||
42 | |||
43 | /* Disable interrupts */ | ||
44 | - atc_disable_irq(atchan); | ||
45 | + atc_disable_chan_irq(atdma, chan->chan_id); | ||
46 | tasklet_disable(&atchan->tasklet); | ||
47 | |||
48 | tasklet_kill(&atchan->tasklet); | ||
49 | diff --git a/drivers/dma/at_hdmac_regs.h b/drivers/dma/at_hdmac_regs.h | ||
50 | index aa4c9ae..5aa82b4 100644 | ||
51 | --- a/drivers/dma/at_hdmac_regs.h | ||
52 | +++ b/drivers/dma/at_hdmac_regs.h | ||
53 | @@ -326,28 +326,27 @@ static void atc_dump_lli(struct at_dma_chan *atchan, struct at_lli *lli) | ||
54 | } | ||
55 | |||
56 | |||
57 | -static void atc_setup_irq(struct at_dma_chan *atchan, int on) | ||
58 | +static void atc_setup_irq(struct at_dma *atdma, int chan_id, int on) | ||
59 | { | ||
60 | - struct at_dma *atdma = to_at_dma(atchan->chan_common.device); | ||
61 | - u32 ebci; | ||
62 | + u32 ebci; | ||
63 | |||
64 | /* enable interrupts on buffer transfer completion & error */ | ||
65 | - ebci = AT_DMA_BTC(atchan->chan_common.chan_id) | ||
66 | - | AT_DMA_ERR(atchan->chan_common.chan_id); | ||
67 | + ebci = AT_DMA_BTC(chan_id) | ||
68 | + | AT_DMA_ERR(chan_id); | ||
69 | if (on) | ||
70 | dma_writel(atdma, EBCIER, ebci); | ||
71 | else | ||
72 | dma_writel(atdma, EBCIDR, ebci); | ||
73 | } | ||
74 | |||
75 | -static inline void atc_enable_irq(struct at_dma_chan *atchan) | ||
76 | +static void atc_enable_chan_irq(struct at_dma *atdma, int chan_id) | ||
77 | { | ||
78 | - atc_setup_irq(atchan, 1); | ||
79 | + atc_setup_irq(atdma, chan_id, 1); | ||
80 | } | ||
81 | |||
82 | -static inline void atc_disable_irq(struct at_dma_chan *atchan) | ||
83 | +static void atc_disable_chan_irq(struct at_dma *atdma, int chan_id) | ||
84 | { | ||
85 | - atc_setup_irq(atchan, 0); | ||
86 | + atc_setup_irq(atdma, chan_id, 0); | ||
87 | } | ||
88 | |||
89 | |||
90 | -- | ||
91 | 1.7.7.4 | ||
92 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0027-mm-filemap_xip.c-fix-race-condition-in-xip_file_faul.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0027-mm-filemap_xip.c-fix-race-condition-in-xip_file_faul.patch new file mode 100644 index 00000000..7c3c8a64 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0027-mm-filemap_xip.c-fix-race-condition-in-xip_file_faul.patch | |||
@@ -0,0 +1,58 @@ | |||
1 | From e7908f7b777ac850ef6a11cb53aa8e27fcf40a1e Mon Sep 17 00:00:00 2001 | ||
2 | From: Carsten Otte <carsteno@de.ibm.com> | ||
3 | Date: Fri, 3 Feb 2012 15:37:14 -0800 | ||
4 | Subject: [PATCH 27/87] mm/filemap_xip.c: fix race condition in | ||
5 | xip_file_fault() | ||
6 | |||
7 | commit 99f02ef1f18631eb0a4e0ea0a3d56878dbcb4b90 upstream. | ||
8 | |||
9 | Fix a race condition that shows in conjunction with xip_file_fault() when | ||
10 | two threads of the same user process fault on the same memory page. | ||
11 | |||
12 | In this case, the race winner will install the page table entry and the | ||
13 | unlucky loser will cause an oops: xip_file_fault calls vm_insert_pfn (via | ||
14 | vm_insert_mixed) which drops out at this check: | ||
15 | |||
16 | retval = -EBUSY; | ||
17 | if (!pte_none(*pte)) | ||
18 | goto out_unlock; | ||
19 | |||
20 | The resulting -EBUSY return value will trigger a BUG_ON() in | ||
21 | xip_file_fault. | ||
22 | |||
23 | This fix simply considers the fault as fixed in this case, because the | ||
24 | race winner has successfully installed the pte. | ||
25 | |||
26 | [akpm@linux-foundation.org: use conventional (and consistent) comment layout] | ||
27 | Reported-by: David Sadler <dsadler@us.ibm.com> | ||
28 | Signed-off-by: Carsten Otte <cotte@de.ibm.com> | ||
29 | Reported-by: Louis Alex Eisner <leisner@cs.ucsd.edu> | ||
30 | Cc: Hugh Dickins <hughd@google.com> | ||
31 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
32 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
33 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
34 | --- | ||
35 | mm/filemap_xip.c | 7 ++++++- | ||
36 | 1 files changed, 6 insertions(+), 1 deletions(-) | ||
37 | |||
38 | diff --git a/mm/filemap_xip.c b/mm/filemap_xip.c | ||
39 | index f91b2f6..a4eb311 100644 | ||
40 | --- a/mm/filemap_xip.c | ||
41 | +++ b/mm/filemap_xip.c | ||
42 | @@ -263,7 +263,12 @@ found: | ||
43 | xip_pfn); | ||
44 | if (err == -ENOMEM) | ||
45 | return VM_FAULT_OOM; | ||
46 | - BUG_ON(err); | ||
47 | + /* | ||
48 | + * err == -EBUSY is fine, we've raced against another thread | ||
49 | + * that faulted-in the same page | ||
50 | + */ | ||
51 | + if (err != -EBUSY) | ||
52 | + BUG_ON(err); | ||
53 | return VM_FAULT_NOPAGE; | ||
54 | } else { | ||
55 | int err, ret = VM_FAULT_OOM; | ||
56 | -- | ||
57 | 1.7.7.4 | ||
58 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0028-mm-compaction-check-pfn_valid-when-entering-a-new-MA.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0028-mm-compaction-check-pfn_valid-when-entering-a-new-MA.patch new file mode 100644 index 00000000..8862a782 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0028-mm-compaction-check-pfn_valid-when-entering-a-new-MA.patch | |||
@@ -0,0 +1,112 @@ | |||
1 | From 9da11afefb6f8ccc0f7731831f7ad73106fc87f3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mel Gorman <mgorman@suse.de> | ||
3 | Date: Fri, 3 Feb 2012 15:37:18 -0800 | ||
4 | Subject: [PATCH 28/87] mm: compaction: check pfn_valid when entering a new | ||
5 | MAX_ORDER_NR_PAGES block during isolation for | ||
6 | migration | ||
7 | |||
8 | commit 0bf380bc70ecba68cb4d74dc656cc2fa8c4d801a upstream. | ||
9 | |||
10 | When isolating for migration, migration starts at the start of a zone | ||
11 | which is not necessarily pageblock aligned. Further, it stops isolating | ||
12 | when COMPACT_CLUSTER_MAX pages are isolated so migrate_pfn is generally | ||
13 | not aligned. This allows isolate_migratepages() to call pfn_to_page() on | ||
14 | an invalid PFN which can result in a crash. This was originally reported | ||
15 | against a 3.0-based kernel with the following trace in a crash dump. | ||
16 | |||
17 | PID: 9902 TASK: d47aecd0 CPU: 0 COMMAND: "memcg_process_s" | ||
18 | #0 [d72d3ad0] crash_kexec at c028cfdb | ||
19 | #1 [d72d3b24] oops_end at c05c5322 | ||
20 | #2 [d72d3b38] __bad_area_nosemaphore at c0227e60 | ||
21 | #3 [d72d3bec] bad_area at c0227fb6 | ||
22 | #4 [d72d3c00] do_page_fault at c05c72ec | ||
23 | #5 [d72d3c80] error_code (via page_fault) at c05c47a4 | ||
24 | EAX: 00000000 EBX: 000c0000 ECX: 00000001 EDX: 00000807 EBP: 000c0000 | ||
25 | DS: 007b ESI: 00000001 ES: 007b EDI: f3000a80 GS: 6f50 | ||
26 | CS: 0060 EIP: c030b15a ERR: ffffffff EFLAGS: 00010002 | ||
27 | #6 [d72d3cb4] isolate_migratepages at c030b15a | ||
28 | #7 [d72d3d14] zone_watermark_ok at c02d26cb | ||
29 | #8 [d72d3d2c] compact_zone at c030b8de | ||
30 | #9 [d72d3d68] compact_zone_order at c030bba1 | ||
31 | #10 [d72d3db4] try_to_compact_pages at c030bc84 | ||
32 | #11 [d72d3ddc] __alloc_pages_direct_compact at c02d61e7 | ||
33 | #12 [d72d3e08] __alloc_pages_slowpath at c02d66c7 | ||
34 | #13 [d72d3e78] __alloc_pages_nodemask at c02d6a97 | ||
35 | #14 [d72d3eb8] alloc_pages_vma at c030a845 | ||
36 | #15 [d72d3ed4] do_huge_pmd_anonymous_page at c03178eb | ||
37 | #16 [d72d3f00] handle_mm_fault at c02f36c6 | ||
38 | #17 [d72d3f30] do_page_fault at c05c70ed | ||
39 | #18 [d72d3fb0] error_code (via page_fault) at c05c47a4 | ||
40 | EAX: b71ff000 EBX: 00000001 ECX: 00001600 EDX: 00000431 | ||
41 | DS: 007b ESI: 08048950 ES: 007b EDI: bfaa3788 | ||
42 | SS: 007b ESP: bfaa36e0 EBP: bfaa3828 GS: 6f50 | ||
43 | CS: 0073 EIP: 080487c8 ERR: ffffffff EFLAGS: 00010202 | ||
44 | |||
45 | It was also reported by Herbert van den Bergh against 3.1-based kernel | ||
46 | with the following snippet from the console log. | ||
47 | |||
48 | BUG: unable to handle kernel paging request at 01c00008 | ||
49 | IP: [<c0522399>] isolate_migratepages+0x119/0x390 | ||
50 | *pdpt = 000000002f7ce001 *pde = 0000000000000000 | ||
51 | |||
52 | It is expected that it also affects 3.2.x and current mainline. | ||
53 | |||
54 | The problem is that pfn_valid is only called on the first PFN being | ||
55 | checked and that PFN is not necessarily aligned. Lets say we have a case | ||
56 | like this | ||
57 | |||
58 | H = MAX_ORDER_NR_PAGES boundary | ||
59 | | = pageblock boundary | ||
60 | m = cc->migrate_pfn | ||
61 | f = cc->free_pfn | ||
62 | o = memory hole | ||
63 | |||
64 | H------|------H------|----m-Hoooooo|ooooooH-f----|------H | ||
65 | |||
66 | The migrate_pfn is just below a memory hole and the free scanner is beyond | ||
67 | the hole. When isolate_migratepages started, it scans from migrate_pfn to | ||
68 | migrate_pfn+pageblock_nr_pages which is now in a memory hole. It checks | ||
69 | pfn_valid() on the first PFN but then scans into the hole where there are | ||
70 | not necessarily valid struct pages. | ||
71 | |||
72 | This patch ensures that isolate_migratepages calls pfn_valid when | ||
73 | necessary. | ||
74 | |||
75 | Reported-by: Herbert van den Bergh <herbert.van.den.bergh@oracle.com> | ||
76 | Tested-by: Herbert van den Bergh <herbert.van.den.bergh@oracle.com> | ||
77 | Signed-off-by: Mel Gorman <mgorman@suse.de> | ||
78 | Acked-by: Michal Nazarewicz <mina86@mina86.com> | ||
79 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
80 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
81 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
82 | --- | ||
83 | mm/compaction.c | 13 +++++++++++++ | ||
84 | 1 files changed, 13 insertions(+), 0 deletions(-) | ||
85 | |||
86 | diff --git a/mm/compaction.c b/mm/compaction.c | ||
87 | index 899d956..edc1e26 100644 | ||
88 | --- a/mm/compaction.c | ||
89 | +++ b/mm/compaction.c | ||
90 | @@ -313,6 +313,19 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone, | ||
91 | } else if (!locked) | ||
92 | spin_lock_irq(&zone->lru_lock); | ||
93 | |||
94 | + /* | ||
95 | + * migrate_pfn does not necessarily start aligned to a | ||
96 | + * pageblock. Ensure that pfn_valid is called when moving | ||
97 | + * into a new MAX_ORDER_NR_PAGES range in case of large | ||
98 | + * memory holes within the zone | ||
99 | + */ | ||
100 | + if ((low_pfn & (MAX_ORDER_NR_PAGES - 1)) == 0) { | ||
101 | + if (!pfn_valid(low_pfn)) { | ||
102 | + low_pfn += MAX_ORDER_NR_PAGES - 1; | ||
103 | + continue; | ||
104 | + } | ||
105 | + } | ||
106 | + | ||
107 | if (!pfn_valid_within(low_pfn)) | ||
108 | continue; | ||
109 | nr_scanned++; | ||
110 | -- | ||
111 | 1.7.7.4 | ||
112 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0029-PM-Hibernate-Fix-s2disk-regression-related-to-freezi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0029-PM-Hibernate-Fix-s2disk-regression-related-to-freezi.patch new file mode 100644 index 00000000..524e6d1d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0029-PM-Hibernate-Fix-s2disk-regression-related-to-freezi.patch | |||
@@ -0,0 +1,100 @@ | |||
1 | From d483054fe4c66eeb7a03fdc97519b07edb1dc803 Mon Sep 17 00:00:00 2001 | ||
2 | From: "Rafael J. Wysocki" <rjw@sisk.pl> | ||
3 | Date: Sun, 29 Jan 2012 20:35:52 +0100 | ||
4 | Subject: [PATCH 29/87] PM / Hibernate: Fix s2disk regression related to | ||
5 | freezing workqueues | ||
6 | |||
7 | commit 181e9bdef37bfcaa41f3ab6c948a2a0d60a268b5 upstream. | ||
8 | |||
9 | Commit 2aede851ddf08666f68ffc17be446420e9d2a056 | ||
10 | |||
11 | PM / Hibernate: Freeze kernel threads after preallocating memory | ||
12 | |||
13 | introduced a mechanism by which kernel threads were frozen after | ||
14 | the preallocation of hibernate image memory to avoid problems with | ||
15 | frozen kernel threads not responding to memory freeing requests. | ||
16 | However, it overlooked the s2disk code path in which the | ||
17 | SNAPSHOT_CREATE_IMAGE ioctl was run directly after SNAPSHOT_FREE, | ||
18 | which caused freeze_workqueues_begin() to BUG(), because it saw | ||
19 | that worqueues had been already frozen. | ||
20 | |||
21 | Although in principle this issue might be addressed by removing | ||
22 | the relevant BUG_ON() from freeze_workqueues_begin(), that would | ||
23 | reintroduce the very problem that commit 2aede851ddf08666f68ffc17be4 | ||
24 | attempted to avoid into that particular code path. For this reason, | ||
25 | to fix the issue at hand, introduce thaw_kernel_threads() and make | ||
26 | the SNAPSHOT_FREE ioctl execute it. | ||
27 | |||
28 | Special thanks to Srivatsa S. Bhat for detailed analysis of the | ||
29 | problem. | ||
30 | |||
31 | Reported-and-tested-by: Jiri Slaby <jslaby@suse.cz> | ||
32 | Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> | ||
33 | Acked-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> | ||
34 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
35 | --- | ||
36 | include/linux/freezer.h | 2 ++ | ||
37 | kernel/power/process.c | 9 +++++++++ | ||
38 | kernel/power/user.c | 9 +++++++++ | ||
39 | 3 files changed, 20 insertions(+), 0 deletions(-) | ||
40 | |||
41 | diff --git a/include/linux/freezer.h b/include/linux/freezer.h | ||
42 | index a5386e3..b5d6b6a 100644 | ||
43 | --- a/include/linux/freezer.h | ||
44 | +++ b/include/linux/freezer.h | ||
45 | @@ -51,6 +51,7 @@ extern void refrigerator(void); | ||
46 | extern int freeze_processes(void); | ||
47 | extern int freeze_kernel_threads(void); | ||
48 | extern void thaw_processes(void); | ||
49 | +extern void thaw_kernel_threads(void); | ||
50 | |||
51 | static inline int try_to_freeze(void) | ||
52 | { | ||
53 | @@ -185,6 +186,7 @@ static inline void refrigerator(void) {} | ||
54 | static inline int freeze_processes(void) { return -ENOSYS; } | ||
55 | static inline int freeze_kernel_threads(void) { return -ENOSYS; } | ||
56 | static inline void thaw_processes(void) {} | ||
57 | +static inline void thaw_kernel_threads(void) {} | ||
58 | |||
59 | static inline int try_to_freeze(void) { return 0; } | ||
60 | |||
61 | diff --git a/kernel/power/process.c b/kernel/power/process.c | ||
62 | index addbbe5..3d4b954 100644 | ||
63 | --- a/kernel/power/process.c | ||
64 | +++ b/kernel/power/process.c | ||
65 | @@ -203,3 +203,12 @@ void thaw_processes(void) | ||
66 | printk("done.\n"); | ||
67 | } | ||
68 | |||
69 | +void thaw_kernel_threads(void) | ||
70 | +{ | ||
71 | + printk("Restarting kernel threads ... "); | ||
72 | + thaw_workqueues(); | ||
73 | + thaw_tasks(true); | ||
74 | + schedule(); | ||
75 | + printk("done.\n"); | ||
76 | +} | ||
77 | + | ||
78 | diff --git a/kernel/power/user.c b/kernel/power/user.c | ||
79 | index 6d8f535..3565b15 100644 | ||
80 | --- a/kernel/power/user.c | ||
81 | +++ b/kernel/power/user.c | ||
82 | @@ -303,6 +303,15 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, | ||
83 | swsusp_free(); | ||
84 | memset(&data->handle, 0, sizeof(struct snapshot_handle)); | ||
85 | data->ready = 0; | ||
86 | + /* | ||
87 | + * It is necessary to thaw kernel threads here, because | ||
88 | + * SNAPSHOT_CREATE_IMAGE may be invoked directly after | ||
89 | + * SNAPSHOT_FREE. In that case, if kernel threads were not | ||
90 | + * thawed, the preallocation of memory carried out by | ||
91 | + * hibernation_snapshot() might run into problems (i.e. it | ||
92 | + * might fail or even deadlock). | ||
93 | + */ | ||
94 | + thaw_kernel_threads(); | ||
95 | break; | ||
96 | |||
97 | case SNAPSHOT_SET_IMAGE_SIZE: | ||
98 | -- | ||
99 | 1.7.7.4 | ||
100 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0030-PM-QoS-CPU-C-state-breakage-with-PM-Qos-change.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0030-PM-QoS-CPU-C-state-breakage-with-PM-Qos-change.patch new file mode 100644 index 00000000..5e697d5b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0030-PM-QoS-CPU-C-state-breakage-with-PM-Qos-change.patch | |||
@@ -0,0 +1,57 @@ | |||
1 | From f51d67a64f32cd81ea8b67ca964fb7cf7e783b2e Mon Sep 17 00:00:00 2001 | ||
2 | From: Venkatesh Pallipadi <venki@google.com> | ||
3 | Date: Fri, 3 Feb 2012 22:22:25 +0100 | ||
4 | Subject: [PATCH 30/87] PM / QoS: CPU C-state breakage with PM Qos change | ||
5 | |||
6 | commit d020283dc694c9ec31b410f522252f7a8397e67d upstream. | ||
7 | |||
8 | Looks like change "PM QoS: Move and rename the implementation files" | ||
9 | merged during the 3.2 development cycle made PM QoS depend on | ||
10 | CONFIG_PM which depends on (PM_SLEEP || PM_RUNTIME). | ||
11 | |||
12 | That breaks CPU C-states with kernels not having these CONFIGs, causing CPUs | ||
13 | to spend time in Polling loop idle instead of going into deep C-states, | ||
14 | consuming way way more power. This is with either acpi idle or intel idle | ||
15 | enabled. | ||
16 | |||
17 | Either CONFIG_PM should be enabled with any pm_qos users or | ||
18 | the !CONFIG_PM pm_qos_request() should return sane defaults not to break | ||
19 | the existing users. Here's is the patch for the latter option. | ||
20 | |||
21 | [rjw: Modified the changelog slightly.] | ||
22 | |||
23 | Signed-off-by: Venkatesh Pallipadi <venki@google.com> | ||
24 | Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | include/linux/pm_qos.h | 14 +++++++++++++- | ||
28 | 1 files changed, 13 insertions(+), 1 deletions(-) | ||
29 | |||
30 | diff --git a/include/linux/pm_qos.h b/include/linux/pm_qos.h | ||
31 | index 83b0ea3..8a0ede4 100644 | ||
32 | --- a/include/linux/pm_qos.h | ||
33 | +++ b/include/linux/pm_qos.h | ||
34 | @@ -107,7 +107,19 @@ static inline void pm_qos_remove_request(struct pm_qos_request *req) | ||
35 | { return; } | ||
36 | |||
37 | static inline int pm_qos_request(int pm_qos_class) | ||
38 | - { return 0; } | ||
39 | +{ | ||
40 | + switch (pm_qos_class) { | ||
41 | + case PM_QOS_CPU_DMA_LATENCY: | ||
42 | + return PM_QOS_CPU_DMA_LAT_DEFAULT_VALUE; | ||
43 | + case PM_QOS_NETWORK_LATENCY: | ||
44 | + return PM_QOS_NETWORK_LAT_DEFAULT_VALUE; | ||
45 | + case PM_QOS_NETWORK_THROUGHPUT: | ||
46 | + return PM_QOS_NETWORK_THROUGHPUT_DEFAULT_VALUE; | ||
47 | + default: | ||
48 | + return PM_QOS_DEFAULT_VALUE; | ||
49 | + } | ||
50 | +} | ||
51 | + | ||
52 | static inline int pm_qos_add_notifier(int pm_qos_class, | ||
53 | struct notifier_block *notifier) | ||
54 | { return 0; } | ||
55 | -- | ||
56 | 1.7.7.4 | ||
57 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0031-drm-radeon-Set-DESKTOP_HEIGHT-register-to-the-frameb.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0031-drm-radeon-Set-DESKTOP_HEIGHT-register-to-the-frameb.patch new file mode 100644 index 00000000..610b959d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0031-drm-radeon-Set-DESKTOP_HEIGHT-register-to-the-frameb.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | From 97f2f58ea0382e2e2df0dacc5bba99190cd10846 Mon Sep 17 00:00:00 2001 | ||
2 | From: =?UTF-8?q?Michel=20D=C3=A4nzer?= <michel.daenzer@amd.com> | ||
3 | Date: Wed, 1 Feb 2012 12:09:55 +0100 | ||
4 | Subject: [PATCH 31/87] drm/radeon: Set DESKTOP_HEIGHT register to the | ||
5 | framebuffer (not mode) height. | ||
6 | MIME-Version: 1.0 | ||
7 | Content-Type: text/plain; charset=UTF-8 | ||
8 | Content-Transfer-Encoding: 8bit | ||
9 | |||
10 | commit 1b61925061660009f5b8047f93c5297e04541273 upstream. | ||
11 | |||
12 | The value of this register is transferred to the V_COUNTER register at the | ||
13 | beginning of vertical blank. V_COUNTER is the reference for VLINE waits and | ||
14 | goes from VIEWPORT_Y_START to VIEWPORT_Y_START+VIEWPORT_HEIGHT during scanout, | ||
15 | so if VIEWPORT_Y_START is not 0, V_COUNTER actually went backwards at the | ||
16 | beginning of vertical blank, and VLINE waits excluding the whole scanout area | ||
17 | could never finish (possibly only if VIEWPORT_Y_START is larger than the length | ||
18 | of vertical blank in scanlines). Setting DESKTOP_HEIGHT to the framebuffer | ||
19 | height should prevent this for any kind of VLINE wait. | ||
20 | |||
21 | Fixes https://bugs.freedesktop.org/show_bug.cgi?id=45329 . | ||
22 | |||
23 | Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> | ||
24 | Reviewed-by: Alex Deucher <alexander.deucher@amd.com> | ||
25 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | drivers/gpu/drm/radeon/atombios_crtc.c | 4 ++-- | ||
29 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
30 | |||
31 | diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c | ||
32 | index 2b97262..b30081f 100644 | ||
33 | --- a/drivers/gpu/drm/radeon/atombios_crtc.c | ||
34 | +++ b/drivers/gpu/drm/radeon/atombios_crtc.c | ||
35 | @@ -1189,7 +1189,7 @@ static int dce4_crtc_do_set_base(struct drm_crtc *crtc, | ||
36 | WREG32(EVERGREEN_GRPH_ENABLE + radeon_crtc->crtc_offset, 1); | ||
37 | |||
38 | WREG32(EVERGREEN_DESKTOP_HEIGHT + radeon_crtc->crtc_offset, | ||
39 | - crtc->mode.vdisplay); | ||
40 | + target_fb->height); | ||
41 | x &= ~3; | ||
42 | y &= ~1; | ||
43 | WREG32(EVERGREEN_VIEWPORT_START + radeon_crtc->crtc_offset, | ||
44 | @@ -1358,7 +1358,7 @@ static int avivo_crtc_do_set_base(struct drm_crtc *crtc, | ||
45 | WREG32(AVIVO_D1GRPH_ENABLE + radeon_crtc->crtc_offset, 1); | ||
46 | |||
47 | WREG32(AVIVO_D1MODE_DESKTOP_HEIGHT + radeon_crtc->crtc_offset, | ||
48 | - crtc->mode.vdisplay); | ||
49 | + target_fb->height); | ||
50 | x &= ~3; | ||
51 | y &= ~1; | ||
52 | WREG32(AVIVO_D1MODE_VIEWPORT_START + radeon_crtc->crtc_offset, | ||
53 | -- | ||
54 | 1.7.7.4 | ||
55 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0032-drm-nouveau-gem-fix-fence_sync-race-oops.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0032-drm-nouveau-gem-fix-fence_sync-race-oops.patch new file mode 100644 index 00000000..05ad9726 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0032-drm-nouveau-gem-fix-fence_sync-race-oops.patch | |||
@@ -0,0 +1,108 @@ | |||
1 | From 3d15bd1a90e3d768136562ad63e0d25c953d0c85 Mon Sep 17 00:00:00 2001 | ||
2 | From: Ben Skeggs <bskeggs@redhat.com> | ||
3 | Date: Tue, 10 Jan 2012 10:18:28 +1000 | ||
4 | Subject: [PATCH 32/87] drm/nouveau/gem: fix fence_sync race / oops | ||
5 | |||
6 | commit 525895ba388c949aa906f26e3ec5cb1ab041f56b upstream. | ||
7 | |||
8 | Due to a race it was possible for a fence to be destroyed while another | ||
9 | thread was trying to synchronise with it. If this happened in the fallback | ||
10 | non-semaphore path, it lead to the following oops due to fence->channel | ||
11 | being NULL. | ||
12 | |||
13 | BUG: unable to handle kernel NULL pointer dereference at (null) | ||
14 | IP: [<fa9632ce>] nouveau_fence_update+0xe/0xe0 [nouveau] | ||
15 | *pde = a649c067 | ||
16 | SMP | ||
17 | Modules linked in: fuse nouveau(O) ttm(O) drm_kms_helper(O) drm(O) mxm_wmi video wmi netconsole configfs lockd bnep bluetooth rfkill ip6t_REJECT nf_conntrack_ipv6 nf_defrag_ipv6 nf_conntrack_ipv4 nf_defrag_ipv4 xt_state nf_conntrack ip6table_filter ip6_tables snd_hda_codec_realtek snd_hda_intel snd_hda_cobinfmt_misc uinput ata_generic pata_acpi pata_aet2c_algo_bit i2c_core [last unloaded: wmi] | ||
18 | |||
19 | Pid: 2255, comm: gnome-shell Tainted: G O 3.2.0-0.rc5.git0.1.fc17.i686 #1 System manufacturer System Product Name/M2A-VM | ||
20 | EIP: 0060:[<fa9632ce>] EFLAGS: 00010296 CPU: 1 | ||
21 | EIP is at nouveau_fence_update+0xe/0xe0 [nouveau] | ||
22 | EAX: 00000000 EBX: ddfc6dd0 ECX: dd111580 EDX: 00000000 | ||
23 | ESI: 00003e80 EDI: dd111580 EBP: dd121d00 ESP: dd121ce8 | ||
24 | DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068 | ||
25 | Process gnome-shell (pid: 2255, ti=dd120000 task=dd111580 task.ti=dd120000) | ||
26 | Stack: | ||
27 | 7dc86c76 00000000 00003e80 ddfc6dd0 00003e80 dd111580 dd121d0c fa96371f | ||
28 | 00000000 dd121d3c fa963773 dd111580 01000246 000ec53d 00000000 ddfc6dd0 | ||
29 | 00001f40 00000000 ddfc6dd0 00000010 dc7df840 dd121d6c fa9639a0 00000000 | ||
30 | Call Trace: | ||
31 | [<fa96371f>] __nouveau_fence_signalled+0x1f/0x30 [nouveau] | ||
32 | [<fa963773>] __nouveau_fence_wait+0x43/0xd0 [nouveau] | ||
33 | [<fa9639a0>] nouveau_fence_sync+0x1a0/0x1c0 [nouveau] | ||
34 | [<fa964046>] validate_list+0x176/0x300 [nouveau] | ||
35 | [<f7d9c9c0>] ? ttm_bo_mem_put+0x30/0x30 [ttm] | ||
36 | [<fa964b8a>] nouveau_gem_ioctl_pushbuf+0x48a/0xfd0 [nouveau] | ||
37 | [<c0406481>] ? die+0x31/0x80 | ||
38 | [<f7c93d98>] drm_ioctl+0x388/0x490 [drm] | ||
39 | [<c0406481>] ? die+0x31/0x80 | ||
40 | [<fa964700>] ? nouveau_gem_ioctl_new+0x150/0x150 [nouveau] | ||
41 | [<c0635c7b>] ? file_has_perm+0xcb/0xe0 | ||
42 | [<f7c93a10>] ? drm_copy_field+0x80/0x80 [drm] | ||
43 | [<c0564f56>] do_vfs_ioctl+0x86/0x5b0 | ||
44 | [<c0406481>] ? die+0x31/0x80 | ||
45 | [<c0635f22>] ? selinux_file_ioctl+0x62/0x130 | ||
46 | [<c0554f30>] ? fget_light+0x30/0x340 | ||
47 | [<c05654ef>] sys_ioctl+0x6f/0x80 | ||
48 | [<c099e3a4>] syscall_call+0x7/0xb | ||
49 | [<c0406481>] ? die+0x31/0x80 | ||
50 | [<c0406481>] ? die+0x31/0x80 | ||
51 | |||
52 | Signed-off-by: Ben Skeggs <bskeggs@redhat.com> | ||
53 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
54 | --- | ||
55 | drivers/gpu/drm/nouveau/nouveau_gem.c | 23 +++++++++++++++++++++-- | ||
56 | 1 files changed, 21 insertions(+), 2 deletions(-) | ||
57 | |||
58 | diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.c b/drivers/gpu/drm/nouveau/nouveau_gem.c | ||
59 | index 5f0bc57..7ce3fde 100644 | ||
60 | --- a/drivers/gpu/drm/nouveau/nouveau_gem.c | ||
61 | +++ b/drivers/gpu/drm/nouveau/nouveau_gem.c | ||
62 | @@ -380,6 +380,25 @@ retry: | ||
63 | } | ||
64 | |||
65 | static int | ||
66 | +validate_sync(struct nouveau_channel *chan, struct nouveau_bo *nvbo) | ||
67 | +{ | ||
68 | + struct nouveau_fence *fence = NULL; | ||
69 | + int ret = 0; | ||
70 | + | ||
71 | + spin_lock(&nvbo->bo.bdev->fence_lock); | ||
72 | + if (nvbo->bo.sync_obj) | ||
73 | + fence = nouveau_fence_ref(nvbo->bo.sync_obj); | ||
74 | + spin_unlock(&nvbo->bo.bdev->fence_lock); | ||
75 | + | ||
76 | + if (fence) { | ||
77 | + ret = nouveau_fence_sync(fence, chan); | ||
78 | + nouveau_fence_unref(&fence); | ||
79 | + } | ||
80 | + | ||
81 | + return ret; | ||
82 | +} | ||
83 | + | ||
84 | +static int | ||
85 | validate_list(struct nouveau_channel *chan, struct list_head *list, | ||
86 | struct drm_nouveau_gem_pushbuf_bo *pbbo, uint64_t user_pbbo_ptr) | ||
87 | { | ||
88 | @@ -393,7 +412,7 @@ validate_list(struct nouveau_channel *chan, struct list_head *list, | ||
89 | list_for_each_entry(nvbo, list, entry) { | ||
90 | struct drm_nouveau_gem_pushbuf_bo *b = &pbbo[nvbo->pbbo_index]; | ||
91 | |||
92 | - ret = nouveau_fence_sync(nvbo->bo.sync_obj, chan); | ||
93 | + ret = validate_sync(chan, nvbo); | ||
94 | if (unlikely(ret)) { | ||
95 | NV_ERROR(dev, "fail pre-validate sync\n"); | ||
96 | return ret; | ||
97 | @@ -416,7 +435,7 @@ validate_list(struct nouveau_channel *chan, struct list_head *list, | ||
98 | return ret; | ||
99 | } | ||
100 | |||
101 | - ret = nouveau_fence_sync(nvbo->bo.sync_obj, chan); | ||
102 | + ret = validate_sync(chan, nvbo); | ||
103 | if (unlikely(ret)) { | ||
104 | NV_ERROR(dev, "fail post-validate sync\n"); | ||
105 | return ret; | ||
106 | -- | ||
107 | 1.7.7.4 | ||
108 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0033-drm-radeon-kms-disable-output-polling-when-suspended.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0033-drm-radeon-kms-disable-output-polling-when-suspended.patch new file mode 100644 index 00000000..a90ce35c --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0033-drm-radeon-kms-disable-output-polling-when-suspended.patch | |||
@@ -0,0 +1,44 @@ | |||
1 | From d11fa680b5daad1ffb72807cfd0ad30237505fff Mon Sep 17 00:00:00 2001 | ||
2 | From: Seth Forshee <seth.forshee@canonical.com> | ||
3 | Date: Tue, 31 Jan 2012 19:06:25 -0600 | ||
4 | Subject: [PATCH 33/87] drm/radeon/kms: disable output polling when suspended | ||
5 | |||
6 | commit 86698c20f71d488b32c49ed4687fb3cf8a88a5ca upstream. | ||
7 | |||
8 | Polling the outputs when the device is suspended can result in erroneous | ||
9 | status updates. Disable output polling during suspend to prevent this | ||
10 | from happening. | ||
11 | |||
12 | Signed-off-by: Seth Forshee <seth.forshee@canonical.com> | ||
13 | Reviewed-by: Alex Deucher <alexander.deucher@amd.com> | ||
14 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/gpu/drm/radeon/radeon_device.c | 4 ++++ | ||
18 | 1 files changed, 4 insertions(+), 0 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c | ||
21 | index 9b39145..9231564 100644 | ||
22 | --- a/drivers/gpu/drm/radeon/radeon_device.c | ||
23 | +++ b/drivers/gpu/drm/radeon/radeon_device.c | ||
24 | @@ -864,6 +864,8 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state) | ||
25 | if (dev->switch_power_state == DRM_SWITCH_POWER_OFF) | ||
26 | return 0; | ||
27 | |||
28 | + drm_kms_helper_poll_disable(dev); | ||
29 | + | ||
30 | /* turn off display hw */ | ||
31 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
32 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); | ||
33 | @@ -950,6 +952,8 @@ int radeon_resume_kms(struct drm_device *dev) | ||
34 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | ||
35 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); | ||
36 | } | ||
37 | + | ||
38 | + drm_kms_helper_poll_enable(dev); | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | -- | ||
43 | 1.7.7.4 | ||
44 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0034-drm-radeon-kms-fix-TRAVIS-panel-setup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0034-drm-radeon-kms-fix-TRAVIS-panel-setup.patch new file mode 100644 index 00000000..a7915d4e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0034-drm-radeon-kms-fix-TRAVIS-panel-setup.patch | |||
@@ -0,0 +1,53 @@ | |||
1 | From 307a5a187c97d1c280e66db8d957249439141850 Mon Sep 17 00:00:00 2001 | ||
2 | From: Alex Deucher <alexander.deucher@amd.com> | ||
3 | Date: Thu, 2 Feb 2012 10:18:00 -0500 | ||
4 | Subject: [PATCH 34/87] drm/radeon/kms: fix TRAVIS panel setup | ||
5 | |||
6 | commit 304a48400d9718f74ec35ae46f30868a5f4c4516 upstream. | ||
7 | |||
8 | Different versions of the DP to LVDS bridge chip | ||
9 | need different panel mode settings depending on | ||
10 | the chip version used. | ||
11 | |||
12 | Fixes: | ||
13 | https://bugs.freedesktop.org/show_bug.cgi?id=41569 | ||
14 | |||
15 | Signed-off-by: Alex Deucher <alexander.deucher@amd.com> | ||
16 | Signed-off-by: Dave Airlie <airlied@redhat.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/gpu/drm/radeon/atombios_dp.c | 18 +++++++++++++++--- | ||
20 | 1 files changed, 15 insertions(+), 3 deletions(-) | ||
21 | |||
22 | diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c | ||
23 | index a71557c..552b436 100644 | ||
24 | --- a/drivers/gpu/drm/radeon/atombios_dp.c | ||
25 | +++ b/drivers/gpu/drm/radeon/atombios_dp.c | ||
26 | @@ -564,9 +564,21 @@ int radeon_dp_get_panel_mode(struct drm_encoder *encoder, | ||
27 | ENCODER_OBJECT_ID_NUTMEG) | ||
28 | panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE; | ||
29 | else if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) == | ||
30 | - ENCODER_OBJECT_ID_TRAVIS) | ||
31 | - panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; | ||
32 | - else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { | ||
33 | + ENCODER_OBJECT_ID_TRAVIS) { | ||
34 | + u8 id[6]; | ||
35 | + int i; | ||
36 | + for (i = 0; i < 6; i++) | ||
37 | + id[i] = radeon_read_dpcd_reg(radeon_connector, 0x503 + i); | ||
38 | + if (id[0] == 0x73 && | ||
39 | + id[1] == 0x69 && | ||
40 | + id[2] == 0x76 && | ||
41 | + id[3] == 0x61 && | ||
42 | + id[4] == 0x72 && | ||
43 | + id[5] == 0x54) | ||
44 | + panel_mode = DP_PANEL_MODE_INTERNAL_DP1_MODE; | ||
45 | + else | ||
46 | + panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; | ||
47 | + } else if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) { | ||
48 | u8 tmp = radeon_read_dpcd_reg(radeon_connector, DP_EDP_CONFIGURATION_CAP); | ||
49 | if (tmp & 1) | ||
50 | panel_mode = DP_PANEL_MODE_INTERNAL_DP2_MODE; | ||
51 | -- | ||
52 | 1.7.7.4 | ||
53 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0035-sched-rt-Fix-task-stack-corruption-under-__ARCH_WANT.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0035-sched-rt-Fix-task-stack-corruption-under-__ARCH_WANT.patch new file mode 100644 index 00000000..4fcf64b8 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0035-sched-rt-Fix-task-stack-corruption-under-__ARCH_WANT.patch | |||
@@ -0,0 +1,94 @@ | |||
1 | From 6341f8928cf458016bab6aab444536843083ef0a Mon Sep 17 00:00:00 2001 | ||
2 | From: Chanho Min <chanho0207@gmail.com> | ||
3 | Date: Thu, 5 Jan 2012 20:00:19 +0900 | ||
4 | Subject: [PATCH 35/87] sched/rt: Fix task stack corruption under | ||
5 | __ARCH_WANT_INTERRUPTS_ON_CTXSW | ||
6 | |||
7 | commit cb297a3e433dbdcf7ad81e0564e7b804c941ff0d upstream. | ||
8 | |||
9 | This issue happens under the following conditions: | ||
10 | |||
11 | 1. preemption is off | ||
12 | 2. __ARCH_WANT_INTERRUPTS_ON_CTXSW is defined | ||
13 | 3. RT scheduling class | ||
14 | 4. SMP system | ||
15 | |||
16 | Sequence is as follows: | ||
17 | |||
18 | 1.suppose current task is A. start schedule() | ||
19 | 2.task A is enqueued pushable task at the entry of schedule() | ||
20 | __schedule | ||
21 | prev = rq->curr; | ||
22 | ... | ||
23 | put_prev_task | ||
24 | put_prev_task_rt | ||
25 | enqueue_pushable_task | ||
26 | 4.pick the task B as next task. | ||
27 | next = pick_next_task(rq); | ||
28 | 3.rq->curr set to task B and context_switch is started. | ||
29 | rq->curr = next; | ||
30 | 4.At the entry of context_swtich, release this cpu's rq->lock. | ||
31 | context_switch | ||
32 | prepare_task_switch | ||
33 | prepare_lock_switch | ||
34 | raw_spin_unlock_irq(&rq->lock); | ||
35 | 5.Shortly after rq->lock is released, interrupt is occurred and start IRQ context | ||
36 | 6.try_to_wake_up() which called by ISR acquires rq->lock | ||
37 | try_to_wake_up | ||
38 | ttwu_remote | ||
39 | rq = __task_rq_lock(p) | ||
40 | ttwu_do_wakeup(rq, p, wake_flags); | ||
41 | task_woken_rt | ||
42 | 7.push_rt_task picks the task A which is enqueued before. | ||
43 | task_woken_rt | ||
44 | push_rt_tasks(rq) | ||
45 | next_task = pick_next_pushable_task(rq) | ||
46 | 8.At find_lock_lowest_rq(), If double_lock_balance() returns 0, | ||
47 | lowest_rq can be the remote rq. | ||
48 | (But,If preemption is on, double_lock_balance always return 1 and it | ||
49 | does't happen.) | ||
50 | push_rt_task | ||
51 | find_lock_lowest_rq | ||
52 | if (double_lock_balance(rq, lowest_rq)).. | ||
53 | 9.find_lock_lowest_rq return the available rq. task A is migrated to | ||
54 | the remote cpu/rq. | ||
55 | push_rt_task | ||
56 | ... | ||
57 | deactivate_task(rq, next_task, 0); | ||
58 | set_task_cpu(next_task, lowest_rq->cpu); | ||
59 | activate_task(lowest_rq, next_task, 0); | ||
60 | 10. But, task A is on irq context at this cpu. | ||
61 | So, task A is scheduled by two cpus at the same time until restore from IRQ. | ||
62 | Task A's stack is corrupted. | ||
63 | |||
64 | To fix it, don't migrate an RT task if it's still running. | ||
65 | |||
66 | Signed-off-by: Chanho Min <chanho.min@lge.com> | ||
67 | Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> | ||
68 | Acked-by: Steven Rostedt <rostedt@goodmis.org> | ||
69 | Link: http://lkml.kernel.org/r/CAOAMb1BHA=5fm7KTewYyke6u-8DP0iUuJMpgQw54vNeXFsGpoQ@mail.gmail.com | ||
70 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | ||
71 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
72 | --- | ||
73 | kernel/sched_rt.c | 5 +++++ | ||
74 | 1 files changed, 5 insertions(+), 0 deletions(-) | ||
75 | |||
76 | diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c | ||
77 | index 583a136..78fcacf 100644 | ||
78 | --- a/kernel/sched_rt.c | ||
79 | +++ b/kernel/sched_rt.c | ||
80 | @@ -1388,6 +1388,11 @@ static int push_rt_task(struct rq *rq) | ||
81 | if (!next_task) | ||
82 | return 0; | ||
83 | |||
84 | +#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW | ||
85 | + if (unlikely(task_running(rq, next_task))) | ||
86 | + return 0; | ||
87 | +#endif | ||
88 | + | ||
89 | retry: | ||
90 | if (unlikely(next_task == rq->curr)) { | ||
91 | WARN_ON(1); | ||
92 | -- | ||
93 | 1.7.7.4 | ||
94 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0036-PM-Hibernate-Thaw-processes-in-SNAPSHOT_CREATE_IMAGE.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0036-PM-Hibernate-Thaw-processes-in-SNAPSHOT_CREATE_IMAGE.patch new file mode 100644 index 00000000..fb7696dd --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0036-PM-Hibernate-Thaw-processes-in-SNAPSHOT_CREATE_IMAGE.patch | |||
@@ -0,0 +1,83 @@ | |||
1 | From 26b67a54a31d8e18f66f52d6bae4907963648d3c Mon Sep 17 00:00:00 2001 | ||
2 | From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> | ||
3 | Date: Thu, 1 Dec 2011 22:33:10 +0100 | ||
4 | Subject: [PATCH 36/87] PM / Hibernate: Thaw processes in | ||
5 | SNAPSHOT_CREATE_IMAGE ioctl test path | ||
6 | |||
7 | commit 97819a26224f019e73d88bb2fd4eb5a614860461 upstream. | ||
8 | |||
9 | Commit 2aede851ddf08666f68ffc17be446420e9d2a056 (PM / Hibernate: Freeze | ||
10 | kernel threads after preallocating memory) moved the freezing of kernel | ||
11 | threads to hibernation_snapshot() function. | ||
12 | |||
13 | So now, if the call to hibernation_snapshot() returns early due to a | ||
14 | successful hibernation test, the caller has to thaw processes to ensure | ||
15 | that the system gets back to its original state. | ||
16 | |||
17 | But in SNAPSHOT_CREATE_IMAGE hibernation ioctl, the caller does not thaw | ||
18 | processes in case hibernation_snapshot() returned due to a successful | ||
19 | freezer test. Fix this issue. But note we still send the value of 'in_suspend' | ||
20 | (which is now 0) to userspace, because we are not in an error path per-se, | ||
21 | and moreover, the value of in_suspend correctly depicts the situation here. | ||
22 | |||
23 | Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> | ||
24 | Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | kernel/power/hibernate.c | 2 +- | ||
28 | kernel/power/power.h | 2 ++ | ||
29 | kernel/power/user.c | 11 ++++++++--- | ||
30 | 3 files changed, 11 insertions(+), 4 deletions(-) | ||
31 | |||
32 | diff --git a/kernel/power/hibernate.c b/kernel/power/hibernate.c | ||
33 | index a6b0503..624538a 100644 | ||
34 | --- a/kernel/power/hibernate.c | ||
35 | +++ b/kernel/power/hibernate.c | ||
36 | @@ -55,7 +55,7 @@ enum { | ||
37 | |||
38 | static int hibernation_mode = HIBERNATION_SHUTDOWN; | ||
39 | |||
40 | -static bool freezer_test_done; | ||
41 | +bool freezer_test_done; | ||
42 | |||
43 | static const struct platform_hibernation_ops *hibernation_ops; | ||
44 | |||
45 | diff --git a/kernel/power/power.h b/kernel/power/power.h | ||
46 | index 23a2db1..0c4defe 100644 | ||
47 | --- a/kernel/power/power.h | ||
48 | +++ b/kernel/power/power.h | ||
49 | @@ -50,6 +50,8 @@ static inline char *check_image_kernel(struct swsusp_info *info) | ||
50 | #define SPARE_PAGES ((1024 * 1024) >> PAGE_SHIFT) | ||
51 | |||
52 | /* kernel/power/hibernate.c */ | ||
53 | +extern bool freezer_test_done; | ||
54 | + | ||
55 | extern int hibernation_snapshot(int platform_mode); | ||
56 | extern int hibernation_restore(int platform_mode); | ||
57 | extern int hibernation_platform_enter(void); | ||
58 | diff --git a/kernel/power/user.c b/kernel/power/user.c | ||
59 | index 3565b15..f08bbfb 100644 | ||
60 | --- a/kernel/power/user.c | ||
61 | +++ b/kernel/power/user.c | ||
62 | @@ -283,10 +283,15 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, | ||
63 | } | ||
64 | pm_restore_gfp_mask(); | ||
65 | error = hibernation_snapshot(data->platform_support); | ||
66 | - if (!error) | ||
67 | + if (!error) { | ||
68 | error = put_user(in_suspend, (int __user *)arg); | ||
69 | - if (!error) | ||
70 | - data->ready = 1; | ||
71 | + if (!error && !freezer_test_done) | ||
72 | + data->ready = 1; | ||
73 | + if (freezer_test_done) { | ||
74 | + freezer_test_done = false; | ||
75 | + thaw_processes(); | ||
76 | + } | ||
77 | + } | ||
78 | break; | ||
79 | |||
80 | case SNAPSHOT_ATOMIC_RESTORE: | ||
81 | -- | ||
82 | 1.7.7.4 | ||
83 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0037-PM-Hibernate-Thaw-kernel-threads-in-SNAPSHOT_CREATE_.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0037-PM-Hibernate-Thaw-kernel-threads-in-SNAPSHOT_CREATE_.patch new file mode 100644 index 00000000..6741b06b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0037-PM-Hibernate-Thaw-kernel-threads-in-SNAPSHOT_CREATE_.patch | |||
@@ -0,0 +1,48 @@ | |||
1 | From 695cb013a3332b6c773c8a75be97aa6f91bc227f Mon Sep 17 00:00:00 2001 | ||
2 | From: "Srivatsa S. Bhat" <srivatsa.bhat@linux.vnet.ibm.com> | ||
3 | Date: Wed, 1 Feb 2012 22:16:36 +0100 | ||
4 | Subject: [PATCH 37/87] PM / Hibernate: Thaw kernel threads in | ||
5 | SNAPSHOT_CREATE_IMAGE ioctl path | ||
6 | |||
7 | commit fe9161db2e6053da21e4649d77bbefaf3030b11d upstream. | ||
8 | |||
9 | In the SNAPSHOT_CREATE_IMAGE ioctl, if the call to hibernation_snapshot() | ||
10 | fails, the frozen tasks are not thawed. | ||
11 | |||
12 | And in the case of success, if we happen to exit due to a successful freezer | ||
13 | test, all tasks (including those of userspace) are thawed, whereas actually | ||
14 | we should have thawed only the kernel threads at that point. Fix both these | ||
15 | issues. | ||
16 | |||
17 | Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com> | ||
18 | Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | kernel/power/user.c | 6 ++++-- | ||
22 | 1 files changed, 4 insertions(+), 2 deletions(-) | ||
23 | |||
24 | diff --git a/kernel/power/user.c b/kernel/power/user.c | ||
25 | index f08bbfb..f08d227 100644 | ||
26 | --- a/kernel/power/user.c | ||
27 | +++ b/kernel/power/user.c | ||
28 | @@ -283,13 +283,15 @@ static long snapshot_ioctl(struct file *filp, unsigned int cmd, | ||
29 | } | ||
30 | pm_restore_gfp_mask(); | ||
31 | error = hibernation_snapshot(data->platform_support); | ||
32 | - if (!error) { | ||
33 | + if (error) { | ||
34 | + thaw_kernel_threads(); | ||
35 | + } else { | ||
36 | error = put_user(in_suspend, (int __user *)arg); | ||
37 | if (!error && !freezer_test_done) | ||
38 | data->ready = 1; | ||
39 | if (freezer_test_done) { | ||
40 | freezer_test_done = false; | ||
41 | - thaw_processes(); | ||
42 | + thaw_kernel_threads(); | ||
43 | } | ||
44 | } | ||
45 | break; | ||
46 | -- | ||
47 | 1.7.7.4 | ||
48 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0038-8139cp-fix-missing-napi_gro_flush.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0038-8139cp-fix-missing-napi_gro_flush.patch new file mode 100644 index 00000000..bb26a304 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0038-8139cp-fix-missing-napi_gro_flush.patch | |||
@@ -0,0 +1,33 @@ | |||
1 | From ff91ca433acbb464e82dbc655c1339498c20d45a Mon Sep 17 00:00:00 2001 | ||
2 | From: Francois Romieu <romieu@fr.zoreil.com> | ||
3 | Date: Sun, 8 Jan 2012 13:41:33 +0000 | ||
4 | Subject: [PATCH 38/87] 8139cp: fix missing napi_gro_flush. | ||
5 | |||
6 | commit b189e810619a676e6b931a942a3e8387f3d39c21 upstream. | ||
7 | |||
8 | The driver uses __napi_complete and napi_gro_receive. Without it, the | ||
9 | driver hits the BUG_ON(n->gro_list) assertion hard in __napi_complete. | ||
10 | |||
11 | Signed-off-by: Francois Romieu <romieu@fr.zoreil.com> | ||
12 | Tested-by: Marin Glibic <zhilla2@gmail.com> | ||
13 | Signed-off-by: David S. Miller <davem@davemloft.net> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/net/ethernet/realtek/8139cp.c | 1 + | ||
17 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/net/ethernet/realtek/8139cp.c b/drivers/net/ethernet/realtek/8139cp.c | ||
20 | index ee5da92..aba4f67 100644 | ||
21 | --- a/drivers/net/ethernet/realtek/8139cp.c | ||
22 | +++ b/drivers/net/ethernet/realtek/8139cp.c | ||
23 | @@ -563,6 +563,7 @@ rx_next: | ||
24 | if (cpr16(IntrStatus) & cp_rx_intr_mask) | ||
25 | goto rx_status_loop; | ||
26 | |||
27 | + napi_gro_flush(napi); | ||
28 | spin_lock_irqsave(&cp->lock, flags); | ||
29 | __napi_complete(napi); | ||
30 | cpw16_f(IntrMask, cp_intr_mask); | ||
31 | -- | ||
32 | 1.7.7.4 | ||
33 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0039-udf-Mark-LVID-buffer-as-uptodate-before-marking-it-d.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0039-udf-Mark-LVID-buffer-as-uptodate-before-marking-it-d.patch new file mode 100644 index 00000000..d0d7c9a6 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0039-udf-Mark-LVID-buffer-as-uptodate-before-marking-it-d.patch | |||
@@ -0,0 +1,40 @@ | |||
1 | From 43f4a516b2f5492bc597f3753b693ad8adc62748 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jan Kara <jack@suse.cz> | ||
3 | Date: Fri, 23 Dec 2011 11:53:07 +0100 | ||
4 | Subject: [PATCH 39/87] udf: Mark LVID buffer as uptodate before marking it | ||
5 | dirty | ||
6 | |||
7 | commit 853a0c25baf96b028de1654bea1e0c8857eadf3d upstream. | ||
8 | |||
9 | When we hit EIO while writing LVID, the buffer uptodate bit is cleared. | ||
10 | This then results in an anoying warning from mark_buffer_dirty() when we | ||
11 | write the buffer again. So just set uptodate flag unconditionally. | ||
12 | |||
13 | Reviewed-by: Namjae Jeon <linkinjeon@gmail.com> | ||
14 | Signed-off-by: Jan Kara <jack@suse.cz> | ||
15 | Cc: Dave Jones <davej@redhat.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | fs/udf/super.c | 6 ++++++ | ||
19 | 1 files changed, 6 insertions(+), 0 deletions(-) | ||
20 | |||
21 | diff --git a/fs/udf/super.c b/fs/udf/super.c | ||
22 | index e185253..87cb24a 100644 | ||
23 | --- a/fs/udf/super.c | ||
24 | +++ b/fs/udf/super.c | ||
25 | @@ -1799,6 +1799,12 @@ static void udf_close_lvid(struct super_block *sb) | ||
26 | le16_to_cpu(lvid->descTag.descCRCLength))); | ||
27 | |||
28 | lvid->descTag.tagChecksum = udf_tag_checksum(&lvid->descTag); | ||
29 | + /* | ||
30 | + * We set buffer uptodate unconditionally here to avoid spurious | ||
31 | + * warnings from mark_buffer_dirty() when previous EIO has marked | ||
32 | + * the buffer as !uptodate | ||
33 | + */ | ||
34 | + set_buffer_uptodate(bh); | ||
35 | mark_buffer_dirty(bh); | ||
36 | sbi->s_lvid_dirty = 0; | ||
37 | mutex_unlock(&sbi->s_alloc_mutex); | ||
38 | -- | ||
39 | 1.7.7.4 | ||
40 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0040-drm-i915-HDMI-hot-remove-notification-to-audio-drive.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0040-drm-i915-HDMI-hot-remove-notification-to-audio-drive.patch new file mode 100644 index 00000000..02c199e3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0040-drm-i915-HDMI-hot-remove-notification-to-audio-drive.patch | |||
@@ -0,0 +1,53 @@ | |||
1 | From febaacc3a6165f0cf54ff512f1e7e51563fd27b1 Mon Sep 17 00:00:00 2001 | ||
2 | From: Wu Fengguang <fengguang.wu@intel.com> | ||
3 | Date: Fri, 9 Dec 2011 20:42:20 +0800 | ||
4 | Subject: [PATCH 40/87] drm/i915: HDMI hot remove notification to audio driver | ||
5 | |||
6 | commit 2deed761188d7480eb5f7efbfe7aa77f09322ed8 upstream. | ||
7 | |||
8 | On HDMI monitor hot remove, clear SDVO_AUDIO_ENABLE accordingly, so that | ||
9 | the audio driver will receive hot plug events and take action to refresh | ||
10 | its device state and ELD contents. | ||
11 | |||
12 | The cleared SDVO_AUDIO_ENABLE bit needs to be restored to prevent losing | ||
13 | HDMI audio after DPMS on. | ||
14 | |||
15 | CC: Wang Zhenyu <zhenyu.z.wang@intel.com> | ||
16 | Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> | ||
17 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
18 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/gpu/drm/i915/intel_hdmi.c | 8 ++++++-- | ||
22 | 1 files changed, 6 insertions(+), 2 deletions(-) | ||
23 | |||
24 | diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c | ||
25 | index d4f5a0b..64541f7 100644 | ||
26 | --- a/drivers/gpu/drm/i915/intel_hdmi.c | ||
27 | +++ b/drivers/gpu/drm/i915/intel_hdmi.c | ||
28 | @@ -269,6 +269,10 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode) | ||
29 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
30 | struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); | ||
31 | u32 temp; | ||
32 | + u32 enable_bits = SDVO_ENABLE; | ||
33 | + | ||
34 | + if (intel_hdmi->has_audio) | ||
35 | + enable_bits |= SDVO_AUDIO_ENABLE; | ||
36 | |||
37 | temp = I915_READ(intel_hdmi->sdvox_reg); | ||
38 | |||
39 | @@ -281,9 +285,9 @@ static void intel_hdmi_dpms(struct drm_encoder *encoder, int mode) | ||
40 | } | ||
41 | |||
42 | if (mode != DRM_MODE_DPMS_ON) { | ||
43 | - temp &= ~SDVO_ENABLE; | ||
44 | + temp &= ~enable_bits; | ||
45 | } else { | ||
46 | - temp |= SDVO_ENABLE; | ||
47 | + temp |= enable_bits; | ||
48 | } | ||
49 | |||
50 | I915_WRITE(intel_hdmi->sdvox_reg, temp); | ||
51 | -- | ||
52 | 1.7.7.4 | ||
53 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0041-drm-i915-DisplayPort-hot-remove-notification-to-audi.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0041-drm-i915-DisplayPort-hot-remove-notification-to-audi.patch new file mode 100644 index 00000000..1278a4e4 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0041-drm-i915-DisplayPort-hot-remove-notification-to-audi.patch | |||
@@ -0,0 +1,40 @@ | |||
1 | From e306967621bd97280eb17c9abab473070a2e5b45 Mon Sep 17 00:00:00 2001 | ||
2 | From: Wu Fengguang <fengguang.wu@intel.com> | ||
3 | Date: Fri, 9 Dec 2011 20:42:21 +0800 | ||
4 | Subject: [PATCH 41/87] drm/i915: DisplayPort hot remove notification to audio | ||
5 | driver | ||
6 | |||
7 | commit 832afda6a7d7235ef0e09f4ec46736861540da6d upstream. | ||
8 | |||
9 | On DP monitor hot remove, clear DP_AUDIO_OUTPUT_ENABLE accordingly, | ||
10 | so that the audio driver will receive hot plug events and take action | ||
11 | to refresh its device state and ELD contents. | ||
12 | |||
13 | Note that the DP_AUDIO_OUTPUT_ENABLE bit may be enabled or disabled | ||
14 | only when the link training is complete and set to "Normal". | ||
15 | |||
16 | Tested OK for both hot plug/remove and DPMS on/off. | ||
17 | |||
18 | Signed-off-by: Wu Fengguang <fengguang.wu@intel.com> | ||
19 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
20 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/gpu/drm/i915/intel_dp.c | 1 + | ||
24 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
25 | |||
26 | diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c | ||
27 | index 92b041b..db3b461 100644 | ||
28 | --- a/drivers/gpu/drm/i915/intel_dp.c | ||
29 | +++ b/drivers/gpu/drm/i915/intel_dp.c | ||
30 | @@ -1926,6 +1926,7 @@ intel_dp_link_down(struct intel_dp *intel_dp) | ||
31 | intel_wait_for_vblank(dev, to_intel_crtc(crtc)->pipe); | ||
32 | } | ||
33 | |||
34 | + DP &= ~DP_AUDIO_OUTPUT_ENABLE; | ||
35 | I915_WRITE(intel_dp->output_reg, DP & ~DP_PORT_EN); | ||
36 | POSTING_READ(intel_dp->output_reg); | ||
37 | msleep(intel_dp->panel_power_down_delay); | ||
38 | -- | ||
39 | 1.7.7.4 | ||
40 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0042-drm-i915-check-ACTHD-of-all-rings.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0042-drm-i915-check-ACTHD-of-all-rings.patch new file mode 100644 index 00000000..9a3ddcac --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0042-drm-i915-check-ACTHD-of-all-rings.patch | |||
@@ -0,0 +1,92 @@ | |||
1 | From 2d0e8c788387c3aea69c498d0cc24a73645b71cb Mon Sep 17 00:00:00 2001 | ||
2 | From: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
3 | Date: Sun, 27 Nov 2011 18:58:17 +0100 | ||
4 | Subject: [PATCH 42/87] drm/i915: check ACTHD of all rings | ||
5 | |||
6 | commit 097354eb14fa94d31a09c64d640643f58e4a5a9a upstream. | ||
7 | |||
8 | Otherwise hangcheck spuriously fires when running blitter/bsd-only | ||
9 | workloads. | ||
10 | |||
11 | Contrary to a similar patch by Ben Widawsky this does not check | ||
12 | INSTDONE of the other rings. Chris Wilson implied that in a failure to | ||
13 | detect a hang, most likely because INSTDONE was fluctuating. Thus only | ||
14 | check ACTHD, which as far as I know is rather reliable. Also, blitter | ||
15 | and bsd rings can't launch complex tasks from a single instruction | ||
16 | (like 3D_PRIM on the render with complex or even infinite shaders). | ||
17 | |||
18 | This fixes spurious gpu hang detection when running | ||
19 | tests/gem_hangcheck_forcewake on snb/ivb. | ||
20 | |||
21 | Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
22 | Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
23 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
24 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
25 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
26 | --- | ||
27 | drivers/gpu/drm/i915/i915_drv.h | 2 ++ | ||
28 | drivers/gpu/drm/i915/i915_irq.c | 13 ++++++++++--- | ||
29 | 2 files changed, 12 insertions(+), 3 deletions(-) | ||
30 | |||
31 | diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h | ||
32 | index 554bef7..505af3f 100644 | ||
33 | --- a/drivers/gpu/drm/i915/i915_drv.h | ||
34 | +++ b/drivers/gpu/drm/i915/i915_drv.h | ||
35 | @@ -337,6 +337,8 @@ typedef struct drm_i915_private { | ||
36 | struct timer_list hangcheck_timer; | ||
37 | int hangcheck_count; | ||
38 | uint32_t last_acthd; | ||
39 | + uint32_t last_acthd_bsd; | ||
40 | + uint32_t last_acthd_blt; | ||
41 | uint32_t last_instdone; | ||
42 | uint32_t last_instdone1; | ||
43 | |||
44 | diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c | ||
45 | index b40004b..d47a53b 100644 | ||
46 | --- a/drivers/gpu/drm/i915/i915_irq.c | ||
47 | +++ b/drivers/gpu/drm/i915/i915_irq.c | ||
48 | @@ -1669,7 +1669,7 @@ void i915_hangcheck_elapsed(unsigned long data) | ||
49 | { | ||
50 | struct drm_device *dev = (struct drm_device *)data; | ||
51 | drm_i915_private_t *dev_priv = dev->dev_private; | ||
52 | - uint32_t acthd, instdone, instdone1; | ||
53 | + uint32_t acthd, instdone, instdone1, acthd_bsd, acthd_blt; | ||
54 | bool err = false; | ||
55 | |||
56 | if (!i915_enable_hangcheck) | ||
57 | @@ -1686,16 +1686,21 @@ void i915_hangcheck_elapsed(unsigned long data) | ||
58 | } | ||
59 | |||
60 | if (INTEL_INFO(dev)->gen < 4) { | ||
61 | - acthd = I915_READ(ACTHD); | ||
62 | instdone = I915_READ(INSTDONE); | ||
63 | instdone1 = 0; | ||
64 | } else { | ||
65 | - acthd = I915_READ(ACTHD_I965); | ||
66 | instdone = I915_READ(INSTDONE_I965); | ||
67 | instdone1 = I915_READ(INSTDONE1); | ||
68 | } | ||
69 | + acthd = intel_ring_get_active_head(&dev_priv->ring[RCS]); | ||
70 | + acthd_bsd = HAS_BSD(dev) ? | ||
71 | + intel_ring_get_active_head(&dev_priv->ring[VCS]) : 0; | ||
72 | + acthd_blt = HAS_BLT(dev) ? | ||
73 | + intel_ring_get_active_head(&dev_priv->ring[BCS]) : 0; | ||
74 | |||
75 | if (dev_priv->last_acthd == acthd && | ||
76 | + dev_priv->last_acthd_bsd == acthd_bsd && | ||
77 | + dev_priv->last_acthd_blt == acthd_blt && | ||
78 | dev_priv->last_instdone == instdone && | ||
79 | dev_priv->last_instdone1 == instdone1) { | ||
80 | if (dev_priv->hangcheck_count++ > 1) { | ||
81 | @@ -1727,6 +1732,8 @@ void i915_hangcheck_elapsed(unsigned long data) | ||
82 | dev_priv->hangcheck_count = 0; | ||
83 | |||
84 | dev_priv->last_acthd = acthd; | ||
85 | + dev_priv->last_acthd_bsd = acthd_bsd; | ||
86 | + dev_priv->last_acthd_blt = acthd_blt; | ||
87 | dev_priv->last_instdone = instdone; | ||
88 | dev_priv->last_instdone1 = instdone1; | ||
89 | } | ||
90 | -- | ||
91 | 1.7.7.4 | ||
92 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0043-drm-i915-Fix-TV-Out-refresh-rate.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0043-drm-i915-Fix-TV-Out-refresh-rate.patch new file mode 100644 index 00000000..a01b0129 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0043-drm-i915-Fix-TV-Out-refresh-rate.patch | |||
@@ -0,0 +1,98 @@ | |||
1 | From eb10e9cd3a43bcaea5f7d4727b27b8f7e40d9fc7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Rodrigo Vivi <rodrigo.vivi@gmail.com> | ||
3 | Date: Wed, 14 Dec 2011 21:10:06 -0200 | ||
4 | Subject: [PATCH 43/87] drm/i915: Fix TV Out refresh rate. | ||
5 | |||
6 | commit 23bd15ec662344dc10e9918fdd0dbc58bc71526d upstream. | ||
7 | |||
8 | TV Out refresh rate was half of the specification for almost all modes. | ||
9 | Due to this reason pixel clock was so low for some modes causing flickering screen. | ||
10 | |||
11 | Signed-off-by: Rodrigo Vivi <rodrigo.vivi@gmail.com> | ||
12 | Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
13 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
14 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/gpu/drm/i915/intel_tv.c | 16 ++++++++-------- | ||
18 | 1 files changed, 8 insertions(+), 8 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c | ||
21 | index f3c6a9a..2b1fcad 100644 | ||
22 | --- a/drivers/gpu/drm/i915/intel_tv.c | ||
23 | +++ b/drivers/gpu/drm/i915/intel_tv.c | ||
24 | @@ -417,7 +417,7 @@ static const struct tv_mode tv_modes[] = { | ||
25 | { | ||
26 | .name = "NTSC-M", | ||
27 | .clock = 108000, | ||
28 | - .refresh = 29970, | ||
29 | + .refresh = 59940, | ||
30 | .oversample = TV_OVERSAMPLE_8X, | ||
31 | .component_only = 0, | ||
32 | /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 3.580MHz */ | ||
33 | @@ -460,7 +460,7 @@ static const struct tv_mode tv_modes[] = { | ||
34 | { | ||
35 | .name = "NTSC-443", | ||
36 | .clock = 108000, | ||
37 | - .refresh = 29970, | ||
38 | + .refresh = 59940, | ||
39 | .oversample = TV_OVERSAMPLE_8X, | ||
40 | .component_only = 0, | ||
41 | /* 525 Lines, 60 Fields, 15.734KHz line, Sub-Carrier 4.43MHz */ | ||
42 | @@ -502,7 +502,7 @@ static const struct tv_mode tv_modes[] = { | ||
43 | { | ||
44 | .name = "NTSC-J", | ||
45 | .clock = 108000, | ||
46 | - .refresh = 29970, | ||
47 | + .refresh = 59940, | ||
48 | .oversample = TV_OVERSAMPLE_8X, | ||
49 | .component_only = 0, | ||
50 | |||
51 | @@ -545,7 +545,7 @@ static const struct tv_mode tv_modes[] = { | ||
52 | { | ||
53 | .name = "PAL-M", | ||
54 | .clock = 108000, | ||
55 | - .refresh = 29970, | ||
56 | + .refresh = 59940, | ||
57 | .oversample = TV_OVERSAMPLE_8X, | ||
58 | .component_only = 0, | ||
59 | |||
60 | @@ -589,7 +589,7 @@ static const struct tv_mode tv_modes[] = { | ||
61 | /* 625 Lines, 50 Fields, 15.625KHz line, Sub-Carrier 4.434MHz */ | ||
62 | .name = "PAL-N", | ||
63 | .clock = 108000, | ||
64 | - .refresh = 25000, | ||
65 | + .refresh = 50000, | ||
66 | .oversample = TV_OVERSAMPLE_8X, | ||
67 | .component_only = 0, | ||
68 | |||
69 | @@ -634,7 +634,7 @@ static const struct tv_mode tv_modes[] = { | ||
70 | /* 625 Lines, 50 Fields, 15.625KHz line, Sub-Carrier 4.434MHz */ | ||
71 | .name = "PAL", | ||
72 | .clock = 108000, | ||
73 | - .refresh = 25000, | ||
74 | + .refresh = 50000, | ||
75 | .oversample = TV_OVERSAMPLE_8X, | ||
76 | .component_only = 0, | ||
77 | |||
78 | @@ -821,7 +821,7 @@ static const struct tv_mode tv_modes[] = { | ||
79 | { | ||
80 | .name = "1080i@50Hz", | ||
81 | .clock = 148800, | ||
82 | - .refresh = 25000, | ||
83 | + .refresh = 50000, | ||
84 | .oversample = TV_OVERSAMPLE_2X, | ||
85 | .component_only = 1, | ||
86 | |||
87 | @@ -847,7 +847,7 @@ static const struct tv_mode tv_modes[] = { | ||
88 | { | ||
89 | .name = "1080i@60Hz", | ||
90 | .clock = 148800, | ||
91 | - .refresh = 30000, | ||
92 | + .refresh = 60000, | ||
93 | .oversample = TV_OVERSAMPLE_2X, | ||
94 | .component_only = 1, | ||
95 | |||
96 | -- | ||
97 | 1.7.7.4 | ||
98 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0044-drm-i915-handle-3rd-pipe.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0044-drm-i915-handle-3rd-pipe.patch new file mode 100644 index 00000000..67533173 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0044-drm-i915-handle-3rd-pipe.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From a390a377bfcf132841798e09e9bb4d0f6c27de91 Mon Sep 17 00:00:00 2001 | ||
2 | From: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
3 | Date: Sat, 7 Jan 2012 23:40:35 -0200 | ||
4 | Subject: [PATCH 44/87] drm/i915: handle 3rd pipe | ||
5 | |||
6 | commit 07c1e8c1462fa7324de4c36ae9e55da2abd79cee upstream. | ||
7 | |||
8 | We don't need to check 3rd pipe specifically, as it shares PLL with some | ||
9 | other one. | ||
10 | |||
11 | Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=41977 | ||
12 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
13 | Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org> | ||
14 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/gpu/drm/i915/i915_suspend.c | 4 ++++ | ||
18 | 1 files changed, 4 insertions(+), 0 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c | ||
21 | index 43cbafe..a1eb83d 100644 | ||
22 | --- a/drivers/gpu/drm/i915/i915_suspend.c | ||
23 | +++ b/drivers/gpu/drm/i915/i915_suspend.c | ||
24 | @@ -34,6 +34,10 @@ static bool i915_pipe_enabled(struct drm_device *dev, enum pipe pipe) | ||
25 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
26 | u32 dpll_reg; | ||
27 | |||
28 | + /* On IVB, 3rd pipe shares PLL with another one */ | ||
29 | + if (pipe > 1) | ||
30 | + return false; | ||
31 | + | ||
32 | if (HAS_PCH_SPLIT(dev)) | ||
33 | dpll_reg = (pipe == PIPE_A) ? _PCH_DPLL_A : _PCH_DPLL_B; | ||
34 | else | ||
35 | -- | ||
36 | 1.7.7.4 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0045-drm-i915-convert-force_wake_get-to-func-pointer-in-t.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0045-drm-i915-convert-force_wake_get-to-func-pointer-in-t.patch new file mode 100644 index 00000000..7e246089 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0045-drm-i915-convert-force_wake_get-to-func-pointer-in-t.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From 97b068a6657ded880cf3b6617e92da865067a0db Mon Sep 17 00:00:00 2001 | ||
2 | From: Daniel Vetter <daniel@ffwll.ch> | ||
3 | Date: Fri, 13 Jan 2012 16:20:06 -0800 | ||
4 | Subject: [PATCH 45/87] drm/i915: convert force_wake_get to func pointer in | ||
5 | the gpu reset code | ||
6 | |||
7 | commit 8109021313c7a3d8947677391ce6ab9cd0bb1d28 upstream. | ||
8 | |||
9 | This was forgotten in the original multi-threaded forcewake | ||
10 | conversion: | ||
11 | |||
12 | commit 8d715f0024f64ad1b1be85d8c081cf577944c847 | ||
13 | Author: Keith Packard <keithp at keithp.com> | ||
14 | Date: Fri Nov 18 20:39:01 2011 -0800 | ||
15 | |||
16 | drm/i915: add multi-threaded forcewake support | ||
17 | |||
18 | Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
19 | Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
20 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
21 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | drivers/gpu/drm/i915/i915_drv.c | 2 +- | ||
25 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
26 | |||
27 | diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c | ||
28 | index a1103fc..d7c9d99 100644 | ||
29 | --- a/drivers/gpu/drm/i915/i915_drv.c | ||
30 | +++ b/drivers/gpu/drm/i915/i915_drv.c | ||
31 | @@ -645,7 +645,7 @@ int i915_reset(struct drm_device *dev, u8 flags) | ||
32 | ret = gen6_do_reset(dev, flags); | ||
33 | /* If reset with a user forcewake, try to restore */ | ||
34 | if (atomic_read(&dev_priv->forcewake_count)) | ||
35 | - __gen6_gt_force_wake_get(dev_priv); | ||
36 | + dev_priv->display.force_wake_get(dev_priv); | ||
37 | break; | ||
38 | case 5: | ||
39 | ret = ironlake_do_reset(dev, flags); | ||
40 | -- | ||
41 | 1.7.7.4 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0046-drm-i915-protect-force_wake_-get-put-with-the-gt_loc.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0046-drm-i915-protect-force_wake_-get-put-with-the-gt_loc.patch new file mode 100644 index 00000000..060d345e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0046-drm-i915-protect-force_wake_-get-put-with-the-gt_loc.patch | |||
@@ -0,0 +1,163 @@ | |||
1 | From 69ac25cd32a4032a94c100b52cf52abf6fde90a5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
3 | Date: Wed, 14 Dec 2011 13:57:03 +0100 | ||
4 | Subject: [PATCH 46/87] drm/i915: protect force_wake_(get|put) with the | ||
5 | gt_lock | ||
6 | |||
7 | commit 9f1f46a45a681d357d1ceedecec3671a5ae957f4 upstream. | ||
8 | |||
9 | The problem this patch solves is that the forcewake accounting | ||
10 | necessary for register reads is protected by dev->struct_mutex. But the | ||
11 | hangcheck and error_capture code need to access registers without | ||
12 | grabbing this mutex because we hold it while waiting for the gpu. | ||
13 | So a new lock is required. Because currently the error_state capture | ||
14 | is called from the error irq handler and the hangcheck code runs from | ||
15 | a timer, it needs to be an irqsafe spinlock (note that the registers | ||
16 | used by the irq handler (neglecting the error handling part) only uses | ||
17 | registers that don't need the forcewake dance). | ||
18 | |||
19 | We could tune this down to a normal spinlock when we rework the | ||
20 | error_state capture and hangcheck code to run from a workqueue. But | ||
21 | we don't have any read in a fastpath that needs forcewake, so I've | ||
22 | decided to not care much about overhead. | ||
23 | |||
24 | This prevents tests/gem_hangcheck_forcewake from i-g-t from killing my | ||
25 | snb on recent kernels - something must have slightly changed the | ||
26 | timings. On previous kernels it only trigger a WARN about the broken | ||
27 | locking. | ||
28 | |||
29 | v2: Drop the previous patch for the register writes. | ||
30 | |||
31 | v3: Improve the commit message per Chris Wilson's suggestions. | ||
32 | |||
33 | Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch> | ||
34 | Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> | ||
35 | Reviewed-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
36 | Signed-off-by: Keith Packard <keithp@keithp.com> | ||
37 | Signed-off-by: Eugeni Dodonov <eugeni.dodonov@intel.com> | ||
38 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
39 | --- | ||
40 | drivers/gpu/drm/i915/i915_debugfs.c | 8 ++++++-- | ||
41 | drivers/gpu/drm/i915/i915_dma.c | 1 + | ||
42 | drivers/gpu/drm/i915/i915_drv.c | 18 ++++++++++++------ | ||
43 | drivers/gpu/drm/i915/i915_drv.h | 10 +++++++--- | ||
44 | 4 files changed, 26 insertions(+), 11 deletions(-) | ||
45 | |||
46 | diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c | ||
47 | index 004b048..b2e3c97 100644 | ||
48 | --- a/drivers/gpu/drm/i915/i915_debugfs.c | ||
49 | +++ b/drivers/gpu/drm/i915/i915_debugfs.c | ||
50 | @@ -1314,9 +1314,13 @@ static int i915_gen6_forcewake_count_info(struct seq_file *m, void *data) | ||
51 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
52 | struct drm_device *dev = node->minor->dev; | ||
53 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
54 | + unsigned forcewake_count; | ||
55 | |||
56 | - seq_printf(m, "forcewake count = %d\n", | ||
57 | - atomic_read(&dev_priv->forcewake_count)); | ||
58 | + spin_lock_irq(&dev_priv->gt_lock); | ||
59 | + forcewake_count = dev_priv->forcewake_count; | ||
60 | + spin_unlock_irq(&dev_priv->gt_lock); | ||
61 | + | ||
62 | + seq_printf(m, "forcewake count = %u\n", forcewake_count); | ||
63 | |||
64 | return 0; | ||
65 | } | ||
66 | diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c | ||
67 | index a9ae374..c4da951 100644 | ||
68 | --- a/drivers/gpu/drm/i915/i915_dma.c | ||
69 | +++ b/drivers/gpu/drm/i915/i915_dma.c | ||
70 | @@ -2042,6 +2042,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | ||
71 | if (!IS_I945G(dev) && !IS_I945GM(dev)) | ||
72 | pci_enable_msi(dev->pdev); | ||
73 | |||
74 | + spin_lock_init(&dev_priv->gt_lock); | ||
75 | spin_lock_init(&dev_priv->irq_lock); | ||
76 | spin_lock_init(&dev_priv->error_lock); | ||
77 | spin_lock_init(&dev_priv->rps_lock); | ||
78 | diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c | ||
79 | index d7c9d99..e2d85a9 100644 | ||
80 | --- a/drivers/gpu/drm/i915/i915_drv.c | ||
81 | +++ b/drivers/gpu/drm/i915/i915_drv.c | ||
82 | @@ -368,11 +368,12 @@ void __gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv) | ||
83 | */ | ||
84 | void gen6_gt_force_wake_get(struct drm_i915_private *dev_priv) | ||
85 | { | ||
86 | - WARN_ON(!mutex_is_locked(&dev_priv->dev->struct_mutex)); | ||
87 | + unsigned long irqflags; | ||
88 | |||
89 | - /* Forcewake is atomic in case we get in here without the lock */ | ||
90 | - if (atomic_add_return(1, &dev_priv->forcewake_count) == 1) | ||
91 | + spin_lock_irqsave(&dev_priv->gt_lock, irqflags); | ||
92 | + if (dev_priv->forcewake_count++ == 0) | ||
93 | dev_priv->display.force_wake_get(dev_priv); | ||
94 | + spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); | ||
95 | } | ||
96 | |||
97 | void __gen6_gt_force_wake_put(struct drm_i915_private *dev_priv) | ||
98 | @@ -392,10 +393,12 @@ void __gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv) | ||
99 | */ | ||
100 | void gen6_gt_force_wake_put(struct drm_i915_private *dev_priv) | ||
101 | { | ||
102 | - WARN_ON(!mutex_is_locked(&dev_priv->dev->struct_mutex)); | ||
103 | + unsigned long irqflags; | ||
104 | |||
105 | - if (atomic_dec_and_test(&dev_priv->forcewake_count)) | ||
106 | + spin_lock_irqsave(&dev_priv->gt_lock, irqflags); | ||
107 | + if (--dev_priv->forcewake_count == 0) | ||
108 | dev_priv->display.force_wake_put(dev_priv); | ||
109 | + spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); | ||
110 | } | ||
111 | |||
112 | void __gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv) | ||
113 | @@ -626,6 +629,7 @@ int i915_reset(struct drm_device *dev, u8 flags) | ||
114 | * need to | ||
115 | */ | ||
116 | bool need_display = true; | ||
117 | + unsigned long irqflags; | ||
118 | int ret; | ||
119 | |||
120 | if (!i915_try_reset) | ||
121 | @@ -644,8 +648,10 @@ int i915_reset(struct drm_device *dev, u8 flags) | ||
122 | case 6: | ||
123 | ret = gen6_do_reset(dev, flags); | ||
124 | /* If reset with a user forcewake, try to restore */ | ||
125 | - if (atomic_read(&dev_priv->forcewake_count)) | ||
126 | + spin_lock_irqsave(&dev_priv->gt_lock, irqflags); | ||
127 | + if (dev_priv->forcewake_count) | ||
128 | dev_priv->display.force_wake_get(dev_priv); | ||
129 | + spin_unlock_irqrestore(&dev_priv->gt_lock, irqflags); | ||
130 | break; | ||
131 | case 5: | ||
132 | ret = ironlake_do_reset(dev, flags); | ||
133 | diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h | ||
134 | index 505af3f..ae294a0 100644 | ||
135 | --- a/drivers/gpu/drm/i915/i915_drv.h | ||
136 | +++ b/drivers/gpu/drm/i915/i915_drv.h | ||
137 | @@ -286,7 +286,13 @@ typedef struct drm_i915_private { | ||
138 | int relative_constants_mode; | ||
139 | |||
140 | void __iomem *regs; | ||
141 | - u32 gt_fifo_count; | ||
142 | + /** gt_fifo_count and the subsequent register write are synchronized | ||
143 | + * with dev->struct_mutex. */ | ||
144 | + unsigned gt_fifo_count; | ||
145 | + /** forcewake_count is protected by gt_lock */ | ||
146 | + unsigned forcewake_count; | ||
147 | + /** gt_lock is also taken in irq contexts. */ | ||
148 | + struct spinlock gt_lock; | ||
149 | |||
150 | struct intel_gmbus { | ||
151 | struct i2c_adapter adapter; | ||
152 | @@ -738,8 +744,6 @@ typedef struct drm_i915_private { | ||
153 | |||
154 | struct drm_property *broadcast_rgb_property; | ||
155 | struct drm_property *force_audio_property; | ||
156 | - | ||
157 | - atomic_t forcewake_count; | ||
158 | } drm_i915_private_t; | ||
159 | |||
160 | enum i915_cache_level { | ||
161 | -- | ||
162 | 1.7.7.4 | ||
163 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0047-eCryptfs-Infinite-loop-due-to-overflow-in-ecryptfs_w.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0047-eCryptfs-Infinite-loop-due-to-overflow-in-ecryptfs_w.patch new file mode 100644 index 00000000..dabc4e58 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0047-eCryptfs-Infinite-loop-due-to-overflow-in-ecryptfs_w.patch | |||
@@ -0,0 +1,51 @@ | |||
1 | From 3d1b7976d3697421e04c86c7a782833c83244694 Mon Sep 17 00:00:00 2001 | ||
2 | From: Li Wang <liwang@nudt.edu.cn> | ||
3 | Date: Thu, 19 Jan 2012 09:44:36 +0800 | ||
4 | Subject: [PATCH 47/87] eCryptfs: Infinite loop due to overflow in | ||
5 | ecryptfs_write() | ||
6 | |||
7 | commit 684a3ff7e69acc7c678d1a1394fe9e757993fd34 upstream. | ||
8 | |||
9 | ecryptfs_write() can enter an infinite loop when truncating a file to a | ||
10 | size larger than 4G. This only happens on architectures where size_t is | ||
11 | represented by 32 bits. | ||
12 | |||
13 | This was caused by a size_t overflow due to it incorrectly being used to | ||
14 | store the result of a calculation which uses potentially large values of | ||
15 | type loff_t. | ||
16 | |||
17 | [tyhicks@canonical.com: rewrite subject and commit message] | ||
18 | Signed-off-by: Li Wang <liwang@nudt.edu.cn> | ||
19 | Signed-off-by: Yunchuan Wen <wenyunchuan@kylinos.com.cn> | ||
20 | Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com> | ||
21 | Signed-off-by: Tyler Hicks <tyhicks@canonical.com> | ||
22 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
23 | --- | ||
24 | fs/ecryptfs/read_write.c | 4 ++-- | ||
25 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
26 | |||
27 | diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c | ||
28 | index 54eb14c..608c1c3 100644 | ||
29 | --- a/fs/ecryptfs/read_write.c | ||
30 | +++ b/fs/ecryptfs/read_write.c | ||
31 | @@ -130,7 +130,7 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset, | ||
32 | pgoff_t ecryptfs_page_idx = (pos >> PAGE_CACHE_SHIFT); | ||
33 | size_t start_offset_in_page = (pos & ~PAGE_CACHE_MASK); | ||
34 | size_t num_bytes = (PAGE_CACHE_SIZE - start_offset_in_page); | ||
35 | - size_t total_remaining_bytes = ((offset + size) - pos); | ||
36 | + loff_t total_remaining_bytes = ((offset + size) - pos); | ||
37 | |||
38 | if (fatal_signal_pending(current)) { | ||
39 | rc = -EINTR; | ||
40 | @@ -141,7 +141,7 @@ int ecryptfs_write(struct inode *ecryptfs_inode, char *data, loff_t offset, | ||
41 | num_bytes = total_remaining_bytes; | ||
42 | if (pos < offset) { | ||
43 | /* remaining zeros to write, up to destination offset */ | ||
44 | - size_t total_remaining_zeros = (offset - pos); | ||
45 | + loff_t total_remaining_zeros = (offset - pos); | ||
46 | |||
47 | if (num_bytes > total_remaining_zeros) | ||
48 | num_bytes = total_remaining_zeros; | ||
49 | -- | ||
50 | 1.7.7.4 | ||
51 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0048-hwmon-w83627ehf-Fix-number-of-fans-for-NCT6776F.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0048-hwmon-w83627ehf-Fix-number-of-fans-for-NCT6776F.patch new file mode 100644 index 00000000..b3da87e3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0048-hwmon-w83627ehf-Fix-number-of-fans-for-NCT6776F.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | From 38c8c07ac7383692d0a4f932f6ac611437ed24ed Mon Sep 17 00:00:00 2001 | ||
2 | From: Guenter Roeck <linux@roeck-us.net> | ||
3 | Date: Fri, 27 Jan 2012 05:43:59 -0800 | ||
4 | Subject: [PATCH 48/87] hwmon: (w83627ehf) Fix number of fans for NCT6776F | ||
5 | |||
6 | commit 585c0fd8216e0c9f98e2434092af7ec0f999522d upstream. | ||
7 | |||
8 | NCT6776F can select fan input pins for fans 3 to 5 with a secondary set of | ||
9 | chip register bits. Check that second set of bits in addition to the first set | ||
10 | to detect if fans 3..5 are monitored. | ||
11 | |||
12 | Signed-off-by: Guenter Roeck <linux@roeck-us.net> | ||
13 | Acked-by: Jean Delvare <khali@linux-fr.org> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/hwmon/w83627ehf.c | 23 ++++++++++++++++++++--- | ||
17 | 1 files changed, 20 insertions(+), 3 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/hwmon/w83627ehf.c b/drivers/hwmon/w83627ehf.c | ||
20 | index 4b57ab6..c25387d 100644 | ||
21 | --- a/drivers/hwmon/w83627ehf.c | ||
22 | +++ b/drivers/hwmon/w83627ehf.c | ||
23 | @@ -1920,9 +1920,26 @@ w83627ehf_check_fan_inputs(const struct w83627ehf_sio_data *sio_data, | ||
24 | fan4min = 0; | ||
25 | fan5pin = 0; | ||
26 | } else if (sio_data->kind == nct6776) { | ||
27 | - fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40); | ||
28 | - fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01); | ||
29 | - fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02); | ||
30 | + bool gpok = superio_inb(sio_data->sioreg, 0x27) & 0x80; | ||
31 | + | ||
32 | + superio_select(sio_data->sioreg, W83627EHF_LD_HWM); | ||
33 | + regval = superio_inb(sio_data->sioreg, SIO_REG_ENABLE); | ||
34 | + | ||
35 | + if (regval & 0x80) | ||
36 | + fan3pin = gpok; | ||
37 | + else | ||
38 | + fan3pin = !(superio_inb(sio_data->sioreg, 0x24) & 0x40); | ||
39 | + | ||
40 | + if (regval & 0x40) | ||
41 | + fan4pin = gpok; | ||
42 | + else | ||
43 | + fan4pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x01); | ||
44 | + | ||
45 | + if (regval & 0x20) | ||
46 | + fan5pin = gpok; | ||
47 | + else | ||
48 | + fan5pin = !!(superio_inb(sio_data->sioreg, 0x1C) & 0x02); | ||
49 | + | ||
50 | fan4min = fan4pin; | ||
51 | } else if (sio_data->kind == w83667hg || sio_data->kind == w83667hg_b) { | ||
52 | fan3pin = 1; | ||
53 | -- | ||
54 | 1.7.7.4 | ||
55 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0049-cifs-Fix-oops-in-session-setup-code-for-null-user-mo.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0049-cifs-Fix-oops-in-session-setup-code-for-null-user-mo.patch new file mode 100644 index 00000000..fab9d8a3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0049-cifs-Fix-oops-in-session-setup-code-for-null-user-mo.patch | |||
@@ -0,0 +1,47 @@ | |||
1 | From 85f2f3e05e8e0deec4fc8b751324f91acb276d21 Mon Sep 17 00:00:00 2001 | ||
2 | From: Shirish Pargaonkar <shirishpargaonkar@gmail.com> | ||
3 | Date: Thu, 2 Feb 2012 15:28:28 -0600 | ||
4 | Subject: [PATCH 49/87] cifs: Fix oops in session setup code for null user | ||
5 | mounts | ||
6 | |||
7 | commit de47a4176c532ef5961b8a46a2d541a3517412d3 upstream. | ||
8 | |||
9 | For null user mounts, do not invoke string length function | ||
10 | during session setup. | ||
11 | |||
12 | Reported-and-Tested-by: Chris Clayton <chris2553@googlemail.com> | ||
13 | Acked-by: Jeff Layton <jlayton@redhat.com> | ||
14 | Signed-off-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com> | ||
15 | Signed-off-by: Steve French <smfrench@gmail.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | fs/cifs/sess.c | 7 +++---- | ||
19 | 1 files changed, 3 insertions(+), 4 deletions(-) | ||
20 | |||
21 | diff --git a/fs/cifs/sess.c b/fs/cifs/sess.c | ||
22 | index 4ec3ee9..2504809 100644 | ||
23 | --- a/fs/cifs/sess.c | ||
24 | +++ b/fs/cifs/sess.c | ||
25 | @@ -246,16 +246,15 @@ static void ascii_ssetup_strings(char **pbcc_area, struct cifs_ses *ses, | ||
26 | /* copy user */ | ||
27 | /* BB what about null user mounts - check that we do this BB */ | ||
28 | /* copy user */ | ||
29 | - if (ses->user_name != NULL) | ||
30 | + if (ses->user_name != NULL) { | ||
31 | strncpy(bcc_ptr, ses->user_name, MAX_USERNAME_SIZE); | ||
32 | + bcc_ptr += strnlen(ses->user_name, MAX_USERNAME_SIZE); | ||
33 | + } | ||
34 | /* else null user mount */ | ||
35 | - | ||
36 | - bcc_ptr += strnlen(ses->user_name, MAX_USERNAME_SIZE); | ||
37 | *bcc_ptr = 0; | ||
38 | bcc_ptr++; /* account for null termination */ | ||
39 | |||
40 | /* copy domain */ | ||
41 | - | ||
42 | if (ses->domainName != NULL) { | ||
43 | strncpy(bcc_ptr, ses->domainName, 256); | ||
44 | bcc_ptr += strnlen(ses->domainName, 256); | ||
45 | -- | ||
46 | 1.7.7.4 | ||
47 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0050-atmel_lcdfb-fix-usage-of-CONTRAST_CTR-in-suspend-res.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0050-atmel_lcdfb-fix-usage-of-CONTRAST_CTR-in-suspend-res.patch new file mode 100644 index 00000000..506fcd3a --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0050-atmel_lcdfb-fix-usage-of-CONTRAST_CTR-in-suspend-res.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From c1a4af09cec0d39604a99ab58e59276c69c4179a Mon Sep 17 00:00:00 2001 | ||
2 | From: Hubert Feurstein <h.feurstein@gmail.com> | ||
3 | Date: Mon, 9 Jan 2012 17:23:57 +0100 | ||
4 | Subject: [PATCH 50/87] atmel_lcdfb: fix usage of CONTRAST_CTR in | ||
5 | suspend/resume | ||
6 | |||
7 | commit 9f1065032ceb7e86c7c9f16bb86518857e88a172 upstream. | ||
8 | |||
9 | An error was existing in the saving of CONTRAST_CTR register | ||
10 | across suspend/resume. | ||
11 | |||
12 | Signed-off-by: Hubert Feurstein <h.feurstein@gmail.com> | ||
13 | Signed-off-by: Nicolas Ferre <nicolas.ferre@atmel.com> | ||
14 | Acked-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> | ||
15 | Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/video/atmel_lcdfb.c | 2 +- | ||
19 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/video/atmel_lcdfb.c b/drivers/video/atmel_lcdfb.c | ||
22 | index 63409c1..e919c70 100644 | ||
23 | --- a/drivers/video/atmel_lcdfb.c | ||
24 | +++ b/drivers/video/atmel_lcdfb.c | ||
25 | @@ -1089,7 +1089,7 @@ static int atmel_lcdfb_suspend(struct platform_device *pdev, pm_message_t mesg) | ||
26 | */ | ||
27 | lcdc_writel(sinfo, ATMEL_LCDC_IDR, ~0UL); | ||
28 | |||
29 | - sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_VAL); | ||
30 | + sinfo->saved_lcdcon = lcdc_readl(sinfo, ATMEL_LCDC_CONTRAST_CTR); | ||
31 | lcdc_writel(sinfo, ATMEL_LCDC_CONTRAST_CTR, 0); | ||
32 | if (sinfo->atmel_lcdfb_power_control) | ||
33 | sinfo->atmel_lcdfb_power_control(0); | ||
34 | -- | ||
35 | 1.7.7.4 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0051-lockdep-bug-Exclude-TAINT_FIRMWARE_WORKAROUND-from-d.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0051-lockdep-bug-Exclude-TAINT_FIRMWARE_WORKAROUND-from-d.patch new file mode 100644 index 00000000..d96ecde5 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0051-lockdep-bug-Exclude-TAINT_FIRMWARE_WORKAROUND-from-d.patch | |||
@@ -0,0 +1,56 @@ | |||
1 | From 1a90d01be282f295186d58b42d8cbac1d5d7edc4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Peter Zijlstra <a.p.zijlstra@chello.nl> | ||
3 | Date: Mon, 14 Nov 2011 13:13:49 +0100 | ||
4 | Subject: [PATCH 51/87] lockdep, bug: Exclude TAINT_FIRMWARE_WORKAROUND from | ||
5 | disabling lockdep | ||
6 | |||
7 | commit df754e6af2f237a6c020c0daff55a1a609338e31 upstream. | ||
8 | |||
9 | It's unlikely that TAINT_FIRMWARE_WORKAROUND causes false | ||
10 | lockdep messages, so do not disable lockdep in that case. | ||
11 | We still want to keep lockdep disabled in the | ||
12 | TAINT_OOT_MODULE case: | ||
13 | |||
14 | - bin-only modules can cause various instabilities in | ||
15 | their and in unrelated kernel code | ||
16 | |||
17 | - they are impossible to debug for kernel developers | ||
18 | |||
19 | - they also typically do not have the copyright license | ||
20 | permission to link to the GPL-ed lockdep code. | ||
21 | |||
22 | Suggested-by: Ben Hutchings <ben@decadent.org.uk> | ||
23 | Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> | ||
24 | Link: http://lkml.kernel.org/n/tip-xopopjjens57r0i13qnyh2yo@git.kernel.org | ||
25 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | ||
26 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
27 | --- | ||
28 | kernel/panic.c | 12 ++++++++++-- | ||
29 | 1 files changed, 10 insertions(+), 2 deletions(-) | ||
30 | |||
31 | diff --git a/kernel/panic.c b/kernel/panic.c | ||
32 | index b2659360..1b83fd8 100644 | ||
33 | --- a/kernel/panic.c | ||
34 | +++ b/kernel/panic.c | ||
35 | @@ -240,8 +240,16 @@ void add_taint(unsigned flag) | ||
36 | * Also we want to keep up lockdep for staging development and | ||
37 | * post-warning case. | ||
38 | */ | ||
39 | - if (flag != TAINT_CRAP && flag != TAINT_WARN && __debug_locks_off()) | ||
40 | - printk(KERN_WARNING "Disabling lock debugging due to kernel taint\n"); | ||
41 | + switch (flag) { | ||
42 | + case TAINT_CRAP: | ||
43 | + case TAINT_WARN: | ||
44 | + case TAINT_FIRMWARE_WORKAROUND: | ||
45 | + break; | ||
46 | + | ||
47 | + default: | ||
48 | + if (__debug_locks_off()) | ||
49 | + printk(KERN_WARNING "Disabling lock debugging due to kernel taint\n"); | ||
50 | + } | ||
51 | |||
52 | set_bit(flag, &tainted_mask); | ||
53 | } | ||
54 | -- | ||
55 | 1.7.7.4 | ||
56 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0052-lockdep-bug-Exclude-TAINT_OOT_MODULE-from-disabling-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0052-lockdep-bug-Exclude-TAINT_OOT_MODULE-from-disabling-.patch new file mode 100644 index 00000000..57df74c3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0052-lockdep-bug-Exclude-TAINT_OOT_MODULE-from-disabling-.patch | |||
@@ -0,0 +1,56 @@ | |||
1 | From 6492a0fb92a35630103cc62a1902018dfef8b46c Mon Sep 17 00:00:00 2001 | ||
2 | From: Ben Hutchings <ben@decadent.org.uk> | ||
3 | Date: Wed, 7 Dec 2011 14:30:58 +0000 | ||
4 | Subject: [PATCH 52/87] lockdep, bug: Exclude TAINT_OOT_MODULE from disabling | ||
5 | lock debugging | ||
6 | |||
7 | commit 9ec84acee1e221d99dc33237bff5e82839d10cc0 upstream. | ||
8 | |||
9 | We do want to allow lock debugging for GPL-compatible modules | ||
10 | that are not (yet) built in-tree. This was disabled as a | ||
11 | side-effect of commit 2449b8ba0745327c5fa49a8d9acffe03b2eded69 | ||
12 | ('module,bug: Add TAINT_OOT_MODULE flag for modules not built | ||
13 | in-tree'). Lock debug warnings now include taint flags, so | ||
14 | kernel developers should still be able to deflect warnings | ||
15 | caused by out-of-tree modules. | ||
16 | |||
17 | The TAINT_PROPRIETARY_MODULE flag for non-GPL-compatible modules | ||
18 | will still disable lock debugging. | ||
19 | |||
20 | Signed-off-by: Ben Hutchings <ben@decadent.org.uk> | ||
21 | Cc: Nick Bowler <nbowler@elliptictech.com> | ||
22 | Cc: Dave Jones <davej@redhat.com> | ||
23 | Cc: Rusty Russell <rusty@rustcorp.com.au> | ||
24 | Cc: Randy Dunlap <rdunlap@xenotime.net> | ||
25 | Cc: Debian kernel maintainers <debian-kernel@lists.debian.org> | ||
26 | Cc: Peter Zijlstra <peterz@infradead.org> | ||
27 | Cc: Alan Cox <alan@linux.intel.com> | ||
28 | Link: http://lkml.kernel.org/r/1323268258.18450.11.camel@deadeye | ||
29 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | kernel/panic.c | 5 +++-- | ||
33 | 1 files changed, 3 insertions(+), 2 deletions(-) | ||
34 | |||
35 | diff --git a/kernel/panic.c b/kernel/panic.c | ||
36 | index 1b83fd8..3458469 100644 | ||
37 | --- a/kernel/panic.c | ||
38 | +++ b/kernel/panic.c | ||
39 | @@ -237,11 +237,12 @@ void add_taint(unsigned flag) | ||
40 | * Can't trust the integrity of the kernel anymore. | ||
41 | * We don't call directly debug_locks_off() because the issue | ||
42 | * is not necessarily serious enough to set oops_in_progress to 1 | ||
43 | - * Also we want to keep up lockdep for staging development and | ||
44 | - * post-warning case. | ||
45 | + * Also we want to keep up lockdep for staging/out-of-tree | ||
46 | + * development and post-warning case. | ||
47 | */ | ||
48 | switch (flag) { | ||
49 | case TAINT_CRAP: | ||
50 | + case TAINT_OOT_MODULE: | ||
51 | case TAINT_WARN: | ||
52 | case TAINT_FIRMWARE_WORKAROUND: | ||
53 | break; | ||
54 | -- | ||
55 | 1.7.7.4 | ||
56 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0053-iscsi-target-Fix-reject-release-handling-in-iscsit_f.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0053-iscsi-target-Fix-reject-release-handling-in-iscsit_f.patch new file mode 100644 index 00000000..1b1175d7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0053-iscsi-target-Fix-reject-release-handling-in-iscsit_f.patch | |||
@@ -0,0 +1,79 @@ | |||
1 | From fa577fc1c4b43933b74efe8d44075ef93f289516 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nicholas Bellinger <nab@linux-iscsi.org> | ||
3 | Date: Mon, 16 Jan 2012 16:04:15 -0800 | ||
4 | Subject: [PATCH 53/87] iscsi-target: Fix reject release handling in | ||
5 | iscsit_free_cmd() | ||
6 | |||
7 | commit c1ce4bd56f2846de55043374598fd929ad3b711b upstream. | ||
8 | |||
9 | This patch addresses a bug where iscsit_free_cmd() was incorrectly calling | ||
10 | iscsit_release_cmd() for ISCSI_OP_REJECT because iscsi_add_reject*() will | ||
11 | overwrite the original iscsi_cmd->iscsi_opcode assignment. This bug was | ||
12 | introduced with the following commit: | ||
13 | |||
14 | commit 0be67f2ed8f577d2c72d917928394c5885fa9134 | ||
15 | Author: Nicholas Bellinger <nab@linux-iscsi.org> | ||
16 | Date: Sun Oct 9 01:48:14 2011 -0700 | ||
17 | |||
18 | iscsi-target: Remove SCF_SE_LUN_CMD flag abuses | ||
19 | |||
20 | and was manifesting itself as list corruption with the following: | ||
21 | |||
22 | [ 131.191092] ------------[ cut here ]------------ | ||
23 | [ 131.191092] WARNING: at lib/list_debug.c:53 __list_del_entry+0x8d/0x98() | ||
24 | [ 131.191092] Hardware name: VMware Virtual Platform | ||
25 | [ 131.191092] list_del corruption. prev->next should be ffff880022d3c100, but was 6b6b6b6b6b6b6b6b | ||
26 | [ 131.191092] Modules linked in: tcm_vhost ib_srpt ib_cm ib_sa ib_mad ib_core tcm_qla2xxx qla2xxx tcm_loop tcm_fc libfc scsi_transport_fc crc32c iscsi_target_mod target_core_stgt scsi_tgt target_core_pscsi target_core_file target_core_iblock target_core_mod configfs ipv6 iscsi_tcp libiscsi_tcp libiscsi scsi_transport_iscsi sr_mod cdrom sd_mod e1000 ata_piix libata mptspi mptscsih mptbase [last unloaded: scsi_wait_scan] | ||
27 | [ 131.191092] Pid: 2250, comm: iscsi_ttx Tainted: G W 3.2.0-rc4+ #42 | ||
28 | [ 131.191092] Call Trace: | ||
29 | [ 131.191092] [<ffffffff8103b553>] warn_slowpath_common+0x80/0x98 | ||
30 | [ 131.191092] [<ffffffff8103b5ff>] warn_slowpath_fmt+0x41/0x43 | ||
31 | [ 131.191092] [<ffffffff811d0279>] __list_del_entry+0x8d/0x98 | ||
32 | [ 131.191092] [<ffffffffa01395c9>] transport_lun_remove_cmd+0x9b/0xb7 [target_core_mod] | ||
33 | [ 131.191092] [<ffffffffa013a55c>] transport_generic_free_cmd+0x5d/0x71 [target_core_mod] | ||
34 | [ 131.191092] [<ffffffffa01a012b>] iscsit_free_cmd+0x1e/0x27 [iscsi_target_mod] | ||
35 | [ 131.191092] [<ffffffffa01a13be>] iscsit_close_connection+0x14d/0x5b2 [iscsi_target_mod] | ||
36 | [ 131.191092] [<ffffffffa0196a0c>] iscsit_take_action_for_connection_exit+0xdb/0xe0 [iscsi_target_mod] | ||
37 | [ 131.191092] [<ffffffffa01a55d4>] iscsi_target_tx_thread+0x15cb/0x1608 [iscsi_target_mod] | ||
38 | [ 131.191092] [<ffffffff8103609a>] ? check_preempt_wakeup+0x121/0x185 | ||
39 | [ 131.191092] [<ffffffff81030801>] ? __dequeue_entity+0x2e/0x33 | ||
40 | [ 131.191092] [<ffffffffa01a4009>] ? iscsit_send_text_rsp+0x25f/0x25f [iscsi_target_mod] | ||
41 | [ 131.191092] [<ffffffffa01a4009>] ? iscsit_send_text_rsp+0x25f/0x25f [iscsi_target_mod] | ||
42 | [ 131.191092] [<ffffffff8138f706>] ? schedule+0x55/0x57 | ||
43 | [ 131.191092] [<ffffffff81056c7d>] kthread+0x7d/0x85 | ||
44 | [ 131.191092] [<ffffffff81399534>] kernel_thread_helper+0x4/0x10 | ||
45 | [ 131.191092] [<ffffffff81056c00>] ? kthread_worker_fn+0x16d/0x16d | ||
46 | [ 131.191092] [<ffffffff81399530>] ? gs_change+0x13/0x13 | ||
47 | |||
48 | Reported-by: <jrepac@yahoo.com> | ||
49 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
50 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
51 | --- | ||
52 | drivers/target/iscsi/iscsi_target_util.c | 11 +++++++++++ | ||
53 | 1 files changed, 11 insertions(+), 0 deletions(-) | ||
54 | |||
55 | diff --git a/drivers/target/iscsi/iscsi_target_util.c b/drivers/target/iscsi/iscsi_target_util.c | ||
56 | index 02348f7..99f2af3 100644 | ||
57 | --- a/drivers/target/iscsi/iscsi_target_util.c | ||
58 | +++ b/drivers/target/iscsi/iscsi_target_util.c | ||
59 | @@ -851,6 +851,17 @@ void iscsit_free_cmd(struct iscsi_cmd *cmd) | ||
60 | case ISCSI_OP_SCSI_TMFUNC: | ||
61 | transport_generic_free_cmd(&cmd->se_cmd, 1); | ||
62 | break; | ||
63 | + case ISCSI_OP_REJECT: | ||
64 | + /* | ||
65 | + * Handle special case for REJECT when iscsi_add_reject*() has | ||
66 | + * overwritten the original iscsi_opcode assignment, and the | ||
67 | + * associated cmd->se_cmd needs to be released. | ||
68 | + */ | ||
69 | + if (cmd->se_cmd.se_tfo != NULL) { | ||
70 | + transport_generic_free_cmd(&cmd->se_cmd, 1); | ||
71 | + break; | ||
72 | + } | ||
73 | + /* Fall-through */ | ||
74 | default: | ||
75 | iscsit_release_cmd(cmd); | ||
76 | break; | ||
77 | -- | ||
78 | 1.7.7.4 | ||
79 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0054-iscsi-target-Fix-double-list_add-with-iscsit_alloc_b.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0054-iscsi-target-Fix-double-list_add-with-iscsit_alloc_b.patch new file mode 100644 index 00000000..159d901e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0054-iscsi-target-Fix-double-list_add-with-iscsit_alloc_b.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From 49f4afd3b15866b16b72691a6060fad041e8f2dc Mon Sep 17 00:00:00 2001 | ||
2 | From: Nicholas Bellinger <nab@linux-iscsi.org> | ||
3 | Date: Mon, 16 Jan 2012 17:11:54 -0800 | ||
4 | Subject: [PATCH 54/87] iscsi-target: Fix double list_add with | ||
5 | iscsit_alloc_buffs reject | ||
6 | |||
7 | commit cd931ee62fd0258fc85c76a7c5499fe85e0f3436 upstream. | ||
8 | |||
9 | This patch fixes a bug where the iscsit_add_reject_from_cmd() call | ||
10 | from a failure to iscsit_alloc_buffs() was incorrectly passing | ||
11 | add_to_conn=1 and causing a double list_add after iscsi_cmd->i_list | ||
12 | had already been added in iscsit_handle_scsi_cmd(). | ||
13 | |||
14 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/target/iscsi/iscsi_target.c | 2 +- | ||
18 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c | ||
21 | index 8599545..3b46e3a 100644 | ||
22 | --- a/drivers/target/iscsi/iscsi_target.c | ||
23 | +++ b/drivers/target/iscsi/iscsi_target.c | ||
24 | @@ -1062,7 +1062,7 @@ attach_cmd: | ||
25 | if (ret < 0) | ||
26 | return iscsit_add_reject_from_cmd( | ||
27 | ISCSI_REASON_BOOKMARK_NO_RESOURCES, | ||
28 | - 1, 1, buf, cmd); | ||
29 | + 1, 0, buf, cmd); | ||
30 | /* | ||
31 | * Check the CmdSN against ExpCmdSN/MaxCmdSN here if | ||
32 | * the Immediate Bit is not set, and no Immediate | ||
33 | -- | ||
34 | 1.7.7.4 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0055-iscsi-target-Fix-discovery-with-INADDR_ANY-and-IN6AD.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0055-iscsi-target-Fix-discovery-with-INADDR_ANY-and-IN6AD.patch new file mode 100644 index 00000000..feb7c2e8 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0055-iscsi-target-Fix-discovery-with-INADDR_ANY-and-IN6AD.patch | |||
@@ -0,0 +1,176 @@ | |||
1 | From 7b88c23d62bcaf794ebd97400869d00f00befcd6 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nicholas Bellinger <nab@linux-iscsi.org> | ||
3 | Date: Mon, 16 Jan 2012 23:33:48 -0800 | ||
4 | Subject: [PATCH 55/87] iscsi-target: Fix discovery with INADDR_ANY and | ||
5 | IN6ADDR_ANY_INIT | ||
6 | |||
7 | commit 2f9bc894c67dbacae5a6a9875818d2a18a918d18 upstream. | ||
8 | |||
9 | This patch addresses a bug with sendtargets discovery where INADDR_ANY (0.0.0.0) | ||
10 | + IN6ADDR_ANY_INIT ([0:0:0:0:0:0:0:0]) network portals where incorrectly being | ||
11 | reported back to initiators instead of the address of the connecting interface. | ||
12 | To address this, save local socket ->getname() output during iscsi login setup, | ||
13 | and makes iscsit_build_sendtargets_response() return these TargetAddress keys | ||
14 | when INADDR_ANY or IN6ADDR_ANY_INIT portals are in use. | ||
15 | |||
16 | Reported-by: Dax Kelson <dkelson@gurulabs.com> | ||
17 | Reported-by: Andy Grover <agrover@redhat.com> | ||
18 | Cc: David S. Miller <davem@davemloft.net> | ||
19 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | drivers/target/iscsi/iscsi_target.c | 37 +++++++++++++++++++++++++--- | ||
23 | drivers/target/iscsi/iscsi_target_core.h | 2 + | ||
24 | drivers/target/iscsi/iscsi_target_login.c | 31 +++++++++++++++++++++--- | ||
25 | 3 files changed, 62 insertions(+), 8 deletions(-) | ||
26 | |||
27 | diff --git a/drivers/target/iscsi/iscsi_target.c b/drivers/target/iscsi/iscsi_target.c | ||
28 | index 3b46e3a..0c1d5c73 100644 | ||
29 | --- a/drivers/target/iscsi/iscsi_target.c | ||
30 | +++ b/drivers/target/iscsi/iscsi_target.c | ||
31 | @@ -3165,6 +3165,30 @@ static int iscsit_send_task_mgt_rsp( | ||
32 | return 0; | ||
33 | } | ||
34 | |||
35 | +static bool iscsit_check_inaddr_any(struct iscsi_np *np) | ||
36 | +{ | ||
37 | + bool ret = false; | ||
38 | + | ||
39 | + if (np->np_sockaddr.ss_family == AF_INET6) { | ||
40 | + const struct sockaddr_in6 sin6 = { | ||
41 | + .sin6_addr = IN6ADDR_ANY_INIT }; | ||
42 | + struct sockaddr_in6 *sock_in6 = | ||
43 | + (struct sockaddr_in6 *)&np->np_sockaddr; | ||
44 | + | ||
45 | + if (!memcmp(sock_in6->sin6_addr.s6_addr, | ||
46 | + sin6.sin6_addr.s6_addr, 16)) | ||
47 | + ret = true; | ||
48 | + } else { | ||
49 | + struct sockaddr_in * sock_in = | ||
50 | + (struct sockaddr_in *)&np->np_sockaddr; | ||
51 | + | ||
52 | + if (sock_in->sin_addr.s_addr == INADDR_ANY) | ||
53 | + ret = true; | ||
54 | + } | ||
55 | + | ||
56 | + return ret; | ||
57 | +} | ||
58 | + | ||
59 | static int iscsit_build_sendtargets_response(struct iscsi_cmd *cmd) | ||
60 | { | ||
61 | char *payload = NULL; | ||
62 | @@ -3214,12 +3238,17 @@ static int iscsit_build_sendtargets_response(struct iscsi_cmd *cmd) | ||
63 | spin_lock(&tpg->tpg_np_lock); | ||
64 | list_for_each_entry(tpg_np, &tpg->tpg_gnp_list, | ||
65 | tpg_np_list) { | ||
66 | + struct iscsi_np *np = tpg_np->tpg_np; | ||
67 | + bool inaddr_any = iscsit_check_inaddr_any(np); | ||
68 | + | ||
69 | len = sprintf(buf, "TargetAddress=" | ||
70 | "%s%s%s:%hu,%hu", | ||
71 | - (tpg_np->tpg_np->np_sockaddr.ss_family == AF_INET6) ? | ||
72 | - "[" : "", tpg_np->tpg_np->np_ip, | ||
73 | - (tpg_np->tpg_np->np_sockaddr.ss_family == AF_INET6) ? | ||
74 | - "]" : "", tpg_np->tpg_np->np_port, | ||
75 | + (np->np_sockaddr.ss_family == AF_INET6) ? | ||
76 | + "[" : "", (inaddr_any == false) ? | ||
77 | + np->np_ip : conn->local_ip, | ||
78 | + (np->np_sockaddr.ss_family == AF_INET6) ? | ||
79 | + "]" : "", (inaddr_any == false) ? | ||
80 | + np->np_port : conn->local_port, | ||
81 | tpg->tpgt); | ||
82 | len += 1; | ||
83 | |||
84 | diff --git a/drivers/target/iscsi/iscsi_target_core.h b/drivers/target/iscsi/iscsi_target_core.h | ||
85 | index f1a02da..7da2d6a 100644 | ||
86 | --- a/drivers/target/iscsi/iscsi_target_core.h | ||
87 | +++ b/drivers/target/iscsi/iscsi_target_core.h | ||
88 | @@ -508,6 +508,7 @@ struct iscsi_conn { | ||
89 | u16 cid; | ||
90 | /* Remote TCP Port */ | ||
91 | u16 login_port; | ||
92 | + u16 local_port; | ||
93 | int net_size; | ||
94 | u32 auth_id; | ||
95 | #define CONNFLAG_SCTP_STRUCT_FILE 0x01 | ||
96 | @@ -527,6 +528,7 @@ struct iscsi_conn { | ||
97 | unsigned char bad_hdr[ISCSI_HDR_LEN]; | ||
98 | #define IPV6_ADDRESS_SPACE 48 | ||
99 | unsigned char login_ip[IPV6_ADDRESS_SPACE]; | ||
100 | + unsigned char local_ip[IPV6_ADDRESS_SPACE]; | ||
101 | int conn_usage_count; | ||
102 | int conn_waiting_on_uc; | ||
103 | atomic_t check_immediate_queue; | ||
104 | diff --git a/drivers/target/iscsi/iscsi_target_login.c b/drivers/target/iscsi/iscsi_target_login.c | ||
105 | index d734bde..bd2adec 100644 | ||
106 | --- a/drivers/target/iscsi/iscsi_target_login.c | ||
107 | +++ b/drivers/target/iscsi/iscsi_target_login.c | ||
108 | @@ -616,8 +616,8 @@ static int iscsi_post_login_handler( | ||
109 | } | ||
110 | |||
111 | pr_debug("iSCSI Login successful on CID: %hu from %s to" | ||
112 | - " %s:%hu,%hu\n", conn->cid, conn->login_ip, np->np_ip, | ||
113 | - np->np_port, tpg->tpgt); | ||
114 | + " %s:%hu,%hu\n", conn->cid, conn->login_ip, | ||
115 | + conn->local_ip, conn->local_port, tpg->tpgt); | ||
116 | |||
117 | list_add_tail(&conn->conn_list, &sess->sess_conn_list); | ||
118 | atomic_inc(&sess->nconn); | ||
119 | @@ -659,7 +659,8 @@ static int iscsi_post_login_handler( | ||
120 | sess->session_state = TARG_SESS_STATE_LOGGED_IN; | ||
121 | |||
122 | pr_debug("iSCSI Login successful on CID: %hu from %s to %s:%hu,%hu\n", | ||
123 | - conn->cid, conn->login_ip, np->np_ip, np->np_port, tpg->tpgt); | ||
124 | + conn->cid, conn->login_ip, conn->local_ip, conn->local_port, | ||
125 | + tpg->tpgt); | ||
126 | |||
127 | spin_lock_bh(&sess->conn_lock); | ||
128 | list_add_tail(&conn->conn_list, &sess->sess_conn_list); | ||
129 | @@ -1019,6 +1020,18 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) | ||
130 | snprintf(conn->login_ip, sizeof(conn->login_ip), "%pI6c", | ||
131 | &sock_in6.sin6_addr.in6_u); | ||
132 | conn->login_port = ntohs(sock_in6.sin6_port); | ||
133 | + | ||
134 | + if (conn->sock->ops->getname(conn->sock, | ||
135 | + (struct sockaddr *)&sock_in6, &err, 0) < 0) { | ||
136 | + pr_err("sock_ops->getname() failed.\n"); | ||
137 | + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, | ||
138 | + ISCSI_LOGIN_STATUS_TARGET_ERROR); | ||
139 | + goto new_sess_out; | ||
140 | + } | ||
141 | + snprintf(conn->local_ip, sizeof(conn->local_ip), "%pI6c", | ||
142 | + &sock_in6.sin6_addr.in6_u); | ||
143 | + conn->local_port = ntohs(sock_in6.sin6_port); | ||
144 | + | ||
145 | } else { | ||
146 | memset(&sock_in, 0, sizeof(struct sockaddr_in)); | ||
147 | |||
148 | @@ -1031,6 +1044,16 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) | ||
149 | } | ||
150 | sprintf(conn->login_ip, "%pI4", &sock_in.sin_addr.s_addr); | ||
151 | conn->login_port = ntohs(sock_in.sin_port); | ||
152 | + | ||
153 | + if (conn->sock->ops->getname(conn->sock, | ||
154 | + (struct sockaddr *)&sock_in, &err, 0) < 0) { | ||
155 | + pr_err("sock_ops->getname() failed.\n"); | ||
156 | + iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR, | ||
157 | + ISCSI_LOGIN_STATUS_TARGET_ERROR); | ||
158 | + goto new_sess_out; | ||
159 | + } | ||
160 | + sprintf(conn->local_ip, "%pI4", &sock_in.sin_addr.s_addr); | ||
161 | + conn->local_port = ntohs(sock_in.sin_port); | ||
162 | } | ||
163 | |||
164 | conn->network_transport = np->np_network_transport; | ||
165 | @@ -1038,7 +1061,7 @@ static int __iscsi_target_login_thread(struct iscsi_np *np) | ||
166 | pr_debug("Received iSCSI login request from %s on %s Network" | ||
167 | " Portal %s:%hu\n", conn->login_ip, | ||
168 | (conn->network_transport == ISCSI_TCP) ? "TCP" : "SCTP", | ||
169 | - np->np_ip, np->np_port); | ||
170 | + conn->local_ip, conn->local_port); | ||
171 | |||
172 | pr_debug("Moving to TARG_CONN_STATE_IN_LOGIN.\n"); | ||
173 | conn->conn_state = TARG_CONN_STATE_IN_LOGIN; | ||
174 | -- | ||
175 | 1.7.7.4 | ||
176 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0056-ASoC-wm_hubs-Fix-routing-of-input-PGAs-to-line-outpu.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0056-ASoC-wm_hubs-Fix-routing-of-input-PGAs-to-line-outpu.patch new file mode 100644 index 00000000..98c88335 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0056-ASoC-wm_hubs-Fix-routing-of-input-PGAs-to-line-outpu.patch | |||
@@ -0,0 +1,46 @@ | |||
1 | From f11e42f5205653968c6496e637b1cd524405a9ec Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
3 | Date: Tue, 31 Jan 2012 11:55:32 +0000 | ||
4 | Subject: [PATCH 56/87] ASoC: wm_hubs: Fix routing of input PGAs to line | ||
5 | output mixer | ||
6 | |||
7 | commit ee76744c51ec342df9822b4a85dbbfc3887b6d60 upstream. | ||
8 | |||
9 | IN1L/R is routed to both line output mixers, we don't route IN1 to LINEOUT1 | ||
10 | and IN2 to LINEOUT2. | ||
11 | |||
12 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | sound/soc/codecs/wm_hubs.c | 8 ++++---- | ||
16 | 1 files changed, 4 insertions(+), 4 deletions(-) | ||
17 | |||
18 | diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c | ||
19 | index 8547191..6ef2283 100644 | ||
20 | --- a/sound/soc/codecs/wm_hubs.c | ||
21 | +++ b/sound/soc/codecs/wm_hubs.c | ||
22 | @@ -587,8 +587,8 @@ SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER1, 0, 1, 0), | ||
23 | }; | ||
24 | |||
25 | static const struct snd_kcontrol_new line2_mix[] = { | ||
26 | -SOC_DAPM_SINGLE("IN2R Switch", WM8993_LINE_MIXER2, 2, 1, 0), | ||
27 | -SOC_DAPM_SINGLE("IN2L Switch", WM8993_LINE_MIXER2, 1, 1, 0), | ||
28 | +SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 2, 1, 0), | ||
29 | +SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 1, 1, 0), | ||
30 | SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), | ||
31 | }; | ||
32 | |||
33 | @@ -846,8 +846,8 @@ static const struct snd_soc_dapm_route lineout1_se_routes[] = { | ||
34 | }; | ||
35 | |||
36 | static const struct snd_soc_dapm_route lineout2_diff_routes[] = { | ||
37 | - { "LINEOUT2 Mixer", "IN2L Switch", "IN2L PGA" }, | ||
38 | - { "LINEOUT2 Mixer", "IN2R Switch", "IN2R PGA" }, | ||
39 | + { "LINEOUT2 Mixer", "IN1L Switch", "IN1L PGA" }, | ||
40 | + { "LINEOUT2 Mixer", "IN1R Switch", "IN1R PGA" }, | ||
41 | { "LINEOUT2 Mixer", "Output Switch", "Right Output PGA" }, | ||
42 | |||
43 | { "LINEOUT2N Driver", NULL, "LINEOUT2 Mixer" }, | ||
44 | -- | ||
45 | 1.7.7.4 | ||
46 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0057-ASoC-wm_hubs-Correct-line-input-to-line-output-2-pat.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0057-ASoC-wm_hubs-Correct-line-input-to-line-output-2-pat.patch new file mode 100644 index 00000000..7a625351 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0057-ASoC-wm_hubs-Correct-line-input-to-line-output-2-pat.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From 520a5189a6745dcd3b61e87562e28d6e8aba12f8 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
3 | Date: Wed, 1 Feb 2012 23:46:58 +0000 | ||
4 | Subject: [PATCH 57/87] ASoC: wm_hubs: Correct line input to line output 2 | ||
5 | paths | ||
6 | |||
7 | commit 43b6cec27e1e50a1de3eff47e66e502f3fe7e66e upstream. | ||
8 | |||
9 | The second line output mixer has the controls for the line input bypasses | ||
10 | in the opposite order. | ||
11 | |||
12 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | sound/soc/codecs/wm_hubs.c | 4 ++-- | ||
16 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
17 | |||
18 | diff --git a/sound/soc/codecs/wm_hubs.c b/sound/soc/codecs/wm_hubs.c | ||
19 | index 6ef2283..3642e06 100644 | ||
20 | --- a/sound/soc/codecs/wm_hubs.c | ||
21 | +++ b/sound/soc/codecs/wm_hubs.c | ||
22 | @@ -587,8 +587,8 @@ SOC_DAPM_SINGLE("Left Output Switch", WM8993_LINE_MIXER1, 0, 1, 0), | ||
23 | }; | ||
24 | |||
25 | static const struct snd_kcontrol_new line2_mix[] = { | ||
26 | -SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 2, 1, 0), | ||
27 | -SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 1, 1, 0), | ||
28 | +SOC_DAPM_SINGLE("IN1L Switch", WM8993_LINE_MIXER2, 2, 1, 0), | ||
29 | +SOC_DAPM_SINGLE("IN1R Switch", WM8993_LINE_MIXER2, 1, 1, 0), | ||
30 | SOC_DAPM_SINGLE("Output Switch", WM8993_LINE_MIXER2, 0, 1, 0), | ||
31 | }; | ||
32 | |||
33 | -- | ||
34 | 1.7.7.4 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0058-ASoC-wm8962-Fix-word-length-configuration.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0058-ASoC-wm8962-Fix-word-length-configuration.patch new file mode 100644 index 00000000..1109c8bd --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0058-ASoC-wm8962-Fix-word-length-configuration.patch | |||
@@ -0,0 +1,38 @@ | |||
1 | From ef7dcc8c0fd35d7fb937d7bc4ac7b883945b3586 Mon Sep 17 00:00:00 2001 | ||
2 | From: Susan Gao <sgao@opensource.wolfsonmicro.com> | ||
3 | Date: Mon, 30 Jan 2012 13:57:04 -0800 | ||
4 | Subject: [PATCH 58/87] ASoC: wm8962: Fix word length configuration | ||
5 | |||
6 | commit 2b6712b19531e22455e7fa18371c5ba9eec76699 upstream. | ||
7 | |||
8 | Signed-off-by: Susan Gao <sgao@opensource.wolfsonmicro.com> | ||
9 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
10 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
11 | --- | ||
12 | sound/soc/codecs/wm8962.c | 6 +++--- | ||
13 | 1 files changed, 3 insertions(+), 3 deletions(-) | ||
14 | |||
15 | diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c | ||
16 | index 53edd9a..d795294 100644 | ||
17 | --- a/sound/soc/codecs/wm8962.c | ||
18 | +++ b/sound/soc/codecs/wm8962.c | ||
19 | @@ -3172,13 +3172,13 @@ static int wm8962_hw_params(struct snd_pcm_substream *substream, | ||
20 | case SNDRV_PCM_FORMAT_S16_LE: | ||
21 | break; | ||
22 | case SNDRV_PCM_FORMAT_S20_3LE: | ||
23 | - aif0 |= 0x40; | ||
24 | + aif0 |= 0x4; | ||
25 | break; | ||
26 | case SNDRV_PCM_FORMAT_S24_LE: | ||
27 | - aif0 |= 0x80; | ||
28 | + aif0 |= 0x8; | ||
29 | break; | ||
30 | case SNDRV_PCM_FORMAT_S32_LE: | ||
31 | - aif0 |= 0xc0; | ||
32 | + aif0 |= 0xc; | ||
33 | break; | ||
34 | default: | ||
35 | return -EINVAL; | ||
36 | -- | ||
37 | 1.7.7.4 | ||
38 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0059-ASoC-wm8994-Enabling-VMID-should-take-a-runtime-PM-r.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0059-ASoC-wm8994-Enabling-VMID-should-take-a-runtime-PM-r.patch new file mode 100644 index 00000000..0c1b50c0 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0059-ASoC-wm8994-Enabling-VMID-should-take-a-runtime-PM-r.patch | |||
@@ -0,0 +1,42 @@ | |||
1 | From e9ee45b83b21448a8e27309456430890b5fa1ff2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
3 | Date: Mon, 6 Feb 2012 12:07:08 +0000 | ||
4 | Subject: [PATCH 59/87] ASoC: wm8994: Enabling VMID should take a runtime PM | ||
5 | reference | ||
6 | |||
7 | commit db966f8abb9ba74f7d5a7230f51572f52c31c4e5 upstream. | ||
8 | |||
9 | We can enable VMID independently of the bias in some use cases so we need | ||
10 | to ensure that the core device is powered up. | ||
11 | |||
12 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | sound/soc/codecs/wm8994.c | 4 ++++ | ||
16 | 1 files changed, 4 insertions(+), 0 deletions(-) | ||
17 | |||
18 | diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c | ||
19 | index d0c545b..a3d6bd8 100644 | ||
20 | --- a/sound/soc/codecs/wm8994.c | ||
21 | +++ b/sound/soc/codecs/wm8994.c | ||
22 | @@ -729,6 +729,8 @@ static void vmid_reference(struct snd_soc_codec *codec) | ||
23 | { | ||
24 | struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); | ||
25 | |||
26 | + pm_runtime_get_sync(codec->dev); | ||
27 | + | ||
28 | wm8994->vmid_refcount++; | ||
29 | |||
30 | dev_dbg(codec->dev, "Referencing VMID, refcount is now %d\n", | ||
31 | @@ -796,6 +798,8 @@ static void vmid_dereference(struct snd_soc_codec *codec) | ||
32 | WM8994_VMID_BUF_ENA | | ||
33 | WM8994_VMID_RAMP_MASK, 0); | ||
34 | } | ||
35 | + | ||
36 | + pm_runtime_put(codec->dev); | ||
37 | } | ||
38 | |||
39 | static int vmid_event(struct snd_soc_dapm_widget *w, | ||
40 | -- | ||
41 | 1.7.7.4 | ||
42 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0060-ASoC-wm8994-Fix-typo-in-VMID-ramp-setting.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0060-ASoC-wm8994-Fix-typo-in-VMID-ramp-setting.patch new file mode 100644 index 00000000..d4b7d717 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0060-ASoC-wm8994-Fix-typo-in-VMID-ramp-setting.patch | |||
@@ -0,0 +1,31 @@ | |||
1 | From a79cee16dfd9206eb087fbd25767c4d8dec0b0c5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
3 | Date: Tue, 7 Feb 2012 17:24:19 +0000 | ||
4 | Subject: [PATCH 60/87] ASoC: wm8994: Fix typo in VMID ramp setting | ||
5 | |||
6 | commit f647e1526fd6c7c8ab720781c40d11e11f930e93 upstream. | ||
7 | |||
8 | The VMID ramp rate is supposed to be 0x3, not 11b. Fix that. | ||
9 | |||
10 | Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> | ||
11 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
12 | --- | ||
13 | sound/soc/codecs/wm8994.c | 2 +- | ||
14 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
15 | |||
16 | diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c | ||
17 | index a3d6bd8..6e502af 100644 | ||
18 | --- a/sound/soc/codecs/wm8994.c | ||
19 | +++ b/sound/soc/codecs/wm8994.c | ||
20 | @@ -744,7 +744,7 @@ static void vmid_reference(struct snd_soc_codec *codec) | ||
21 | WM8994_VMID_RAMP_MASK, | ||
22 | WM8994_STARTUP_BIAS_ENA | | ||
23 | WM8994_VMID_BUF_ENA | | ||
24 | - (0x11 << WM8994_VMID_RAMP_SHIFT)); | ||
25 | + (0x3 << WM8994_VMID_RAMP_SHIFT)); | ||
26 | |||
27 | /* Main bias enable, VMID=2x40k */ | ||
28 | snd_soc_update_bits(codec, WM8994_POWER_MANAGEMENT_1, | ||
29 | -- | ||
30 | 1.7.7.4 | ||
31 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0061-pcmcia-fix-socket-refcount-decrementing-on-each-resu.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0061-pcmcia-fix-socket-refcount-decrementing-on-each-resu.patch new file mode 100644 index 00000000..375aeebf --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0061-pcmcia-fix-socket-refcount-decrementing-on-each-resu.patch | |||
@@ -0,0 +1,179 @@ | |||
1 | From 93636af6098a627a1ddc02f2f265be4a9d337201 Mon Sep 17 00:00:00 2001 | ||
2 | From: Russell King <rmk+kernel@arm.linux.org.uk> | ||
3 | Date: Wed, 8 Feb 2012 17:13:41 -0800 | ||
4 | Subject: [PATCH 61/87] pcmcia: fix socket refcount decrementing on each | ||
5 | resume | ||
6 | |||
7 | commit 025e4ab3db07fcbf62c01e4f30d1012234beb980 upstream. | ||
8 | |||
9 | This fixes a memory-corrupting bug: not only does it cause the warning, | ||
10 | but as a result of dropping the refcount to zero, it causes the | ||
11 | pcmcia_socket0 device structure to be freed while it still has | ||
12 | references, causing slab caches corruption. A fatal oops quickly | ||
13 | follows this warning - often even just a 'dmesg' following the warning | ||
14 | causes the kernel to oops. | ||
15 | |||
16 | While testing suspend/resume on an ARM device with PCMCIA support, and a | ||
17 | CF card inserted, I found that after five suspend and resumes, the | ||
18 | kernel would complain, and shortly die after with slab corruption. | ||
19 | |||
20 | WARNING: at include/linux/kref.h:41 kobject_get+0x28/0x50() | ||
21 | |||
22 | As the message doesn't give a clue about which kobject, and the built-in | ||
23 | debugging in drivers/base/power/main.c happens too late, this was added | ||
24 | right before each get_device(): | ||
25 | |||
26 | printk("%s: %p [%s] %u\n", __func__, dev, kobject_name(&dev->kobj), atomic_read(&dev->kobj.kref.refcount)); | ||
27 | |||
28 | and on the 3rd s2ram cycle, the following behaviour observed: | ||
29 | |||
30 | On the 3rd suspend/resume cycle: | ||
31 | |||
32 | dpm_prepare: c1a0d998 [pcmcia_socket0] 3 | ||
33 | dpm_suspend: c1a0d998 [pcmcia_socket0] 3 | ||
34 | dpm_suspend_noirq: c1a0d998 [pcmcia_socket0] 3 | ||
35 | dpm_resume_noirq: c1a0d998 [pcmcia_socket0] 3 | ||
36 | dpm_resume: c1a0d998 [pcmcia_socket0] 3 | ||
37 | dpm_complete: c1a0d998 [pcmcia_socket0] 2 | ||
38 | |||
39 | 4th: | ||
40 | |||
41 | dpm_prepare: c1a0d998 [pcmcia_socket0] 2 | ||
42 | dpm_suspend: c1a0d998 [pcmcia_socket0] 2 | ||
43 | dpm_suspend_noirq: c1a0d998 [pcmcia_socket0] 2 | ||
44 | dpm_resume_noirq: c1a0d998 [pcmcia_socket0] 2 | ||
45 | dpm_resume: c1a0d998 [pcmcia_socket0] 2 | ||
46 | dpm_complete: c1a0d998 [pcmcia_socket0] 1 | ||
47 | |||
48 | 5th: | ||
49 | |||
50 | dpm_prepare: c1a0d998 [pcmcia_socket0] 1 | ||
51 | dpm_suspend: c1a0d998 [pcmcia_socket0] 1 | ||
52 | dpm_suspend_noirq: c1a0d998 [pcmcia_socket0] 1 | ||
53 | dpm_resume_noirq: c1a0d998 [pcmcia_socket0] 1 | ||
54 | dpm_resume: c1a0d998 [pcmcia_socket0] 1 | ||
55 | dpm_complete: c1a0d998 [pcmcia_socket0] 0 | ||
56 | ------------[ cut here ]------------ | ||
57 | WARNING: at include/linux/kref.h:41 kobject_get+0x28/0x50() | ||
58 | Modules linked in: ucb1x00_core | ||
59 | Backtrace: | ||
60 | [<c0212090>] (dump_backtrace+0x0/0x110) from [<c04799dc>] (dump_stack+0x18/0x1c) | ||
61 | [<c04799c4>] (dump_stack+0x0/0x1c) from [<c021cba0>] (warn_slowpath_common+0x50/0x68) | ||
62 | [<c021cb50>] (warn_slowpath_common+0x0/0x68) from [<c021cbdc>] (warn_slowpath_null+0x24/0x28) | ||
63 | [<c021cbb8>] (warn_slowpath_null+0x0/0x28) from [<c0335374>] (kobject_get+0x28/0x50) | ||
64 | [<c033534c>] (kobject_get+0x0/0x50) from [<c03804f4>] (get_device+0x1c/0x24) | ||
65 | [<c0388c90>] (dpm_complete+0x0/0x1a0) from [<c0389cc0>] (dpm_resume_end+0x1c/0x20) | ||
66 | ... | ||
67 | |||
68 | Looking at commit 7b24e7988263 ("pcmcia: split up central event handler"), | ||
69 | the following change was made to cs.c: | ||
70 | |||
71 | return 0; | ||
72 | } | ||
73 | #endif | ||
74 | - | ||
75 | - send_event(skt, CS_EVENT_PM_RESUME, CS_EVENT_PRI_LOW); | ||
76 | + if (!(skt->state & SOCKET_CARDBUS) && (skt->callback)) | ||
77 | + skt->callback->early_resume(skt); | ||
78 | return 0; | ||
79 | } | ||
80 | |||
81 | And the corresponding change in ds.c is from: | ||
82 | |||
83 | -static int ds_event(struct pcmcia_socket *skt, event_t event, int priority) | ||
84 | -{ | ||
85 | - struct pcmcia_socket *s = pcmcia_get_socket(skt); | ||
86 | ... | ||
87 | - switch (event) { | ||
88 | ... | ||
89 | - case CS_EVENT_PM_RESUME: | ||
90 | - if (verify_cis_cache(skt) != 0) { | ||
91 | - dev_dbg(&skt->dev, "cis mismatch - different card\n"); | ||
92 | - /* first, remove the card */ | ||
93 | - ds_event(skt, CS_EVENT_CARD_REMOVAL, CS_EVENT_PRI_HIGH); | ||
94 | - mutex_lock(&s->ops_mutex); | ||
95 | - destroy_cis_cache(skt); | ||
96 | - kfree(skt->fake_cis); | ||
97 | - skt->fake_cis = NULL; | ||
98 | - s->functions = 0; | ||
99 | - mutex_unlock(&s->ops_mutex); | ||
100 | - /* now, add the new card */ | ||
101 | - ds_event(skt, CS_EVENT_CARD_INSERTION, | ||
102 | - CS_EVENT_PRI_LOW); | ||
103 | - } | ||
104 | - break; | ||
105 | ... | ||
106 | - } | ||
107 | |||
108 | - pcmcia_put_socket(s); | ||
109 | |||
110 | - return 0; | ||
111 | -} /* ds_event */ | ||
112 | |||
113 | to: | ||
114 | |||
115 | +static int pcmcia_bus_early_resume(struct pcmcia_socket *skt) | ||
116 | +{ | ||
117 | + if (!verify_cis_cache(skt)) { | ||
118 | + pcmcia_put_socket(skt); | ||
119 | + return 0; | ||
120 | + } | ||
121 | |||
122 | + dev_dbg(&skt->dev, "cis mismatch - different card\n"); | ||
123 | |||
124 | + /* first, remove the card */ | ||
125 | + pcmcia_bus_remove(skt); | ||
126 | + mutex_lock(&skt->ops_mutex); | ||
127 | + destroy_cis_cache(skt); | ||
128 | + kfree(skt->fake_cis); | ||
129 | + skt->fake_cis = NULL; | ||
130 | + skt->functions = 0; | ||
131 | + mutex_unlock(&skt->ops_mutex); | ||
132 | |||
133 | + /* now, add the new card */ | ||
134 | + pcmcia_bus_add(skt); | ||
135 | + return 0; | ||
136 | +} | ||
137 | |||
138 | As can be seen, the original function called pcmcia_get_socket() and | ||
139 | pcmcia_put_socket() around the guts, whereas the replacement code | ||
140 | calls pcmcia_put_socket() only in one path. This creates an imbalance | ||
141 | in the refcounting. | ||
142 | |||
143 | Testing with pcmcia_put_socket() put removed shows that the bug is gone: | ||
144 | |||
145 | dpm_suspend: c1a10998 [pcmcia_socket0] 5 | ||
146 | dpm_suspend_noirq: c1a10998 [pcmcia_socket0] 5 | ||
147 | dpm_resume_noirq: c1a10998 [pcmcia_socket0] 5 | ||
148 | dpm_resume: c1a10998 [pcmcia_socket0] 5 | ||
149 | dpm_complete: c1a10998 [pcmcia_socket0] 5 | ||
150 | |||
151 | Tested-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
152 | Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk> | ||
153 | Cc: Dominik Brodowski <linux@dominikbrodowski.net> | ||
154 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
155 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
156 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
157 | --- | ||
158 | drivers/pcmcia/ds.c | 4 +--- | ||
159 | 1 files changed, 1 insertions(+), 3 deletions(-) | ||
160 | |||
161 | diff --git a/drivers/pcmcia/ds.c b/drivers/pcmcia/ds.c | ||
162 | index 749c2a1..1932029 100644 | ||
163 | --- a/drivers/pcmcia/ds.c | ||
164 | +++ b/drivers/pcmcia/ds.c | ||
165 | @@ -1269,10 +1269,8 @@ static int pcmcia_bus_add(struct pcmcia_socket *skt) | ||
166 | |||
167 | static int pcmcia_bus_early_resume(struct pcmcia_socket *skt) | ||
168 | { | ||
169 | - if (!verify_cis_cache(skt)) { | ||
170 | - pcmcia_put_socket(skt); | ||
171 | + if (!verify_cis_cache(skt)) | ||
172 | return 0; | ||
173 | - } | ||
174 | |||
175 | dev_dbg(&skt->dev, "cis mismatch - different card\n"); | ||
176 | |||
177 | -- | ||
178 | 1.7.7.4 | ||
179 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0062-ALSA-oxygen-virtuoso-fix-exchanged-L-R-volumes-of-au.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0062-ALSA-oxygen-virtuoso-fix-exchanged-L-R-volumes-of-au.patch new file mode 100644 index 00000000..4bd7da23 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0062-ALSA-oxygen-virtuoso-fix-exchanged-L-R-volumes-of-au.patch | |||
@@ -0,0 +1,67 @@ | |||
1 | From bc7e7c8b2462ed098d18bc54b431341cc69584b2 Mon Sep 17 00:00:00 2001 | ||
2 | From: Clemens Ladisch <clemens@ladisch.de> | ||
3 | Date: Sat, 4 Feb 2012 20:56:47 +0100 | ||
4 | Subject: [PATCH 62/87] ALSA: oxygen, virtuoso: fix exchanged L/R volumes of | ||
5 | aux and CD inputs | ||
6 | |||
7 | commit 2492250e4412c6411324c14ab289629360640b0a upstream. | ||
8 | |||
9 | The driver accidentally exchanged the left/right fields for stereo AC'97 | ||
10 | mixer registers. This affected only the aux and CD inputs because the | ||
11 | line input bypasses the AC'97 codec and the mic input is mono; cards | ||
12 | without AC'97 (Xonar DS/DG/HDAV Slim, HG2PCI, HiFier) were not affected. | ||
13 | |||
14 | Reported-and-tested-by: Abby Cedar <abbycedar@yahoo.com.au> | ||
15 | Signed-off-by: Clemens Ladisch <clemens@ladisch.de> | ||
16 | Signed-off-by: Takashi Iwai <tiwai@suse.de> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | sound/pci/oxygen/oxygen_mixer.c | 25 ++++++++++++++----------- | ||
20 | 1 files changed, 14 insertions(+), 11 deletions(-) | ||
21 | |||
22 | diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c | ||
23 | index 26c7e8b..c0dbb52 100644 | ||
24 | --- a/sound/pci/oxygen/oxygen_mixer.c | ||
25 | +++ b/sound/pci/oxygen/oxygen_mixer.c | ||
26 | @@ -618,9 +618,12 @@ static int ac97_volume_get(struct snd_kcontrol *ctl, | ||
27 | mutex_lock(&chip->mutex); | ||
28 | reg = oxygen_read_ac97(chip, codec, index); | ||
29 | mutex_unlock(&chip->mutex); | ||
30 | - value->value.integer.value[0] = 31 - (reg & 0x1f); | ||
31 | - if (stereo) | ||
32 | - value->value.integer.value[1] = 31 - ((reg >> 8) & 0x1f); | ||
33 | + if (!stereo) { | ||
34 | + value->value.integer.value[0] = 31 - (reg & 0x1f); | ||
35 | + } else { | ||
36 | + value->value.integer.value[0] = 31 - ((reg >> 8) & 0x1f); | ||
37 | + value->value.integer.value[1] = 31 - (reg & 0x1f); | ||
38 | + } | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | @@ -636,14 +639,14 @@ static int ac97_volume_put(struct snd_kcontrol *ctl, | ||
43 | |||
44 | mutex_lock(&chip->mutex); | ||
45 | oldreg = oxygen_read_ac97(chip, codec, index); | ||
46 | - newreg = oldreg; | ||
47 | - newreg = (newreg & ~0x1f) | | ||
48 | - (31 - (value->value.integer.value[0] & 0x1f)); | ||
49 | - if (stereo) | ||
50 | - newreg = (newreg & ~0x1f00) | | ||
51 | - ((31 - (value->value.integer.value[1] & 0x1f)) << 8); | ||
52 | - else | ||
53 | - newreg = (newreg & ~0x1f00) | ((newreg & 0x1f) << 8); | ||
54 | + if (!stereo) { | ||
55 | + newreg = oldreg & ~0x1f; | ||
56 | + newreg |= 31 - (value->value.integer.value[0] & 0x1f); | ||
57 | + } else { | ||
58 | + newreg = oldreg & ~0x1f1f; | ||
59 | + newreg |= (31 - (value->value.integer.value[0] & 0x1f)) << 8; | ||
60 | + newreg |= 31 - (value->value.integer.value[1] & 0x1f); | ||
61 | + } | ||
62 | change = newreg != oldreg; | ||
63 | if (change) | ||
64 | oxygen_write_ac97(chip, codec, index, newreg); | ||
65 | -- | ||
66 | 1.7.7.4 | ||
67 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0063-iommu-amd-Work-around-broken-IVRS-tables.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0063-iommu-amd-Work-around-broken-IVRS-tables.patch new file mode 100644 index 00000000..b3b5969b --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0063-iommu-amd-Work-around-broken-IVRS-tables.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 61c39c6dcc3c7b3278c611a5bdcc135a1e4d825e Mon Sep 17 00:00:00 2001 | ||
2 | From: Joerg Roedel <joerg.roedel@amd.com> | ||
3 | Date: Wed, 18 Jan 2012 14:03:11 +0100 | ||
4 | Subject: [PATCH 63/87] iommu/amd: Work around broken IVRS tables | ||
5 | |||
6 | commit af1be04901e27ce669b4ecde1c953d5c939498f5 upstream. | ||
7 | |||
8 | On some systems the IVRS table does not contain all PCI | ||
9 | devices present in the system. In case a device not present | ||
10 | in the IVRS table is translated by the IOMMU no DMA is | ||
11 | possible from that device by default. | ||
12 | This patch fixes this by removing the DTE entry for every | ||
13 | PCI device present in the system and not covered by IVRS. | ||
14 | |||
15 | Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/iommu/amd_iommu.c | 3 +++ | ||
19 | 1 files changed, 3 insertions(+), 0 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/iommu/amd_iommu.c b/drivers/iommu/amd_iommu.c | ||
22 | index 4ee277a..e0b3e33 100644 | ||
23 | --- a/drivers/iommu/amd_iommu.c | ||
24 | +++ b/drivers/iommu/amd_iommu.c | ||
25 | @@ -2479,6 +2479,9 @@ static unsigned device_dma_ops_init(void) | ||
26 | |||
27 | for_each_pci_dev(pdev) { | ||
28 | if (!check_device(&pdev->dev)) { | ||
29 | + | ||
30 | + iommu_ignore_device(&pdev->dev); | ||
31 | + | ||
32 | unhandled += 1; | ||
33 | continue; | ||
34 | } | ||
35 | -- | ||
36 | 1.7.7.4 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0064-iommu-msm-Fix-error-handling-in-msm_iommu_unmap.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0064-iommu-msm-Fix-error-handling-in-msm_iommu_unmap.patch new file mode 100644 index 00000000..b488d7b9 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0064-iommu-msm-Fix-error-handling-in-msm_iommu_unmap.patch | |||
@@ -0,0 +1,62 @@ | |||
1 | From d7cd8fc525c9322ceb1f1de26d7c6201aef9d842 Mon Sep 17 00:00:00 2001 | ||
2 | From: Joerg Roedel <joerg.roedel@amd.com> | ||
3 | Date: Thu, 26 Jan 2012 18:25:37 +0100 | ||
4 | Subject: [PATCH 64/87] iommu/msm: Fix error handling in msm_iommu_unmap() | ||
5 | |||
6 | commit 05df1f3c2afaef5672627f2b7095f0d4c4dbc3a0 upstream. | ||
7 | |||
8 | Error handling in msm_iommu_unmap() is broken. On some error | ||
9 | conditions retval is set to a non-zero value which causes | ||
10 | the function to return 'len' at the end. This hides the | ||
11 | error from the user. Zero should be returned in those error | ||
12 | cases. | ||
13 | |||
14 | Cc: David Brown <davidb@codeaurora.org> | ||
15 | Cc: Stepan Moskovchenko <stepanm@codeaurora.org> | ||
16 | Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> | ||
17 | Acked-by: David Brown <davidb@codeaurora.org> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/iommu/msm_iommu.c | 7 +------ | ||
21 | 1 files changed, 1 insertions(+), 6 deletions(-) | ||
22 | |||
23 | diff --git a/drivers/iommu/msm_iommu.c b/drivers/iommu/msm_iommu.c | ||
24 | index 5865dd2..a4d134d 100644 | ||
25 | --- a/drivers/iommu/msm_iommu.c | ||
26 | +++ b/drivers/iommu/msm_iommu.c | ||
27 | @@ -481,23 +481,19 @@ static int msm_iommu_unmap(struct iommu_domain *domain, unsigned long va, | ||
28 | |||
29 | priv = domain->priv; | ||
30 | |||
31 | - if (!priv) { | ||
32 | - ret = -ENODEV; | ||
33 | + if (!priv) | ||
34 | goto fail; | ||
35 | - } | ||
36 | |||
37 | fl_table = priv->pgtable; | ||
38 | |||
39 | if (len != SZ_16M && len != SZ_1M && | ||
40 | len != SZ_64K && len != SZ_4K) { | ||
41 | pr_debug("Bad length: %d\n", len); | ||
42 | - ret = -EINVAL; | ||
43 | goto fail; | ||
44 | } | ||
45 | |||
46 | if (!fl_table) { | ||
47 | pr_debug("Null page table\n"); | ||
48 | - ret = -EINVAL; | ||
49 | goto fail; | ||
50 | } | ||
51 | |||
52 | @@ -506,7 +502,6 @@ static int msm_iommu_unmap(struct iommu_domain *domain, unsigned long va, | ||
53 | |||
54 | if (*fl_pte == 0) { | ||
55 | pr_debug("First level PTE is 0\n"); | ||
56 | - ret = -ENODEV; | ||
57 | goto fail; | ||
58 | } | ||
59 | |||
60 | -- | ||
61 | 1.7.7.4 | ||
62 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0065-mm-compaction-check-for-overlapping-nodes-during-iso.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0065-mm-compaction-check-for-overlapping-nodes-during-iso.patch new file mode 100644 index 00000000..1b7e90d7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0065-mm-compaction-check-for-overlapping-nodes-during-iso.patch | |||
@@ -0,0 +1,111 @@ | |||
1 | From a7d2576c858c397282602fe92adf8c8ac9d6a0e0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Mel Gorman <mgorman@suse.de> | ||
3 | Date: Wed, 8 Feb 2012 17:13:38 -0800 | ||
4 | Subject: [PATCH 65/87] mm: compaction: check for overlapping nodes during | ||
5 | isolation for migration | ||
6 | |||
7 | commit dc9086004b3d5db75997a645b3fe08d9138b7ad0 upstream. | ||
8 | |||
9 | When isolating pages for migration, migration starts at the start of a | ||
10 | zone while the free scanner starts at the end of the zone. Migration | ||
11 | avoids entering a new zone by never going beyond the free scanned. | ||
12 | |||
13 | Unfortunately, in very rare cases nodes can overlap. When this happens, | ||
14 | migration isolates pages without the LRU lock held, corrupting lists | ||
15 | which will trigger errors in reclaim or during page free such as in the | ||
16 | following oops | ||
17 | |||
18 | BUG: unable to handle kernel NULL pointer dereference at 0000000000000008 | ||
19 | IP: [<ffffffff810f795c>] free_pcppages_bulk+0xcc/0x450 | ||
20 | PGD 1dda554067 PUD 1e1cb58067 PMD 0 | ||
21 | Oops: 0000 [#1] SMP | ||
22 | CPU 37 | ||
23 | Pid: 17088, comm: memcg_process_s Tainted: G X | ||
24 | RIP: free_pcppages_bulk+0xcc/0x450 | ||
25 | Process memcg_process_s (pid: 17088, threadinfo ffff881c2926e000, task ffff881c2926c0c0) | ||
26 | Call Trace: | ||
27 | free_hot_cold_page+0x17e/0x1f0 | ||
28 | __pagevec_free+0x90/0xb0 | ||
29 | release_pages+0x22a/0x260 | ||
30 | pagevec_lru_move_fn+0xf3/0x110 | ||
31 | putback_lru_page+0x66/0xe0 | ||
32 | unmap_and_move+0x156/0x180 | ||
33 | migrate_pages+0x9e/0x1b0 | ||
34 | compact_zone+0x1f3/0x2f0 | ||
35 | compact_zone_order+0xa2/0xe0 | ||
36 | try_to_compact_pages+0xdf/0x110 | ||
37 | __alloc_pages_direct_compact+0xee/0x1c0 | ||
38 | __alloc_pages_slowpath+0x370/0x830 | ||
39 | __alloc_pages_nodemask+0x1b1/0x1c0 | ||
40 | alloc_pages_vma+0x9b/0x160 | ||
41 | do_huge_pmd_anonymous_page+0x160/0x270 | ||
42 | do_page_fault+0x207/0x4c0 | ||
43 | page_fault+0x25/0x30 | ||
44 | |||
45 | The "X" in the taint flag means that external modules were loaded but but | ||
46 | is unrelated to the bug triggering. The real problem was because the PFN | ||
47 | layout looks like this | ||
48 | |||
49 | Zone PFN ranges: | ||
50 | DMA 0x00000010 -> 0x00001000 | ||
51 | DMA32 0x00001000 -> 0x00100000 | ||
52 | Normal 0x00100000 -> 0x01e80000 | ||
53 | Movable zone start PFN for each node | ||
54 | early_node_map[14] active PFN ranges | ||
55 | 0: 0x00000010 -> 0x0000009b | ||
56 | 0: 0x00000100 -> 0x0007a1ec | ||
57 | 0: 0x0007a354 -> 0x0007a379 | ||
58 | 0: 0x0007f7ff -> 0x0007f800 | ||
59 | 0: 0x00100000 -> 0x00680000 | ||
60 | 1: 0x00680000 -> 0x00e80000 | ||
61 | 0: 0x00e80000 -> 0x01080000 | ||
62 | 1: 0x01080000 -> 0x01280000 | ||
63 | 0: 0x01280000 -> 0x01480000 | ||
64 | 1: 0x01480000 -> 0x01680000 | ||
65 | 0: 0x01680000 -> 0x01880000 | ||
66 | 1: 0x01880000 -> 0x01a80000 | ||
67 | 0: 0x01a80000 -> 0x01c80000 | ||
68 | 1: 0x01c80000 -> 0x01e80000 | ||
69 | |||
70 | The fix is straight-forward. isolate_migratepages() has to make a | ||
71 | similar check to isolate_freepage to ensure that it never isolates pages | ||
72 | from a zone it does not hold the LRU lock for. | ||
73 | |||
74 | This was discovered in a 3.0-based kernel but it affects 3.1.x, 3.2.x | ||
75 | and current mainline. | ||
76 | |||
77 | Signed-off-by: Mel Gorman <mgorman@suse.de> | ||
78 | Acked-by: Michal Nazarewicz <mina86@mina86.com> | ||
79 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
80 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
81 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
82 | --- | ||
83 | mm/compaction.c | 11 ++++++++++- | ||
84 | 1 files changed, 10 insertions(+), 1 deletions(-) | ||
85 | |||
86 | diff --git a/mm/compaction.c b/mm/compaction.c | ||
87 | index edc1e26..8fb8a40 100644 | ||
88 | --- a/mm/compaction.c | ||
89 | +++ b/mm/compaction.c | ||
90 | @@ -330,8 +330,17 @@ static isolate_migrate_t isolate_migratepages(struct zone *zone, | ||
91 | continue; | ||
92 | nr_scanned++; | ||
93 | |||
94 | - /* Get the page and skip if free */ | ||
95 | + /* | ||
96 | + * Get the page and ensure the page is within the same zone. | ||
97 | + * See the comment in isolate_freepages about overlapping | ||
98 | + * nodes. It is deliberate that the new zone lock is not taken | ||
99 | + * as memory compaction should not move pages between nodes. | ||
100 | + */ | ||
101 | page = pfn_to_page(low_pfn); | ||
102 | + if (page_zone(page) != zone) | ||
103 | + continue; | ||
104 | + | ||
105 | + /* Skip if free */ | ||
106 | if (PageBuddy(page)) | ||
107 | continue; | ||
108 | |||
109 | -- | ||
110 | 1.7.7.4 | ||
111 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0066-mm-fix-UP-THP-spin_is_locked-BUGs.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0066-mm-fix-UP-THP-spin_is_locked-BUGs.patch new file mode 100644 index 00000000..42d35253 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0066-mm-fix-UP-THP-spin_is_locked-BUGs.patch | |||
@@ -0,0 +1,63 @@ | |||
1 | From d0a77dc1abbe11f8d14a6cce8632d85ff79f3636 Mon Sep 17 00:00:00 2001 | ||
2 | From: Hugh Dickins <hughd@google.com> | ||
3 | Date: Wed, 8 Feb 2012 17:13:40 -0800 | ||
4 | Subject: [PATCH 66/87] mm: fix UP THP spin_is_locked BUGs | ||
5 | |||
6 | commit b9980cdcf2524c5fe15d8cbae9c97b3ed6385563 upstream. | ||
7 | |||
8 | Fix CONFIG_TRANSPARENT_HUGEPAGE=y CONFIG_SMP=n CONFIG_DEBUG_VM=y | ||
9 | CONFIG_DEBUG_SPINLOCK=n kernel: spin_is_locked() is then always false, | ||
10 | and so triggers some BUGs in Transparent HugePage codepaths. | ||
11 | |||
12 | asm-generic/bug.h mentions this problem, and provides a WARN_ON_SMP(x); | ||
13 | but being too lazy to add VM_BUG_ON_SMP, BUG_ON_SMP, WARN_ON_SMP_ONCE, | ||
14 | VM_WARN_ON_SMP_ONCE, just test NR_CPUS != 1 in the existing VM_BUG_ONs. | ||
15 | |||
16 | Signed-off-by: Hugh Dickins <hughd@google.com> | ||
17 | Cc: Andrea Arcangeli <aarcange@redhat.com> | ||
18 | Signed-off-by: Andrew Morton <akpm@linux-foundation.org> | ||
19 | Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> | ||
20 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
21 | --- | ||
22 | mm/huge_memory.c | 4 ++-- | ||
23 | mm/swap.c | 2 +- | ||
24 | 2 files changed, 3 insertions(+), 3 deletions(-) | ||
25 | |||
26 | diff --git a/mm/huge_memory.c b/mm/huge_memory.c | ||
27 | index 36b3d98..33141f5 100644 | ||
28 | --- a/mm/huge_memory.c | ||
29 | +++ b/mm/huge_memory.c | ||
30 | @@ -2064,7 +2064,7 @@ static void collect_mm_slot(struct mm_slot *mm_slot) | ||
31 | { | ||
32 | struct mm_struct *mm = mm_slot->mm; | ||
33 | |||
34 | - VM_BUG_ON(!spin_is_locked(&khugepaged_mm_lock)); | ||
35 | + VM_BUG_ON(NR_CPUS != 1 && !spin_is_locked(&khugepaged_mm_lock)); | ||
36 | |||
37 | if (khugepaged_test_exit(mm)) { | ||
38 | /* free mm_slot */ | ||
39 | @@ -2094,7 +2094,7 @@ static unsigned int khugepaged_scan_mm_slot(unsigned int pages, | ||
40 | int progress = 0; | ||
41 | |||
42 | VM_BUG_ON(!pages); | ||
43 | - VM_BUG_ON(!spin_is_locked(&khugepaged_mm_lock)); | ||
44 | + VM_BUG_ON(NR_CPUS != 1 && !spin_is_locked(&khugepaged_mm_lock)); | ||
45 | |||
46 | if (khugepaged_scan.mm_slot) | ||
47 | mm_slot = khugepaged_scan.mm_slot; | ||
48 | diff --git a/mm/swap.c b/mm/swap.c | ||
49 | index a91caf7..55b266d 100644 | ||
50 | --- a/mm/swap.c | ||
51 | +++ b/mm/swap.c | ||
52 | @@ -667,7 +667,7 @@ void lru_add_page_tail(struct zone* zone, | ||
53 | VM_BUG_ON(!PageHead(page)); | ||
54 | VM_BUG_ON(PageCompound(page_tail)); | ||
55 | VM_BUG_ON(PageLRU(page_tail)); | ||
56 | - VM_BUG_ON(!spin_is_locked(&zone->lru_lock)); | ||
57 | + VM_BUG_ON(NR_CPUS != 1 && !spin_is_locked(&zone->lru_lock)); | ||
58 | |||
59 | SetPageLRU(page_tail); | ||
60 | |||
61 | -- | ||
62 | 1.7.7.4 | ||
63 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0067-target-Use-correct-preempted-registration-sense-code.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0067-target-Use-correct-preempted-registration-sense-code.patch new file mode 100644 index 00000000..73d28392 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0067-target-Use-correct-preempted-registration-sense-code.patch | |||
@@ -0,0 +1,59 @@ | |||
1 | From 1c7a78d3cf820992a6a67ea90423713fb429907f Mon Sep 17 00:00:00 2001 | ||
2 | From: Marco Sanvido <marco@purestorage.com> | ||
3 | Date: Tue, 3 Jan 2012 17:12:57 -0800 | ||
4 | Subject: [PATCH 67/87] target: Use correct preempted registration sense code | ||
5 | |||
6 | commit 9e08e34e3735ae057eb3834da3570995811b7eb9 upstream. | ||
7 | |||
8 | The comments quote the right parts of the spec: | ||
9 | |||
10 | * d) Establish a unit attention condition for the | ||
11 | * initiator port associated with every I_T nexus | ||
12 | * that lost its registration other than the I_T | ||
13 | * nexus on which the PERSISTENT RESERVE OUT command | ||
14 | * was received, with the additional sense code set | ||
15 | * to REGISTRATIONS PREEMPTED. | ||
16 | |||
17 | and | ||
18 | |||
19 | * e) Establish a unit attention condition for the initiator | ||
20 | * port associated with every I_T nexus that lost its | ||
21 | * persistent reservation and/or registration, with the | ||
22 | * additional sense code set to REGISTRATIONS PREEMPTED; | ||
23 | |||
24 | but the actual code accidentally uses ASCQ_2AH_RESERVATIONS_PREEMPTED | ||
25 | instead of ASCQ_2AH_REGISTRATIONS_PREEMPTED. Fix this. | ||
26 | |||
27 | Signed-off-by: Marco Sanvido <marco@purestorage.com> | ||
28 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
29 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
30 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
31 | --- | ||
32 | drivers/target/target_core_pr.c | 4 ++-- | ||
33 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
34 | |||
35 | diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c | ||
36 | index 95dee70..4911fe9 100644 | ||
37 | --- a/drivers/target/target_core_pr.c | ||
38 | +++ b/drivers/target/target_core_pr.c | ||
39 | @@ -3138,7 +3138,7 @@ static int core_scsi3_pro_preempt( | ||
40 | if (!calling_it_nexus) | ||
41 | core_scsi3_ua_allocate(pr_reg_nacl, | ||
42 | pr_res_mapped_lun, 0x2A, | ||
43 | - ASCQ_2AH_RESERVATIONS_PREEMPTED); | ||
44 | + ASCQ_2AH_REGISTRATIONS_PREEMPTED); | ||
45 | } | ||
46 | spin_unlock(&pr_tmpl->registration_lock); | ||
47 | /* | ||
48 | @@ -3251,7 +3251,7 @@ static int core_scsi3_pro_preempt( | ||
49 | * additional sense code set to REGISTRATIONS PREEMPTED; | ||
50 | */ | ||
51 | core_scsi3_ua_allocate(pr_reg_nacl, pr_res_mapped_lun, 0x2A, | ||
52 | - ASCQ_2AH_RESERVATIONS_PREEMPTED); | ||
53 | + ASCQ_2AH_REGISTRATIONS_PREEMPTED); | ||
54 | } | ||
55 | spin_unlock(&pr_tmpl->registration_lock); | ||
56 | /* | ||
57 | -- | ||
58 | 1.7.7.4 | ||
59 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0068-target-Allow-PERSISTENT-RESERVE-IN-for-non-reservati.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0068-target-Allow-PERSISTENT-RESERVE-IN-for-non-reservati.patch new file mode 100644 index 00000000..83fcdfbf --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0068-target-Allow-PERSISTENT-RESERVE-IN-for-non-reservati.patch | |||
@@ -0,0 +1,35 @@ | |||
1 | From 1348bc5266eb73206b11e675656051201f28949b Mon Sep 17 00:00:00 2001 | ||
2 | From: Marco Sanvido <marco@purestorage.com> | ||
3 | Date: Tue, 3 Jan 2012 17:12:58 -0800 | ||
4 | Subject: [PATCH 68/87] target: Allow PERSISTENT RESERVE IN for | ||
5 | non-reservation holder | ||
6 | |||
7 | commit 6816966a8418b980481b4dced7eddd1796b145e8 upstream. | ||
8 | |||
9 | Initiators that aren't the active reservation holder should be able to | ||
10 | do a PERSISTENT RESERVE IN command in all cases, so add it to the list | ||
11 | of allowed CDBs in core_scsi3_pr_seq_non_holder(). | ||
12 | |||
13 | Signed-off-by: Marco Sanvido <marco@purestorage.com> | ||
14 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
15 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/target/target_core_pr.c | 1 + | ||
19 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/target/target_core_pr.c b/drivers/target/target_core_pr.c | ||
22 | index 4911fe9..9119d92 100644 | ||
23 | --- a/drivers/target/target_core_pr.c | ||
24 | +++ b/drivers/target/target_core_pr.c | ||
25 | @@ -481,6 +481,7 @@ static int core_scsi3_pr_seq_non_holder( | ||
26 | case READ_MEDIA_SERIAL_NUMBER: | ||
27 | case REPORT_LUNS: | ||
28 | case REQUEST_SENSE: | ||
29 | + case PERSISTENT_RESERVE_IN: | ||
30 | ret = 0; /*/ Allowed CDBs */ | ||
31 | break; | ||
32 | default: | ||
33 | -- | ||
34 | 1.7.7.4 | ||
35 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0069-target-Correct-sense-key-for-INVALID-FIELD-IN-PARAME.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0069-target-Correct-sense-key-for-INVALID-FIELD-IN-PARAME.patch new file mode 100644 index 00000000..dbbc8270 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0069-target-Correct-sense-key-for-INVALID-FIELD-IN-PARAME.patch | |||
@@ -0,0 +1,69 @@ | |||
1 | From f4d055fceeb62aca2303fe076d17005a662690a3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Roland Dreier <roland@purestorage.com> | ||
3 | Date: Mon, 9 Jan 2012 17:54:00 -0800 | ||
4 | Subject: [PATCH 69/87] target: Correct sense key for INVALID FIELD IN | ||
5 | {PARAMETER LIST,CDB} | ||
6 | |||
7 | commit 9fbc8909876a2160044e71d376848973b9bfdc3f upstream. | ||
8 | |||
9 | According to SPC-4, the sense key for commands that are failed with | ||
10 | INVALID FIELD IN PARAMETER LIST and INVALID FIELD IN CDB should be | ||
11 | ILLEGAL REQUEST (5h) rather than ABORTED COMMAND (Bh). Without this | ||
12 | patch, a tcm_loop LUN incorrectly gives: | ||
13 | |||
14 | # sg_raw -r 1 -v /dev/sda 3 1 0 0 ff 0 | ||
15 | Sense Information: | ||
16 | Fixed format, current; Sense key: Aborted Command | ||
17 | Additional sense: Invalid field in cdb | ||
18 | Raw sense data (in hex): | ||
19 | 70 00 0b 00 00 00 00 0a 00 00 00 00 24 00 00 00 | ||
20 | 00 00 | ||
21 | |||
22 | While a real SCSI disk gives: | ||
23 | |||
24 | Sense Information: | ||
25 | Fixed format, current; Sense key: Illegal Request | ||
26 | Additional sense: Invalid field in cdb | ||
27 | Raw sense data (in hex): | ||
28 | 70 00 05 00 00 00 00 18 00 00 00 00 24 00 00 00 | ||
29 | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
30 | |||
31 | with the main point being that the real disk gives a sense key of | ||
32 | ILLEGAL REQUEST (5h). | ||
33 | |||
34 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
35 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
36 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
37 | --- | ||
38 | drivers/target/target_core_transport.c | 8 ++++---- | ||
39 | 1 files changed, 4 insertions(+), 4 deletions(-) | ||
40 | |||
41 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c | ||
42 | index e87d0eb..4f99d4c 100644 | ||
43 | --- a/drivers/target/target_core_transport.c | ||
44 | +++ b/drivers/target/target_core_transport.c | ||
45 | @@ -4403,8 +4403,8 @@ int transport_send_check_condition_and_sense( | ||
46 | /* CURRENT ERROR */ | ||
47 | buffer[offset] = 0x70; | ||
48 | buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; | ||
49 | - /* ABORTED COMMAND */ | ||
50 | - buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; | ||
51 | + /* ILLEGAL REQUEST */ | ||
52 | + buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST; | ||
53 | /* INVALID FIELD IN CDB */ | ||
54 | buffer[offset+SPC_ASC_KEY_OFFSET] = 0x24; | ||
55 | break; | ||
56 | @@ -4412,8 +4412,8 @@ int transport_send_check_condition_and_sense( | ||
57 | /* CURRENT ERROR */ | ||
58 | buffer[offset] = 0x70; | ||
59 | buffer[offset+SPC_ADD_SENSE_LEN_OFFSET] = 10; | ||
60 | - /* ABORTED COMMAND */ | ||
61 | - buffer[offset+SPC_SENSE_KEY_OFFSET] = ABORTED_COMMAND; | ||
62 | + /* ILLEGAL REQUEST */ | ||
63 | + buffer[offset+SPC_SENSE_KEY_OFFSET] = ILLEGAL_REQUEST; | ||
64 | /* INVALID FIELD IN PARAMETER LIST */ | ||
65 | buffer[offset+SPC_ASC_KEY_OFFSET] = 0x26; | ||
66 | break; | ||
67 | -- | ||
68 | 1.7.7.4 | ||
69 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0070-target-Add-workaround-for-zero-length-control-CDB-ha.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0070-target-Add-workaround-for-zero-length-control-CDB-ha.patch new file mode 100644 index 00000000..5eabdb97 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0070-target-Add-workaround-for-zero-length-control-CDB-ha.patch | |||
@@ -0,0 +1,62 @@ | |||
1 | From f467de45d956d46c692fd6a2331f296e9e872aba Mon Sep 17 00:00:00 2001 | ||
2 | From: Nicholas Bellinger <nab@linux-iscsi.org> | ||
3 | Date: Fri, 13 Jan 2012 12:01:34 -0800 | ||
4 | Subject: [PATCH 70/87] target: Add workaround for zero-length control CDB | ||
5 | handling | ||
6 | |||
7 | commit 91ec1d3535b2acf12c599045cc19ad9be3c6a47b upstream. | ||
8 | |||
9 | This patch adds a work-around for handling zero allocation length | ||
10 | control CDBs (type SCF_SCSI_CONTROL_SG_IO_CDB) that was causing an | ||
11 | OOPs with the following raw calls: | ||
12 | |||
13 | # sg_raw -v /dev/sdd 3 0 0 0 0 0 | ||
14 | # sg_raw -v /dev/sdd 0x1a 0 1 0 0 0 | ||
15 | |||
16 | This patch will follow existing zero-length handling for data I/O | ||
17 | and silently return with GOOD status. This addresses the zero length | ||
18 | issue, but the proper long-term resolution for handling arbitary | ||
19 | allocation lengths will be to refactor out data-phase handling in | ||
20 | individual CDB emulation logic within target_core_cdb.c | ||
21 | |||
22 | Reported-by: Roland Dreier <roland@purestorage.com> | ||
23 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/target/target_core_transport.c | 13 +++++++++++++ | ||
27 | 1 files changed, 13 insertions(+), 0 deletions(-) | ||
28 | |||
29 | diff --git a/drivers/target/target_core_transport.c b/drivers/target/target_core_transport.c | ||
30 | index 4f99d4c..861628e 100644 | ||
31 | --- a/drivers/target/target_core_transport.c | ||
32 | +++ b/drivers/target/target_core_transport.c | ||
33 | @@ -3701,6 +3701,11 @@ transport_allocate_control_task(struct se_cmd *cmd) | ||
34 | struct se_task *task; | ||
35 | unsigned long flags; | ||
36 | |||
37 | + /* Workaround for handling zero-length control CDBs */ | ||
38 | + if ((cmd->se_cmd_flags & SCF_SCSI_CONTROL_SG_IO_CDB) && | ||
39 | + !cmd->data_length) | ||
40 | + return 0; | ||
41 | + | ||
42 | task = transport_generic_get_task(cmd, cmd->data_direction); | ||
43 | if (!task) | ||
44 | return -ENOMEM; | ||
45 | @@ -3772,6 +3777,14 @@ int transport_generic_new_cmd(struct se_cmd *cmd) | ||
46 | else if (!task_cdbs && (cmd->se_cmd_flags & SCF_SCSI_DATA_SG_IO_CDB)) { | ||
47 | cmd->t_state = TRANSPORT_COMPLETE; | ||
48 | atomic_set(&cmd->t_transport_active, 1); | ||
49 | + | ||
50 | + if (cmd->t_task_cdb[0] == REQUEST_SENSE) { | ||
51 | + u8 ua_asc = 0, ua_ascq = 0; | ||
52 | + | ||
53 | + core_scsi3_ua_clear_for_request_sense(cmd, | ||
54 | + &ua_asc, &ua_ascq); | ||
55 | + } | ||
56 | + | ||
57 | INIT_WORK(&cmd->work, target_complete_ok_work); | ||
58 | queue_work(target_completion_wq, &cmd->work); | ||
59 | return 0; | ||
60 | -- | ||
61 | 1.7.7.4 | ||
62 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0071-target-Return-correct-ASC-for-unimplemented-VPD-page.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0071-target-Return-correct-ASC-for-unimplemented-VPD-page.patch new file mode 100644 index 00000000..3f9aff20 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0071-target-Return-correct-ASC-for-unimplemented-VPD-page.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 0e14d6b67d73aba29df97b9619e97e249a882cbe Mon Sep 17 00:00:00 2001 | ||
2 | From: Roland Dreier <roland@purestorage.com> | ||
3 | Date: Tue, 17 Jan 2012 18:00:56 -0800 | ||
4 | Subject: [PATCH 71/87] target: Return correct ASC for unimplemented VPD pages | ||
5 | |||
6 | commit bb1acb2ee038a6c13ee99e0b9fb44dacb4a9de84 upstream. | ||
7 | |||
8 | My draft of SPC-4 says: | ||
9 | |||
10 | If the device server does not implement the requested vital product | ||
11 | data page, then the command shall be terminated with CHECK CONDITION | ||
12 | status, with the sense key set to ILLEGAL REQUEST, and the | ||
13 | additional sense code set to INVALID FIELD IN CDB. | ||
14 | |||
15 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
16 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | drivers/target/target_core_cdb.c | 2 +- | ||
20 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
21 | |||
22 | diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c | ||
23 | index 2e8c1be..24991f3 100644 | ||
24 | --- a/drivers/target/target_core_cdb.c | ||
25 | +++ b/drivers/target/target_core_cdb.c | ||
26 | @@ -732,7 +732,7 @@ int target_emulate_inquiry(struct se_task *task) | ||
27 | } | ||
28 | |||
29 | pr_err("Unknown VPD Code: 0x%02x\n", cdb[2]); | ||
30 | - cmd->scsi_sense_reason = TCM_UNSUPPORTED_SCSI_OPCODE; | ||
31 | + cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; | ||
32 | ret = -EINVAL; | ||
33 | |||
34 | out_unmap: | ||
35 | -- | ||
36 | 1.7.7.4 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0072-target-Fail-INQUIRY-commands-with-EVPD-0-but-PAGE-CO.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0072-target-Fail-INQUIRY-commands-with-EVPD-0-but-PAGE-CO.patch new file mode 100644 index 00000000..cd102dfc --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0072-target-Fail-INQUIRY-commands-with-EVPD-0-but-PAGE-CO.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | From 95db7f1f8dee58ba87842ecd5b93e7c2884e0637 Mon Sep 17 00:00:00 2001 | ||
2 | From: Roland Dreier <roland@purestorage.com> | ||
3 | Date: Tue, 17 Jan 2012 18:00:57 -0800 | ||
4 | Subject: [PATCH 72/87] target: Fail INQUIRY commands with EVPD==0 but PAGE | ||
5 | CODE!=0 | ||
6 | |||
7 | commit bf0053550aebe56f3bb5dd793e9de69238b5b945 upstream. | ||
8 | |||
9 | My draft of SPC-4 says: | ||
10 | |||
11 | If the PAGE CODE field is not set to zero when the EVPD bit is set | ||
12 | to zero, the command shall be terminated with CHECK CONDITION | ||
13 | status, with the sense key set to ILLEGAL REQUEST, and the | ||
14 | additional sense code set to INVALID FIELD IN CDB. | ||
15 | |||
16 | Signed-off-by: Roland Dreier <roland@purestorage.com> | ||
17 | Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org> | ||
18 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
19 | --- | ||
20 | drivers/target/target_core_cdb.c | 7 +++++++ | ||
21 | 1 files changed, 7 insertions(+), 0 deletions(-) | ||
22 | |||
23 | diff --git a/drivers/target/target_core_cdb.c b/drivers/target/target_core_cdb.c | ||
24 | index 24991f3..251e48f 100644 | ||
25 | --- a/drivers/target/target_core_cdb.c | ||
26 | +++ b/drivers/target/target_core_cdb.c | ||
27 | @@ -701,6 +701,13 @@ int target_emulate_inquiry(struct se_task *task) | ||
28 | int p, ret; | ||
29 | |||
30 | if (!(cdb[1] & 0x1)) { | ||
31 | + if (cdb[2]) { | ||
32 | + pr_err("INQUIRY with EVPD==0 but PAGE CODE=%02x\n", | ||
33 | + cdb[2]); | ||
34 | + cmd->scsi_sense_reason = TCM_INVALID_CDB_FIELD; | ||
35 | + return -EINVAL; | ||
36 | + } | ||
37 | + | ||
38 | ret = target_emulate_inquiry_std(cmd); | ||
39 | goto out; | ||
40 | } | ||
41 | -- | ||
42 | 1.7.7.4 | ||
43 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0073-Staging-asus_oled-fix-image-processing.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0073-Staging-asus_oled-fix-image-processing.patch new file mode 100644 index 00000000..d6490da4 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0073-Staging-asus_oled-fix-image-processing.patch | |||
@@ -0,0 +1,59 @@ | |||
1 | From d352f16e64cab162bb25e4f6af298f1a9d1d9e12 Mon Sep 17 00:00:00 2001 | ||
2 | From: Pekka Paalanen <pq@iki.fi> | ||
3 | Date: Sun, 22 Jan 2012 16:33:46 +0200 | ||
4 | Subject: [PATCH 73/87] Staging: asus_oled: fix image processing | ||
5 | |||
6 | commit 635032cb397b396241372fa0ff36ae758e658b23 upstream. | ||
7 | |||
8 | Programming an image was broken, because odev->buf_offs was not advanced | ||
9 | for val == 0 in append_values(). This regression was introduced in: | ||
10 | |||
11 | commit 1ff12a4aa354bed093a0240d5e6347b1e27601bc | ||
12 | Author: Kevin A. Granade <kevin.granade@gmail.com> | ||
13 | Date: Sat Sep 5 01:03:39 2009 -0500 | ||
14 | |||
15 | Staging: asus_oled: Cleaned up checkpatch issues. | ||
16 | |||
17 | Fix the image processing by special-casing val == 0. | ||
18 | |||
19 | I have tested this change on an Asus G50V laptop only. | ||
20 | |||
21 | Cc: Jakub Schmidtke <sjakub@gmail.com> | ||
22 | Cc: Kevin A. Granade <kevin.granade@gmail.com> | ||
23 | Signed-off-by: Pekka Paalanen <pq@iki.fi> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/staging/asus_oled/asus_oled.c | 10 ++++++++-- | ||
27 | 1 files changed, 8 insertions(+), 2 deletions(-) | ||
28 | |||
29 | diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c | ||
30 | index 7bb7da7..8894bd5 100644 | ||
31 | --- a/drivers/staging/asus_oled/asus_oled.c | ||
32 | +++ b/drivers/staging/asus_oled/asus_oled.c | ||
33 | @@ -355,7 +355,14 @@ static void send_data(struct asus_oled_dev *odev) | ||
34 | |||
35 | static int append_values(struct asus_oled_dev *odev, uint8_t val, size_t count) | ||
36 | { | ||
37 | - while (count-- > 0 && val) { | ||
38 | + odev->last_val = val; | ||
39 | + | ||
40 | + if (val == 0) { | ||
41 | + odev->buf_offs += count; | ||
42 | + return 0; | ||
43 | + } | ||
44 | + | ||
45 | + while (count-- > 0) { | ||
46 | size_t x = odev->buf_offs % odev->width; | ||
47 | size_t y = odev->buf_offs / odev->width; | ||
48 | size_t i; | ||
49 | @@ -406,7 +413,6 @@ static int append_values(struct asus_oled_dev *odev, uint8_t val, size_t count) | ||
50 | ; | ||
51 | } | ||
52 | |||
53 | - odev->last_val = val; | ||
54 | odev->buf_offs++; | ||
55 | } | ||
56 | |||
57 | -- | ||
58 | 1.7.7.4 | ||
59 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0074-Staging-asus_oled-fix-NULL-ptr-crash-on-unloading.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0074-Staging-asus_oled-fix-NULL-ptr-crash-on-unloading.patch new file mode 100644 index 00000000..43ee220d --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0074-Staging-asus_oled-fix-NULL-ptr-crash-on-unloading.patch | |||
@@ -0,0 +1,59 @@ | |||
1 | From ebb468b38e343782b3271343766d92978f8436a7 Mon Sep 17 00:00:00 2001 | ||
2 | From: Pekka Paalanen <pq@iki.fi> | ||
3 | Date: Sun, 22 Jan 2012 16:33:47 +0200 | ||
4 | Subject: [PATCH 74/87] Staging: asus_oled: fix NULL-ptr crash on unloading | ||
5 | |||
6 | commit 3589e74595a4332ebf77b5ed006f3c6686071ecd upstream. | ||
7 | |||
8 | Asus_oled triggers the following bug on module unloading: | ||
9 | |||
10 | usbcore: deregistering interface driver asus-oled | ||
11 | BUG: unable to handle kernel NULL pointer dereference at 0000000000000038 | ||
12 | IP: [<ffffffff8111292b>] sysfs_delete_link+0x30/0x66 | ||
13 | |||
14 | Call Trace: | ||
15 | [<ffffffff81225373>] device_remove_class_symlinks+0x6b/0x70 | ||
16 | [<ffffffff812256a8>] device_del+0x9f/0x1ab | ||
17 | [<ffffffff812257c5>] device_unregister+0x11/0x1e | ||
18 | [<ffffffffa000cb82>] asus_oled_disconnect+0x4f/0x9e [asus_oled] | ||
19 | [<ffffffff81277430>] usb_unbind_interface+0x54/0x103 | ||
20 | [<ffffffff812276c4>] __device_release_driver+0xa2/0xeb | ||
21 | [<ffffffff81227794>] driver_detach+0x87/0xad | ||
22 | [<ffffffff812269e9>] bus_remove_driver+0x91/0xc1 | ||
23 | [<ffffffff81227fb4>] driver_unregister+0x66/0x6e | ||
24 | [<ffffffff812771ed>] usb_deregister+0xbb/0xc4 | ||
25 | [<ffffffffa000ce87>] asus_oled_exit+0x2f/0x31 [asus_oled] | ||
26 | [<ffffffff81068365>] sys_delete_module+0x1b8/0x21b | ||
27 | [<ffffffff810ae3de>] ? do_munmap+0x2ef/0x313 | ||
28 | [<ffffffff813699bb>] system_call_fastpath+0x16/0x1b | ||
29 | |||
30 | This is due to an incorrect destruction sequence in asus_oled_exit(). | ||
31 | |||
32 | Fix the order, fixes the bug. Tested on an Asus G50V laptop only. | ||
33 | |||
34 | Cc: Jakub Schmidtke <sjakub@gmail.com> | ||
35 | Signed-off-by: Pekka Paalanen <pq@iki.fi> | ||
36 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
37 | --- | ||
38 | drivers/staging/asus_oled/asus_oled.c | 3 +-- | ||
39 | 1 files changed, 1 insertions(+), 2 deletions(-) | ||
40 | |||
41 | diff --git a/drivers/staging/asus_oled/asus_oled.c b/drivers/staging/asus_oled/asus_oled.c | ||
42 | index 8894bd5..63bafbb 100644 | ||
43 | --- a/drivers/staging/asus_oled/asus_oled.c | ||
44 | +++ b/drivers/staging/asus_oled/asus_oled.c | ||
45 | @@ -811,10 +811,9 @@ error: | ||
46 | |||
47 | static void __exit asus_oled_exit(void) | ||
48 | { | ||
49 | + usb_deregister(&oled_driver); | ||
50 | class_remove_file(oled_class, &class_attr_version.attr); | ||
51 | class_destroy(oled_class); | ||
52 | - | ||
53 | - usb_deregister(&oled_driver); | ||
54 | } | ||
55 | |||
56 | module_init(asus_oled_init); | ||
57 | -- | ||
58 | 1.7.7.4 | ||
59 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0075-staging-r8712u-Add-new-Sitecom-UsB-ID.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0075-staging-r8712u-Add-new-Sitecom-UsB-ID.patch new file mode 100644 index 00000000..67a862d0 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0075-staging-r8712u-Add-new-Sitecom-UsB-ID.patch | |||
@@ -0,0 +1,32 @@ | |||
1 | From 1cbce5d4added4defb84dc19acab3efc86b1e979 Mon Sep 17 00:00:00 2001 | ||
2 | From: Larry Finger <Larry.Finger@lwfinger.net> | ||
3 | Date: Sat, 7 Jan 2012 10:07:03 -0600 | ||
4 | Subject: [PATCH 75/87] staging: r8712u: Add new Sitecom UsB ID | ||
5 | |||
6 | commit 1793bf1deddc8ce25dc41925d5dbe64536c841b6 upstream. | ||
7 | |||
8 | Add USB ID for SITECOM WLA-1000 V1 001 WLAN | ||
9 | |||
10 | Reported-and-tested-by: Roland Gruber <post@rolandgruber.de> | ||
11 | Reported-and-tested-by: Dario Lucia <dario.lucia@gmail.com> | ||
12 | Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/staging/rtl8712/usb_intf.c | 1 + | ||
16 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
17 | |||
18 | diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c | ||
19 | index 5385da2..8de0c80 100644 | ||
20 | --- a/drivers/staging/rtl8712/usb_intf.c | ||
21 | +++ b/drivers/staging/rtl8712/usb_intf.c | ||
22 | @@ -89,6 +89,7 @@ static struct usb_device_id rtl871x_usb_id_tbl[] = { | ||
23 | {USB_DEVICE(0x0DF6, 0x0045)}, | ||
24 | {USB_DEVICE(0x0DF6, 0x0059)}, /* 11n mode disable */ | ||
25 | {USB_DEVICE(0x0DF6, 0x004B)}, | ||
26 | + {USB_DEVICE(0x0DF6, 0x005B)}, | ||
27 | {USB_DEVICE(0x0DF6, 0x005D)}, | ||
28 | {USB_DEVICE(0x0DF6, 0x0063)}, | ||
29 | /* Sweex */ | ||
30 | -- | ||
31 | 1.7.7.4 | ||
32 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0076-staging-r8712u-Use-asynchronous-firmware-loading.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0076-staging-r8712u-Use-asynchronous-firmware-loading.patch new file mode 100644 index 00000000..7cfd04b7 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0076-staging-r8712u-Use-asynchronous-firmware-loading.patch | |||
@@ -0,0 +1,285 @@ | |||
1 | From bc5d453eab4506cb52397db8830d1070904265a4 Mon Sep 17 00:00:00 2001 | ||
2 | From: Larry Finger <Larry.Finger@lwfinger.net> | ||
3 | Date: Sun, 5 Feb 2012 21:12:26 -0600 | ||
4 | Subject: [PATCH 76/87] staging: r8712u: Use asynchronous firmware loading | ||
5 | |||
6 | commit 8c213fa59199f9673d66970d6940fa093186642f upstream. | ||
7 | |||
8 | In https://bugs.archlinux.org/task/27996, failure of driver r8712u is | ||
9 | reported, with a timeout during module loading due to synchronous loading | ||
10 | of the firmware. The code now uses request_firmware_nowait(). | ||
11 | |||
12 | Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/staging/rtl8712/drv_types.h | 7 ++++ | ||
16 | drivers/staging/rtl8712/hal_init.c | 62 +++++++++++++++++++++++---------- | ||
17 | drivers/staging/rtl8712/os_intfs.c | 14 ++++++-- | ||
18 | drivers/staging/rtl8712/rtl8712_hal.h | 1 + | ||
19 | drivers/staging/rtl8712/usb_intf.c | 9 +++-- | ||
20 | 5 files changed, 68 insertions(+), 25 deletions(-) | ||
21 | |||
22 | diff --git a/drivers/staging/rtl8712/drv_types.h b/drivers/staging/rtl8712/drv_types.h | ||
23 | index 9b5d771..ed85b44 100644 | ||
24 | --- a/drivers/staging/rtl8712/drv_types.h | ||
25 | +++ b/drivers/staging/rtl8712/drv_types.h | ||
26 | @@ -37,6 +37,8 @@ struct _adapter; | ||
27 | #include "wlan_bssdef.h" | ||
28 | #include "rtl8712_spec.h" | ||
29 | #include "rtl8712_hal.h" | ||
30 | +#include <linux/mutex.h> | ||
31 | +#include <linux/completion.h> | ||
32 | |||
33 | enum _NIC_VERSION { | ||
34 | RTL8711_NIC, | ||
35 | @@ -168,6 +170,7 @@ struct _adapter { | ||
36 | s32 bSurpriseRemoved; | ||
37 | u32 IsrContent; | ||
38 | u32 ImrContent; | ||
39 | + bool fw_found; | ||
40 | u8 EepromAddressSize; | ||
41 | u8 hw_init_completed; | ||
42 | struct task_struct *cmdThread; | ||
43 | @@ -184,6 +187,10 @@ struct _adapter { | ||
44 | _workitem wkFilterRxFF0; | ||
45 | u8 blnEnableRxFF0Filter; | ||
46 | spinlock_t lockRxFF0Filter; | ||
47 | + const struct firmware *fw; | ||
48 | + struct usb_interface *pusb_intf; | ||
49 | + struct mutex mutex_start; | ||
50 | + struct completion rtl8712_fw_ready; | ||
51 | }; | ||
52 | |||
53 | static inline u8 *myid(struct eeprom_priv *peepriv) | ||
54 | diff --git a/drivers/staging/rtl8712/hal_init.c b/drivers/staging/rtl8712/hal_init.c | ||
55 | index d0029aa..cc893c0 100644 | ||
56 | --- a/drivers/staging/rtl8712/hal_init.c | ||
57 | +++ b/drivers/staging/rtl8712/hal_init.c | ||
58 | @@ -42,29 +42,56 @@ | ||
59 | #define FWBUFF_ALIGN_SZ 512 | ||
60 | #define MAX_DUMP_FWSZ 49152 /*default = 49152 (48k)*/ | ||
61 | |||
62 | -static u32 rtl871x_open_fw(struct _adapter *padapter, void **pphfwfile_hdl, | ||
63 | - const u8 **ppmappedfw) | ||
64 | +static void rtl871x_load_fw_cb(const struct firmware *firmware, void *context) | ||
65 | { | ||
66 | + struct _adapter *padapter = context; | ||
67 | + | ||
68 | + complete(&padapter->rtl8712_fw_ready); | ||
69 | + if (!firmware) { | ||
70 | + struct usb_device *udev = padapter->dvobjpriv.pusbdev; | ||
71 | + struct usb_interface *pusb_intf = padapter->pusb_intf; | ||
72 | + printk(KERN_ERR "r8712u: Firmware request failed\n"); | ||
73 | + padapter->fw_found = false; | ||
74 | + usb_put_dev(udev); | ||
75 | + usb_set_intfdata(pusb_intf, NULL); | ||
76 | + return; | ||
77 | + } | ||
78 | + padapter->fw = firmware; | ||
79 | + padapter->fw_found = true; | ||
80 | + /* firmware available - start netdev */ | ||
81 | + register_netdev(padapter->pnetdev); | ||
82 | +} | ||
83 | + | ||
84 | +static const char firmware_file[] = "rtlwifi/rtl8712u.bin"; | ||
85 | + | ||
86 | +int rtl871x_load_fw(struct _adapter *padapter) | ||
87 | +{ | ||
88 | + struct device *dev = &padapter->dvobjpriv.pusbdev->dev; | ||
89 | int rc; | ||
90 | - const char firmware_file[] = "rtlwifi/rtl8712u.bin"; | ||
91 | - const struct firmware **praw = (const struct firmware **) | ||
92 | - (pphfwfile_hdl); | ||
93 | - struct dvobj_priv *pdvobjpriv = (struct dvobj_priv *) | ||
94 | - (&padapter->dvobjpriv); | ||
95 | - struct usb_device *pusbdev = pdvobjpriv->pusbdev; | ||
96 | |||
97 | + init_completion(&padapter->rtl8712_fw_ready); | ||
98 | printk(KERN_INFO "r8712u: Loading firmware from \"%s\"\n", | ||
99 | firmware_file); | ||
100 | - rc = request_firmware(praw, firmware_file, &pusbdev->dev); | ||
101 | - if (rc < 0) { | ||
102 | - printk(KERN_ERR "r8712u: Unable to load firmware\n"); | ||
103 | - printk(KERN_ERR "r8712u: Install latest linux-firmware\n"); | ||
104 | + rc = request_firmware_nowait(THIS_MODULE, 1, firmware_file, dev, | ||
105 | + GFP_KERNEL, padapter, rtl871x_load_fw_cb); | ||
106 | + if (rc) | ||
107 | + printk(KERN_ERR "r8712u: Firmware request error %d\n", rc); | ||
108 | + return rc; | ||
109 | +} | ||
110 | +MODULE_FIRMWARE("rtlwifi/rtl8712u.bin"); | ||
111 | + | ||
112 | +static u32 rtl871x_open_fw(struct _adapter *padapter, const u8 **ppmappedfw) | ||
113 | +{ | ||
114 | + const struct firmware **praw = &padapter->fw; | ||
115 | + | ||
116 | + if (padapter->fw->size > 200000) { | ||
117 | + printk(KERN_ERR "r8172u: Badfw->size of %d\n", | ||
118 | + (int)padapter->fw->size); | ||
119 | return 0; | ||
120 | } | ||
121 | *ppmappedfw = (u8 *)((*praw)->data); | ||
122 | return (*praw)->size; | ||
123 | } | ||
124 | -MODULE_FIRMWARE("rtlwifi/rtl8712u.bin"); | ||
125 | |||
126 | static void fill_fwpriv(struct _adapter *padapter, struct fw_priv *pfwpriv) | ||
127 | { | ||
128 | @@ -142,18 +169,17 @@ static u8 rtl8712_dl_fw(struct _adapter *padapter) | ||
129 | uint dump_imem_sz, imem_sz, dump_emem_sz, emem_sz; /* max = 49152; */ | ||
130 | struct fw_hdr fwhdr; | ||
131 | u32 ulfilelength; /* FW file size */ | ||
132 | - void *phfwfile_hdl = NULL; | ||
133 | const u8 *pmappedfw = NULL; | ||
134 | u8 *ptmpchar = NULL, *ppayload, *ptr; | ||
135 | struct tx_desc *ptx_desc; | ||
136 | u32 txdscp_sz = sizeof(struct tx_desc); | ||
137 | u8 ret = _FAIL; | ||
138 | |||
139 | - ulfilelength = rtl871x_open_fw(padapter, &phfwfile_hdl, &pmappedfw); | ||
140 | + ulfilelength = rtl871x_open_fw(padapter, &pmappedfw); | ||
141 | if (pmappedfw && (ulfilelength > 0)) { | ||
142 | update_fwhdr(&fwhdr, pmappedfw); | ||
143 | if (chk_fwhdr(&fwhdr, ulfilelength) == _FAIL) | ||
144 | - goto firmware_rel; | ||
145 | + return ret; | ||
146 | fill_fwpriv(padapter, &fwhdr.fwpriv); | ||
147 | /* firmware check ok */ | ||
148 | maxlen = (fwhdr.img_IMEM_size > fwhdr.img_SRAM_size) ? | ||
149 | @@ -161,7 +187,7 @@ static u8 rtl8712_dl_fw(struct _adapter *padapter) | ||
150 | maxlen += txdscp_sz; | ||
151 | ptmpchar = _malloc(maxlen + FWBUFF_ALIGN_SZ); | ||
152 | if (ptmpchar == NULL) | ||
153 | - goto firmware_rel; | ||
154 | + return ret; | ||
155 | |||
156 | ptx_desc = (struct tx_desc *)(ptmpchar + FWBUFF_ALIGN_SZ - | ||
157 | ((addr_t)(ptmpchar) & (FWBUFF_ALIGN_SZ - 1))); | ||
158 | @@ -297,8 +323,6 @@ static u8 rtl8712_dl_fw(struct _adapter *padapter) | ||
159 | |||
160 | exit_fail: | ||
161 | kfree(ptmpchar); | ||
162 | -firmware_rel: | ||
163 | - release_firmware((struct firmware *)phfwfile_hdl); | ||
164 | return ret; | ||
165 | } | ||
166 | |||
167 | diff --git a/drivers/staging/rtl8712/os_intfs.c b/drivers/staging/rtl8712/os_intfs.c | ||
168 | index 9a75c6d..98a3d68 100644 | ||
169 | --- a/drivers/staging/rtl8712/os_intfs.c | ||
170 | +++ b/drivers/staging/rtl8712/os_intfs.c | ||
171 | @@ -31,6 +31,7 @@ | ||
172 | #include <linux/module.h> | ||
173 | #include <linux/init.h> | ||
174 | #include <linux/kthread.h> | ||
175 | +#include <linux/firmware.h> | ||
176 | #include "osdep_service.h" | ||
177 | #include "drv_types.h" | ||
178 | #include "xmit_osdep.h" | ||
179 | @@ -264,12 +265,12 @@ static void start_drv_timers(struct _adapter *padapter) | ||
180 | void r8712_stop_drv_timers(struct _adapter *padapter) | ||
181 | { | ||
182 | _cancel_timer_ex(&padapter->mlmepriv.assoc_timer); | ||
183 | - _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl. | ||
184 | - sitesurvey_ctrl_timer); | ||
185 | _cancel_timer_ex(&padapter->securitypriv.tkip_timer); | ||
186 | _cancel_timer_ex(&padapter->mlmepriv.scan_to_timer); | ||
187 | _cancel_timer_ex(&padapter->mlmepriv.dhcp_timer); | ||
188 | _cancel_timer_ex(&padapter->mlmepriv.wdg_timer); | ||
189 | + _cancel_timer_ex(&padapter->mlmepriv.sitesurveyctrl. | ||
190 | + sitesurvey_ctrl_timer); | ||
191 | } | ||
192 | |||
193 | static u8 init_default_value(struct _adapter *padapter) | ||
194 | @@ -347,7 +348,8 @@ u8 r8712_free_drv_sw(struct _adapter *padapter) | ||
195 | r8712_free_mlme_priv(&padapter->mlmepriv); | ||
196 | r8712_free_io_queue(padapter); | ||
197 | _free_xmit_priv(&padapter->xmitpriv); | ||
198 | - _r8712_free_sta_priv(&padapter->stapriv); | ||
199 | + if (padapter->fw_found) | ||
200 | + _r8712_free_sta_priv(&padapter->stapriv); | ||
201 | _r8712_free_recv_priv(&padapter->recvpriv); | ||
202 | mp871xdeinit(padapter); | ||
203 | if (pnetdev) | ||
204 | @@ -388,6 +390,7 @@ static int netdev_open(struct net_device *pnetdev) | ||
205 | { | ||
206 | struct _adapter *padapter = (struct _adapter *)netdev_priv(pnetdev); | ||
207 | |||
208 | + mutex_lock(&padapter->mutex_start); | ||
209 | if (padapter->bup == false) { | ||
210 | padapter->bDriverStopped = false; | ||
211 | padapter->bSurpriseRemoved = false; | ||
212 | @@ -435,11 +438,13 @@ static int netdev_open(struct net_device *pnetdev) | ||
213 | /* start driver mlme relation timer */ | ||
214 | start_drv_timers(padapter); | ||
215 | padapter->ledpriv.LedControlHandler(padapter, LED_CTL_NO_LINK); | ||
216 | + mutex_unlock(&padapter->mutex_start); | ||
217 | return 0; | ||
218 | netdev_open_error: | ||
219 | padapter->bup = false; | ||
220 | netif_carrier_off(pnetdev); | ||
221 | netif_stop_queue(pnetdev); | ||
222 | + mutex_unlock(&padapter->mutex_start); | ||
223 | return -1; | ||
224 | } | ||
225 | |||
226 | @@ -473,6 +478,9 @@ static int netdev_close(struct net_device *pnetdev) | ||
227 | r8712_free_network_queue(padapter); | ||
228 | /* The interface is no longer Up: */ | ||
229 | padapter->bup = false; | ||
230 | + release_firmware(padapter->fw); | ||
231 | + /* never exit with a firmware callback pending */ | ||
232 | + wait_for_completion(&padapter->rtl8712_fw_ready); | ||
233 | return 0; | ||
234 | } | ||
235 | |||
236 | diff --git a/drivers/staging/rtl8712/rtl8712_hal.h b/drivers/staging/rtl8712/rtl8712_hal.h | ||
237 | index 665e718..d19865a 100644 | ||
238 | --- a/drivers/staging/rtl8712/rtl8712_hal.h | ||
239 | +++ b/drivers/staging/rtl8712/rtl8712_hal.h | ||
240 | @@ -145,5 +145,6 @@ struct hal_priv { | ||
241 | }; | ||
242 | |||
243 | uint rtl8712_hal_init(struct _adapter *padapter); | ||
244 | +int rtl871x_load_fw(struct _adapter *padapter); | ||
245 | |||
246 | #endif | ||
247 | diff --git a/drivers/staging/rtl8712/usb_intf.c b/drivers/staging/rtl8712/usb_intf.c | ||
248 | index 8de0c80..9bade18 100644 | ||
249 | --- a/drivers/staging/rtl8712/usb_intf.c | ||
250 | +++ b/drivers/staging/rtl8712/usb_intf.c | ||
251 | @@ -390,6 +390,7 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf, | ||
252 | pdvobjpriv = &padapter->dvobjpriv; | ||
253 | pdvobjpriv->padapter = padapter; | ||
254 | padapter->dvobjpriv.pusbdev = udev; | ||
255 | + padapter->pusb_intf = pusb_intf; | ||
256 | usb_set_intfdata(pusb_intf, pnetdev); | ||
257 | SET_NETDEV_DEV(pnetdev, &pusb_intf->dev); | ||
258 | /* step 2. */ | ||
259 | @@ -596,10 +597,11 @@ static int r871xu_drv_init(struct usb_interface *pusb_intf, | ||
260 | "%pM\n", mac); | ||
261 | memcpy(pnetdev->dev_addr, mac, ETH_ALEN); | ||
262 | } | ||
263 | - /* step 6. Tell the network stack we exist */ | ||
264 | - if (register_netdev(pnetdev) != 0) | ||
265 | + /* step 6. Load the firmware asynchronously */ | ||
266 | + if (rtl871x_load_fw(padapter)) | ||
267 | goto error; | ||
268 | spin_lock_init(&padapter->lockRxFF0Filter); | ||
269 | + mutex_init(&padapter->mutex_start); | ||
270 | return 0; | ||
271 | error: | ||
272 | usb_put_dev(udev); | ||
273 | @@ -630,7 +632,8 @@ static void r871xu_dev_remove(struct usb_interface *pusb_intf) | ||
274 | flush_scheduled_work(); | ||
275 | udelay(1); | ||
276 | /*Stop driver mlme relation timer */ | ||
277 | - r8712_stop_drv_timers(padapter); | ||
278 | + if (padapter->fw_found) | ||
279 | + r8712_stop_drv_timers(padapter); | ||
280 | r871x_dev_unload(padapter); | ||
281 | r8712_free_drv_sw(padapter); | ||
282 | } | ||
283 | -- | ||
284 | 1.7.7.4 | ||
285 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0077-usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0077-usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch new file mode 100644 index 00000000..98855bb8 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0077-usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch | |||
@@ -0,0 +1,37 @@ | |||
1 | From 915cf0ec84e35d10f00166d3c9b64b12e605c792 Mon Sep 17 00:00:00 2001 | ||
2 | From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
3 | Date: Tue, 31 Jan 2012 16:43:50 -0800 | ||
4 | Subject: [PATCH 77/87] usb: ch9.h: usb_endpoint_maxp() uses __le16_to_cpu() | ||
5 | |||
6 | commit 9c0a835a9d9aed41bcf9c287f5069133a6e2a87b upstream. | ||
7 | |||
8 | The usb/ch9.h will be installed to /usr/include/linux, | ||
9 | and be used from user space. | ||
10 | But le16_to_cpu() is only defined for kernel code. | ||
11 | Without this patch, user space compile will be broken. | ||
12 | Special thanks to Stefan Becker | ||
13 | |||
14 | Reported-by: Stefan Becker <chemobejk@gmail.com> | ||
15 | Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | ||
16 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
18 | --- | ||
19 | include/linux/usb/ch9.h | 2 +- | ||
20 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
21 | |||
22 | diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h | ||
23 | index 61b2905..3b6f628 100644 | ||
24 | --- a/include/linux/usb/ch9.h | ||
25 | +++ b/include/linux/usb/ch9.h | ||
26 | @@ -589,7 +589,7 @@ static inline int usb_endpoint_is_isoc_out( | ||
27 | */ | ||
28 | static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd) | ||
29 | { | ||
30 | - return le16_to_cpu(epd->wMaxPacketSize); | ||
31 | + return __le16_to_cpu(epd->wMaxPacketSize); | ||
32 | } | ||
33 | |||
34 | /*-------------------------------------------------------------------------*/ | ||
35 | -- | ||
36 | 1.7.7.4 | ||
37 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0078-usb-gadget-zero-fix-bug-in-loopback-autoresume-handl.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0078-usb-gadget-zero-fix-bug-in-loopback-autoresume-handl.patch new file mode 100644 index 00000000..e43e5dc4 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0078-usb-gadget-zero-fix-bug-in-loopback-autoresume-handl.patch | |||
@@ -0,0 +1,36 @@ | |||
1 | From d99aad98ef32d6615cef9f91aa213b8484cb4083 Mon Sep 17 00:00:00 2001 | ||
2 | From: Timo Juhani Lindfors <timo.lindfors@iki.fi> | ||
3 | Date: Sun, 29 Jan 2012 16:12:13 +0200 | ||
4 | Subject: [PATCH 78/87] usb: gadget: zero: fix bug in loopback autoresume | ||
5 | handling | ||
6 | |||
7 | commit 683da59d7b8ae04891636d4b59893cd4e9b0b7e5 upstream. | ||
8 | |||
9 | ab943a2e125b (USB: gadget: gadget zero uses new suspend/resume hooks) | ||
10 | introduced a copy-paste error where f_loopback.c writes to a variable | ||
11 | declared in f_sourcesink.c. This prevents one from creating gadgets | ||
12 | that only have a loopback function. | ||
13 | |||
14 | Signed-off-by: Timo Juhani Lindfors <timo.lindfors@iki.fi> | ||
15 | Signed-off-by: Felipe Balbi <balbi@ti.com> | ||
16 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
17 | --- | ||
18 | drivers/usb/gadget/f_loopback.c | 2 +- | ||
19 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
20 | |||
21 | diff --git a/drivers/usb/gadget/f_loopback.c b/drivers/usb/gadget/f_loopback.c | ||
22 | index 6d87f28..2c0cd82 100644 | ||
23 | --- a/drivers/usb/gadget/f_loopback.c | ||
24 | +++ b/drivers/usb/gadget/f_loopback.c | ||
25 | @@ -418,7 +418,7 @@ int __init loopback_add(struct usb_composite_dev *cdev, bool autoresume) | ||
26 | |||
27 | /* support autoresume for remote wakeup testing */ | ||
28 | if (autoresume) | ||
29 | - sourcesink_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; | ||
30 | + loopback_driver.bmAttributes |= USB_CONFIG_ATT_WAKEUP; | ||
31 | |||
32 | /* support OTG systems */ | ||
33 | if (gadget_is_otg(cdev->gadget)) { | ||
34 | -- | ||
35 | 1.7.7.4 | ||
36 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0079-usb-Skip-PCI-USB-quirk-handling-for-Netlogic-XLP.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0079-usb-Skip-PCI-USB-quirk-handling-for-Netlogic-XLP.patch new file mode 100644 index 00000000..d9b862f1 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0079-usb-Skip-PCI-USB-quirk-handling-for-Netlogic-XLP.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From 0bbd5d1b0a768b0b5761643b601422dfe78fd9c5 Mon Sep 17 00:00:00 2001 | ||
2 | From: Jayachandran C <jayachandranc@netlogicmicro.com> | ||
3 | Date: Fri, 27 Jan 2012 20:27:32 +0530 | ||
4 | Subject: [PATCH 79/87] usb: Skip PCI USB quirk handling for Netlogic XLP | ||
5 | |||
6 | commit e4436a7c17ac2b5e138f93f83a541cba9b311685 upstream. | ||
7 | |||
8 | The Netlogic XLP SoC's on-chip USB controller appears as a PCI | ||
9 | USB device, but does not need the EHCI/OHCI handoff done in | ||
10 | usb/host/pci-quirks.c. | ||
11 | |||
12 | The pci-quirks.c is enabled for all vendors and devices, and is | ||
13 | enabled if USB and PCI are configured. | ||
14 | |||
15 | If we do not skip the qurik handling on XLP, the readb() call in | ||
16 | ehci_bios_handoff() will cause a crash since byte access is not | ||
17 | supported for EHCI registers in XLP. | ||
18 | |||
19 | Signed-off-by: Jayachandran C <jayachandranc@netlogicmicro.com> | ||
20 | Acked-by: Alan Stern <stern@rowland.harvard.edu> | ||
21 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
22 | --- | ||
23 | drivers/usb/host/pci-quirks.c | 6 ++++++ | ||
24 | 1 files changed, 6 insertions(+), 0 deletions(-) | ||
25 | |||
26 | diff --git a/drivers/usb/host/pci-quirks.c b/drivers/usb/host/pci-quirks.c | ||
27 | index caf8742..ac53a66 100644 | ||
28 | --- a/drivers/usb/host/pci-quirks.c | ||
29 | +++ b/drivers/usb/host/pci-quirks.c | ||
30 | @@ -867,6 +867,12 @@ hc_init: | ||
31 | |||
32 | static void __devinit quirk_usb_early_handoff(struct pci_dev *pdev) | ||
33 | { | ||
34 | + /* Skip Netlogic mips SoC's internal PCI USB controller. | ||
35 | + * This device does not need/support EHCI/OHCI handoff | ||
36 | + */ | ||
37 | + if (pdev->vendor == 0x184e) /* vendor Netlogic */ | ||
38 | + return; | ||
39 | + | ||
40 | if (pdev->class == PCI_CLASS_SERIAL_USB_UHCI) | ||
41 | quirk_usb_handoff_uhci(pdev); | ||
42 | else if (pdev->class == PCI_CLASS_SERIAL_USB_OHCI) | ||
43 | -- | ||
44 | 1.7.7.4 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0080-USB-usbserial-add-new-PID-number-0xa951-to-the-ftdi-.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0080-USB-usbserial-add-new-PID-number-0xa951-to-the-ftdi-.patch new file mode 100644 index 00000000..48d275f3 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0080-USB-usbserial-add-new-PID-number-0xa951-to-the-ftdi-.patch | |||
@@ -0,0 +1,45 @@ | |||
1 | From 294913e9df10298b440f3c8ee1df4b2d02c06f49 Mon Sep 17 00:00:00 2001 | ||
2 | From: Milan Kocian <milon@wq.cz> | ||
3 | Date: Fri, 3 Feb 2012 14:28:00 +0100 | ||
4 | Subject: [PATCH 80/87] USB: usbserial: add new PID number (0xa951) to the | ||
5 | ftdi driver | ||
6 | |||
7 | commit 90451e6973a5da155c6f315a409ca0a8d3ce6b76 upstream. | ||
8 | |||
9 | Signed-off-by: Milan Kocian <milon@wq.cz> | ||
10 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
11 | --- | ||
12 | drivers/usb/serial/ftdi_sio.c | 1 + | ||
13 | drivers/usb/serial/ftdi_sio_ids.h | 7 +++++++ | ||
14 | 2 files changed, 8 insertions(+), 0 deletions(-) | ||
15 | |||
16 | diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | ||
17 | index 058b92c..f030471 100644 | ||
18 | --- a/drivers/usb/serial/ftdi_sio.c | ||
19 | +++ b/drivers/usb/serial/ftdi_sio.c | ||
20 | @@ -839,6 +839,7 @@ static struct usb_device_id id_table_combined [] = { | ||
21 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LOGBOOKML_PID) }, | ||
22 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_LS_LOGBOOK_PID) }, | ||
23 | { USB_DEVICE(FTDI_VID, FTDI_SCIENCESCOPE_HS_LOGBOOK_PID) }, | ||
24 | + { USB_DEVICE(FTDI_VID, FTDI_CINTERION_MC55I_PID) }, | ||
25 | { USB_DEVICE(FTDI_VID, FTDI_DOTEC_PID) }, | ||
26 | { USB_DEVICE(QIHARDWARE_VID, MILKYMISTONE_JTAGSERIAL_PID), | ||
27 | .driver_info = (kernel_ulong_t)&ftdi_jtag_quirk }, | ||
28 | diff --git a/drivers/usb/serial/ftdi_sio_ids.h b/drivers/usb/serial/ftdi_sio_ids.h | ||
29 | index 76d4f31..4eb7715 100644 | ||
30 | --- a/drivers/usb/serial/ftdi_sio_ids.h | ||
31 | +++ b/drivers/usb/serial/ftdi_sio_ids.h | ||
32 | @@ -1187,3 +1187,10 @@ | ||
33 | */ | ||
34 | /* ZigBee controller */ | ||
35 | #define FTDI_RF_R106 0x8A28 | ||
36 | + | ||
37 | +/* | ||
38 | + * Product: HCP HIT GPRS modem | ||
39 | + * Manufacturer: HCP d.o.o. | ||
40 | + * ATI command output: Cinterion MC55i | ||
41 | + */ | ||
42 | +#define FTDI_CINTERION_MC55I_PID 0xA951 | ||
43 | -- | ||
44 | 1.7.7.4 | ||
45 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0081-USB-add-new-zte-3g-dongle-s-pid-to-option.c.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0081-USB-add-new-zte-3g-dongle-s-pid-to-option.c.patch new file mode 100644 index 00000000..82b86721 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0081-USB-add-new-zte-3g-dongle-s-pid-to-option.c.patch | |||
@@ -0,0 +1,181 @@ | |||
1 | From 57c313f71800dd93f10f6641650dcb4167fa8739 Mon Sep 17 00:00:00 2001 | ||
2 | From: Rui li <li.rui27@zte.com.cn> | ||
3 | Date: Tue, 31 Jan 2012 15:27:33 +0800 | ||
4 | Subject: [PATCH 81/87] USB: add new zte 3g-dongle's pid to option.c | ||
5 | |||
6 | commit 1608ea5f4b5d6262cd6e808839491cfb2a67405a upstream. | ||
7 | |||
8 | As ZTE have and will use more pid for new products this year, | ||
9 | so we need to add some new zte 3g-dongle's pid on option.c , | ||
10 | and delete one pid 0x0154 because it use for mass-storage port. | ||
11 | |||
12 | Signed-off-by: Rui li <li.rui27@zte.com.cn> | ||
13 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
14 | --- | ||
15 | drivers/usb/serial/option.c | 129 ++++++++++++++++++++++++++++++++++++++++++- | ||
16 | 1 files changed, 128 insertions(+), 1 deletions(-) | ||
17 | |||
18 | diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c | ||
19 | index 2a9ed6e..338d082 100644 | ||
20 | --- a/drivers/usb/serial/option.c | ||
21 | +++ b/drivers/usb/serial/option.c | ||
22 | @@ -855,6 +855,18 @@ static const struct usb_device_id option_ids[] = { | ||
23 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0083, 0xff, 0xff, 0xff) }, | ||
24 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0086, 0xff, 0xff, 0xff) }, | ||
25 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0087, 0xff, 0xff, 0xff) }, | ||
26 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0088, 0xff, 0xff, 0xff) }, | ||
27 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0089, 0xff, 0xff, 0xff) }, | ||
28 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0090, 0xff, 0xff, 0xff) }, | ||
29 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0091, 0xff, 0xff, 0xff) }, | ||
30 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0092, 0xff, 0xff, 0xff) }, | ||
31 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0093, 0xff, 0xff, 0xff) }, | ||
32 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0094, 0xff, 0xff, 0xff) }, | ||
33 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0095, 0xff, 0xff, 0xff) }, | ||
34 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0096, 0xff, 0xff, 0xff) }, | ||
35 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0097, 0xff, 0xff, 0xff) }, | ||
36 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0098, 0xff, 0xff, 0xff) }, | ||
37 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0099, 0xff, 0xff, 0xff) }, | ||
38 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0104, 0xff, 0xff, 0xff), | ||
39 | .driver_info = (kernel_ulong_t)&net_intf4_blacklist }, | ||
40 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0105, 0xff, 0xff, 0xff) }, | ||
41 | @@ -883,7 +895,6 @@ static const struct usb_device_id option_ids[] = { | ||
42 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0151, 0xff, 0xff, 0xff) }, | ||
43 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0152, 0xff, 0xff, 0xff) }, | ||
44 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0153, 0xff, 0xff, 0xff) }, | ||
45 | - { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0154, 0xff, 0xff, 0xff) }, | ||
46 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0155, 0xff, 0xff, 0xff) }, | ||
47 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0156, 0xff, 0xff, 0xff) }, | ||
48 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0157, 0xff, 0xff, 0xff) }, | ||
49 | @@ -892,6 +903,12 @@ static const struct usb_device_id option_ids[] = { | ||
50 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0160, 0xff, 0xff, 0xff) }, | ||
51 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0161, 0xff, 0xff, 0xff) }, | ||
52 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0162, 0xff, 0xff, 0xff) }, | ||
53 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0164, 0xff, 0xff, 0xff) }, | ||
54 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0165, 0xff, 0xff, 0xff) }, | ||
55 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0168, 0xff, 0xff, 0xff) }, | ||
56 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0170, 0xff, 0xff, 0xff) }, | ||
57 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0176, 0xff, 0xff, 0xff) }, | ||
58 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0178, 0xff, 0xff, 0xff) }, | ||
59 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1008, 0xff, 0xff, 0xff) }, | ||
60 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1010, 0xff, 0xff, 0xff) }, | ||
61 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1012, 0xff, 0xff, 0xff) }, | ||
62 | @@ -1066,6 +1083,116 @@ static const struct usb_device_id option_ids[] = { | ||
63 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1298, 0xff, 0xff, 0xff) }, | ||
64 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1299, 0xff, 0xff, 0xff) }, | ||
65 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1300, 0xff, 0xff, 0xff) }, | ||
66 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1401, 0xff, 0xff, 0xff) }, | ||
67 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1402, 0xff, 0xff, 0xff) }, | ||
68 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1403, 0xff, 0xff, 0xff) }, | ||
69 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1404, 0xff, 0xff, 0xff) }, | ||
70 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1405, 0xff, 0xff, 0xff) }, | ||
71 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1406, 0xff, 0xff, 0xff) }, | ||
72 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1407, 0xff, 0xff, 0xff) }, | ||
73 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1408, 0xff, 0xff, 0xff) }, | ||
74 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1409, 0xff, 0xff, 0xff) }, | ||
75 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1410, 0xff, 0xff, 0xff) }, | ||
76 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1411, 0xff, 0xff, 0xff) }, | ||
77 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1412, 0xff, 0xff, 0xff) }, | ||
78 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1413, 0xff, 0xff, 0xff) }, | ||
79 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1414, 0xff, 0xff, 0xff) }, | ||
80 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1415, 0xff, 0xff, 0xff) }, | ||
81 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1416, 0xff, 0xff, 0xff) }, | ||
82 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1417, 0xff, 0xff, 0xff) }, | ||
83 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1418, 0xff, 0xff, 0xff) }, | ||
84 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1419, 0xff, 0xff, 0xff) }, | ||
85 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1420, 0xff, 0xff, 0xff) }, | ||
86 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1421, 0xff, 0xff, 0xff) }, | ||
87 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1422, 0xff, 0xff, 0xff) }, | ||
88 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1423, 0xff, 0xff, 0xff) }, | ||
89 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1424, 0xff, 0xff, 0xff) }, | ||
90 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1425, 0xff, 0xff, 0xff) }, | ||
91 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1426, 0xff, 0xff, 0xff) }, | ||
92 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1427, 0xff, 0xff, 0xff) }, | ||
93 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1428, 0xff, 0xff, 0xff) }, | ||
94 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1429, 0xff, 0xff, 0xff) }, | ||
95 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1430, 0xff, 0xff, 0xff) }, | ||
96 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1431, 0xff, 0xff, 0xff) }, | ||
97 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1432, 0xff, 0xff, 0xff) }, | ||
98 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1433, 0xff, 0xff, 0xff) }, | ||
99 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1434, 0xff, 0xff, 0xff) }, | ||
100 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1435, 0xff, 0xff, 0xff) }, | ||
101 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1436, 0xff, 0xff, 0xff) }, | ||
102 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1437, 0xff, 0xff, 0xff) }, | ||
103 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1438, 0xff, 0xff, 0xff) }, | ||
104 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1439, 0xff, 0xff, 0xff) }, | ||
105 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1440, 0xff, 0xff, 0xff) }, | ||
106 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1441, 0xff, 0xff, 0xff) }, | ||
107 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1442, 0xff, 0xff, 0xff) }, | ||
108 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1443, 0xff, 0xff, 0xff) }, | ||
109 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1444, 0xff, 0xff, 0xff) }, | ||
110 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1445, 0xff, 0xff, 0xff) }, | ||
111 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1446, 0xff, 0xff, 0xff) }, | ||
112 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1447, 0xff, 0xff, 0xff) }, | ||
113 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1448, 0xff, 0xff, 0xff) }, | ||
114 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1449, 0xff, 0xff, 0xff) }, | ||
115 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1450, 0xff, 0xff, 0xff) }, | ||
116 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1451, 0xff, 0xff, 0xff) }, | ||
117 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1452, 0xff, 0xff, 0xff) }, | ||
118 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1453, 0xff, 0xff, 0xff) }, | ||
119 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1454, 0xff, 0xff, 0xff) }, | ||
120 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1455, 0xff, 0xff, 0xff) }, | ||
121 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1456, 0xff, 0xff, 0xff) }, | ||
122 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1457, 0xff, 0xff, 0xff) }, | ||
123 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1458, 0xff, 0xff, 0xff) }, | ||
124 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1459, 0xff, 0xff, 0xff) }, | ||
125 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1460, 0xff, 0xff, 0xff) }, | ||
126 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1461, 0xff, 0xff, 0xff) }, | ||
127 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1462, 0xff, 0xff, 0xff) }, | ||
128 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1463, 0xff, 0xff, 0xff) }, | ||
129 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1464, 0xff, 0xff, 0xff) }, | ||
130 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1465, 0xff, 0xff, 0xff) }, | ||
131 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1466, 0xff, 0xff, 0xff) }, | ||
132 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1467, 0xff, 0xff, 0xff) }, | ||
133 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1468, 0xff, 0xff, 0xff) }, | ||
134 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1469, 0xff, 0xff, 0xff) }, | ||
135 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1470, 0xff, 0xff, 0xff) }, | ||
136 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1471, 0xff, 0xff, 0xff) }, | ||
137 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1472, 0xff, 0xff, 0xff) }, | ||
138 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1473, 0xff, 0xff, 0xff) }, | ||
139 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1474, 0xff, 0xff, 0xff) }, | ||
140 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1475, 0xff, 0xff, 0xff) }, | ||
141 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1476, 0xff, 0xff, 0xff) }, | ||
142 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1477, 0xff, 0xff, 0xff) }, | ||
143 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1478, 0xff, 0xff, 0xff) }, | ||
144 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1479, 0xff, 0xff, 0xff) }, | ||
145 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1480, 0xff, 0xff, 0xff) }, | ||
146 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1481, 0xff, 0xff, 0xff) }, | ||
147 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1482, 0xff, 0xff, 0xff) }, | ||
148 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1483, 0xff, 0xff, 0xff) }, | ||
149 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1484, 0xff, 0xff, 0xff) }, | ||
150 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1485, 0xff, 0xff, 0xff) }, | ||
151 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1486, 0xff, 0xff, 0xff) }, | ||
152 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1487, 0xff, 0xff, 0xff) }, | ||
153 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1488, 0xff, 0xff, 0xff) }, | ||
154 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1489, 0xff, 0xff, 0xff) }, | ||
155 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1490, 0xff, 0xff, 0xff) }, | ||
156 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1491, 0xff, 0xff, 0xff) }, | ||
157 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1492, 0xff, 0xff, 0xff) }, | ||
158 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1493, 0xff, 0xff, 0xff) }, | ||
159 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1494, 0xff, 0xff, 0xff) }, | ||
160 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1495, 0xff, 0xff, 0xff) }, | ||
161 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1496, 0xff, 0xff, 0xff) }, | ||
162 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1497, 0xff, 0xff, 0xff) }, | ||
163 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1498, 0xff, 0xff, 0xff) }, | ||
164 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1499, 0xff, 0xff, 0xff) }, | ||
165 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1500, 0xff, 0xff, 0xff) }, | ||
166 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1501, 0xff, 0xff, 0xff) }, | ||
167 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1502, 0xff, 0xff, 0xff) }, | ||
168 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1503, 0xff, 0xff, 0xff) }, | ||
169 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1504, 0xff, 0xff, 0xff) }, | ||
170 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1505, 0xff, 0xff, 0xff) }, | ||
171 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1506, 0xff, 0xff, 0xff) }, | ||
172 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1507, 0xff, 0xff, 0xff) }, | ||
173 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1508, 0xff, 0xff, 0xff) }, | ||
174 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1509, 0xff, 0xff, 0xff) }, | ||
175 | + { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x1510, 0xff, 0xff, 0xff) }, | ||
176 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0014, 0xff, 0xff, 0xff) }, /* ZTE CDMA products */ | ||
177 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0027, 0xff, 0xff, 0xff) }, | ||
178 | { USB_DEVICE_AND_INTERFACE_INFO(ZTE_VENDOR_ID, 0x0059, 0xff, 0xff, 0xff) }, | ||
179 | -- | ||
180 | 1.7.7.4 | ||
181 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0082-zcache-Set-SWIZ_BITS-to-8-to-reduce-tmem-bucket-lock.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0082-zcache-Set-SWIZ_BITS-to-8-to-reduce-tmem-bucket-lock.patch new file mode 100644 index 00000000..fddd6905 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0082-zcache-Set-SWIZ_BITS-to-8-to-reduce-tmem-bucket-lock.patch | |||
@@ -0,0 +1,46 @@ | |||
1 | From c1efec8273372700693661f094324081d8f3ad3d Mon Sep 17 00:00:00 2001 | ||
2 | From: Dan Magenheimer <dan.magenheimer@oracle.com> | ||
3 | Date: Mon, 23 Jan 2012 16:52:20 -0500 | ||
4 | Subject: [PATCH 82/87] zcache: Set SWIZ_BITS to 8 to reduce tmem bucket lock | ||
5 | contention. | ||
6 | |||
7 | commit e8b4553457e78bcff90f70a31212a40a8fd4f0db upstream. | ||
8 | |||
9 | SWIZ_BITS > 8 results in a much larger number of "tmem_obj" | ||
10 | allocations, likely one per page-placed-in-frontswap. The | ||
11 | tmem_obj is not huge (roughly 100 bytes), but it is large | ||
12 | enough to add a not-insignificant memory overhead to zcache. | ||
13 | |||
14 | The SWIZ_BITS=8 will get roughly the same lock contention | ||
15 | without the space wastage. | ||
16 | |||
17 | The effect of SWIZ_BITS can be thought of as "2^SWIZ_BITS is | ||
18 | the number of unique oids that be generated" (This concept is | ||
19 | limited to frontswap's use of tmem). | ||
20 | |||
21 | Acked-by: Seth Jennings <sjenning@linux.vnet.ibm.com> | ||
22 | Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||
23 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
24 | --- | ||
25 | drivers/staging/zcache/zcache-main.c | 4 ++-- | ||
26 | 1 files changed, 2 insertions(+), 2 deletions(-) | ||
27 | |||
28 | diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c | ||
29 | index 56c1f9c..d3a8e67 100644 | ||
30 | --- a/drivers/staging/zcache/zcache-main.c | ||
31 | +++ b/drivers/staging/zcache/zcache-main.c | ||
32 | @@ -1782,9 +1782,9 @@ static int zcache_frontswap_poolid = -1; | ||
33 | * Swizzling increases objects per swaptype, increasing tmem concurrency | ||
34 | * for heavy swaploads. Later, larger nr_cpus -> larger SWIZ_BITS | ||
35 | * Setting SWIZ_BITS to 27 basically reconstructs the swap entry from | ||
36 | - * frontswap_get_page() | ||
37 | + * frontswap_get_page(), but has side-effects. Hence using 8. | ||
38 | */ | ||
39 | -#define SWIZ_BITS 27 | ||
40 | +#define SWIZ_BITS 8 | ||
41 | #define SWIZ_MASK ((1 << SWIZ_BITS) - 1) | ||
42 | #define _oswiz(_type, _ind) ((_type << SWIZ_BITS) | (_ind & SWIZ_MASK)) | ||
43 | #define iswiz(_ind) (_ind >> SWIZ_BITS) | ||
44 | -- | ||
45 | 1.7.7.4 | ||
46 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0083-zcache-fix-deadlock-condition.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0083-zcache-fix-deadlock-condition.patch new file mode 100644 index 00000000..c73b80a1 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0083-zcache-fix-deadlock-condition.patch | |||
@@ -0,0 +1,55 @@ | |||
1 | From 5c97f5b2d4924961479e862e8fe516ba217551b3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Dan Magenheimer <dan.magenheimer@oracle.com> | ||
3 | Date: Wed, 25 Jan 2012 14:32:51 -0800 | ||
4 | Subject: [PATCH 83/87] zcache: fix deadlock condition | ||
5 | |||
6 | commit 9256a4789be3dae37d00924c03546ba7958ea5a3 upstream. | ||
7 | |||
8 | I discovered this deadlock condition awhile ago working on RAMster | ||
9 | but it affects zcache as well. The list spinlock must be | ||
10 | locked prior to the page spinlock and released after. As | ||
11 | a result, the page copy must also be done while the locks are held. | ||
12 | |||
13 | Applies to 3.2. Konrad, please push (via GregKH?)... | ||
14 | this is definitely a bug fix so need not be pushed during | ||
15 | a -rc0 window. | ||
16 | |||
17 | Signed-off-by: Dan Magenheimer <dan.magenheimer@oracle.com> | ||
18 | Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com> | ||
19 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
20 | --- | ||
21 | drivers/staging/zcache/zcache-main.c | 7 +++---- | ||
22 | 1 files changed, 3 insertions(+), 4 deletions(-) | ||
23 | |||
24 | diff --git a/drivers/staging/zcache/zcache-main.c b/drivers/staging/zcache/zcache-main.c | ||
25 | index d3a8e67..f5e469d 100644 | ||
26 | --- a/drivers/staging/zcache/zcache-main.c | ||
27 | +++ b/drivers/staging/zcache/zcache-main.c | ||
28 | @@ -358,8 +358,8 @@ static struct zbud_hdr *zbud_create(uint16_t client_id, uint16_t pool_id, | ||
29 | if (unlikely(zbpg == NULL)) | ||
30 | goto out; | ||
31 | /* ok, have a page, now compress the data before taking locks */ | ||
32 | - spin_lock(&zbpg->lock); | ||
33 | spin_lock(&zbud_budlists_spinlock); | ||
34 | + spin_lock(&zbpg->lock); | ||
35 | list_add_tail(&zbpg->bud_list, &zbud_unbuddied[nchunks].list); | ||
36 | zbud_unbuddied[nchunks].count++; | ||
37 | zh = &zbpg->buddy[0]; | ||
38 | @@ -389,12 +389,11 @@ init_zh: | ||
39 | zh->oid = *oid; | ||
40 | zh->pool_id = pool_id; | ||
41 | zh->client_id = client_id; | ||
42 | - /* can wait to copy the data until the list locks are dropped */ | ||
43 | - spin_unlock(&zbud_budlists_spinlock); | ||
44 | - | ||
45 | to = zbud_data(zh, size); | ||
46 | memcpy(to, cdata, size); | ||
47 | spin_unlock(&zbpg->lock); | ||
48 | + spin_unlock(&zbud_budlists_spinlock); | ||
49 | + | ||
50 | zbud_cumul_chunk_counts[nchunks]++; | ||
51 | atomic_inc(&zcache_zbud_curr_zpages); | ||
52 | zcache_zbud_cumul_zpages++; | ||
53 | -- | ||
54 | 1.7.7.4 | ||
55 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0084-mmc-cb710-core-Add-missing-spin_lock_init-for-irq_lo.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0084-mmc-cb710-core-Add-missing-spin_lock_init-for-irq_lo.patch new file mode 100644 index 00000000..7ff88b20 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0084-mmc-cb710-core-Add-missing-spin_lock_init-for-irq_lo.patch | |||
@@ -0,0 +1,33 @@ | |||
1 | From 6bffce08e4d8f5daf00e3d45dad594764c3fc8f0 Mon Sep 17 00:00:00 2001 | ||
2 | From: Axel Lin <axel.lin@gmail.com> | ||
3 | Date: Wed, 1 Feb 2012 12:31:47 +0800 | ||
4 | Subject: [PATCH 84/87] mmc: cb710 core: Add missing spin_lock_init for | ||
5 | irq_lock of struct cb710_chip | ||
6 | MIME-Version: 1.0 | ||
7 | Content-Type: text/plain; charset=UTF-8 | ||
8 | Content-Transfer-Encoding: 8bit | ||
9 | |||
10 | commit b5266ea675c5a041e2852c7ccec4cf2d4f5e0cf4 upstream. | ||
11 | |||
12 | Signed-off-by: Axel Lin <axel.lin@gmail.com> | ||
13 | Acked-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> | ||
14 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
15 | --- | ||
16 | drivers/misc/cb710/core.c | 1 + | ||
17 | 1 files changed, 1 insertions(+), 0 deletions(-) | ||
18 | |||
19 | diff --git a/drivers/misc/cb710/core.c b/drivers/misc/cb710/core.c | ||
20 | index 68cd05b..85cc771 100644 | ||
21 | --- a/drivers/misc/cb710/core.c | ||
22 | +++ b/drivers/misc/cb710/core.c | ||
23 | @@ -245,6 +245,7 @@ static int __devinit cb710_probe(struct pci_dev *pdev, | ||
24 | if (err) | ||
25 | return err; | ||
26 | |||
27 | + spin_lock_init(&chip->irq_lock); | ||
28 | chip->pdev = pdev; | ||
29 | chip->iobase = pcim_iomap_table(pdev)[0]; | ||
30 | |||
31 | -- | ||
32 | 1.7.7.4 | ||
33 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0085-powernow-k8-Avoid-Pstate-MSR-accesses-on-systems-sup.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0085-powernow-k8-Avoid-Pstate-MSR-accesses-on-systems-sup.patch new file mode 100644 index 00000000..b00bc7de --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0085-powernow-k8-Avoid-Pstate-MSR-accesses-on-systems-sup.patch | |||
@@ -0,0 +1,60 @@ | |||
1 | From af2ff521425c83a3043af8a600b62d32443031dd Mon Sep 17 00:00:00 2001 | ||
2 | From: Andreas Herrmann <andreas.herrmann3@amd.com> | ||
3 | Date: Fri, 6 Jan 2012 15:56:31 +0100 | ||
4 | Subject: [PATCH 85/87] powernow-k8: Avoid Pstate MSR accesses on systems | ||
5 | supporting CPB | ||
6 | |||
7 | commit 201bf0f129e1715a33568d1563d9a75b840ab4d3 upstream. | ||
8 | |||
9 | Due to CPB we can't directly map SW Pstates to Pstate MSRs. Get rid of | ||
10 | the paranoia check. (assuming that the ACPI Pstate information is | ||
11 | correct.) | ||
12 | |||
13 | Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> | ||
14 | Signed-off-by: Dave Jones <davej@redhat.com> | ||
15 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
16 | --- | ||
17 | drivers/cpufreq/powernow-k8.c | 19 ++++++++++--------- | ||
18 | 1 files changed, 10 insertions(+), 9 deletions(-) | ||
19 | |||
20 | diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c | ||
21 | index bce576d..e0329f9 100644 | ||
22 | --- a/drivers/cpufreq/powernow-k8.c | ||
23 | +++ b/drivers/cpufreq/powernow-k8.c | ||
24 | @@ -926,23 +926,24 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, | ||
25 | invalidate_entry(powernow_table, i); | ||
26 | continue; | ||
27 | } | ||
28 | - rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi); | ||
29 | - if (!(hi & HW_PSTATE_VALID_MASK)) { | ||
30 | - pr_debug("invalid pstate %d, ignoring\n", index); | ||
31 | - invalidate_entry(powernow_table, i); | ||
32 | - continue; | ||
33 | - } | ||
34 | - | ||
35 | - powernow_table[i].index = index; | ||
36 | - | ||
37 | /* Frequency may be rounded for these */ | ||
38 | if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10) | ||
39 | || boot_cpu_data.x86 == 0x11) { | ||
40 | + | ||
41 | + rdmsr(MSR_PSTATE_DEF_BASE + index, lo, hi); | ||
42 | + if (!(hi & HW_PSTATE_VALID_MASK)) { | ||
43 | + pr_debug("invalid pstate %d, ignoring\n", index); | ||
44 | + invalidate_entry(powernow_table, i); | ||
45 | + continue; | ||
46 | + } | ||
47 | + | ||
48 | powernow_table[i].frequency = | ||
49 | freq_from_fid_did(lo & 0x3f, (lo >> 6) & 7); | ||
50 | } else | ||
51 | powernow_table[i].frequency = | ||
52 | data->acpi_data.states[i].core_frequency * 1000; | ||
53 | + | ||
54 | + powernow_table[i].index = index; | ||
55 | } | ||
56 | return 0; | ||
57 | } | ||
58 | -- | ||
59 | 1.7.7.4 | ||
60 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0086-powernow-k8-Fix-indexing-issue.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0086-powernow-k8-Fix-indexing-issue.patch new file mode 100644 index 00000000..998d0c5e --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0086-powernow-k8-Fix-indexing-issue.patch | |||
@@ -0,0 +1,86 @@ | |||
1 | From 8f44619e1e633884c5f0bfcf6ae05d7b0304cca3 Mon Sep 17 00:00:00 2001 | ||
2 | From: Andreas Herrmann <andreas.herrmann3@amd.com> | ||
3 | Date: Fri, 6 Jan 2012 15:57:55 +0100 | ||
4 | Subject: [PATCH 86/87] powernow-k8: Fix indexing issue | ||
5 | |||
6 | commit a8eb28480e9b637cc78b9aa5e08612ba97e1317a upstream. | ||
7 | |||
8 | The driver uses the pstate number from the status register as index in | ||
9 | its table of ACPI pstates (powernow_table). This is wrong as this is | ||
10 | not a 1-to-1 mapping. | ||
11 | |||
12 | For example we can have _PSS information to just utilize Pstate 0 and | ||
13 | Pstate 4, ie. | ||
14 | |||
15 | powernow-k8: Core Performance Boosting: on. | ||
16 | powernow-k8: 0 : pstate 0 (2200 MHz) | ||
17 | powernow-k8: 1 : pstate 4 (1400 MHz) | ||
18 | |||
19 | In this example the driver's powernow_table has just 2 entries. Using | ||
20 | the pstate number (4) as index into this table is just plain wrong. | ||
21 | |||
22 | Signed-off-by: Andreas Herrmann <andreas.herrmann3@amd.com> | ||
23 | Signed-off-by: Dave Jones <davej@redhat.com> | ||
24 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
25 | --- | ||
26 | drivers/cpufreq/powernow-k8.c | 15 +++++++++++---- | ||
27 | 1 files changed, 11 insertions(+), 4 deletions(-) | ||
28 | |||
29 | diff --git a/drivers/cpufreq/powernow-k8.c b/drivers/cpufreq/powernow-k8.c | ||
30 | index e0329f9..ad683ec 100644 | ||
31 | --- a/drivers/cpufreq/powernow-k8.c | ||
32 | +++ b/drivers/cpufreq/powernow-k8.c | ||
33 | @@ -54,6 +54,9 @@ static DEFINE_PER_CPU(struct powernow_k8_data *, powernow_data); | ||
34 | |||
35 | static int cpu_family = CPU_OPTERON; | ||
36 | |||
37 | +/* array to map SW pstate number to acpi state */ | ||
38 | +static u32 ps_to_as[8]; | ||
39 | + | ||
40 | /* core performance boost */ | ||
41 | static bool cpb_capable, cpb_enabled; | ||
42 | static struct msr __percpu *msrs; | ||
43 | @@ -80,9 +83,9 @@ static u32 find_khz_freq_from_fid(u32 fid) | ||
44 | } | ||
45 | |||
46 | static u32 find_khz_freq_from_pstate(struct cpufreq_frequency_table *data, | ||
47 | - u32 pstate) | ||
48 | + u32 pstate) | ||
49 | { | ||
50 | - return data[pstate].frequency; | ||
51 | + return data[ps_to_as[pstate]].frequency; | ||
52 | } | ||
53 | |||
54 | /* Return the vco fid for an input fid | ||
55 | @@ -926,6 +929,9 @@ static int fill_powernow_table_pstate(struct powernow_k8_data *data, | ||
56 | invalidate_entry(powernow_table, i); | ||
57 | continue; | ||
58 | } | ||
59 | + | ||
60 | + ps_to_as[index] = i; | ||
61 | + | ||
62 | /* Frequency may be rounded for these */ | ||
63 | if ((boot_cpu_data.x86 == 0x10 && boot_cpu_data.x86_model < 10) | ||
64 | || boot_cpu_data.x86 == 0x11) { | ||
65 | @@ -1190,7 +1196,8 @@ static int powernowk8_target(struct cpufreq_policy *pol, | ||
66 | powernow_k8_acpi_pst_values(data, newstate); | ||
67 | |||
68 | if (cpu_family == CPU_HW_PSTATE) | ||
69 | - ret = transition_frequency_pstate(data, newstate); | ||
70 | + ret = transition_frequency_pstate(data, | ||
71 | + data->powernow_table[newstate].index); | ||
72 | else | ||
73 | ret = transition_frequency_fidvid(data, newstate); | ||
74 | if (ret) { | ||
75 | @@ -1203,7 +1210,7 @@ static int powernowk8_target(struct cpufreq_policy *pol, | ||
76 | |||
77 | if (cpu_family == CPU_HW_PSTATE) | ||
78 | pol->cur = find_khz_freq_from_pstate(data->powernow_table, | ||
79 | - newstate); | ||
80 | + data->powernow_table[newstate].index); | ||
81 | else | ||
82 | pol->cur = find_khz_freq_from_fid(data->currfid); | ||
83 | ret = 0; | ||
84 | -- | ||
85 | 1.7.7.4 | ||
86 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0087-Linux-3.2.6.patch b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0087-Linux-3.2.6.patch new file mode 100644 index 00000000..e5754bc6 --- /dev/null +++ b/recipes-kernel/linux/linux-ti33x-psp-3.2/3.2.6/0087-Linux-3.2.6.patch | |||
@@ -0,0 +1,24 @@ | |||
1 | From c2db2e264bce3b5c82b8786ec3080cbe41b7114c Mon Sep 17 00:00:00 2001 | ||
2 | From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | ||
3 | Date: Mon, 13 Feb 2012 11:17:29 -0800 | ||
4 | Subject: [PATCH 87/87] Linux 3.2.6 | ||
5 | |||
6 | --- | ||
7 | Makefile | 2 +- | ||
8 | 1 files changed, 1 insertions(+), 1 deletions(-) | ||
9 | |||
10 | diff --git a/Makefile b/Makefile | ||
11 | index e9dd0ff..47fe496 100644 | ||
12 | --- a/Makefile | ||
13 | +++ b/Makefile | ||
14 | @@ -1,6 +1,6 @@ | ||
15 | VERSION = 3 | ||
16 | PATCHLEVEL = 2 | ||
17 | -SUBLEVEL = 5 | ||
18 | +SUBLEVEL = 6 | ||
19 | EXTRAVERSION = | ||
20 | NAME = Saber-toothed Squirrel | ||
21 | |||
22 | -- | ||
23 | 1.7.7.4 | ||
24 | |||
diff --git a/recipes-kernel/linux/linux-ti33x-psp-3.2/src.txt b/recipes-kernel/linux/linux-ti33x-psp-3.2/src.txt deleted file mode 100644 index 916c5c50..00000000 --- a/recipes-kernel/linux/linux-ti33x-psp-3.2/src.txt +++ /dev/null | |||
@@ -1,295 +0,0 @@ | |||
1 | file://3.2.1/0001-MAINTAINERS-stable-Update-address.patch \ | ||
2 | file://3.2.1/0002-Documentation-Update-stable-address.patch \ | ||
3 | file://3.2.1/0003-firmware-Fix-an-oops-on-reading-fw_priv-fw-in-sysfs-.patch \ | ||
4 | file://3.2.1/0004-rt2800usb-Move-ID-out-of-unknown.patch \ | ||
5 | file://3.2.1/0005-offb-Fix-setting-of-the-pseudo-palette-for-8bpp.patch \ | ||
6 | file://3.2.1/0006-offb-Fix-bug-in-calculating-requested-vram-size.patch \ | ||
7 | file://3.2.1/0007-libertas-clean-up-scan-thread-handling.patch \ | ||
8 | file://3.2.1/0008-bcma-support-for-suspend-and-resume.patch \ | ||
9 | file://3.2.1/0009-wl12xx-Validate-FEM-index-from-ini-file-and-FW.patch \ | ||
10 | file://3.2.1/0010-wl12xx-Check-buffer-bound-when-processing-nvs-data.patch \ | ||
11 | file://3.2.1/0011-wl12xx-Restore-testmode-ABI.patch \ | ||
12 | file://3.2.1/0012-powerpc-time-Handle-wrapping-of-decrementer.patch \ | ||
13 | file://3.2.1/0013-powerpc-Fix-unpaired-probe_hcall_entry-and-probe_hca.patch \ | ||
14 | file://3.2.1/0014-IB-qib-Fix-a-possible-data-corruption-when-receiving.patch \ | ||
15 | file://3.2.1/0015-IB-uverbs-Protect-QP-multicast-list.patch \ | ||
16 | file://3.2.1/0016-iwlagn-fix-TID-use-bug.patch \ | ||
17 | file://3.2.1/0017-iwlagn-fix-remove-use-of-PAGE_SIZE.patch \ | ||
18 | file://3.2.1/0018-perf-Fix-parsing-of-__print_flags-in-TP_printk.patch \ | ||
19 | file://3.2.1/0019-ore-Fix-crash-in-case-of-an-IO-error.patch \ | ||
20 | file://3.2.1/0020-ore-fix-BUG_ON-too-few-sgs-when-reading.patch \ | ||
21 | file://3.2.1/0021-ore-Must-support-none-PAGE-aligned-IO.patch \ | ||
22 | file://3.2.1/0022-ore-FIX-breakage-when-MISC_FILESYSTEMS-is-not-set.patch \ | ||
23 | file://3.2.1/0023-reiserfs-Fix-quota-mount-option-parsing.patch \ | ||
24 | file://3.2.1/0024-reiserfs-Force-inode-evictions-before-umount-to-avoi.patch \ | ||
25 | file://3.2.1/0025-ext3-Don-t-warn-from-writepage-when-readonly-inode-i.patch \ | ||
26 | file://3.2.1/0026-drivers-hv-Don-t-OOPS-when-you-cannot-init-vmbus.patch \ | ||
27 | file://3.2.1/0027-Drivers-hv-Fix-a-bug-in-vmbus_driver_unregister.patch \ | ||
28 | file://3.2.1/0028-USB-update-documentation-for-usbmon.patch \ | ||
29 | file://3.2.1/0029-usbfs-Fix-oops-related-to-user-namespace-conversion.patch \ | ||
30 | file://3.2.1/0030-atmel_serial-fix-spinlock-lockup-in-RS485-code.patch \ | ||
31 | file://3.2.1/0031-cgroup-fix-to-allow-mounting-a-hierarchy-by-name.patch \ | ||
32 | file://3.2.1/0032-udf-Fix-deadlock-when-converting-file-from-in-ICB-on.patch \ | ||
33 | file://3.2.1/0033-drivers-usb-class-cdc-acm.c-clear-dangling-pointer.patch \ | ||
34 | file://3.2.1/0034-USB-isight-fix-kernel-bug-when-loading-firmware.patch \ | ||
35 | file://3.2.1/0035-usb-usb-storage-doesn-t-support-dynamic-id-currently.patch \ | ||
36 | file://3.2.1/0036-USB-pxa168-Fix-compilation-error.patch \ | ||
37 | file://3.2.1/0037-USB-add-quirk-for-another-camera.patch \ | ||
38 | file://3.2.1/0038-usb-musb-fix-pm_runtime-mismatch.patch \ | ||
39 | file://3.2.1/0039-USB-omninet-fix-write_room.patch \ | ||
40 | file://3.2.1/0040-usb-option-add-ZD-Incorporated-HSPA-modem.patch \ | ||
41 | file://3.2.1/0041-USB-Add-USB-ID-for-Multiplex-RC-serial-adapter-to-cp.patch \ | ||
42 | file://3.2.1/0042-usb-fix-number-of-mapped-SG-DMA-entries.patch \ | ||
43 | file://3.2.1/0043-xhci-Properly-handle-COMP_2ND_BW_ERR.patch \ | ||
44 | file://3.2.1/0044-usb-ch9-fix-up-MaxStreams-helper.patch \ | ||
45 | file://3.2.1/0045-igmp-Avoid-zero-delay-when-receiving-odd-mixture-of-.patch \ | ||
46 | file://3.2.1/0046-asix-fix-infinite-loop-in-rx_fixup.patch \ | ||
47 | file://3.2.1/0047-bonding-fix-error-handling-if-slave-is-busy-v2.patch \ | ||
48 | file://3.2.1/0048-usb-cdc-acm-Fix-acm_tty_hangup-vs.-acm_tty_close-rac.patch \ | ||
49 | file://3.2.1/0049-xfs-fix-acl-count-validation-in-xfs_acl_from_disk.patch \ | ||
50 | file://3.2.1/0050-Linux-3.2.1.patch \ | ||
51 | file://3.2.2/0001-mtdoops-fix-the-oops_page_used-array-size.patch \ | ||
52 | file://3.2.2/0002-mtd-mtdoops-skip-reading-initially-bad-blocks.patch \ | ||
53 | file://3.2.2/0003-mtd-mtd_blkdevs-don-t-increase-open-count-on-error-p.patch \ | ||
54 | file://3.2.2/0004-mtd-tests-stresstest-bail-out-if-device-has-not-enou.patch \ | ||
55 | file://3.2.2/0005-drivers-rtc-interface.c-fix-alarm-rollover-when-day-.patch \ | ||
56 | file://3.2.2/0006-ext4-add-missing-ext4_resize_end-on-error-paths.patch \ | ||
57 | file://3.2.2/0007-ext4-fix-undefined-behavior-in-ext4_fill_flex_info.patch \ | ||
58 | file://3.2.2/0008-ALSA-snd-usb-us122l-Delete-calls-to-preempt_disable.patch \ | ||
59 | file://3.2.2/0009-ALSA-HDA-Fix-master-control-for-Cirrus-Logic-421X.patch \ | ||
60 | file://3.2.2/0010-ALSA-HDA-Fix-automute-for-Cirrus-Logic-421x.patch \ | ||
61 | file://3.2.2/0011-ALSA-ice1724-Check-for-ac97-to-avoid-kernel-oops.patch \ | ||
62 | file://3.2.2/0012-ALSA-usb-audio-Avoid-flood-of-frame-active-debug-mes.patch \ | ||
63 | file://3.2.2/0013-ALSA-hda-Use-auto-parser-for-HP-laptops-with-cx20459.patch \ | ||
64 | file://3.2.2/0014-ALSA-hda-Return-the-error-from-get_wcaps_type-for-in.patch \ | ||
65 | file://3.2.2/0015-ALSA-hda-Fix-the-detection-of-Loopback-Mixing-contro.patch \ | ||
66 | file://3.2.2/0016-ALSA-hda-Fix-the-lost-power-setup-of-seconary-pins-a.patch \ | ||
67 | file://3.2.2/0017-drm-radeon-kms-workaround-invalid-AVI-infoframe-chec.patch \ | ||
68 | file://3.2.2/0018-drm-radeon-kms-disable-writeback-on-pre-R300-asics.patch \ | ||
69 | file://3.2.2/0019-radeon-Fix-disabling-PCI-bus-mastering-on-big-endian.patch \ | ||
70 | file://3.2.2/0020-pnfs-obj-pNFS-errors-are-communicated-on-iodata-pnfs.patch \ | ||
71 | file://3.2.2/0021-pnfs-obj-Must-return-layout-on-IO-error.patch \ | ||
72 | file://3.2.2/0022-NFS-Retry-mounting-NFSROOT.patch \ | ||
73 | file://3.2.2/0023-NFSv4.1-fix-backchannel-slotid-off-by-one-bug.patch \ | ||
74 | file://3.2.2/0024-NFS-fix-recent-breakage-to-NFS-error-handling.patch \ | ||
75 | file://3.2.2/0025-NFSv4-include-bitmap-in-nfsv4-get-acl-data.patch \ | ||
76 | file://3.2.2/0026-nfs-fix-regression-in-handling-of-context-option-in-.patch \ | ||
77 | file://3.2.2/0027-HID-bump-maximum-global-item-tag-report-size-to-96-b.patch \ | ||
78 | file://3.2.2/0028-HID-wiimote-Select-INPUT_FF_MEMLESS.patch \ | ||
79 | file://3.2.2/0029-UBI-fix-missing-scrub-when-there-is-a-bit-flip.patch \ | ||
80 | file://3.2.2/0030-UBI-fix-use-after-free-on-error-path.patch \ | ||
81 | file://3.2.2/0031-PCI-Fix-PCI_EXP_TYPE_RC_EC-value.patch \ | ||
82 | file://3.2.2/0032-PCI-msi-Disable-msi-interrupts-when-we-initialize-a-.patch \ | ||
83 | file://3.2.2/0033-x86-PCI-Ignore-CPU-non-addressable-_CRS-reserved-mem.patch \ | ||
84 | file://3.2.2/0034-x86-PCI-amd-factor-out-MMCONFIG-discovery.patch \ | ||
85 | file://3.2.2/0035-x86-PCI-build-amd_bus.o-only-when-CONFIG_AMD_NB-y.patch \ | ||
86 | file://3.2.2/0036-SCSI-mpt2sas-Release-spinlock-for-the-raid-device-li.patch \ | ||
87 | file://3.2.2/0037-SCSI-mpt2sas-Fix-for-memory-allocation-error-for-lar.patch \ | ||
88 | file://3.2.2/0038-xen-xenbus-Reject-replies-with-payload-XENSTORE_PAYL.patch \ | ||
89 | file://3.2.2/0039-md-raid1-perform-bad-block-tests-for-WriteMostly-dev.patch \ | ||
90 | file://3.2.2/0040-ima-free-duplicate-measurement-memory.patch \ | ||
91 | file://3.2.2/0041-ima-fix-invalid-memory-reference.patch \ | ||
92 | file://3.2.2/0042-slub-fix-a-possible-memleak-in-__slab_alloc.patch \ | ||
93 | file://3.2.2/0043-PNP-work-around-Dell-1536-1546-BIOS-MMCONFIG-bug-tha.patch \ | ||
94 | file://3.2.2/0044-asix-fix-setting-custom-MAC-address-on-Asix-88178-de.patch \ | ||
95 | file://3.2.2/0045-asix-fix-setting-custom-MAC-address-on-Asix-88772-de.patch \ | ||
96 | file://3.2.2/0046-include-linux-crash_dump.h-needs-elf.h.patch \ | ||
97 | file://3.2.2/0047-rtl8192se-Fix-BUG-caused-by-failure-to-check-skb-all.patch \ | ||
98 | file://3.2.2/0048-mac80211-fix-rx-key-NULL-pointer-dereference-in-prom.patch \ | ||
99 | file://3.2.2/0049-ath9k-Fix-regression-in-channelwidth-switch-at-the-s.patch \ | ||
100 | file://3.2.2/0050-memcg-add-mem_cgroup_replace_page_cache-to-fix-LRU-i.patch \ | ||
101 | file://3.2.2/0051-x86-Fix-mmap-random-address-range.patch \ | ||
102 | file://3.2.2/0052-UBI-fix-nameless-volumes-handling.patch \ | ||
103 | file://3.2.2/0053-UBI-fix-debugging-messages.patch \ | ||
104 | file://3.2.2/0054-UBI-make-vid_hdr-non-static.patch \ | ||
105 | file://3.2.2/0055-UBIFS-fix-debugging-messages.patch \ | ||
106 | file://3.2.2/0056-UBIFS-make-debugging-messages-light-again.patch \ | ||
107 | file://3.2.2/0057-i2c-Fix-error-value-returned-by-several-bus-drivers.patch \ | ||
108 | file://3.2.2/0058-mmc-core-Fix-voltage-select-in-DDR-mode.patch \ | ||
109 | file://3.2.2/0059-mmc-sdhci-Fix-tuning-timer-incorrect-setting-when-su.patch \ | ||
110 | file://3.2.2/0060-mmc-sd-Fix-SDR12-timing-regression.patch \ | ||
111 | file://3.2.2/0061-V4L-DVB-v4l2-ioctl-integer-overflow-in-video_usercop.patch \ | ||
112 | file://3.2.2/0062-Unused-iocbs-in-a-batch-should-not-be-accounted-as-a.patch \ | ||
113 | file://3.2.2/0063-ftrace-Fix-unregister-ftrace_ops-accounting.patch \ | ||
114 | file://3.2.2/0064-kconfig-streamline-config.pl-Simplify-backslash-line.patch \ | ||
115 | file://3.2.2/0065-kconfig-streamline-config.pl-Fix-parsing-Makefile-wi.patch \ | ||
116 | file://3.2.2/0066-svcrpc-fix-double-free-on-shutdown-of-nfsd-after-cha.patch \ | ||
117 | file://3.2.2/0067-svcrpc-destroy-server-sockets-all-at-once.patch \ | ||
118 | file://3.2.2/0068-svcrpc-avoid-memory-corruption-on-pool-shutdown.patch \ | ||
119 | file://3.2.2/0069-nfsd4-fix-lockowner-matching.patch \ | ||
120 | file://3.2.2/0070-nfsd-Fix-oops-when-parsing-a-0-length-export.patch \ | ||
121 | file://3.2.2/0071-fsnotify-don-t-BUG-in-fsnotify_destroy_mark.patch \ | ||
122 | file://3.2.2/0072-x86-UV-Update-Boot-messages-for-SGI-UV2-platform.patch \ | ||
123 | file://3.2.2/0073-recordmcount-Fix-handling-of-elf64-big-endian-object.patch \ | ||
124 | file://3.2.2/0074-uvcvideo-Fix-integer-overflow-in-uvc_ioctl_ctrl_map.patch \ | ||
125 | file://3.2.2/0075-dcache-use-a-dispose-list-in-select_parent.patch \ | ||
126 | file://3.2.2/0076-fix-shrink_dcache_parent-livelock.patch \ | ||
127 | file://3.2.2/0077-pnfsblock-acquire-im_lock-in-_preload_range.patch \ | ||
128 | file://3.2.2/0078-pnfsblock-don-t-spinlock-when-freeing-block_dev.patch \ | ||
129 | file://3.2.2/0079-pnfsblock-limit-bio-page-count.patch \ | ||
130 | file://3.2.2/0080-mac80211-revert-on-channel-work-optimisations.patch \ | ||
131 | file://3.2.2/0081-HID-hid-multitouch-add-another-eGalax-id.patch \ | ||
132 | file://3.2.2/0082-HID-multitouch-cleanup-with-eGalax-PID-definitions.patch \ | ||
133 | file://3.2.2/0083-HID-multitouch-Add-egalax-ID-for-Acer-Iconia-W500.patch \ | ||
134 | file://3.2.2/0084-HID-multitouch-add-support-for-the-MSI-Windpad-110W.patch \ | ||
135 | file://3.2.2/0085-HID-hid-multitouch-add-support-for-new-Hanvon-panels.patch \ | ||
136 | file://3.2.2/0086-HID-multitouch-add-support-of-Atmel-multitouch-panel.patch \ | ||
137 | file://3.2.2/0087-HID-multitouch-add-support-for-3M-32.patch \ | ||
138 | file://3.2.2/0088-HID-hid-multitouch-add-support-9-new-Xiroku-devices.patch \ | ||
139 | file://3.2.2/0089-fix-cputime-overflow-in-uptime_proc_show.patch \ | ||
140 | file://3.2.2/0090-block-add-and-use-scsi_blk_cmd_ioctl.patch \ | ||
141 | file://3.2.2/0091-block-fail-SCSI-passthrough-ioctls-on-partition-devi.patch \ | ||
142 | file://3.2.2/0092-dm-do-not-forward-ioctls-from-logical-volumes-to-the.patch \ | ||
143 | file://3.2.2/0093-proc-clean-up-and-fix-proc-pid-mem-handling.patch \ | ||
144 | file://3.2.2/0094-ALSA-HDA-Use-LPIB-position-fix-for-Macbook-Pro-7-1.patch \ | ||
145 | file://3.2.2/0095-ALSA-virtuoso-Xonar-DS-fix-polarity-of-front-output.patch \ | ||
146 | file://3.2.2/0096-ALSA-HDA-Fix-internal-microphone-on-Dell-Studio-16-X.patch \ | ||
147 | file://3.2.2/0097-TOMOYO-Accept-000-as-a-valid-character.patch \ | ||
148 | file://3.2.2/0098-intel-idle-Make-idle-driver-more-robust.patch \ | ||
149 | file://3.2.2/0099-intel_idle-fix-API-misuse.patch \ | ||
150 | file://3.2.2/0100-ACPI-Store-SRAT-table-revision.patch \ | ||
151 | file://3.2.2/0101-ACPI-x86-Use-SRAT-table-rev-to-use-8bit-or-32bit-PXM.patch \ | ||
152 | file://3.2.2/0102-ACPI-ia64-Use-SRAT-table-rev-to-use-8bit-or-16-32bit.patch \ | ||
153 | file://3.2.2/0103-ACPICA-Put-back-the-call-to-acpi_os_validate_address.patch \ | ||
154 | file://3.2.2/0104-ACPI-processor-fix-acpi_get_cpuid-for-UP-processor.patch \ | ||
155 | file://3.2.2/0105-sym53c8xx-Fix-NULL-pointer-dereference-in-slave_dest.patch \ | ||
156 | file://3.2.2/0106-target-Set-response-format-in-INQUIRY-response.patch \ | ||
157 | file://3.2.2/0107-target-Set-additional-sense-length-field-in-sense-da.patch \ | ||
158 | file://3.2.2/0108-bcma-invalidate-the-mapped-core-over-suspend-resume.patch \ | ||
159 | file://3.2.2/0109-cx23885-dvb-check-if-dvb_attach-succeded.patch \ | ||
160 | file://3.2.2/0110-cx88-fix-don-t-duplicate-xc4000-entry-for-radio.patch \ | ||
161 | file://3.2.2/0111-tuner-Fix-numberspace-conflict-between-xc4000-and-pt.patch \ | ||
162 | file://3.2.2/0112-tracepoints-module-Fix-disabling-tracepoints-with-ta.patch \ | ||
163 | file://3.2.2/0113-I2C-OMAP-correct-SYSC-register-offset-for-OMAP4.patch \ | ||
164 | file://3.2.2/0114-x86-UV2-Fix-new-UV2-hardware-by-using-native-UV2-bro.patch \ | ||
165 | file://3.2.2/0115-x86-UV2-Fix-BAU-destination-timeout-initialization.patch \ | ||
166 | file://3.2.2/0116-x86-UV2-Work-around-BAU-bug.patch \ | ||
167 | file://3.2.2/0117-ath9k_hw-fix-interpretation-of-the-rx-KeyMiss-flag.patch \ | ||
168 | file://3.2.2/0118-rt2800pci-fix-spurious-interrupts-generation.patch \ | ||
169 | file://3.2.2/0119-xfs-fix-endian-conversion-issue-in-discard-code.patch \ | ||
170 | file://3.2.2/0120-i2c-eg20t-modified-the-setting-of-transfer-rate.patch \ | ||
171 | file://3.2.2/0121-score-fix-off-by-one-index-into-syscall-table.patch \ | ||
172 | file://3.2.2/0122-cifs-lower-default-wsize-when-unix-extensions-are-no.patch \ | ||
173 | file://3.2.2/0123-kprobes-initialize-before-using-a-hlist.patch \ | ||
174 | file://3.2.2/0124-proc-clear_refs-do-not-clear-reserved-pages.patch \ | ||
175 | file://3.2.2/0125-mm-fix-NULL-ptr-dereference-in-__count_immobile_page.patch \ | ||
176 | file://3.2.2/0126-iwlagn-check-for-SMPS-mode.patch \ | ||
177 | file://3.2.2/0127-iwlegacy-3945-fix-hw-passive-scan-on-radar-channels.patch \ | ||
178 | file://3.2.2/0128-SHM_UNLOCK-fix-long-unpreemptible-section.patch \ | ||
179 | file://3.2.2/0129-SHM_UNLOCK-fix-Unevictable-pages-stranded-after-swap.patch \ | ||
180 | file://3.2.2/0130-Linux-3.2.2.patch \ | ||
181 | file://3.2.3/0001-ALSA-hda-Fix-buffer-alignment-regression-with-Nvidia.patch \ | ||
182 | file://3.2.3/0002-ALSA-hda-Fix-silent-outputs-from-docking-station-jac.patch \ | ||
183 | file://3.2.3/0003-eCryptfs-Sanitize-write-counts-of-dev-ecryptfs.patch \ | ||
184 | file://3.2.3/0004-ecryptfs-Improve-metadata-read-failure-logging.patch \ | ||
185 | file://3.2.3/0005-eCryptfs-Make-truncate-path-killable.patch \ | ||
186 | file://3.2.3/0006-eCryptfs-Check-inode-changes-in-setattr.patch \ | ||
187 | file://3.2.3/0007-eCryptfs-Fix-oops-when-printing-debug-info-in-extent.patch \ | ||
188 | file://3.2.3/0008-drm-radeon-kms-Add-an-MSI-quirk-for-Dell-RS690.patch \ | ||
189 | file://3.2.3/0009-drm-radeon-kms-move-panel-mode-setup-into-encoder-mo.patch \ | ||
190 | file://3.2.3/0010-drm-radeon-kms-rework-modeset-sequence-for-DCE41-and.patch \ | ||
191 | file://3.2.3/0011-drm-Fix-authentication-kernel-crash.patch \ | ||
192 | file://3.2.3/0012-xfs-Fix-missing-xfs_iunlock-on-error-recovery-path-i.patch \ | ||
193 | file://3.2.3/0013-ASoC-Mark-WM5100-register-map-cache-only-when-going-.patch \ | ||
194 | file://3.2.3/0014-ASoC-Disable-register-synchronisation-for-low-freque.patch \ | ||
195 | file://3.2.3/0015-ASoC-Don-t-go-through-cache-when-applying-WM5100-rev.patch \ | ||
196 | file://3.2.3/0016-ASoC-wm8996-Call-_POST_PMU-callback-for-CPVDD.patch \ | ||
197 | file://3.2.3/0017-brcmsmac-fix-tx-queue-flush-infinite-loop.patch \ | ||
198 | file://3.2.3/0018-mac80211-fix-work-removal-on-deauth-request.patch \ | ||
199 | file://3.2.3/0019-jbd-Issue-cache-flush-after-checkpointing.patch \ | ||
200 | file://3.2.3/0020-crypto-sha512-make-it-work-undo-percpu-message-sched.patch \ | ||
201 | file://3.2.3/0021-crypto-sha512-reduce-stack-usage-to-safe-number.patch \ | ||
202 | file://3.2.3/0022-tpm_tis-add-delay-after-aborting-command.patch \ | ||
203 | file://3.2.3/0023-x86-uv-Fix-uninitialized-spinlocks.patch \ | ||
204 | file://3.2.3/0024-x86-uv-Fix-uv_gpa_to_soc_phys_ram-shift.patch \ | ||
205 | file://3.2.3/0025-x86-microcode_amd-Add-support-for-CPU-family-specifi.patch \ | ||
206 | file://3.2.3/0026-m68k-Fix-assembler-constraint-to-prevent-overeager-g.patch \ | ||
207 | file://3.2.3/0027-ALSA-hda-set-mute-led-polarity-for-laptops-with-bugg.patch \ | ||
208 | file://3.2.3/0028-ALSA-hda-Fix-silent-output-on-ASUS-A6Rp.patch \ | ||
209 | file://3.2.3/0029-ALSA-hda-Fix-silent-output-on-Haier-W18-laptop.patch \ | ||
210 | file://3.2.3/0030-drm-i915-paper-over-missed-irq-issues-with-force-wak.patch \ | ||
211 | file://3.2.3/0031-drm-i915-sdvo-always-set-positive-sync-polarity.patch \ | ||
212 | file://3.2.3/0032-drm-i915-Re-enable-gen7-RC6-and-GPU-turbo-after-resu.patch \ | ||
213 | file://3.2.3/0033-ARM-at91-fix-at91rm9200-soc-subtype-handling.patch \ | ||
214 | file://3.2.3/0034-mach-ux500-enable-ARM-errata-764369.patch \ | ||
215 | file://3.2.3/0035-ARM-7296-1-proc-v7.S-remove-HARVARD_CACHE-preprocess.patch \ | ||
216 | file://3.2.3/0036-sysfs-Complain-bitterly-about-attempts-to-remove-fil.patch \ | ||
217 | file://3.2.3/0037-x86-xen-size-struct-xen_spinlock-to-always-fit-in-ar.patch \ | ||
218 | file://3.2.3/0038-mpt2sas-Removed-redundant-calling-of-_scsih_probe_de.patch \ | ||
219 | file://3.2.3/0039-USB-option-Add-LG-docomo-L-02C.patch \ | ||
220 | file://3.2.3/0040-USB-ftdi_sio-fix-TIOCSSERIAL-baud_base-handling.patch \ | ||
221 | file://3.2.3/0041-USB-ftdi_sio-fix-initial-baud-rate.patch \ | ||
222 | file://3.2.3/0042-USB-ftdi_sio-add-PID-for-TI-XDS100v2-BeagleBone-A3.patch \ | ||
223 | file://3.2.3/0043-USB-serial-ftdi-additional-IDs.patch \ | ||
224 | file://3.2.3/0044-USB-ftdi_sio-Add-more-identifiers.patch \ | ||
225 | file://3.2.3/0045-USB-cdc-wdm-updating-desc-length-must-be-protected-b.patch \ | ||
226 | file://3.2.3/0046-USB-cdc-wdm-use-two-mutexes-to-allow-simultaneous-re.patch \ | ||
227 | file://3.2.3/0047-qcaux-add-more-Pantech-UML190-and-UML290-ports.patch \ | ||
228 | file://3.2.3/0048-usb-dwc3-ep0-tidy-up-Pending-Request-handling.patch \ | ||
229 | file://3.2.3/0049-usb-io_ti-Make-edge_remove_sysfs_attrs-the-port_remo.patch \ | ||
230 | file://3.2.3/0050-TTY-fix-UV-serial-console-regression.patch \ | ||
231 | file://3.2.3/0051-serial-amba-pl011-lock-console-writes-against-interr.patch \ | ||
232 | file://3.2.3/0052-jsm-Fixed-EEH-recovery-error.patch \ | ||
233 | file://3.2.3/0053-iwlwifi-fix-PCI-E-transport-inta-race.patch \ | ||
234 | file://3.2.3/0054-vmwgfx-Fix-assignment-in-vmw_framebuffer_create_hand.patch \ | ||
235 | file://3.2.3/0055-USB-Realtek-cr-fix-autopm-scheduling-while-atomic.patch \ | ||
236 | file://3.2.3/0056-USB-usbsevseg-fix-max-length.patch \ | ||
237 | file://3.2.3/0057-usb-gadget-langwell-don-t-call-gadget-s-disconnect.patch \ | ||
238 | file://3.2.3/0058-usb-gadget-storage-endian-fix.patch \ | ||
239 | file://3.2.3/0059-drivers-usb-host-ehci-fsl.c-add-missing-iounmap.patch \ | ||
240 | file://3.2.3/0060-xhci-Fix-USB-3.0-device-restart-on-resume.patch \ | ||
241 | file://3.2.3/0061-xHCI-Cleanup-isoc-transfer-ring-when-TD-length-misma.patch \ | ||
242 | file://3.2.3/0062-usb-musb-davinci-fix-build-breakage.patch \ | ||
243 | file://3.2.3/0063-hwmon-f71805f-Fix-clamping-of-temperature-limits.patch \ | ||
244 | file://3.2.3/0064-hwmon-w83627ehf-Disable-setting-DC-mode-for-pwm2-pwm.patch \ | ||
245 | file://3.2.3/0065-hwmon-sht15-fix-bad-error-code.patch \ | ||
246 | file://3.2.3/0066-USB-cdc-wdm-call-wake_up_all-to-allow-driver-to-shut.patch \ | ||
247 | file://3.2.3/0067-USB-cdc-wdm-better-allocate-a-buffer-that-is-at-leas.patch \ | ||
248 | file://3.2.3/0068-USB-cdc-wdm-Avoid-hanging-on-interface-with-no-USB_C.patch \ | ||
249 | file://3.2.3/0069-netns-fix-net_alloc_generic.patch \ | ||
250 | file://3.2.3/0070-netns-Fail-conspicously-if-someone-uses-net_generic-.patch \ | ||
251 | file://3.2.3/0071-net-caif-Register-properly-as-a-pernet-subsystem.patch \ | ||
252 | file://3.2.3/0072-af_unix-fix-EPOLLET-regression-for-stream-sockets.patch \ | ||
253 | file://3.2.3/0073-bonding-fix-enslaving-in-alb-mode-when-link-down.patch \ | ||
254 | file://3.2.3/0074-l2tp-l2tp_ip-fix-possible-oops-on-packet-receive.patch \ | ||
255 | file://3.2.3/0075-macvlan-fix-a-possible-use-after-free.patch \ | ||
256 | file://3.2.3/0076-net-bpf_jit-fix-divide-by-0-generation.patch \ | ||
257 | file://3.2.3/0077-net-reintroduce-missing-rcu_assign_pointer-calls.patch \ | ||
258 | file://3.2.3/0078-rds-Make-rds_sock_lock-BH-rather-than-IRQ-safe.patch \ | ||
259 | file://3.2.3/0079-tcp-fix-tcp_trim_head-to-adjust-segment-count-with-s.patch \ | ||
260 | file://3.2.3/0080-tcp-md5-using-remote-adress-for-md5-lookup-in-rst-pa.patch \ | ||
261 | file://3.2.3/0081-USB-serial-CP210x-Added-USB-ID-for-the-Link-Instrume.patch \ | ||
262 | file://3.2.3/0082-USB-cp210x-call-generic-open-last-in-open.patch \ | ||
263 | file://3.2.3/0083-USB-cp210x-fix-CP2104-baudrate-usage.patch \ | ||
264 | file://3.2.3/0084-USB-cp210x-do-not-map-baud-rates-to-B0.patch \ | ||
265 | file://3.2.3/0085-USB-cp210x-fix-up-set_termios-variables.patch \ | ||
266 | file://3.2.3/0086-USB-cp210x-clean-up-refactor-and-document-speed-hand.patch \ | ||
267 | file://3.2.3/0087-USB-cp210x-initialise-baud-rate-at-open.patch \ | ||
268 | file://3.2.3/0088-USB-cp210x-allow-more-baud-rates-above-1Mbaud.patch \ | ||
269 | file://3.2.3/0089-mach-ux500-no-MMC_CAP_SD_HIGHSPEED-on-Snowball.patch \ | ||
270 | file://3.2.3/0090-Linux-3.2.3.patch \ | ||
271 | file://3.2.4/0001-Revert-ASoC-Mark-WM5100-register-map-cache-only-when.patch \ | ||
272 | file://3.2.4/0002-Revert-ASoC-Don-t-go-through-cache-when-applying-WM5.patch \ | ||
273 | file://3.2.4/0003-Linux-3.2.4.patch \ | ||
274 | file://3.2.5/0001-PCI-Rework-ASPM-disable-code.patch \ | ||
275 | file://3.2.5/0002-Linux-3.2.5.patch \ | ||
276 | file://0002-f_rndis-HACK-around-undefined-variables.patch \ | ||
277 | file://0003-da8xx-fb-add-DVI-support-for-beaglebone.patch \ | ||
278 | file://0004-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch \ | ||
279 | file://0005-more-beaglebone-merges.patch \ | ||
280 | file://0006-beaglebone-disable-tsadc.patch \ | ||
281 | file://0007-tscadc-Add-general-purpose-mode-untested-with-touchs.patch \ | ||
282 | file://0008-tscadc-Add-board-file-mfd-support-fix-warning.patch \ | ||
283 | file://0009-AM335X-init-tsc-bone-style-for-new-boards.patch \ | ||
284 | file://0010-tscadc-make-stepconfig-channel-configurable.patch \ | ||
285 | file://0011-tscadc-Trigger-through-sysfs.patch \ | ||
286 | file://0012-meta-ti-Remove-debug-messages-for-meta-ti.patch \ | ||
287 | file://0013-tscadc-switch-to-polling-instead-of-interrupts.patch \ | ||
288 | file://0014-beaglebone-fix-ADC-init.patch \ | ||
289 | file://0015-AM335x-MUX-add-ehrpwm1A.patch \ | ||
290 | file://0016-beaglebone-enable-PWM-for-lcd-backlight-backlight-is.patch \ | ||
291 | file://0017-omap_hsmmc-Set-dto-to-max-value-of-14-to-avoid-SD-Ca.patch \ | ||
292 | file://0018-beaglebone-set-default-brightness-to-50-for-pwm-back.patch \ | ||
293 | file://0019-st7735fb-WIP-framebuffer-driver-supporting-Adafruit-.patch \ | ||
294 | file://0020-beaglebone-use-P8_6-gpio1_3-as-w1-bus.patch \ | ||
295 | file://0021-beaglebone-add-support-for-Towertech-TT3201-CAN-cape.patch \ | ||
diff --git a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb index 33ae9bdf..42a606d2 100644 --- a/recipes-kernel/linux/linux-ti33x-psp_3.2.bb +++ b/recipes-kernel/linux/linux-ti33x-psp_3.2.bb | |||
@@ -299,6 +299,93 @@ PATCHES_OVER_PSP = " \ | |||
299 | file://3.2.4/0003-Linux-3.2.4.patch \ | 299 | file://3.2.4/0003-Linux-3.2.4.patch \ |
300 | file://3.2.5/0001-PCI-Rework-ASPM-disable-code.patch \ | 300 | file://3.2.5/0001-PCI-Rework-ASPM-disable-code.patch \ |
301 | file://3.2.5/0002-Linux-3.2.5.patch \ | 301 | file://3.2.5/0002-Linux-3.2.5.patch \ |
302 | file://3.2.6/0001-readahead-fix-pipeline-break-caused-by-block-plug.patch \ | ||
303 | file://3.2.6/0002-ALSA-hda-Fix-the-logic-to-detect-VIA-analog-low-curr.patch \ | ||
304 | file://3.2.6/0003-ALSA-HDA-Remove-quirk-for-Asus-N53Jq.patch \ | ||
305 | file://3.2.6/0004-ALSA-hda-Apply-0x0f-VREF-fix-to-all-ASUS-laptops-wit.patch \ | ||
306 | file://3.2.6/0005-ALSA-hda-Fix-calling-cs_automic-twice-for-Cirrus-cod.patch \ | ||
307 | file://3.2.6/0006-ALSA-hda-Allow-analog-low-current-mode-when-dynamic-.patch \ | ||
308 | file://3.2.6/0007-ALSA-HDA-Fix-duplicated-output-to-more-than-one-code.patch \ | ||
309 | file://3.2.6/0008-ALSA-hda-Disable-dynamic-power-control-for-VIA-as-de.patch \ | ||
310 | file://3.2.6/0009-ASoC-wm_hubs-Enable-line-out-VMID-buffer-for-single-.patch \ | ||
311 | file://3.2.6/0010-ASoC-wm_hubs-fix-wrong-bits-for-LINEOUT2-N-P-mixer.patch \ | ||
312 | file://3.2.6/0011-ARM-7306-1-vfp-flush-thread-hwstate-before-restoring.patch \ | ||
313 | file://3.2.6/0012-ARM-7307-1-vfp-fix-ptrace-regset-modification-race.patch \ | ||
314 | file://3.2.6/0013-ARM-7308-1-vfp-flush-thread-hwstate-before-copying-p.patch \ | ||
315 | file://3.2.6/0014-ARM-OMAP2-GPMC-fix-device-size-setup.patch \ | ||
316 | file://3.2.6/0015-drivers-tty-vt-vt_ioctl.c-fix-KDFONTOP-32bit-compati.patch \ | ||
317 | file://3.2.6/0016-proc-mem_release-should-check-mm-NULL.patch \ | ||
318 | file://3.2.6/0017-proc-unify-mem_read-and-mem_write.patch \ | ||
319 | file://3.2.6/0018-proc-make-sure-mem_open-doesn-t-pin-the-target-s-mem.patch \ | ||
320 | file://3.2.6/0019-firewire-ohci-add-reset-packet-quirk-for-SB-Audigy.patch \ | ||
321 | file://3.2.6/0020-firewire-ohci-disable-MSI-on-Ricoh-controllers.patch \ | ||
322 | file://3.2.6/0021-IB-mlx4-pass-SMP-vendor-specific-attribute-MADs-to-f.patch \ | ||
323 | file://3.2.6/0022-RDMA-core-Fix-kernel-panic-by-always-initializing-qp.patch \ | ||
324 | file://3.2.6/0023-kprobes-fix-a-memory-leak-in-function-pre_handler_kr.patch \ | ||
325 | file://3.2.6/0024-mtd-gpmi-nand-bugfix-reset-the-BCH-module-when-it-is.patch \ | ||
326 | file://3.2.6/0025-Revert-mtd-atmel_nand-optimize-read-write-buffer-fun.patch \ | ||
327 | file://3.2.6/0026-at_hdmac-bugfix-for-enabling-channel-irq.patch \ | ||
328 | file://3.2.6/0027-mm-filemap_xip.c-fix-race-condition-in-xip_file_faul.patch \ | ||
329 | file://3.2.6/0028-mm-compaction-check-pfn_valid-when-entering-a-new-MA.patch \ | ||
330 | file://3.2.6/0029-PM-Hibernate-Fix-s2disk-regression-related-to-freezi.patch \ | ||
331 | file://3.2.6/0030-PM-QoS-CPU-C-state-breakage-with-PM-Qos-change.patch \ | ||
332 | file://3.2.6/0031-drm-radeon-Set-DESKTOP_HEIGHT-register-to-the-frameb.patch \ | ||
333 | file://3.2.6/0032-drm-nouveau-gem-fix-fence_sync-race-oops.patch \ | ||
334 | file://3.2.6/0033-drm-radeon-kms-disable-output-polling-when-suspended.patch \ | ||
335 | file://3.2.6/0034-drm-radeon-kms-fix-TRAVIS-panel-setup.patch \ | ||
336 | file://3.2.6/0035-sched-rt-Fix-task-stack-corruption-under-__ARCH_WANT.patch \ | ||
337 | file://3.2.6/0036-PM-Hibernate-Thaw-processes-in-SNAPSHOT_CREATE_IMAGE.patch \ | ||
338 | file://3.2.6/0037-PM-Hibernate-Thaw-kernel-threads-in-SNAPSHOT_CREATE_.patch \ | ||
339 | file://3.2.6/0038-8139cp-fix-missing-napi_gro_flush.patch \ | ||
340 | file://3.2.6/0039-udf-Mark-LVID-buffer-as-uptodate-before-marking-it-d.patch \ | ||
341 | file://3.2.6/0040-drm-i915-HDMI-hot-remove-notification-to-audio-drive.patch \ | ||
342 | file://3.2.6/0041-drm-i915-DisplayPort-hot-remove-notification-to-audi.patch \ | ||
343 | file://3.2.6/0042-drm-i915-check-ACTHD-of-all-rings.patch \ | ||
344 | file://3.2.6/0043-drm-i915-Fix-TV-Out-refresh-rate.patch \ | ||
345 | file://3.2.6/0044-drm-i915-handle-3rd-pipe.patch \ | ||
346 | file://3.2.6/0045-drm-i915-convert-force_wake_get-to-func-pointer-in-t.patch \ | ||
347 | file://3.2.6/0046-drm-i915-protect-force_wake_-get-put-with-the-gt_loc.patch \ | ||
348 | file://3.2.6/0047-eCryptfs-Infinite-loop-due-to-overflow-in-ecryptfs_w.patch \ | ||
349 | file://3.2.6/0048-hwmon-w83627ehf-Fix-number-of-fans-for-NCT6776F.patch \ | ||
350 | file://3.2.6/0049-cifs-Fix-oops-in-session-setup-code-for-null-user-mo.patch \ | ||
351 | file://3.2.6/0050-atmel_lcdfb-fix-usage-of-CONTRAST_CTR-in-suspend-res.patch \ | ||
352 | file://3.2.6/0051-lockdep-bug-Exclude-TAINT_FIRMWARE_WORKAROUND-from-d.patch \ | ||
353 | file://3.2.6/0052-lockdep-bug-Exclude-TAINT_OOT_MODULE-from-disabling-.patch \ | ||
354 | file://3.2.6/0053-iscsi-target-Fix-reject-release-handling-in-iscsit_f.patch \ | ||
355 | file://3.2.6/0054-iscsi-target-Fix-double-list_add-with-iscsit_alloc_b.patch \ | ||
356 | file://3.2.6/0055-iscsi-target-Fix-discovery-with-INADDR_ANY-and-IN6AD.patch \ | ||
357 | file://3.2.6/0056-ASoC-wm_hubs-Fix-routing-of-input-PGAs-to-line-outpu.patch \ | ||
358 | file://3.2.6/0057-ASoC-wm_hubs-Correct-line-input-to-line-output-2-pat.patch \ | ||
359 | file://3.2.6/0058-ASoC-wm8962-Fix-word-length-configuration.patch \ | ||
360 | file://3.2.6/0059-ASoC-wm8994-Enabling-VMID-should-take-a-runtime-PM-r.patch \ | ||
361 | file://3.2.6/0060-ASoC-wm8994-Fix-typo-in-VMID-ramp-setting.patch \ | ||
362 | file://3.2.6/0061-pcmcia-fix-socket-refcount-decrementing-on-each-resu.patch \ | ||
363 | file://3.2.6/0062-ALSA-oxygen-virtuoso-fix-exchanged-L-R-volumes-of-au.patch \ | ||
364 | file://3.2.6/0063-iommu-amd-Work-around-broken-IVRS-tables.patch \ | ||
365 | file://3.2.6/0064-iommu-msm-Fix-error-handling-in-msm_iommu_unmap.patch \ | ||
366 | file://3.2.6/0065-mm-compaction-check-for-overlapping-nodes-during-iso.patch \ | ||
367 | file://3.2.6/0066-mm-fix-UP-THP-spin_is_locked-BUGs.patch \ | ||
368 | file://3.2.6/0067-target-Use-correct-preempted-registration-sense-code.patch \ | ||
369 | file://3.2.6/0068-target-Allow-PERSISTENT-RESERVE-IN-for-non-reservati.patch \ | ||
370 | file://3.2.6/0069-target-Correct-sense-key-for-INVALID-FIELD-IN-PARAME.patch \ | ||
371 | file://3.2.6/0070-target-Add-workaround-for-zero-length-control-CDB-ha.patch \ | ||
372 | file://3.2.6/0071-target-Return-correct-ASC-for-unimplemented-VPD-page.patch \ | ||
373 | file://3.2.6/0072-target-Fail-INQUIRY-commands-with-EVPD-0-but-PAGE-CO.patch \ | ||
374 | file://3.2.6/0073-Staging-asus_oled-fix-image-processing.patch \ | ||
375 | file://3.2.6/0074-Staging-asus_oled-fix-NULL-ptr-crash-on-unloading.patch \ | ||
376 | file://3.2.6/0075-staging-r8712u-Add-new-Sitecom-UsB-ID.patch \ | ||
377 | file://3.2.6/0076-staging-r8712u-Use-asynchronous-firmware-loading.patch \ | ||
378 | file://3.2.6/0077-usb-ch9.h-usb_endpoint_maxp-uses-__le16_to_cpu.patch \ | ||
379 | file://3.2.6/0078-usb-gadget-zero-fix-bug-in-loopback-autoresume-handl.patch \ | ||
380 | file://3.2.6/0079-usb-Skip-PCI-USB-quirk-handling-for-Netlogic-XLP.patch \ | ||
381 | file://3.2.6/0080-USB-usbserial-add-new-PID-number-0xa951-to-the-ftdi-.patch \ | ||
382 | file://3.2.6/0081-USB-add-new-zte-3g-dongle-s-pid-to-option.c.patch \ | ||
383 | file://3.2.6/0082-zcache-Set-SWIZ_BITS-to-8-to-reduce-tmem-bucket-lock.patch \ | ||
384 | file://3.2.6/0083-zcache-fix-deadlock-condition.patch \ | ||
385 | file://3.2.6/0084-mmc-cb710-core-Add-missing-spin_lock_init-for-irq_lo.patch \ | ||
386 | file://3.2.6/0085-powernow-k8-Avoid-Pstate-MSR-accesses-on-systems-sup.patch \ | ||
387 | file://3.2.6/0086-powernow-k8-Fix-indexing-issue.patch \ | ||
388 | file://3.2.6/0087-Linux-3.2.6.patch \ | ||
302 | file://0002-f_rndis-HACK-around-undefined-variables.patch \ | 389 | file://0002-f_rndis-HACK-around-undefined-variables.patch \ |
303 | file://0003-da8xx-fb-add-DVI-support-for-beaglebone.patch \ | 390 | file://0003-da8xx-fb-add-DVI-support-for-beaglebone.patch \ |
304 | file://0004-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch \ | 391 | file://0004-beaglebone-rebase-everything-onto-3.2-WARNING-MEGAPA.patch \ |