diff options
author | Justin M. Forbes <jforbes@redhat.com> | 2014-04-21 07:54:20 -0500 |
---|---|---|
committer | Justin M. Forbes <jforbes@redhat.com> | 2014-04-21 07:54:20 -0500 |
commit | b1bf9ea7daf301bf5840b1899385e95c5f55d10b (patch) | |
tree | 40a08a2a52b2f3787ee6e0f0c43d3b73209916cf | |
parent | b126fec5d027a706b15295e29e3f4402d791a2ad (diff) | |
download | kernel-b1bf9ea7daf301bf5840b1899385e95c5f55d10b.tar.gz kernel-b1bf9ea7daf301bf5840b1899385e95c5f55d10b.tar.xz kernel-b1bf9ea7daf301bf5840b1899385e95c5f55d10b.zip |
Linux v3.14.1
39 files changed, 493 insertions, 4134 deletions
diff --git a/0001-synaptics-Add-min-max-quirk-for-ThinkPad-T431s-L440-.patch b/0001-synaptics-Add-min-max-quirk-for-ThinkPad-T431s-L440-.patch index 920c8eaa..04cbe551 100644 --- a/0001-synaptics-Add-min-max-quirk-for-ThinkPad-T431s-L440-.patch +++ b/0001-synaptics-Add-min-max-quirk-for-ThinkPad-T431s-L440-.patch @@ -1,8 +1,8 @@ -From 555b84220a7c84c2faa1964d19733d867d7bf61f Mon Sep 17 00:00:00 2001 +From 1d9820da2ba6e2794a283d709caf710d0a546b3c Mon Sep 17 00:00:00 2001 From: Hans de Goede <hdegoede@redhat.com> Date: Thu, 10 Apr 2014 11:36:14 +0200 -Subject: [PATCH v3] synaptics: Add min/max quirk for ThinkPad T431s, L440, - L540, S1 Yoga and X1 +Subject: [PATCH] synaptics: Add min/max quirk for ThinkPad T431s, L440, S1 + Yoga and X1 We expect that all the Haswell series will need such quirks, sigh. @@ -14,24 +14,20 @@ The X1 Carbon 3rd generation name says 2nd while it is a 3rd generation. The X1 and T431s share a PnPID with the T540p, but the reported ranges are closer to those of the T440s. -HdG: Squashed 5 quirk patches into one. T431s + L440 + L540 are written by me, +HdG: Squashed 4 quirk patches into one. T431s + L440 are written by me, S1 Yoga and X1 are written by Benjamin Tissoires. -Hdg: Standardized S1 Yoga and X1 values, Yoga uses the same touchpad as the -X240, X1 uses the same touchpad as the T440. - -Cc: stable@vger.kernel.org Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- - drivers/input/mouse/synaptics.c | 42 +++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 42 insertions(+) + drivers/input/mouse/synaptics.c | 34 ++++++++++++++++++++++++++++++++++ + 1 file changed, 34 insertions(+) diff --git a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c -index a8b57d7..7c9f509 100644 +index b9d2259..521a8e7 100644 --- a/drivers/input/mouse/synaptics.c +++ b/drivers/input/mouse/synaptics.c -@@ -1566,6 +1566,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = { +@@ -1557,6 +1557,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = { .driver_data = (int []){1232, 5710, 1156, 4696}, }, { @@ -46,7 +42,7 @@ index a8b57d7..7c9f509 100644 /* Lenovo ThinkPad T440s */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -@@ -1574,6 +1582,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = { +@@ -1565,6 +1573,14 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = { .driver_data = (int []){1024, 5112, 2024, 4832}, }, { @@ -61,26 +57,18 @@ index a8b57d7..7c9f509 100644 /* Lenovo ThinkPad T540p */ .matches = { DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -@@ -1581,6 +1597,32 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = { +@@ -1572,6 +1588,24 @@ static const struct dmi_system_id min_max_dmi_table[] __initconst = { }, .driver_data = (int []){1024, 5056, 2058, 4832}, }, + { -+ /* Lenovo ThinkPad L540 */ -+ .matches = { -+ DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), -+ DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad L540"), -+ }, -+ .driver_data = (int []){1024, 5112, 2024, 4832}, -+ }, -+ { + /* Lenovo Yoga S1 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), + DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, + "ThinkPad S1 Yoga"), + }, -+ .driver_data = (int []){1232, 5710, 1156, 4696}, ++ .driver_data = (int []){1232, 5711, 1159, 4700}, + }, + { + /* Lenovo ThinkPad X1 Carbon Haswell (3rd generation) */ @@ -89,7 +77,7 @@ index a8b57d7..7c9f509 100644 + DMI_MATCH(DMI_PRODUCT_VERSION, + "ThinkPad X1 Carbon 2nd"), + }, -+ .driver_data = (int []){1024, 5112, 2024, 4832}, ++ .driver_data = (int []){1131, 5113, 2021, 4831}, + }, #endif { } diff --git a/HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch b/HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch deleted file mode 100644 index 0fb3cc4b..00000000 --- a/HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch +++ /dev/null @@ -1,95 +0,0 @@ -Bugzilla: 1027465 -Upstream-status: 3.14 - -From a4b1b5877b514b276f0f31efe02388a9c2836728 Mon Sep 17 00:00:00 2001 -From: David Herrmann <dh.herrmann@gmail.com> -Date: Thu, 19 Dec 2013 12:09:32 +0100 -Subject: [PATCH] HID: Bluetooth: hidp: make sure input buffers are big enough - -HID core expects the input buffers to be at least of size 4096 -(HID_MAX_BUFFER_SIZE). Other sizes will result in buffer-overflows if an -input-report is smaller than advertised. We could, like i2c, compute the -biggest report-size instead of using HID_MAX_BUFFER_SIZE, but this will -blow up if report-descriptors are changed after ->start() has been called. -So lets be safe and just use the biggest buffer we have. - -Note that this adds an additional copy to the HIDP input path. If there is -a way to make sure the skb-buf is big enough, we should use that instead. - -The best way would be to make hid-core honor the @size argument, though, -that sounds easier than it is. So lets just fix the buffer-overflows for -now and afterwards look for a faster way for all transport drivers. - -Signed-off-by: David Herrmann <dh.herrmann@gmail.com> -Signed-off-by: Jiri Kosina <jkosina@suse.cz> ---- - net/bluetooth/hidp/core.c | 16 ++++++++++++++-- - net/bluetooth/hidp/hidp.h | 4 ++++ - 2 files changed, 18 insertions(+), 2 deletions(-) - -diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c -index 292e619..d9fb934 100644 ---- a/net/bluetooth/hidp/core.c -+++ b/net/bluetooth/hidp/core.c -@@ -430,6 +430,16 @@ static void hidp_del_timer(struct hidp_session *session) - del_timer(&session->timer); - } - -+static void hidp_process_report(struct hidp_session *session, -+ int type, const u8 *data, int len, int intr) -+{ -+ if (len > HID_MAX_BUFFER_SIZE) -+ len = HID_MAX_BUFFER_SIZE; -+ -+ memcpy(session->input_buf, data, len); -+ hid_input_report(session->hid, type, session->input_buf, len, intr); -+} -+ - static void hidp_process_handshake(struct hidp_session *session, - unsigned char param) - { -@@ -502,7 +512,8 @@ static int hidp_process_data(struct hidp_session *session, struct sk_buff *skb, - hidp_input_report(session, skb); - - if (session->hid) -- hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0); -+ hidp_process_report(session, HID_INPUT_REPORT, -+ skb->data, skb->len, 0); - break; - - case HIDP_DATA_RTYPE_OTHER: -@@ -584,7 +595,8 @@ static void hidp_recv_intr_frame(struct hidp_session *session, - hidp_input_report(session, skb); - - if (session->hid) { -- hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1); -+ hidp_process_report(session, HID_INPUT_REPORT, -+ skb->data, skb->len, 1); - BT_DBG("report len %d", skb->len); - } - } else { -diff --git a/net/bluetooth/hidp/hidp.h b/net/bluetooth/hidp/hidp.h -index ab52414..8798492 100644 ---- a/net/bluetooth/hidp/hidp.h -+++ b/net/bluetooth/hidp/hidp.h -@@ -24,6 +24,7 @@ - #define __HIDP_H - - #include <linux/types.h> -+#include <linux/hid.h> - #include <linux/kref.h> - #include <net/bluetooth/bluetooth.h> - #include <net/bluetooth/l2cap.h> -@@ -179,6 +180,9 @@ struct hidp_session { - - /* Used in hidp_output_raw_report() */ - int output_report_success; /* boolean */ -+ -+ /* temporary input buffer */ -+ u8 input_buf[HID_MAX_BUFFER_SIZE]; - }; - - /* HIDP init defines */ --- -1.8.5.3 - diff --git a/Input-ALPS-add-support-for-Dolphin-devices.patch b/Input-ALPS-add-support-for-Dolphin-devices.patch deleted file mode 100644 index 1bdc0cbf..00000000 --- a/Input-ALPS-add-support-for-Dolphin-devices.patch +++ /dev/null @@ -1,348 +0,0 @@ -Bugzilla: 953211 -Upstream-status: Queued for 3.14 - -From 4081924b7b6ce876fdb8e8049f1a5ba9c1496483 Mon Sep 17 00:00:00 2001 -From: Yunkang Tang <tommywill2011@gmail.com> -Date: Thu, 26 Dec 2013 14:54:19 -0800 -Subject: [PATCH] Input: ALPS - add support for "Dolphin" devices - -This adds support for another flavor of ALPS protocol used in newer -"Dolphin" devices. - -Signed-off-by: Yunkang Tang <yunkang.tang@cn.alps.com> -Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> ---- - drivers/input/mouse/alps.c | 214 ++++++++++++++++++++++++++++++++++++--------- - drivers/input/mouse/alps.h | 7 +- - 2 files changed, 179 insertions(+), 42 deletions(-) - -diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c -index 5cf62e3..fb15c64 100644 ---- a/drivers/input/mouse/alps.c -+++ b/drivers/input/mouse/alps.c -@@ -277,6 +277,57 @@ static void alps_process_packet_v1_v2(struct psmouse *psmouse) - } - - /* -+ * Process bitmap data for V5 protocols. Return value is null. -+ * -+ * The bitmaps don't have enough data to track fingers, so this function -+ * only generates points representing a bounding box of at most two contacts. -+ * These two points are returned in x1, y1, x2, and y2. -+ */ -+static void alps_process_bitmap_dolphin(struct alps_data *priv, -+ struct alps_fields *fields, -+ int *x1, int *y1, int *x2, int *y2) -+{ -+ int box_middle_x, box_middle_y; -+ unsigned int x_map, y_map; -+ unsigned char start_bit, end_bit; -+ unsigned char x_msb, x_lsb, y_msb, y_lsb; -+ -+ x_map = fields->x_map; -+ y_map = fields->y_map; -+ -+ if (!x_map || !y_map) -+ return; -+ -+ /* Get Most-significant and Least-significant bit */ -+ x_msb = fls(x_map); -+ x_lsb = ffs(x_map); -+ y_msb = fls(y_map); -+ y_lsb = ffs(y_map); -+ -+ /* Most-significant bit should never exceed max sensor line number */ -+ if (x_msb > priv->x_bits || y_msb > priv->y_bits) -+ return; -+ -+ *x1 = *y1 = *x2 = *y2 = 0; -+ -+ if (fields->fingers > 1) { -+ start_bit = priv->x_bits - x_msb; -+ end_bit = priv->x_bits - x_lsb; -+ box_middle_x = (priv->x_max * (start_bit + end_bit)) / -+ (2 * (priv->x_bits - 1)); -+ -+ start_bit = y_lsb - 1; -+ end_bit = y_msb - 1; -+ box_middle_y = (priv->y_max * (start_bit + end_bit)) / -+ (2 * (priv->y_bits - 1)); -+ *x1 = fields->x; -+ *y1 = fields->y; -+ *x2 = 2 * box_middle_x - *x1; -+ *y2 = 2 * box_middle_y - *y1; -+ } -+} -+ -+/* - * Process bitmap data from v3 and v4 protocols. Returns the number of - * fingers detected. A return value of 0 means at least one of the - * bitmaps was empty. -@@ -481,7 +532,8 @@ static void alps_decode_buttons_v3(struct alps_fields *f, unsigned char *p) - f->ts_middle = !!(p[3] & 0x40); - } - --static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p) -+static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p, -+ struct psmouse *psmouse) - { - f->first_mp = !!(p[4] & 0x40); - f->is_mp = !!(p[0] & 0x40); -@@ -502,48 +554,61 @@ static void alps_decode_pinnacle(struct alps_fields *f, unsigned char *p) - alps_decode_buttons_v3(f, p); - } - --static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p) -+static void alps_decode_rushmore(struct alps_fields *f, unsigned char *p, -+ struct psmouse *psmouse) - { -- alps_decode_pinnacle(f, p); -+ alps_decode_pinnacle(f, p, psmouse); - - f->x_map |= (p[5] & 0x10) << 11; - f->y_map |= (p[5] & 0x20) << 6; - } - --static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p) -+static void alps_decode_dolphin(struct alps_fields *f, unsigned char *p, -+ struct psmouse *psmouse) - { -+ u64 palm_data = 0; -+ struct alps_data *priv = psmouse->private; -+ - f->first_mp = !!(p[0] & 0x02); - f->is_mp = !!(p[0] & 0x20); - -- f->fingers = ((p[0] & 0x6) >> 1 | -+ if (!f->is_mp) { -+ f->x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7)); -+ f->y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3)); -+ f->z = (p[0] & 4) ? 0 : p[5] & 0x7f; -+ alps_decode_buttons_v3(f, p); -+ } else { -+ f->fingers = ((p[0] & 0x6) >> 1 | - (p[0] & 0x10) >> 2); -- f->x_map = ((p[2] & 0x60) >> 5) | -- ((p[4] & 0x7f) << 2) | -- ((p[5] & 0x7f) << 9) | -- ((p[3] & 0x07) << 16) | -- ((p[3] & 0x70) << 15) | -- ((p[0] & 0x01) << 22); -- f->y_map = (p[1] & 0x7f) | -- ((p[2] & 0x1f) << 7); -- -- f->x = ((p[1] & 0x7f) | ((p[4] & 0x0f) << 7)); -- f->y = ((p[2] & 0x7f) | ((p[4] & 0xf0) << 3)); -- f->z = (p[0] & 4) ? 0 : p[5] & 0x7f; - -- alps_decode_buttons_v3(f, p); -+ palm_data = (p[1] & 0x7f) | -+ ((p[2] & 0x7f) << 7) | -+ ((p[4] & 0x7f) << 14) | -+ ((p[5] & 0x7f) << 21) | -+ ((p[3] & 0x07) << 28) | -+ (((u64)p[3] & 0x70) << 27) | -+ (((u64)p[0] & 0x01) << 34); -+ -+ /* Y-profile is stored in P(0) to p(n-1), n = y_bits; */ -+ f->y_map = palm_data & (BIT(priv->y_bits) - 1); -+ -+ /* X-profile is stored in p(n) to p(n+m-1), m = x_bits; */ -+ f->x_map = (palm_data >> priv->y_bits) & -+ (BIT(priv->x_bits) - 1); -+ } - } - --static void alps_process_touchpad_packet_v3(struct psmouse *psmouse) -+static void alps_process_touchpad_packet_v3_v5(struct psmouse *psmouse) - { - struct alps_data *priv = psmouse->private; - unsigned char *packet = psmouse->packet; - struct input_dev *dev = psmouse->dev; - struct input_dev *dev2 = priv->dev2; - int x1 = 0, y1 = 0, x2 = 0, y2 = 0; -- int fingers = 0, bmap_fingers; -- struct alps_fields f; -+ int fingers = 0, bmap_fn; -+ struct alps_fields f = {0}; - -- priv->decode_fields(&f, packet); -+ priv->decode_fields(&f, packet, psmouse); - - /* - * There's no single feature of touchpad position and bitmap packets -@@ -560,19 +625,38 @@ static void alps_process_touchpad_packet_v3(struct psmouse *psmouse) - */ - if (f.is_mp) { - fingers = f.fingers; -- bmap_fingers = alps_process_bitmap(priv, -- f.x_map, f.y_map, -- &x1, &y1, &x2, &y2); -- -- /* -- * We shouldn't report more than one finger if -- * we don't have two coordinates. -- */ -- if (fingers > 1 && bmap_fingers < 2) -- fingers = bmap_fingers; -- -- /* Now process position packet */ -- priv->decode_fields(&f, priv->multi_data); -+ if (priv->proto_version == ALPS_PROTO_V3) { -+ bmap_fn = alps_process_bitmap(priv, f.x_map, -+ f.y_map, &x1, &y1, -+ &x2, &y2); -+ -+ /* -+ * We shouldn't report more than one finger if -+ * we don't have two coordinates. -+ */ -+ if (fingers > 1 && bmap_fn < 2) -+ fingers = bmap_fn; -+ -+ /* Now process position packet */ -+ priv->decode_fields(&f, priv->multi_data, -+ psmouse); -+ } else { -+ /* -+ * Because Dolphin uses position packet's -+ * coordinate data as Pt1 and uses it to -+ * calculate Pt2, so we need to do position -+ * packet decode first. -+ */ -+ priv->decode_fields(&f, priv->multi_data, -+ psmouse); -+ -+ /* -+ * Since Dolphin's finger number is reliable, -+ * there is no need to compare with bmap_fn. -+ */ -+ alps_process_bitmap_dolphin(priv, &f, &x1, &y1, -+ &x2, &y2); -+ } - } else { - priv->multi_packet = 0; - } -@@ -662,7 +746,7 @@ static void alps_process_packet_v3(struct psmouse *psmouse) - return; - } - -- alps_process_touchpad_packet_v3(psmouse); -+ alps_process_touchpad_packet_v3_v5(psmouse); - } - - static void alps_process_packet_v6(struct psmouse *psmouse) -@@ -1709,6 +1793,52 @@ error: - return -1; - } - -+static int alps_dolphin_get_device_area(struct psmouse *psmouse, -+ struct alps_data *priv) -+{ -+ struct ps2dev *ps2dev = &psmouse->ps2dev; -+ unsigned char param[4] = {0}; -+ int num_x_electrode, num_y_electrode; -+ -+ if (alps_enter_command_mode(psmouse)) -+ return -1; -+ -+ param[0] = 0x0a; -+ if (ps2_command(ps2dev, NULL, PSMOUSE_CMD_RESET_WRAP) || -+ ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETPOLL) || -+ ps2_command(ps2dev, NULL, PSMOUSE_CMD_SETPOLL) || -+ ps2_command(ps2dev, ¶m[0], PSMOUSE_CMD_SETRATE) || -+ ps2_command(ps2dev, ¶m[0], PSMOUSE_CMD_SETRATE)) -+ return -1; -+ -+ if (ps2_command(ps2dev, param, PSMOUSE_CMD_GETINFO)) -+ return -1; -+ -+ /* -+ * Dolphin's sensor line number is not fixed. It can be calculated -+ * by adding the device's register value with DOLPHIN_PROFILE_X/YOFFSET. -+ * Further more, we can get device's x_max and y_max by multiplying -+ * sensor line number with DOLPHIN_COUNT_PER_ELECTRODE. -+ * -+ * e.g. When we get register's sensor_x = 11 & sensor_y = 8, -+ * real sensor line number X = 11 + 8 = 19, and -+ * real sensor line number Y = 8 + 1 = 9. -+ * So, x_max = (19 - 1) * 64 = 1152, and -+ * y_max = (9 - 1) * 64 = 512. -+ */ -+ num_x_electrode = DOLPHIN_PROFILE_XOFFSET + (param[2] & 0x0F); -+ num_y_electrode = DOLPHIN_PROFILE_YOFFSET + ((param[2] >> 4) & 0x0F); -+ priv->x_bits = num_x_electrode; -+ priv->y_bits = num_y_electrode; -+ priv->x_max = (num_x_electrode - 1) * DOLPHIN_COUNT_PER_ELECTRODE; -+ priv->y_max = (num_y_electrode - 1) * DOLPHIN_COUNT_PER_ELECTRODE; -+ -+ if (alps_exit_command_mode(psmouse)) -+ return -1; -+ -+ return 0; -+} -+ - static int alps_hw_init_dolphin_v1(struct psmouse *psmouse) - { - struct ps2dev *ps2dev = &psmouse->ps2dev; -@@ -1763,13 +1893,13 @@ static void alps_set_defaults(struct alps_data *priv) - break; - case ALPS_PROTO_V5: - priv->hw_init = alps_hw_init_dolphin_v1; -- priv->process_packet = alps_process_packet_v3; -+ priv->process_packet = alps_process_touchpad_packet_v3_v5; - priv->decode_fields = alps_decode_dolphin; - priv->set_abs_params = alps_set_abs_params_mt; - priv->nibble_commands = alps_v3_nibble_commands; - priv->addr_command = PSMOUSE_CMD_RESET_WRAP; - priv->byte0 = 0xc8; -- priv->mask0 = 0xc8; -+ priv->mask0 = 0xd8; - priv->flags = 0; - priv->x_max = 1360; - priv->y_max = 660; -@@ -1845,11 +1975,13 @@ static int alps_identify(struct psmouse *psmouse, struct alps_data *priv) - if (alps_match_table(psmouse, priv, e7, ec) == 0) { - return 0; - } else if (e7[0] == 0x73 && e7[1] == 0x03 && e7[2] == 0x50 && -- ec[0] == 0x73 && ec[1] == 0x01) { -+ ec[0] == 0x73 && (ec[1] == 0x01 || ec[1] == 0x02)) { - priv->proto_version = ALPS_PROTO_V5; - alps_set_defaults(priv); -- -- return 0; -+ if (alps_dolphin_get_device_area(psmouse, priv)) -+ return -EIO; -+ else -+ return 0; - } else if (ec[0] == 0x88 && ec[1] == 0x08) { - priv->proto_version = ALPS_PROTO_V3; - alps_set_defaults(priv); -diff --git a/drivers/input/mouse/alps.h b/drivers/input/mouse/alps.h -index 704f0f9..03f88b6 100644 ---- a/drivers/input/mouse/alps.h -+++ b/drivers/input/mouse/alps.h -@@ -19,6 +19,10 @@ - #define ALPS_PROTO_V5 5 - #define ALPS_PROTO_V6 6 - -+#define DOLPHIN_COUNT_PER_ELECTRODE 64 -+#define DOLPHIN_PROFILE_XOFFSET 8 /* x-electrode offset */ -+#define DOLPHIN_PROFILE_YOFFSET 1 /* y-electrode offset */ -+ - /** - * struct alps_model_info - touchpad ID table - * @signature: E7 response string to match. -@@ -146,7 +150,8 @@ struct alps_data { - - int (*hw_init)(struct psmouse *psmouse); - void (*process_packet)(struct psmouse *psmouse); -- void (*decode_fields)(struct alps_fields *f, unsigned char *p); -+ void (*decode_fields)(struct alps_fields *f, unsigned char *p, -+ struct psmouse *psmouse); - void (*set_abs_params)(struct alps_data *priv, struct input_dev *dev1); - - int prev_fin; --- -1.8.4.2 - diff --git a/arm-am33xx-bblack.patch b/arm-am33xx-bblack.patch deleted file mode 100644 index 78b5f3d9..00000000 --- a/arm-am33xx-bblack.patch +++ /dev/null @@ -1,1292 +0,0 @@ -Bugzilla: 1012025 -Upstream-status: In beagle github repository https://github.com/beagleboard/kernel - -From 72567452d5d6007010597158f6afd00e2bf07579 Mon Sep 17 00:00:00 2001 -From: Pantelis Antoniou <panto@antoniou-consulting.com> -Date: Sat, 15 Sep 2012 12:00:41 +0300 -Subject: [PATCH] pinctrl: pinctrl-single must be initialized early. - -When using pinctrl-single to handle i2c initialization, it has -to be done early. Whether this is the best way to do so, is an -exercise left to the reader. ---- - drivers/pinctrl/pinctrl-single.c | 12 +++++++++++- - 1 file changed, 11 insertions(+), 1 deletion(-) - -diff --git a/drivers/pinctrl/pinctrl-single.c b/drivers/pinctrl/pinctrl-single.c -index 829b98c..5107dcf 100644 ---- a/drivers/pinctrl/pinctrl-single.c -+++ b/drivers/pinctrl/pinctrl-single.c -@@ -2039,7 +2039,17 @@ static struct platform_driver pcs_driver = { - #endif - }; - --module_platform_driver(pcs_driver); -+static int __init pcs_init(void) -+{ -+ return platform_driver_register(&pcs_driver); -+} -+postcore_initcall(pcs_init); -+ -+static void __exit pcs_exit(void) -+{ -+ platform_driver_unregister(&pcs_driver); -+} -+module_exit(pcs_exit); - - MODULE_AUTHOR("Tony Lindgren <tony@atomide.com>"); - MODULE_DESCRIPTION("One-register-per-pin type device tree based pinctrl driver"); --- -1.8.5.2 - -From b5a2528c89fc8049b2a6a750634c14983e33d00f Mon Sep 17 00:00:00 2001 -From: Robert Nelson <robertcnelson@gmail.com> -Date: Fri, 27 Dec 2013 13:05:09 -0600 -Subject: [PATCH] arm: dts: am335x-boneblack: lcdc add panel-info - -Signed-off-by: Robert Nelson <robertcnelson@gmail.com> ---- - arch/arm/boot/dts/am335x-boneblack.dts | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - -diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts -index 6b71ad9..09ffbd8 100644 ---- a/arch/arm/boot/dts/am335x-boneblack.dts -+++ b/arch/arm/boot/dts/am335x-boneblack.dts -@@ -74,5 +74,18 @@ - pinctrl-0 = <&nxp_hdmi_bonelt_pins>; - pinctrl-1 = <&nxp_hdmi_bonelt_off_pins>; - status = "okay"; -+ -+ panel-info { -+ bpp = <16>; -+ ac-bias = <255>; -+ ac-bias-intrpt = <0>; -+ dma-burst-sz = <16>; -+ fdd = <16>; -+ sync-edge = <1>; -+ sync-ctrl = <1>; -+ raster-order = <0>; -+ fifo-th = <0>; -+ invert-pxl-clk; -+ }; - }; - }; --- -1.8.5.1 - -From 1da083a002581520dd358b8b8e097078000d12b9 Mon Sep 17 00:00:00 2001 -From: Robert Nelson <robertcnelson@gmail.com> -Date: Fri, 27 Dec 2013 13:14:19 -0600 -Subject: [PATCH 2/2] arm: dts: am335x-boneblack: add cpu0 opp points - -Signed-off-by: Robert Nelson <robertcnelson@gmail.com> ---- - arch/arm/boot/dts/am335x-boneblack.dts | 18 ++++++++++++++++++ - 1 file changed, 18 insertions(+) - -diff --git a/arch/arm/boot/dts/am335x-boneblack.dts b/arch/arm/boot/dts/am335x-boneblack.dts -index 09ffbd8..f213ccd 100644 ---- a/arch/arm/boot/dts/am335x-boneblack.dts -+++ b/arch/arm/boot/dts/am335x-boneblack.dts -@@ -67,6 +67,24 @@ - }; - - / { -+ cpus { -+ cpu@0 { -+ cpu0-supply = <&dcdc2_reg>; -+ /* -+ * To consider voltage drop between PMIC and SoC, -+ * tolerance value is reduced to 2% from 4% and -+ * voltage value is increased as a precaution. -+ */ -+ operating-points = < -+ /* kHz uV */ -+ 1000000 1325000 -+ 800000 1300000 -+ 600000 1112000 -+ 300000 969000 -+ >; -+ }; -+ }; -+ - hdmi { - compatible = "ti,tilcdc,slave"; - i2c = <&i2c0>; --- -1.8.5.1 - -From 8551d8aa7d3e002da2097e7e902fb96fceb8694e Mon Sep 17 00:00:00 2001 -From: Robert Nelson <robertcnelson@gmail.com> -Date: Tue, 31 Dec 2013 11:17:45 -0600 -Subject: [PATCH 3/3] arm: dts: am335x-bone-common: enable and use i2c2 - -Signed-off-by: Robert Nelson <robertcnelson@gmail.com> ---- - arch/arm/boot/dts/am335x-bone-common.dtsi | 39 +++++++++++++++++++++++++++++++ - 1 file changed, 39 insertions(+) - -diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi -index e3f27ec..54366b6 100644 ---- a/arch/arm/boot/dts/am335x-bone-common.dtsi -+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi -@@ -84,6 +84,13 @@ - >; - }; - -+ i2c2_pins: pinmux_i2c2_pins { -+ pinctrl-single,pins = < -+ 0x178 0x73 /* (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3) uart1_ctsn.i2c2_sda */ -+ 0x17c 0x73 /* (SLEWCTRL_SLOW | PIN_INPUT_PULLUP | MUX_MODE3) uart1_rtsn.i2c2_scl */ -+ >; -+ }; -+ - uart0_pins: pinmux_uart0_pins { - pinctrl-single,pins = < - 0x170 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart0_rxd.uart0_rxd */ -@@ -220,6 +227,38 @@ - reg = <0x24>; - }; - -+ baseboard_eeprom: baseboard_eeprom@50 { -+ compatible = "at,24c256"; -+ reg = <0x50>; -+ }; -+}; -+ -+&i2c2 { -+ status = "okay"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c2_pins>; -+ -+ clock-frequency = <100000>; -+ -+ cape_eeprom0: cape_eeprom0@54 { -+ compatible = "at,24c256"; -+ reg = <0x54>; -+ }; -+ -+ cape_eeprom1: cape_eeprom1@55 { -+ compatible = "at,24c256"; -+ reg = <0x55>; -+ }; -+ -+ cape_eeprom2: cape_eeprom2@56 { -+ compatible = "at,24c256"; -+ reg = <0x56>; -+ }; -+ -+ cape_eeprom3: cape_eeprom3@57 { -+ compatible = "at,24c256"; -+ reg = <0x57>; -+ }; - }; - - /include/ "tps65217.dtsi" --- -1.8.5.2 - -From a3099dc53a47d1694a5b575580ec3406dc429bf8 Mon Sep 17 00:00:00 2001 -From: Robert Nelson <robertcnelson@gmail.com> -Date: Tue, 31 Dec 2013 14:18:00 -0600 -Subject: [PATCH 4/4] arm: dts: am335x-bone-common: setup default pinmux - http://elinux.org/Basic_Proto_Cape - -Signed-off-by: Robert Nelson <robertcnelson@gmail.com> ---- - arch/arm/boot/dts/am335x-bone-common.dtsi | 130 ++++++++++++++++++++++++++++++ - 1 file changed, 130 insertions(+) - -diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi -index e4571af..f85cabc 100644 ---- a/arch/arm/boot/dts/am335x-bone-common.dtsi -+++ b/arch/arm/boot/dts/am335x-bone-common.dtsi -@@ -98,6 +98,13 @@ - >; - }; - -+ uart1_pins: pinmux_uart1_pins { -+ pinctrl-single,pins = < -+ 0x180 (PIN_INPUT_PULLUP | MUX_MODE0) /* uart1_rxd.uart1_rxd */ -+ 0x184 (PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* uart1_txd.uart1_txd */ -+ >; -+ }; -+ - clkout2_pin: pinmux_clkout2_pin { - pinctrl-single,pins = < - 0x1b4 (PIN_OUTPUT_PULLDOWN | MUX_MODE3) /* xdma_event_intr1.clkout2 */ -@@ -178,6 +185,33 @@ - 0x1c (PIN_INPUT_PULLUP | MUX_MODE1) /* gpmc_ad7.mmc1_dat7 */ - >; - }; -+ -+ spi0_pins: pinmux_spi0_pins { -+ pinctrl-single,pins = < -+ 0x150 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_sclk.spi0_sclk */ -+ 0x154 (PIN_INPUT_PULLUP | MUX_MODE0) /* spi0_d0.spi0_d0 */ -+ 0x158 (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_d1.spi0_d1 */ -+ 0x15c (PIN_OUTPUT_PULLUP | MUX_MODE0) /* spi0_cs0.spi0_cs0 */ -+ >; -+ }; -+ -+ ehrpwm1_pin_p9_14: pinmux_ehrpwm1_pin_p9_14 { -+ pinctrl-single,pins = < -+ 0x048 0x6 /* P9_14 (ZCZ ball U14) | MODE 6 */ -+ >; -+ }; -+ -+ ehrpwm1_pin_p9_16: pinmux_ehrpwm1_pin_p9_16 { -+ pinctrl-single,pins = < -+ 0x04c 0x6 /* P9_16 (ZCZ ball T14) | MODE 6 */ -+ >; -+ }; -+ -+ ecap0_pin_p9_42: pinmux_ecap0_pin_p9_42 { -+ pinctrl-single,pins = < -+ 0x164 0x0 /* P9_42 (ZCZ ball C18) | MODE 0 */ -+ >; -+ }; - }; - - &uart0 { -@@ -187,6 +221,13 @@ - status = "okay"; - }; - -+&uart1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart1_pins>; -+ -+ status = "okay"; -+}; -+ - &usb { - status = "okay"; - -@@ -261,6 +302,56 @@ - }; - }; - -+&epwmss0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ecap0_pin_p9_42>; -+ status = "okay"; -+ -+ ecap@48300100 { -+ status = "okay"; -+ }; -+}; -+ -+&epwmss1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = < -+ &ehrpwm1_pin_p9_14 -+ &ehrpwm1_pin_p9_16 -+ >; -+ -+ status = "okay"; -+ -+ ehrpwm@48302200 { -+ status = "okay"; -+ }; -+}; -+ -+&spi0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi0_pins>; -+ status = "okay"; -+ -+ spidev0: spi@0 { -+ compatible = "spidev"; -+ reg = <0>; -+ spi-max-frequency = <16000000>; -+ spi-cpha; -+ }; -+ -+ spidev1: spi@1 { -+ compatible = "spidev"; -+ reg = <1>; -+ spi-max-frequency = <16000000>; -+ }; -+}; -+ -+&tscadc { -+ status = "okay"; -+ adc { -+ ti,adc-channels = <4 5 6>; -+ }; -+}; -+ - /include/ "tps65217.dtsi" - - &tps { -@@ -336,3 +427,42 @@ - cd-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>; - cd-inverted; - }; -+ -+/ { -+ ocp { -+ //FIXME: these pwm's still need work, this guild isn't working.. -+ //http://elinux.org/EBC_Exercise_13_Pulse_Width_Modulation -+ pwm_test_P9_14@0 { -+ compatible = "pwm_test"; -+ pwms = <&ehrpwm1 0 500000 1>; -+ pwm-names = "PWM_P9_14"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ehrpwm1_pin_p9_14>; -+ enabled = <1>; -+ duty = <0>; -+ status = "okay"; -+ }; -+ -+ pwm_test_P9_16@0 { -+ compatible = "pwm_test"; -+ pwms = <&ehrpwm1 0 500000 1>; -+ pwm-names = "PWM_P9_16"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ehrpwm1_pin_p9_16>; -+ enabled = <1>; -+ duty = <0>; -+ status = "okay"; -+ }; -+ -+ pwm_test_P9_42 { -+ compatible = "pwm_test"; -+ pwms = <&ecap0 0 500000 1>; -+ pwm-names = "PWM_P9_42"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ecap0_pin_p9_42>; -+ enabled = <1>; -+ duty = <0>; -+ status = "okay"; -+ }; -+ }; -+}; --- -1.8.5.2 - -From d13ca825c40b180549f5ae4b9733e3c896d07167 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -Date: Fri, 20 Dec 2013 12:37:30 +0200 -Subject: [PATCH 1/6] clk: add gpio controlled clock - -The added clk-gpio is a basic clock that can be enabled and disabled -trough a gpio output. The DT binding document for the clock is also -added. For EPROBE_DEFER handling the registering of the clock has to -be delayed until of_clk_get() call time. - -Signed-off-by: Jyri Sarha <jsarha@ti.com> -cc: mturquette@linaro.org -cc: bcousson@baylibre.com ---- - .../devicetree/bindings/clock/gpio-clock.txt | 21 +++ - drivers/clk/Makefile | 1 + - drivers/clk/clk-gpio.c | 210 +++++++++++++++++++++ - include/linux/clk-provider.h | 25 +++ - 4 files changed, 257 insertions(+) - create mode 100644 Documentation/devicetree/bindings/clock/gpio-clock.txt - create mode 100644 drivers/clk/clk-gpio.c - -diff --git a/Documentation/devicetree/bindings/clock/gpio-clock.txt b/Documentation/devicetree/bindings/clock/gpio-clock.txt -new file mode 100644 -index 0000000..54fea39 ---- /dev/null -+++ b/Documentation/devicetree/bindings/clock/gpio-clock.txt -@@ -0,0 +1,21 @@ -+Binding for simple gpio controlled clock. -+ -+This binding uses the common clock binding[1]. -+ -+[1] Documentation/devicetree/bindings/clock/clock-bindings.txt -+ -+Required properties: -+- compatible : shall be "gpio-clock". -+- #clock-cells : from common clock binding; shall be set to 0. -+- enable-gpios : GPIO reference for enabling and disabling the clock. -+ -+Optional properties: -+- clocks: Maximum of one parent clock is supported. -+ -+Example: -+ clock { -+ compatible = "gpio-clock"; -+ clocks = <&parentclk>; -+ #clock-cells = <0>; -+ enable-gpios = <&gpio 1 GPIO_ACTIVE_HIGH>; -+ }; -diff --git a/drivers/clk/Makefile b/drivers/clk/Makefile -index 7a10bc9..9616e3a 100644 ---- a/drivers/clk/Makefile -+++ b/drivers/clk/Makefile -@@ -8,6 +8,7 @@ obj-$(CONFIG_COMMON_CLK) += clk-fixed-rate.o - obj-$(CONFIG_COMMON_CLK) += clk-gate.o - obj-$(CONFIG_COMMON_CLK) += clk-mux.o - obj-$(CONFIG_COMMON_CLK) += clk-composite.o -+obj-$(CONFIG_COMMON_CLK) += clk-gpio.o - - # SoCs specific - obj-$(CONFIG_ARCH_BCM2835) += clk-bcm2835.o -diff --git a/drivers/clk/clk-gpio.c b/drivers/clk/clk-gpio.c -new file mode 100644 -index 0000000..e04b0e1 ---- /dev/null -+++ b/drivers/clk/clk-gpio.c -@@ -0,0 +1,210 @@ -+/* -+ * Copyright (C) 2013 Texas Instruments -+ * Author: Jyri Sarha <jsarha@ti.com> -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ * Gpio controlled clock implementation -+ */ -+ -+#include <linux/clk-provider.h> -+#include <linux/module.h> -+#include <linux/slab.h> -+#include <linux/gpio.h> -+#include <linux/of_gpio.h> -+#include <linux/err.h> -+#include <linux/device.h> -+ -+/** -+ * DOC: basic gpio controlled clock which can be enabled and disabled -+ * with gpio output -+ * Traits of this clock: -+ * prepare - clk_(un)prepare only ensures parent is (un)prepared -+ * enable - clk_enable and clk_disable are functional & control gpio -+ * rate - inherits rate from parent. No clk_set_rate support -+ * parent - fixed parent. No clk_set_parent support -+ */ -+ -+#define to_clk_gpio(_hw) container_of(_hw, struct clk_gpio, hw) -+ -+static int clk_gpio_enable(struct clk_hw *hw) -+{ -+ struct clk_gpio *gpio = to_clk_gpio(hw); -+ int value = gpio->active_low ? 0 : 1; -+ -+ gpio_set_value(gpio->gpio, value); -+ -+ return 0; -+} -+ -+static void clk_gpio_disable(struct clk_hw *hw) -+{ -+ struct clk_gpio *gpio = to_clk_gpio(hw); -+ int value = gpio->active_low ? 1 : 0; -+ -+ gpio_set_value(gpio->gpio, value); -+} -+ -+static int clk_gpio_is_enabled(struct clk_hw *hw) -+{ -+ struct clk_gpio *gpio = to_clk_gpio(hw); -+ int value = gpio_get_value(gpio->gpio); -+ -+ return gpio->active_low ? !value : value; -+} -+ -+const struct clk_ops clk_gpio_ops = { -+ .enable = clk_gpio_enable, -+ .disable = clk_gpio_disable, -+ .is_enabled = clk_gpio_is_enabled, -+}; -+EXPORT_SYMBOL_GPL(clk_gpio_ops); -+ -+/** -+ * clk_register_gpio - register a gpip clock with the clock framework -+ * @dev: device that is registering this clock -+ * @name: name of this clock -+ * @parent_name: name of this clock's parent -+ * @flags: framework-specific flags for this clock -+ * @gpio: gpio to control this clock -+ * @active_low: gpio polarity -+ */ -+struct clk *clk_register_gpio(struct device *dev, const char *name, -+ const char *parent_name, unsigned long flags, -+ unsigned int gpio, bool active_low) -+{ -+ struct clk_gpio *clk_gpio; -+ struct clk *clk = ERR_PTR(-EINVAL); -+ struct clk_init_data init = { NULL }; -+ unsigned long gpio_flags; -+ int err; -+ -+ if (active_low) -+ gpio_flags = GPIOF_OUT_INIT_LOW; -+ else -+ gpio_flags = GPIOF_OUT_INIT_HIGH; -+ -+ err = gpio_request_one(gpio, gpio_flags, name); -+ -+ if (err) { -+ pr_err("%s: %s: Error requesting clock control gpio %u\n", -+ __func__, name, gpio); -+ clk = ERR_PTR(err); -+ goto clk_register_gpio_err; -+ } -+ -+ clk_gpio = kzalloc(sizeof(*clk_gpio), GFP_KERNEL); -+ -+ if (!clk_gpio) { -+ pr_err("%s: %s: could not allocate gpio clk\n", __func__, name); -+ clk = ERR_PTR(-ENOMEM); -+ goto clk_register_gpio_err; -+ } -+ -+ init.name = name; -+ init.ops = &clk_gpio_ops; -+ init.flags = flags | CLK_IS_BASIC; -+ init.parent_names = (parent_name ? &parent_name : NULL); -+ init.num_parents = (parent_name ? 1 : 0); -+ -+ clk_gpio->gpio = gpio; -+ clk_gpio->active_low = active_low; -+ clk_gpio->hw.init = &init; -+ -+ clk = clk_register(dev, &clk_gpio->hw); -+ -+ if (!IS_ERR(clk)) -+ return clk; -+ -+ kfree(clk_gpio); -+ -+clk_register_gpio_err: -+ gpio_free(gpio); -+ -+ return clk; -+} -+EXPORT_SYMBOL_GPL(clk_register_gpio); -+ -+#ifdef CONFIG_OF -+/** -+ * The clk_register_gpio has to be delayed, because the EPROBE_DEFER -+ * can not be handled properly at of_clk_init() call time. -+ */ -+ -+struct clk_gpio_delayed_register_data { -+ struct device_node *node; -+ struct mutex lock; /* Protect delayed clk registering */ -+ struct clk *clk; -+}; -+ -+static -+struct clk *of_clk_gpio_delayed_register_get(struct of_phandle_args *clkspec, -+ void *_data) -+{ -+ struct clk_gpio_delayed_register_data *data = -+ (struct clk_gpio_delayed_register_data *)_data; -+ struct clk *clk; -+ const char *clk_name = data->node->name; -+ const char *parent_name; -+ enum of_gpio_flags gpio_flags; -+ int gpio; -+ bool active_low; -+ -+ mutex_lock(&data->lock); -+ -+ if (data->clk) { -+ mutex_unlock(&data->lock); -+ return data->clk; -+ } -+ -+ gpio = of_get_named_gpio_flags(data->node, "enable-gpios", 0, -+ &gpio_flags); -+ -+ if (gpio < 0) { -+ mutex_unlock(&data->lock); -+ if (gpio != -EPROBE_DEFER) -+ pr_err("%s: %s: Can't get 'enable-gpios' DT property\n", -+ __func__, clk_name); -+ return ERR_PTR(gpio); -+ } -+ -+ active_low = gpio_flags & OF_GPIO_ACTIVE_LOW; -+ -+ parent_name = of_clk_get_parent_name(data->node, 0); -+ -+ clk = clk_register_gpio(NULL, clk_name, parent_name, 0, -+ gpio, active_low); -+ if (IS_ERR(clk)) { -+ mutex_unlock(&data->lock); -+ return clk; -+ } -+ -+ data->clk = clk; -+ mutex_unlock(&data->lock); -+ -+ return clk; -+} -+ -+/** -+ * of_gpio_clk_setup() - Setup function for gpio controlled clock -+ */ -+void __init of_gpio_clk_setup(struct device_node *node) -+{ -+ struct clk_gpio_delayed_register_data *data; -+ -+ data = kzalloc(sizeof(*data), GFP_KERNEL); -+ if (!data) { -+ pr_err("%s: could not allocate gpio clk\n", __func__); -+ return; -+ } -+ -+ data->node = node; -+ mutex_init(&data->lock); -+ -+ of_clk_add_provider(node, of_clk_gpio_delayed_register_get, data); -+} -+EXPORT_SYMBOL_GPL(of_gpio_clk_setup); -+CLK_OF_DECLARE(gpio_clk, "gpio-clock", of_gpio_clk_setup); -+#endif -diff --git a/include/linux/clk-provider.h b/include/linux/clk-provider.h -index 7e59253..21082b2 100644 ---- a/include/linux/clk-provider.h -+++ b/include/linux/clk-provider.h -@@ -407,6 +407,31 @@ struct clk *clk_register_composite(struct device *dev, const char *name, - struct clk_hw *gate_hw, const struct clk_ops *gate_ops, - unsigned long flags); - -+/*** -+ * struct clk_gpio - gpio controlled clock -+ * -+ * @hw: handle between common and hardware-specific interfaces -+ * @gpio: gpio -+ * @active_low: gpio polarity -+ * -+ * Clock with a gpio control for enabling and disabling the parent clock. -+ * Implements .enable, .disable and .is_enabled -+ */ -+ -+struct clk_gpio { -+ struct clk_hw hw; -+ unsigned int gpio; -+ bool active_low; -+}; -+ -+extern const struct clk_ops clk_gpio_ops; -+ -+struct clk *clk_register_gpio(struct device *dev, const char *name, -+ const char *parent_name, unsigned long flags, -+ unsigned int gpio, bool active_low); -+ -+void of_gpio_clk_setup(struct device_node *node); -+ - /** - * clk_register - allocate a new clock, register it and return an opaque cookie - * @dev: device that is registering this clock --- -1.8.5.2 - -From e21100edd1fbbbe41e93388b88f8548bd3360172 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -Date: Fri, 20 Dec 2013 12:38:27 +0200 -Subject: [PATCH 2/6] ASoC: davinci-evm: Add named clock reference to DT - bindings - -The referenced clock is used to get codec clock rate and the clock is -disabled and enabled in startup and shutdown snd_soc_ops call -backs. The change is also documented in DT bindigs document. - -Signed-off-by: Jyri Sarha <jsarha@ti.com> -cc: bcousson@baylibre.com ---- - .../bindings/sound/davinci-evm-audio.txt | 9 +++- - sound/soc/davinci/davinci-evm.c | 60 +++++++++++++++++++++- - 2 files changed, 66 insertions(+), 3 deletions(-) - -diff --git a/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt -index 865178d..4aa00f6 100644 ---- a/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt -+++ b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt -@@ -5,12 +5,19 @@ Required properties: - - ti,model : The user-visible name of this sound complex. - - ti,audio-codec : The phandle of the TLV320AIC3x audio codec - - ti,mcasp-controller : The phandle of the McASP controller --- ti,codec-clock-rate : The Codec Clock rate (in Hz) applied to the Codec - - ti,audio-routing : A list of the connections between audio components. - Each entry is a pair of strings, the first being the connection's sink, - the second being the connection's source. Valid names for sources and - sinks are the codec's pins, and the jacks on the board: - -+Optional properties: -+- ti,codec-clock-rate : The Codec Clock rate (in Hz) applied to the Codec. -+- clocks : Reference to the clock used as codec clock -+- clock-names : The codec clock should be named "ti,codec-clock" -+- Either codec-clock-rate or the codec-clock reference has to be defined. If -+ the both are defined the driver attempts to set referenced clock to the -+ defined rate and takes the rate from the clock reference. -+ - Board connectors: - - * Headphone Jack -diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c -index 623eb5e..daaa3a7 100644 ---- a/sound/soc/davinci/davinci-evm.c -+++ b/sound/soc/davinci/davinci-evm.c -@@ -17,6 +17,7 @@ - #include <linux/platform_data/edma.h> - #include <linux/i2c.h> - #include <linux/of_platform.h> -+#include <linux/clk.h> - #include <sound/core.h> - #include <sound/pcm.h> - #include <sound/soc.h> -@@ -31,9 +32,30 @@ - #include "davinci-mcasp.h" - - struct snd_soc_card_drvdata_davinci { -+ struct clk *mclk; - unsigned sysclk; - }; - -+static int evm_startup(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_card *soc_card = rtd->codec->card; -+ struct clk *mclk = ((struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(soc_card))->mclk; -+ -+ return clk_prepare_enable(mclk); -+} -+ -+static void evm_shutdown(struct snd_pcm_substream *substream) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_card *soc_card = rtd->codec->card; -+ struct clk *mclk = ((struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(soc_card))->mclk; -+ -+ clk_disable_unprepare(mclk); -+} -+ - #define AUDIO_FORMAT (SND_SOC_DAIFMT_DSP_B | \ - SND_SOC_DAIFMT_CBM_CFM | SND_SOC_DAIFMT_IB_NF) - static int evm_hw_params(struct snd_pcm_substream *substream, -@@ -82,6 +104,8 @@ static int evm_spdif_hw_params(struct snd_pcm_substream *substream, - } - - static struct snd_soc_ops evm_ops = { -+ .startup = evm_startup, -+ .shutdown = evm_shutdown, - .hw_params = evm_hw_params, - }; - -@@ -360,6 +384,7 @@ static int davinci_evm_probe(struct platform_device *pdev) - of_match_device(of_match_ptr(davinci_evm_dt_ids), &pdev->dev); - struct snd_soc_dai_link *dai = (struct snd_soc_dai_link *) match->data; - struct snd_soc_card_drvdata_davinci *drvdata = NULL; -+ struct clk *mclk; - int ret = 0; - - evm_soc_card.dai_link = dai; -@@ -379,13 +404,38 @@ static int davinci_evm_probe(struct platform_device *pdev) - if (ret) - return ret; - -+ mclk = of_clk_get_by_name(np, "ti,codec-clock"); -+ if (PTR_ERR(mclk) == -EPROBE_DEFER) { -+ return -EPROBE_DEFER; -+ } else if (IS_ERR(mclk)) { -+ dev_dbg(&pdev->dev, "Codec clock not found.\n"); -+ mclk = NULL; -+ } -+ - drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); - if (!drvdata) - return -ENOMEM; - -+ drvdata->mclk = mclk; -+ - ret = of_property_read_u32(np, "ti,codec-clock-rate", &drvdata->sysclk); -- if (ret < 0) -- return -EINVAL; -+ -+ if (ret < 0) { -+ if (!drvdata->mclk) { -+ dev_err(&pdev->dev, -+ "No clock or clock rate defined.\n"); -+ return -EINVAL; -+ } -+ drvdata->sysclk = clk_get_rate(drvdata->mclk); -+ } else if (drvdata->mclk) { -+ unsigned int requestd_rate = drvdata->sysclk; -+ clk_set_rate(drvdata->mclk, drvdata->sysclk); -+ drvdata->sysclk = clk_get_rate(drvdata->mclk); -+ if (drvdata->sysclk != requestd_rate) -+ dev_warn(&pdev->dev, -+ "Could not get requested rate %u using %u.\n", -+ requestd_rate, drvdata->sysclk); -+ } - - snd_soc_card_set_drvdata(&evm_soc_card, drvdata); - ret = devm_snd_soc_register_card(&pdev->dev, &evm_soc_card); -@@ -399,6 +449,12 @@ static int davinci_evm_probe(struct platform_device *pdev) - static int davinci_evm_remove(struct platform_device *pdev) - { - struct snd_soc_card *card = platform_get_drvdata(pdev); -+ struct snd_soc_card_drvdata_davinci *drvdata = -+ (struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(card); -+ -+ if (drvdata->mclk) -+ clk_put(drvdata->mclk); - - snd_soc_unregister_card(card); - --- -1.8.5.2 - -From bdc80bd25c9ee2e0b71b958c11a76f4e3182fab2 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -Date: Fri, 20 Dec 2013 12:39:38 +0200 -Subject: [PATCH 3/6] ASoC: davinci-evm: HDMI audio support for TDA998x trough - McASP I2S bus - -Add machine driver support for BeagleBone-Black and other boards with -tilcdc support and NXP TDA998X HDMI transmitter connected to McASP -port in I2S mode. The 44100 Hz sample-rate and it's multiples can not -be supported on Beaglebone-Black because of limited clock-rate -support. The only supported sample format is SNDRV_PCM_FORMAT_S32_LE. -The 8 least significant bits are ignored. - -Signed-off-by: Jyri Sarha <jsarha@ti.com> -cc: bcousson@baylibre.com ---- - .../bindings/sound/davinci-evm-audio.txt | 4 +- - sound/soc/davinci/davinci-evm.c | 167 ++++++++++++++++++++- - 2 files changed, 168 insertions(+), 3 deletions(-) - -diff --git a/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt -index 4aa00f6..f1e1031 100644 ---- a/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt -+++ b/Documentation/devicetree/bindings/sound/davinci-evm-audio.txt -@@ -1,7 +1,9 @@ - * Texas Instruments SoC audio setups with TLV320AIC3X Codec - - Required properties: --- compatible : "ti,da830-evm-audio" : forDM365/DA8xx/OMAPL1x/AM33xx -+- compatible : -+ "ti,da830-evm-audio" : for DM365/DA8xx/OMAPL1x/AM33xx -+ "ti,am33xx-beaglebone-black-audio" : for Beaglebone-black HDMI audio - - ti,model : The user-visible name of this sound complex. - - ti,audio-codec : The phandle of the TLV320AIC3x audio codec - - ti,mcasp-controller : The phandle of the McASP controller -diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c -index daaa3a7..f212975 100644 ---- a/sound/soc/davinci/davinci-evm.c -+++ b/sound/soc/davinci/davinci-evm.c -@@ -21,6 +21,7 @@ - #include <sound/core.h> - #include <sound/pcm.h> - #include <sound/soc.h> -+#include <sound/pcm_params.h> - - #include <asm/dma.h> - #include <asm/mach-types.h> -@@ -34,8 +35,13 @@ - struct snd_soc_card_drvdata_davinci { - struct clk *mclk; - unsigned sysclk; -+ struct snd_pcm_hw_constraint_list *rate_constraint; - }; - -+/* If changing sample format the tda998x configuration (REG_CTS_N) needs -+ to be changed. */ -+#define TDA998X_SAMPLE_FORMAT SNDRV_PCM_FORMAT_S32_LE -+ - static int evm_startup(struct snd_pcm_substream *substream) - { - struct snd_soc_pcm_runtime *rtd = substream->private_data; -@@ -103,12 +109,80 @@ static int evm_spdif_hw_params(struct snd_pcm_substream *substream, - return snd_soc_dai_set_fmt(cpu_dai, AUDIO_FORMAT); - } - -+static int evm_tda998x_startup(struct snd_pcm_substream *substream) -+{ -+ struct snd_pcm_runtime *runtime = substream->runtime; -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_card *soc_card = rtd->codec->card; -+ struct snd_soc_card_drvdata_davinci *drvdata = -+ (struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(soc_card); -+ struct snd_mask *fmt = constrs_mask(&runtime->hw_constraints, -+ SNDRV_PCM_HW_PARAM_FORMAT); -+ snd_mask_none(fmt); -+ snd_mask_set(fmt, TDA998X_SAMPLE_FORMAT); -+ -+ runtime->hw.rate_min = drvdata->rate_constraint->list[0]; -+ runtime->hw.rate_max = drvdata->rate_constraint->list[ -+ drvdata->rate_constraint->count - 1]; -+ runtime->hw.rates = SNDRV_PCM_RATE_KNOT; -+ -+ snd_pcm_hw_constraint_list(runtime, 0, SNDRV_PCM_HW_PARAM_RATE, -+ drvdata->rate_constraint); -+ snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_CHANNELS, -+ 2, 2); -+ -+ return evm_startup(substream); -+} -+ -+static unsigned int evm_get_bclk(struct snd_pcm_hw_params *params) -+{ -+ int sample_size = snd_pcm_format_width(params_format(params)); -+ int rate = params_rate(params); -+ int channels = params_channels(params); -+ -+ return sample_size * channels * rate; -+} -+ -+static int evm_tda998x_hw_params(struct snd_pcm_substream *substream, -+ struct snd_pcm_hw_params *params) -+{ -+ struct snd_soc_pcm_runtime *rtd = substream->private_data; -+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai; -+ struct snd_soc_codec *codec = rtd->codec; -+ struct snd_soc_card *soc_card = codec->card; -+ struct platform_device *pdev = to_platform_device(soc_card->dev); -+ unsigned int bclk_freq = evm_get_bclk(params); -+ unsigned sysclk = ((struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(soc_card))->sysclk; -+ int ret; -+ -+ ret = snd_soc_dai_set_clkdiv(cpu_dai, 1, sysclk / bclk_freq); -+ if (ret < 0) { -+ dev_err(&pdev->dev, "can't set CPU DAI clock divider %d\n", -+ ret); -+ return ret; -+ } -+ -+ ret = snd_soc_dai_set_sysclk(cpu_dai, 0, sysclk, SND_SOC_CLOCK_IN); -+ if (ret < 0) -+ return ret; -+ -+ return ret; -+} -+ - static struct snd_soc_ops evm_ops = { - .startup = evm_startup, - .shutdown = evm_shutdown, - .hw_params = evm_hw_params, - }; - -+static struct snd_soc_ops evm_tda998x_ops = { -+ .startup = evm_tda998x_startup, -+ .shutdown = evm_shutdown, -+ .hw_params = evm_tda998x_hw_params, -+}; -+ - static struct snd_soc_ops evm_spdif_ops = { - .hw_params = evm_spdif_hw_params, - }; -@@ -179,6 +253,81 @@ static int evm_aic3x_init(struct snd_soc_pcm_runtime *rtd) - return 0; - } - -+static unsigned int tda998x_hdmi_rates[] = { -+ 32000, -+ 44100, -+ 48000, -+ 88200, -+ 96000, -+}; -+ -+static struct snd_pcm_hw_constraint_list *evm_tda998x_rate_constraint( -+ struct snd_soc_card *soc_card) -+{ -+ struct platform_device *pdev = to_platform_device(soc_card->dev); -+ unsigned sysclk = ((struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(soc_card))->sysclk; -+ struct snd_pcm_hw_constraint_list *ret; -+ unsigned int *rates; -+ int i = 0, j = 0; -+ -+ ret = devm_kzalloc(soc_card->dev, sizeof(*ret) + -+ sizeof(tda998x_hdmi_rates), GFP_KERNEL); -+ if (!ret) { -+ dev_err(&pdev->dev, "Unable to allocate rate constraint!\n"); -+ return NULL; -+ } -+ -+ rates = (unsigned int *)&ret[1]; -+ ret->list = rates; -+ ret->mask = 0; -+ for (; i < ARRAY_SIZE(tda998x_hdmi_rates); i++) { -+ unsigned int bclk_freq = tda998x_hdmi_rates[i] * 2 * -+ snd_pcm_format_width(TDA998X_SAMPLE_FORMAT); -+ if (sysclk % bclk_freq == 0) { -+ rates[j++] = tda998x_hdmi_rates[i]; -+ dev_dbg(soc_card->dev, "Allowing rate %u\n", -+ tda998x_hdmi_rates[i]); -+ } -+ } -+ ret->count = j; -+ return ret; -+} -+ -+static const struct snd_soc_dapm_widget tda998x_dapm_widgets[] = { -+ SND_SOC_DAPM_OUTPUT("HDMI Out"), -+}; -+ -+static int evm_tda998x_init(struct snd_soc_pcm_runtime *rtd) -+{ -+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai; -+ struct snd_soc_dapm_context *dapm = &rtd->codec->dapm; -+ struct snd_soc_card *soc_card = rtd->codec->card; -+ struct snd_soc_card_drvdata_davinci *drvdata = -+ (struct snd_soc_card_drvdata_davinci *) -+ snd_soc_card_get_drvdata(soc_card); -+ int ret; -+ -+ ret = snd_soc_dai_set_clkdiv(cpu_dai, 0, 1); -+ if (ret < 0) -+ return ret; -+ -+ drvdata->rate_constraint = evm_tda998x_rate_constraint(soc_card); -+ -+ snd_soc_dapm_new_controls(dapm, tda998x_dapm_widgets, -+ ARRAY_SIZE(tda998x_dapm_widgets)); -+ -+ ret = snd_soc_of_parse_audio_routing(soc_card, "ti,audio-routing"); -+ -+ /* not connected */ -+ snd_soc_dapm_disable_pin(dapm, "RX"); -+ -+ /* always connected */ -+ snd_soc_dapm_enable_pin(dapm, "HDMI Out"); -+ -+ return 0; -+} -+ - /* davinci-evm digital audio interface glue - connects codec <--> CPU */ - static struct snd_soc_dai_link dm6446_evm_dai = { - .name = "TLV320AIC3X", -@@ -351,7 +500,7 @@ static struct snd_soc_card da850_snd_soc_card = { - #if defined(CONFIG_OF) - - /* -- * The struct is used as place holder. It will be completely -+ * The structs are used as place holders. They will be completely - * filled with data from dt node. - */ - static struct snd_soc_dai_link evm_dai_tlv320aic3x = { -@@ -362,10 +511,24 @@ static struct snd_soc_dai_link evm_dai_tlv320aic3x = { - .init = evm_aic3x_init, - }; - -+static struct snd_soc_dai_link evm_dai_tda998x_hdmi = { -+ .name = "NXP TDA998x HDMI Chip", -+ .stream_name = "HDMI", -+ .codec_dai_name = "hdmi-hifi", -+ .ops = &evm_tda998x_ops, -+ .init = evm_tda998x_init, -+ .dai_fmt = (SND_SOC_DAIFMT_CBS_CFS | SND_SOC_DAIFMT_I2S | -+ SND_SOC_DAIFMT_IB_NF), -+}; -+ - static const struct of_device_id davinci_evm_dt_ids[] = { - { - .compatible = "ti,da830-evm-audio", -- .data = (void *) &evm_dai_tlv320aic3x, -+ .data = &evm_dai_tlv320aic3x, -+ }, -+ { -+ .compatible = "ti,am33xx-beaglebone-black-audio", -+ .data = &evm_dai_tda998x_hdmi, - }, - { /* sentinel */ } - }; --- -1.8.5.2 - -From 422e231e0893a542bee0b89f5074ed6f31ec894d Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -Date: Fri, 20 Dec 2013 12:40:16 +0200 -Subject: [PATCH 4/6] ASoC: hdmi-codec: Add devicetree binding with - documentation - -Signed-off-by: Jyri Sarha <jsarha@ti.com> -cc: bcousson@baylibre.com ---- - Documentation/devicetree/bindings/sound/hdmi.txt | 17 +++++++++++++++++ - sound/soc/codecs/hdmi.c | 10 ++++++++++ - 2 files changed, 27 insertions(+) - create mode 100644 Documentation/devicetree/bindings/sound/hdmi.txt - -diff --git a/Documentation/devicetree/bindings/sound/hdmi.txt b/Documentation/devicetree/bindings/sound/hdmi.txt -new file mode 100644 -index 0000000..31af7bc ---- /dev/null -+++ b/Documentation/devicetree/bindings/sound/hdmi.txt -@@ -0,0 +1,17 @@ -+Device-Tree bindings for dummy HDMI codec -+ -+Required properties: -+ - compatible: should be "linux,hdmi-audio". -+ -+CODEC output pins: -+ * TX -+ -+CODEC input pins: -+ * RX -+ -+Example node: -+ -+ hdmi_audio: hdmi_audio@0 { -+ compatible = "linux,hdmi-audio"; -+ status = "okay"; -+ }; -diff --git a/sound/soc/codecs/hdmi.c b/sound/soc/codecs/hdmi.c -index 68342b1..6d2fcf1 100644 ---- a/sound/soc/codecs/hdmi.c -+++ b/sound/soc/codecs/hdmi.c -@@ -20,6 +20,7 @@ - */ - #include <linux/module.h> - #include <sound/soc.h> -+#include <linux/of_device.h> - - #define DRV_NAME "hdmi-audio-codec" - -@@ -60,6 +61,14 @@ static struct snd_soc_dai_driver hdmi_codec_dai = { - - }; - -+#ifdef CONFIG_OF -+static const struct of_device_id hdmi_audio_codec_ids[] = { -+ { .compatible = "linux,hdmi-audio", }, -+ { } -+}; -+MODULE_DEVICE_TABLE(of, hdmi_audio_codec_ids); -+#endif -+ - static struct snd_soc_codec_driver hdmi_codec = { - .dapm_widgets = hdmi_widgets, - .num_dapm_widgets = ARRAY_SIZE(hdmi_widgets), -@@ -83,6 +92,7 @@ static struct platform_driver hdmi_codec_driver = { - .driver = { - .name = DRV_NAME, - .owner = THIS_MODULE, -+ .of_match_table = of_match_ptr(hdmi_audio_codec_ids), - }, - - .probe = hdmi_codec_probe, --- -1.8.5.2 - -From 73fd20e4b35cd01e12c4a0f5fef41b4836307d13 Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -Date: Fri, 20 Dec 2013 12:40:54 +0200 -Subject: [PATCH 5/6] ASoC: davinci: HDMI audio build for AM33XX and TDA998x - -Adds configuration option for HDMI audio support for AM33XX based -boards with NXP TDA998x HDMI transmitter. The audio is connected to -NXP TDA998x trough McASP running in i2s mode. - -Signed-off-by: Jyri Sarha <jsarha@ti.com> ---- - sound/soc/davinci/Kconfig | 12 ++++++++++++ - sound/soc/davinci/Makefile | 1 + - 2 files changed, 13 insertions(+) - -diff --git a/sound/soc/davinci/Kconfig b/sound/soc/davinci/Kconfig -index 95970f5..b257413 100644 ---- a/sound/soc/davinci/Kconfig -+++ b/sound/soc/davinci/Kconfig -@@ -27,6 +27,18 @@ config SND_AM33XX_SOC_EVM - AM335X-EVMSK, and BeagelBone with AudioCape boards have this - setup. - -+config SND_AM335X_SOC_NXPTDA_EVM -+ tristate "HDMI Audio for the AM33XX chip based boards with TDA998x" -+ depends on SND_DAVINCI_SOC && SOC_AM33XX -+ depends on DRM_TILCDC && DRM_I2C_NXP_TDA998X -+ select SND_SOC_HDMI_CODEC -+ select SND_DAVINCI_SOC_MCASP -+ help -+ Say Y or M if you want to add support for HDMI SoC audio on -+ AM33XX boards with NXP TDA998x HDMI transmitter. For example -+ BeagleBoneBack. The audio is connected to NXP TDA998x trough -+ McASP running in i2s mode. -+ - config SND_DAVINCI_SOC_EVM - tristate "SoC Audio support for DaVinci DM6446, DM355 or DM365 EVM" - depends on SND_DAVINCI_SOC -diff --git a/sound/soc/davinci/Makefile b/sound/soc/davinci/Makefile -index bc81e79..b26ec69 100644 ---- a/sound/soc/davinci/Makefile -+++ b/sound/soc/davinci/Makefile -@@ -17,3 +17,4 @@ obj-$(CONFIG_SND_AM33XX_SOC_EVM) += snd-soc-evm.o - obj-$(CONFIG_SND_DM6467_SOC_EVM) += snd-soc-evm.o - obj-$(CONFIG_SND_DA830_SOC_EVM) += snd-soc-evm.o - obj-$(CONFIG_SND_DA850_SOC_EVM) += snd-soc-evm.o -+obj-$(CONFIG_SND_AM335X_SOC_NXPTDA_EVM) += snd-soc-evm.o --- -1.8.5.2 - -From 58fcbb33b2e7f5bffa85ac9e7da96a791c68460b Mon Sep 17 00:00:00 2001 -From: Jyri Sarha <jsarha@ti.com> -Date: Fri, 20 Dec 2013 12:41:44 +0200 -Subject: [PATCH 6/6] drm/tilcdc: Add I2C HDMI audio config for tda998x - -The configuration is needed for HDMI audio. The "swap" and "mirr" -parameters have to be correctly set in the configuration in order to -have proper colors in the HDMI picture. - -Signed-off-by: Jyri Sarha <jsarha@ti.com> -cc: airlied@linux.ie ---- - drivers/gpu/drm/tilcdc/tilcdc_slave.c | 24 +++++++++++++++++++++++- - 1 file changed, 23 insertions(+), 1 deletion(-) - -diff --git a/drivers/gpu/drm/tilcdc/tilcdc_slave.c b/drivers/gpu/drm/tilcdc/tilcdc_slave.c -index 595068b..e43240a 100644 ---- a/drivers/gpu/drm/tilcdc/tilcdc_slave.c -+++ b/drivers/gpu/drm/tilcdc/tilcdc_slave.c -@@ -19,6 +19,7 @@ - #include <linux/pinctrl/pinmux.h> - #include <linux/pinctrl/consumer.h> - #include <drm/drm_encoder_slave.h> -+#include <drm/i2c/tda998x.h> - - #include "tilcdc_drv.h" - -@@ -111,8 +112,29 @@ static const struct drm_encoder_helper_funcs slave_encoder_helper_funcs = { - .restore = drm_i2c_encoder_restore, - }; - -+static struct tda998x_encoder_params tda998x_pdata = { -+ .swap_b = 0x3, -+ .mirr_b = 0x0, -+ .swap_a = 0x2, -+ .mirr_a = 0x0, -+ .swap_d = 0x1, -+ .mirr_d = 0x0, -+ .swap_c = 0x0, -+ .mirr_c = 0x0, -+ .swap_f = 0x5, -+ .mirr_f = 0x0, -+ .swap_e = 0x4, -+ .mirr_e = 0x0, -+ .audio_cfg = 0x3, /* I2S mode */ -+ .audio_clk_cfg = 1, /* select clock pin */ -+ .audio_frame[1] = 1, /* channels - 1 */ -+ .audio_format = AFMT_I2S, -+ .audio_sample_rate = 48000, -+}; -+ - static const struct i2c_board_info info = { -- I2C_BOARD_INFO("tda998x", 0x70) -+ I2C_BOARD_INFO("tda998x", 0x70), -+ .platform_data = &tda998x_pdata, - }; - - static struct drm_encoder *slave_encoder_create(struct drm_device *dev, --- -1.8.5.2 - diff --git a/arm-imx6-utilite.patch b/arm-imx6-utilite.patch index 9274d802..35f34c16 100644 --- a/arm-imx6-utilite.patch +++ b/arm-imx6-utilite.patch @@ -31,14 +31,14 @@ diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index 8081479..5672e91 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile -@@ -137,6 +137,7 @@ +@@ -162,6 +162,7 @@ dtb-$(CONFIG_ARCH_MXC) += \ imx6dl-sabresd.dtb \ imx6dl-wandboard.dtb \ imx6q-arm2.dtb \ + imx6q-cm-fx6.dtb \ + imx6q-cubox-i.dtb \ imx6q-phytec-pbab01.dtb \ imx6q-sabreauto.dtb \ - imx6q-sabrelite.dtb \ diff --git a/arch/arm/boot/dts/imx6q-cm-fx6.dts b/arch/arm/boot/dts/imx6q-cm-fx6.dts new file mode 100644 index 0000000..99b46f8 @@ -152,30 +152,7 @@ index 0000000..99b46f8 + pinctrl-0 = <&pinctrl_uart4>; + status = "okay"; +}; -commit a26be0f051e03b9676a39799ca64d5888361d70e -Author: Sascha Hauer <s.hauer@pengutronix.de> -Date: Thu Jan 16 13:44:19 2014 +0100 - - ARM: dts: imx6q: Add spi4 alias - - The quad version has a SPI controller more than the other - versions. Add an alias for it. - - Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> - Signed-off-by: Shawn Guo <shawn.guo@linaro.org> - -diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi -index 6295fa8..422d169 100644 ---- a/arch/arm/boot/dts/imx6q.dtsi -+++ b/arch/arm/boot/dts/imx6q.dtsi -@@ -13,6 +13,10 @@ - #include "imx6qdl.dtsi" - - / { -+ aliases { -+ spi4 = &ecspi5; -+ }; + - cpus { - #address-cells = <1>; - #size-cells = <0>; ++&sata { ++ status = "okay"; ++}; diff --git a/arm-tegra-paz00-panel-dts.patch b/arm-tegra-paz00-panel-dts.patch new file mode 100644 index 00000000..e64f2ce1 --- /dev/null +++ b/arm-tegra-paz00-panel-dts.patch @@ -0,0 +1,99 @@ +From fb4a8356eb67514b10618d1e9e4059ced14c05f2 Mon Sep 17 00:00:00 2001 +From: Marc Dietrich <marvin24@gmx.de> +Date: Sat, 21 Dec 2013 21:38:13 +0100 +Subject: [PATCH] ARM: tegra: paz00: Add LVDS support to device tree + +Add backlight and panel nodes for the PAZ00 TFT LCD panel. + +Signed-off-by: Marc Dietrich <marvin24@gmx.de> +--- + arch/arm/boot/dts/tegra20-paz00.dts | 46 ++++++++++++++++++++++++++++++++++- + 1 files changed, 45 insertions(+), 1 deletions(-) + +diff --git a/arch/arm/boot/dts/tegra20-paz00.dts b/arch/arm/boot/dts/tegra20-paz00.dts +index c7cd8e6..9a39a80 100644 +--- a/arch/arm/boot/dts/tegra20-paz00.dts ++++ b/arch/arm/boot/dts/tegra20-paz00.dts +@@ -17,6 +17,14 @@ + }; + + host1x@50000000 { ++ dc@54200000 { ++ rgb { ++ status = "okay"; ++ ++ nvidia,panel = <&panel>; ++ }; ++ }; ++ + hdmi@54280000 { + status = "okay"; + +@@ -257,7 +265,11 @@ + status = "okay"; + }; + +- i2c@7000c000 { ++ pwm: pwm@7000a000 { ++ status = "okay"; ++ }; ++ ++ lvds_ddc: i2c@7000c000 { + status = "okay"; + clock-frequency = <400000>; + +@@ -475,6 +487,18 @@ + non-removable; + }; + ++ backlight: backlight { ++ compatible = "pwm-backlight"; ++ ++ enable-gpios = <&gpio TEGRA_GPIO(U, 4) GPIO_ACTIVE_HIGH>; ++ pwms = <&pwm 0 5000000>; ++ ++ brightness-levels = <0 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240 255>; ++ default-brightness-level = <10>; ++ ++ backlight-boot-off; ++ }; ++ + clocks { + compatible = "simple-bus"; + #address-cells = <1>; +@@ -509,6 +533,16 @@ + }; + }; + ++ panel: panel { ++ compatible = "samsung,ltn101nt05", "simple-panel"; ++ ++ ddc-i2c-bus = <&lvds_ddc>; ++ power-supply = <&vdd_pnl_reg>; ++ enable-gpios = <&gpio TEGRA_GPIO(M, 6) GPIO_ACTIVE_HIGH>; ++ ++ backlight = <&backlight>; ++ }; ++ + regulators { + compatible = "simple-bus"; + #address-cells = <1>; +@@ -522,6 +556,16 @@ + regulator-max-microvolt = <5000000>; + regulator-always-on; + }; ++ ++ vdd_pnl_reg: regulator@1 { ++ compatible = "regulator-fixed"; ++ reg = <1>; ++ regulator-name = "+3VS,vdd_pnl"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ gpio = <&gpio TEGRA_GPIO(A, 4) GPIO_ACTIVE_HIGH>; ++ enable-active-high; ++ }; + }; + + sound { +-- +1.7.1 diff --git a/cifs-mask-off-top-byte-in-get_rfc1002_length.patch b/cifs-mask-off-top-byte-in-get_rfc1002_length.patch deleted file mode 100644 index 572b0b32..00000000 --- a/cifs-mask-off-top-byte-in-get_rfc1002_length.patch +++ /dev/null @@ -1,88 +0,0 @@ -Path: news.gmane.org!not-for-mail -From: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> -Newsgroups: gmane.linux.kernel.cifs -Subject: [PATCH] cifs: mask off top byte in get_rfc1002_length() -Date: Tue, 25 Feb 2014 05:27:17 -0800 -Lines: 31 -Approved: news@gmane.org -Message-ID: <1393334837-6480-1-git-send-email-jlayton@redhat.com> -NNTP-Posting-Host: plane.gmane.org -X-Trace: ger.gmane.org 1393334843 15695 80.91.229.3 (25 Feb 2014 13:27:23 GMT) -X-Complaints-To: usenet@ger.gmane.org -NNTP-Posting-Date: Tue, 25 Feb 2014 13:27:23 +0000 (UTC) -Cc: klaus-jjkdzbv0JQgAvxtiuMwx3w@public.gmane.org, sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org -To: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org -Original-X-From: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Tue Feb 25 14:27:30 2014 -Return-path: <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> -Envelope-to: glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org -Original-Received: from vger.kernel.org ([209.132.180.67]) - by plane.gmane.org with esmtp (Exim 4.69) - (envelope-from <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>) - id 1WII2h-0005Fo-GS - for glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org; Tue, 25 Feb 2014 14:27:27 +0100 -Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org) by vger.kernel.org via listexpand - id S1752439AbaBYN10 (ORCPT <rfc822;glkc-linux-cifs@m.gmane.org>); - Tue, 25 Feb 2014 08:27:26 -0500 -Original-Received: from mail-pa0-f41.google.com ([209.85.220.41]:49339 "EHLO - mail-pa0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1752329AbaBYN10 (ORCPT - <rfc822;linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>); Tue, 25 Feb 2014 08:27:26 -0500 -Original-Received: by mail-pa0-f41.google.com with SMTP id fa1so8081181pad.14 - for <linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>; Tue, 25 Feb 2014 05:27:25 -0800 (PST) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; - bh=I4guc46K5w45idU9LGsBcibRE60G/EkhmnDXX8d4lFc=; - b=YI5Ag6zKBzcWzALN9+g56fwi/XbV8N9i0JCfbhVRCEv9/JYNUHzVBZ+WO3Wqaf54U/ - qNNjrH1Io0LpiVTF5+ZuiDEee4Vt8QbMP7iD7rkxh4RZq9clRgum/wVTwV5l/SfIwud7 - HqGJlJ3jSGtTO4bhBuvX5mD4FrHw4RZJvaWzowzMvYH536b8nZu9typSL4G+KQEV34la - 19S6ikv1BjtJ49PUS3Gf9xMsqwkJNrLVBauag3yqhztcTSnP5UrxuauSWX0c68R2Lt70 - hdx5HGMQ0P2wgG6+Qvs3tEl2+infCJkpOH5X7KSvN1pT9hxtt6iE5QGFh5dtUTKe7FlA - /grg== -X-Gm-Message-State: ALoCoQlVCE5L6UI8IEC9kyuJlrAWBVyYN/eaeZJVp0fm2f2fDE/042yEkI6q9uGoP1vHrftB4/7C -X-Received: by 10.69.31.65 with SMTP id kk1mr6563795pbd.47.1393334845726; - Tue, 25 Feb 2014 05:27:25 -0800 (PST) -Original-Received: from corrin.poochiereds.net.cthon.org (64-71-23-226.static.wiline.com. [64.71.23.226]) - by mx.google.com with ESMTPSA id eb5sm143431078pad.22.2014.02.25.05.27.24 - for <multiple recipients> - (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); - Tue, 25 Feb 2014 05:27:25 -0800 (PST) -X-Mailer: git-send-email 1.8.5.3 -Original-Sender: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org -Precedence: bulk -List-ID: <linux-cifs.vger.kernel.org> -X-Mailing-List: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org -Xref: news.gmane.org gmane.linux.kernel.cifs:9419 -Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.cifs/9419> - -The 32-bit rfc1002 header field consists of a type byte and then a -24-bit length field, but get_rfc1002_length doesn't mask off the top -byte. - -In most cases, it's not a problem since the RFC1002_SESSION_MESSAGE type -is '\0', but when doing a RFC1002 session establishment, the type is -non-zero and that throws off the returned length in smb_send_rqst. - -Reported-by: klaus-jjkdzbv0JQgAvxtiuMwx3w@public.gmane.org -Tested-by: Sachin Prabhu <sprabhu-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> -Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ---- - fs/cifs/cifsglob.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h -index e7fe49e..45376a4 100644 ---- a/fs/cifs/cifsglob.h -+++ b/fs/cifs/cifsglob.h -@@ -506,7 +506,7 @@ struct cifs_mnt_data { - static inline unsigned int - get_rfc1002_length(void *buf) - { -- return be32_to_cpu(*((__be32 *)buf)); -+ return be32_to_cpu(*((__be32 *)buf)) & 0xffffff; - } - - static inline void --- -1.8.5.3 - diff --git a/cifs-sanity-check-length-of-data-to-send-before-sending.patch b/cifs-sanity-check-length-of-data-to-send-before-sending.patch deleted file mode 100644 index b0f31156..00000000 --- a/cifs-sanity-check-length-of-data-to-send-before-sending.patch +++ /dev/null @@ -1,129 +0,0 @@ -Path: news.gmane.org!not-for-mail -From: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> -Newsgroups: gmane.linux.kernel.cifs -Subject: [PATCH] cifs: sanity check length of data to send before sending -Date: Fri, 14 Feb 2014 07:21:00 -0500 -Lines: 72 -Approved: news@gmane.org -Message-ID: <1392380460-6997-1-git-send-email-jlayton@redhat.com> -NNTP-Posting-Host: plane.gmane.org -X-Trace: ger.gmane.org 1392380460 7637 80.91.229.3 (14 Feb 2014 12:21:00 GMT) -X-Complaints-To: usenet@ger.gmane.org -NNTP-Posting-Date: Fri, 14 Feb 2014 12:21:00 +0000 (UTC) -Cc: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org -To: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org -Original-X-From: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Fri Feb 14 13:21:08 2014 -Return-path: <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org> -Envelope-to: glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org -Original-Received: from vger.kernel.org ([209.132.180.67]) - by plane.gmane.org with esmtp (Exim 4.69) - (envelope-from <linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>) - id 1WEHlT-0001gj-Pf - for glkc-linux-cifs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org; Fri, 14 Feb 2014 13:21:08 +0100 -Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org) by vger.kernel.org via listexpand - id S1751935AbaBNMVH (ORCPT <rfc822;glkc-linux-cifs@m.gmane.org>); - Fri, 14 Feb 2014 07:21:07 -0500 -Original-Received: from mail-qc0-f170.google.com ([209.85.216.170]:60206 "EHLO - mail-qc0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org - with ESMTP id S1751288AbaBNMVG (ORCPT - <rfc822;linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>); Fri, 14 Feb 2014 07:21:06 -0500 -Original-Received: by mail-qc0-f170.google.com with SMTP id e9so20306487qcy.29 - for <linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>; Fri, 14 Feb 2014 04:21:05 -0800 (PST) -X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; - d=1e100.net; s=20130820; - h=x-gm-message-state:sender:from:to:cc:subject:date:message-id; - bh=8FvTfO9jKY+Fzw5nmoxw6PuPxfXM/khvtS/Hnxnu+to=; - b=i7Gy5AwQiFX7hVMJJMjvAR61u2zO8E7tTAgE0SfPp25untipj/RTae8xcA+0vVrznY - sZwOPATUyFmu2mXAKh5L0WutFNF3SQirPVgM5jaKlMZQT253YInioO1AwD00Jtio00LX - wOt19I6v3umZfSqCBw1dyDiH66kX4xKaKqdQoY2+nEsicG4RJvp4PpaLhG454nfpVxfN - HeskcNJ5RBvg17JpDvKX6THqbKWsHSHHqKKCROERxeTbs7HTgV9jTNSDeOuPr6Loiovi - 9DBQwQwMmlC9NebDqR5xatva30WRhyCp/xyHNaoY+aVk8N6r5YlFphLmLRvmaZ0Ed2CH - 17WA== -X-Gm-Message-State: ALoCoQmHyaepi0IHvwKS024wRq/srAdGRdo0UGUynLggzf843S3Yj7dwW53RjNbTDG1Y4w+/mqOB -X-Received: by 10.229.13.133 with SMTP id c5mr12315963qca.22.1392380465000; - Fri, 14 Feb 2014 04:21:05 -0800 (PST) -Original-Received: from tlielax.poochiereds.net ([2001:470:8:d63:3a60:77ff:fe93:a95d]) - by mx.google.com with ESMTPSA id u4sm15047497qai.21.2014.02.14.04.21.04 - for <multiple recipients> - (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); - Fri, 14 Feb 2014 04:21:04 -0800 (PST) -X-Mailer: git-send-email 1.8.5.3 -Original-Sender: linux-cifs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org -Precedence: bulk -List-ID: <linux-cifs.vger.kernel.org> -X-Mailing-List: linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org -Xref: news.gmane.org gmane.linux.kernel.cifs:9402 -Archived-At: <http://permalink.gmane.org/gmane.linux.kernel.cifs/9402> - -We had a bug discovered recently where an upper layer function -(cifs_iovec_write) could pass down a smb_rqst with an invalid amount of -data in it. The length of the SMB frame would be correct, but the rqst -struct would cause smb_send_rqst to send nearly 4GB of data. - -This should never be the case. Add some sanity checking to the beginning -of smb_send_rqst that ensures that the amount of data we're going to -send agrees with the length in the RFC1002 header. If it doesn't, WARN() -and return -EIO to the upper layers. - -Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> ---- - fs/cifs/transport.c | 29 +++++++++++++++++++++++++++++ - 1 file changed, 29 insertions(+) - -diff --git a/fs/cifs/transport.c b/fs/cifs/transport.c -index b37570952846..18cd5650a5fc 100644 ---- a/fs/cifs/transport.c -+++ b/fs/cifs/transport.c -@@ -270,6 +270,26 @@ cifs_rqst_page_to_kvec(struct smb_rqst *rqst, unsigned int idx, - iov->iov_len = rqst->rq_pagesz; - } - -+static unsigned long -+rqst_len(struct smb_rqst *rqst) -+{ -+ unsigned int i; -+ struct kvec *iov = rqst->rq_iov; -+ unsigned long buflen = 0; -+ -+ /* total up iov array first */ -+ for (i = 0; i < rqst->rq_nvec; i++) -+ buflen += iov[i].iov_len; -+ -+ /* add in the page array if there is one */ -+ if (rqst->rq_npages) { -+ buflen += rqst->rq_pagesz * (rqst->rq_npages - 1); -+ buflen += rqst->rq_tailsz; -+ } -+ -+ return buflen; -+} -+ - static int - smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst) - { -@@ -277,6 +297,7 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst) - struct kvec *iov = rqst->rq_iov; - int n_vec = rqst->rq_nvec; - unsigned int smb_buf_length = get_rfc1002_length(iov[0].iov_base); -+ unsigned long send_length; - unsigned int i; - size_t total_len = 0, sent; - struct socket *ssocket = server->ssocket; -@@ -285,6 +306,14 @@ smb_send_rqst(struct TCP_Server_Info *server, struct smb_rqst *rqst) - if (ssocket == NULL) - return -ENOTSOCK; - -+ /* sanity check send length */ -+ send_length = rqst_len(rqst); -+ if (send_length != smb_buf_length + 4) { -+ WARN(1, "Send length mismatch(send_length=%lu smb_buf_length=%u)\n", -+ send_length, smb_buf_length); -+ return -EIO; -+ } -+ - cifs_dbg(FYI, "Sending smb: smb_len=%u\n", smb_buf_length); - dump_smb(iov[0].iov_base, iov[0].iov_len); - --- -1.8.5.3 - diff --git a/config-arm-generic b/config-arm-generic index 3c2f27c4..cd56b249 100644 --- a/config-arm-generic +++ b/config-arm-generic @@ -20,6 +20,7 @@ CONFIG_RESET_GPIO=y CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_RTC_DRV_SNVS is not set +# CONFIG_RTC_DRV_HYM8563 is not set CONFIG_BACKLIGHT_PWM=m CONFIG_INPUT_PWM_BEEPER=m CONFIG_ARM_SP805_WATCHDOG=m @@ -28,7 +29,6 @@ CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y # CONFIG_ARM_DT_BL_CPUFREQ is not set CONFIG_NR_CPUS=8 -CONFIG_ARM_DMA_USE_IOMMU=y CONFIG_SWIOTLB=y CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_FB_SIMPLE=y @@ -38,10 +38,14 @@ CONFIG_HAVE_PERF_USER_STACK_DUMP=y # ARM AMBA generic HW CONFIG_ARM_AMBA=y +CONFIG_ARM_CCI=y +CONFIG_ARM_DMA_USE_IOMMU=y CONFIG_ARM_GIC=y +CONFIG_ARM_GLOBAL_TIMER=y +CONFIG_ARM_SMMU=y CONFIG_MMC_ARMMMCI=y -CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y CONFIG_SERIO_AMBAKMI=y CONFIG_OC_ETM=y CONFIG_FB_ARMCLCD=y @@ -67,14 +71,18 @@ CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_FLATTREE=y CONFIG_OF_GPIO=y CONFIG_OF_I2C=m +CONFIG_OF_IOMMU=y CONFIG_OF_IRQ=y CONFIG_OF_MDIO=m CONFIG_OF_MTD=y CONFIG_OF_NET=y CONFIG_OF_PCI_IRQ=m CONFIG_OF_PCI=m +CONFIG_OF_RESERVED_MEM=y +CONFIG_PATA_OF_PLATFORM=m # CONFIG_OF_SELFTEST is not set CONFIG_SERIAL_OF_PLATFORM=y +CONFIG_THERMAL_OF=y # External Connectors CONFIG_EXTCON=m @@ -100,6 +108,7 @@ CONFIG_MTD_PHYSMAP_OF=m CONFIG_GPIO_DEVRES=y CONFIG_GPIO_GENERIC=m CONFIG_GPIO_GENERIC_PLATFORM=m +CONFIG_GPIO_WATCHDOG=m CONFIG_GPIOLIB=y CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y CONFIG_ARCH_REQUIRE_GPIOLIB=y @@ -109,10 +118,10 @@ CONFIG_POWER_RESET_GPIO=y CONFIG_POWER_RESET_RESTART=y #i2c +CONFIG_I2C_ARB_GPIO_CHALLENGE=m CONFIG_I2C_BOARDINFO=y CONFIG_I2C_GPIO=m CONFIG_I2C_MUX=m -# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set CONFIG_I2C_MUX_GPIO=m CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_MUX_PCA9541=m @@ -122,7 +131,7 @@ CONFIG_SENSORS_IIO_HWMON=m CONFIG_IIO_SYSFS_TRIGGER=m # PHY framework -CONFIG_GENERIC_PHY=m +CONFIG_GENERIC_PHY=y # MFD CONFIG_MFD_CORE=m @@ -130,8 +139,21 @@ CONFIG_MFD_CORE=m CONFIG_SMC91X=m CONFIG_SMC911X=m +CONFIG_CPU_THERMAL=y CONFIG_THERMAL_GOV_USER_SPACE=y +# Contiguous Memory Allocator +CONFIG_CMA=y +CONFIG_DMA_CMA=y +# CONFIG_CMA_DEBUG is not set +CONFIG_CMA_SIZE_MBYTES=16 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 +CONFIG_CMA_AREAS=7 + # CONFIG_CRYPTO_TEST is not set # CONFIG_TRANSPARENT_HUGEPAGE is not set # CONFIG_XEN is not set @@ -140,7 +162,6 @@ CONFIG_THERMAL_GOV_USER_SPACE=y # CONFIG_DRM_SHMOBILE is not set # CONFIG_I2C_SH_MOBILE is not set # CONFIG_MMC_DW_SOCFPGA is not set -# CONFIG_ARM_SMMU is not set # CONFIG_I2C_NOMADIK is not set # CONFIG_IRQ_DOMAIN_DEBUG is not set # CONFIG_LEDS_RENESAS_TPU is not set @@ -150,6 +171,13 @@ CONFIG_THERMAL_GOV_USER_SPACE=y # CONFIG_DRM_TEGRA is not set # CONFIG_SHMOBILE_IOMMU is not set +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_QCOM is not set + +# CONFIG_ARM_PTDUMP is not set + +# CONFIG_PATA_PLATFORM is not set + ### turn off things which make no sense on embedded SoC # core @@ -164,6 +192,7 @@ CONFIG_THERMAL_GOV_USER_SPACE=y # CONFIG_NET_VENDOR_EXAR is not set # CONFIG_NET_VENDOR_INTEL is not set # CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_BROCADE is not set # scsi @@ -173,8 +202,11 @@ CONFIG_THERMAL_GOV_USER_SPACE=y # CONFIG_SCSI_IPS is not set # CONFIG_SCSI_CXGB3_ISCSI is not set # CONFIG_SCSI_CXGB4_ISCSI is not set +# CONFIG_SCSI_BFA_FC is not set # serial # CONFIG_SERIAL_SH_SCI is not set CONFIG_CRASH=m + +# CONFIG_DEBUG_SET_MODULE_RONX is not set diff --git a/config-arm64 b/config-arm64 index 78ae1569..38a0debd 100644 --- a/config-arm64 +++ b/config-arm64 @@ -12,8 +12,6 @@ CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y CONFIG_ARCH_REQUIRE_GPIOLIB=y # CONFIG_ARM64_64K_PAGES is not set CONFIG_COMPAT=y -# CONFIG_ARM_DT_BL_CPUFREQ is not set -CONFIG_ARM_SMMU=y CONFIG_BCMA_POSSIBLE=y CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 @@ -42,7 +40,8 @@ CONFIG_HAVE_NET_DSA=y CONFIG_HVC_DRIVER=y CONFIG_HZ=100 -# CONFIG_KVM is not set +CONFIG_KVM=y +CONFIG_KVM_ARM_MAX_VCPUS=8 CONFIG_LOG_BUF_SHIFT=14 CONFIG_NFS_ACL_SUPPORT=y diff --git a/config-armv7 b/config-armv7 index 95cdcd1f..d609bc65 100644 --- a/config-armv7 +++ b/config-armv7 @@ -1,6 +1,6 @@ # ARM unified arch kernel -# CONFIG_ARCH_EXYNOS_MULTI is not set +# CONFIG_ARCH_BERLIN is not set # CONFIG_ARCH_KEYSTONE is not set CONFIG_ARCH_MVEBU=y CONFIG_ARCH_MXC=y @@ -10,7 +10,6 @@ CONFIG_ARCH_OMAP4=y CONFIG_ARCH_PICOXCELL=y CONFIG_ARCH_ROCKCHIP=y CONFIG_ARCH_SOCFPGA=y -CONFIG_ARCH_SUNXI=y CONFIG_ARCH_TEGRA=y CONFIG_ARCH_U8500=y # CONFIG_ARCH_VIRT is not set @@ -32,7 +31,6 @@ CONFIG_CACHE_TAUROS2=y CONFIG_MV_XOR=y CONFIG_CRYPTO_DEV_MV_CESA=m CONFIG_MV643XX_ETH=m -CONFIG_I2C_MV64XXX=m CONFIG_PINCTRL_MVEBU=y CONFIG_PINCTRL_ARMADA_370=y CONFIG_PINCTRL_ARMADA_XP=y @@ -44,11 +42,13 @@ CONFIG_RTC_DRV_MV=m CONFIG_MVNETA=m CONFIG_GPIO_MVEBU=y CONFIG_MVEBU_CLK_CORE=y +CONFIG_MVEBU_CLK_COREDIV=y CONFIG_MVEBU_CLK_GATING=y CONFIG_MMC_MVSDIO=m CONFIG_SPI_ORION=m CONFIG_USB_MV_UDC=m CONFIG_MVEBU_MBUS=y +CONFIG_PHY_MVEBU_SATA=y CONFIG_ARMADA_THERMAL=m CONFIG_DRM_ARMADA=m @@ -100,7 +100,6 @@ CONFIG_OMAP_IOVMM=m CONFIG_HWSPINLOCK_OMAP=m CONFIG_OMAP3_EMU=y # CONFIG_OMAP3_SDRC_AC_TIMING is not set -CONFIG_OMAP_WATCHDOG=m CONFIG_SERIAL_OMAP=y CONFIG_SERIAL_OMAP_CONSOLE=y @@ -124,7 +123,6 @@ CONFIG_TWL6040_CORE=y CONFIG_CLK_TWL6040=m CONFIG_OMAP_INTERCONNECT=m CONFIG_MFD_OMAP_USB_HOST=y -CONFIG_MTD_ONENAND_OMAP2=m CONFIG_HDQ_MASTER_OMAP=m CONFIG_REGULATOR_TWL4030=y CONFIG_BACKLIGHT_PANDORA=m @@ -146,11 +144,11 @@ CONFIG_TWL6030_GPADC=m # OMAP5 (possibly other devices too) CONFIG_MFD_PALMAS=y -CONFIG_PINCTRL_PALMAS=y CONFIG_EXTCON_PALMAS=m -CONFIG_RTC_DRV_PALMAS=m -CONFIG_REGULATOR_PALMAS=m CONFIG_GPIO_PALMAS=y +CONFIG_PINCTRL_PALMAS=y +CONFIG_REGULATOR_PALMAS=y +CONFIG_RTC_DRV_PALMAS=m CONFIG_WL_TI=y CONFIG_WLCORE_SDIO=m @@ -160,7 +158,9 @@ CONFIG_WILINK_PLATFORM_DATA=y CONFIG_MFD_WL1273_CORE=m CONFIG_NFC_WILINK=m +CONFIG_MTD_ONENAND_OMAP2=m CONFIG_MTD_NAND_OMAP2=m +CONFIG_MTD_NAND_OMAP_BCH=y CONFIG_SPI_OMAP24XX=m CONFIG_MFD_TI_SSP=m CONFIG_SPI_TI_SSP=m @@ -185,7 +185,7 @@ CONFIG_POWER_AVS=y CONFIG_POWER_AVS_OMAP=y CONFIG_POWER_AVS_OMAP_CLASS3=y -# CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set +CONFIG_ARM_OMAP2PLUS_CPUFREQ=y CONFIG_PWM_TIECAP=m CONFIG_PWM_TIEHRPWM=m @@ -307,29 +307,29 @@ CONFIG_TI_DAVINCI_EMAC=m CONFIG_TI_DAVINCI_MDIO=m CONFIG_TI_CPSW=m CONFIG_TI_CPSW_PHY_SEL=y -# CONFIG_TI_CPTS is not set +CONFIG_TI_CPTS=y +# Needed for BBone White +CONFIG_REGULATOR_TPS65217=y CONFIG_TI_EMIF=m CONFIG_DRM_TILCDC=m CONFIG_SPI_DAVINCI=m CONFIG_SND_DAVINCI_SOC=m +CONFIG_SND_DAVINCI_SOC_I2S=m +CONFIG_SND_DAVINCI_SOC_MCASP=m +CONFIG_SND_DAVINCI_SOC_VCIF=m +CONFIG_SND_DAVINCI_SOC_GENERIC_EVM=m +CONFIG_SND_AM33XX_SOC_EVM=m CONFIG_REGULATOR_TI_ABB=m CONFIG_TI_ADC081C=m CONFIG_TI_AM335X_ADC=m CONFIG_PWM_TIPWMSS=y -CONFIG_SND_AM33XX_SOC_EVM=m -CONFIG_SND_AM335X_SOC_NXPTDA_EVM=m - -# Allwinner a1x -CONFIG_PINCTRL_SUNXI=y -CONFIG_SUNXI_WATCHDOG=m -CONFIG_MDIO_SUN4I=m -CONFIG_NET_VENDOR_ALLWINNER=y -CONFIG_SUN4I_EMAC=m -CONFIG_EEPROM_SUNXI_SID=m +# CONFIG_GPIO_DAVINCI is not set +# CONFIG_DAVINCI_WATCHDOG is not set # i.MX CONFIG_MXC_IRQ_PRIOR=y # CONFIG_MXC_DEBUG_BOARD is not set +CONFIG_SOC_IMX50=y CONFIG_SOC_IMX53=y CONFIG_SOC_IMX6Q=y CONFIG_SOC_IMX6SL=y @@ -340,6 +340,7 @@ CONFIG_ARM_IMX6Q_CPUFREQ=m CONFIG_IMX_THERMAL=m CONFIG_PATA_IMX=m CONFIG_PCI_IMX6=y +# CONFIG_USB_EHCI_MXC is not set CONFIG_USB_CHIPIDEA=m CONFIG_USB_CHIPIDEA_UDC=y CONFIG_USB_CHIPIDEA_HOST=y @@ -348,13 +349,18 @@ CONFIG_USB_FSL_USB2=m CONFIG_NET_VENDOR_FREESCALE=y CONFIG_FEC=m CONFIG_KEYBOARD_IMX=m +CONFIG_KEYBOARD_STMPE=m +CONFIG_TOUCHSCREEN_STMPE=m CONFIG_SERIAL_IMX=y CONFIG_SERIAL_IMX_CONSOLE=y CONFIG_PINCTRL_IMX6SL=y CONFIG_I2C_IMX=m +CONFIG_STMPE_I2C=y CONFIG_SPI_IMX=m +CONFIG_STMPE_SPI=y CONFIG_MFD_MC13783=m CONFIG_MFD_MC13XXX_SPI=m +CONFIG_MFD_STMPE=y CONFIG_W1_MASTER_MXC=m CONFIG_IMX_WEIM=y CONFIG_IMX2_WDT=m @@ -362,8 +368,10 @@ CONFIG_HW_RANDOM_MXC_RNGA=m CONFIG_CRYPTO_DEV_SAHARA=m CONFIG_RTC_DRV_SNVS=m # CONFIG_FB_MX3 is not set +# CONFIG_FB_IMX is not set CONFIG_SND_IMX_SOC=m +CONFIG_SND_SOC_FSL_SPDIF=m CONFIG_SND_SOC_FSL_SSI=m CONFIG_SND_SOC_FSL_UTILS=m CONFIG_SND_SOC_IMX_SSI=m @@ -375,7 +383,6 @@ CONFIG_SND_SOC_IMX_WM8962=m CONFIG_SND_SOC_IMX_MC13783=m CONFIG_SND_SOC_IMX_SPDIF=m -CONFIG_USB_EHCI_MXC=m CONFIG_USB_IMX21_HCD=m CONFIG_USB_MXS_PHY=m CONFIG_MMC_DW_SOCFPGA=m @@ -392,7 +399,6 @@ CONFIG_AHCI_IMX=m # CONFIG_MXS_DMA is not set CONFIG_PWM_IMX=m -CONFIG_BACKLIGHT_PWM=m CONFIG_DRM_IMX=m CONFIG_DRM_IMX_FB_HELPER=m CONFIG_DRM_IMX_HDMI=m @@ -424,6 +430,7 @@ CONFIG_INPUT_DA9052_ONKEY=m CONFIG_INPUT_DA9055_ONKEY=m CONFIG_GPIO_DA9052=m CONFIG_GPIO_DA9055=m +CONFIG_GPIO_STMPE=y CONFIG_BATTERY_DA9052=m CONFIG_SENSORS_DA9052_ADC=m CONFIG_SENSORS_DA9055=m @@ -476,15 +483,9 @@ CONFIG_AB8500_BM=y CONFIG_AB8500_GPADC=y CONFIG_SENSORS_AB8500=m CONFIG_STE_MODEM_RPROC=m -CONFIG_CW1200=m -CONFIG_CW1200_WLAN_SDIO=m -CONFIG_CW1200_WLAN_SPI=m -CONFIG_UX500_WATCHDOG=m -CONFIG_IIO_ST_ACCEL_3AXIS=m -CONFIG_IIO_ST_GYRO_3AXIS=m + CONFIG_IIO_ST_GYRO_I2C_3AXIS=m CONFIG_IIO_ST_GYRO_SPI_3AXIS=m -CONFIG_IIO_ST_MAGN_3AXIS=m CONFIG_IIO_ST_MAGN_I2C_3AXIS=m CONFIG_IIO_ST_MAGN_SPI_3AXIS=m CONFIG_IIO_ST_PRESS=m @@ -497,11 +498,12 @@ CONFIG_IIO_ST_SENSORS_CORE=m # tegra CONFIG_ARCH_TEGRA_2x_SOC=y CONFIG_ARCH_TEGRA_3x_SOC=y -# CONFIG_ARCH_TEGRA_114_SOC is not set -# CONFIG_ARCH_TEGRA_124_SOC is not set +CONFIG_ARCH_TEGRA_114_SOC=y +CONFIG_ARCH_TEGRA_124_SOC=y CONFIG_ARM_TEGRA_CPUFREQ=y CONFIG_TEGRA20_MC=y CONFIG_TEGRA30_MC=y +CONFIG_TRUSTED_FOUNDATIONS=y CONFIG_SERIAL_TEGRA=y @@ -511,12 +513,13 @@ CONFIG_TEGRA_IOMMU_SMMU=y CONFIG_MMC_SDHCI_TEGRA=m CONFIG_I2C_TEGRA=m +CONFIG_I2C_MUX_PCA954x=m CONFIG_TEGRA_SYSTEM_DMA=y CONFIG_TEGRA_EMC_SCALING_ENABLE=y CONFIG_TEGRA_AHB=y CONFIG_TEGRA20_APB_DMA=y -# CONFIG_SPI_TEGRA114 is not set +CONFIG_SPI_TEGRA114=m CONFIG_SPI_TEGRA20_SFLASH=m CONFIG_SPI_TEGRA20_SLINK=m @@ -530,19 +533,18 @@ CONFIG_RTC_DRV_TEGRA=m CONFIG_SND_SOC_TEGRA=m CONFIG_SND_SOC_TEGRA_ALC5632=m +CONFIG_SND_SOC_TEGRA_MAX98090=m CONFIG_SND_SOC_TEGRA_RT5640=m CONFIG_SND_SOC_TEGRA_TRIMSLICE=m CONFIG_SND_SOC_TEGRA_WM8753=m CONFIG_SND_SOC_TEGRA_WM8903=m CONFIG_SND_SOC_TEGRA_WM9712=m CONFIG_SND_SOC_TEGRA20_AC97=m +CONFIG_SND_SOC_TEGRA20_DAS=m +CONFIG_SND_SOC_TEGRA20_SPDIF=m CONFIG_SND_SOC_TEGRA30_AHUB=m CONFIG_SND_SOC_TEGRA30_I2S=m -# bool only, upstream aiming for modular in 3.14 -# https://lkml.org/lkml/2013/11/18/47 -# CONFIG_DRM_TEGRA is not set - # AC100 (PAZ00) CONFIG_MFD_NVEC=y CONFIG_MFD_TPS80031=y @@ -560,10 +562,13 @@ CONFIG_PWM_TEGRA=m CONFIG_TEGRA_HOST1X=m CONFIG_TEGRA_HOST1X_FIREWALL=y - -CONFIG_DRM_TEGRA=y -# CONFIG_DRM_TEGRA_STAGING is not set +CONFIG_DRM_TEGRA=m +CONFIG_DRM_TEGRA_FBDEV=y # CONFIG_DRM_TEGRA_DEBUG is not set +CONFIG_DRM_TEGRA_STAGING=y +CONFIG_DRM_PANEL=y +CONFIG_DRM_PANEL_SIMPLE=m + CONFIG_CRYPTO_DEV_TEGRA_AES=m @@ -586,6 +591,7 @@ CONFIG_XILINX_EMACLITE=m CONFIG_GPIO_XILINX=y CONFIG_I2C_XILINX=m CONFIG_SPI_XILINX=m +CONFIG_MMC_SDHCI_OF_ARASAN=m # Multi function devices CONFIG_MFD_88PM800=m @@ -631,6 +637,7 @@ CONFIG_REGULATOR_MAX8973=m # CONFIG_MFD_MAX77686 is not set # CONFIG_MFD_MAX77693 is not set # CONFIG_MFD_MAX8997 is not set +# CONFIG_MFD_MAX14577 is not set # CONFIG_MFD_AAT2870_CORE is not set # CONFIG_MFD_RC5T583 is not set # CONFIG_MFD_SMSC is not set @@ -648,10 +655,9 @@ CONFIG_REGULATOR_MAX8973=m # CONFIG_VIRTUALIZATION is not set # CONFIG_POWER_RESET_QNAP is not set # CONFIG_OMAP2_DSS_DEBUG is not set -# CONFIG_DRM_TEGRA_DEBUG is not set # CONFIG_CRYPTO_DEV_UX500_DEBUG is not set # CONFIG_AB8500_DEBUG is not set # CONFIG_SOC_VF610 is not set -# CONFIG_ARM_CCI is not set # CONFIG_MMC_TMIO is not set +# CONFIG_SND_SOC_ADI is not set diff --git a/config-armv7-generic b/config-armv7-generic index 8215e605..26e90fe8 100644 --- a/config-armv7-generic +++ b/config-armv7-generic @@ -50,6 +50,7 @@ CONFIG_ALWAYS_USE_PERSISTENT_CLOCK=y # Platforms enabled/disabled globally on ARMv7 CONFIG_ARCH_HIGHBANK=y +CONFIG_ARCH_SUNXI=y CONFIG_ARCH_VEXPRESS_CA9X4=y CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y # CONFIG_ARCH_VEXPRESS_SPC is not set @@ -60,13 +61,9 @@ CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y # CONFIG_ARCH_U8500 is not set # CONFIG_ARCH_WM8850 is not set # CONFIG_ARCH_SHMOBILE_MULTI is not set - -# highbank -CONFIG_EDAC_HIGHBANK_MC=m -CONFIG_EDAC_HIGHBANK_L2=m -CONFIG_SATA_HIGHBANK=m -CONFIG_ARM_HIGHBANK_CPUFREQ=m -# CONFIG_ARM_HIGHBANK_CPUIDLE is not set +# CONFIG_ARCH_BERLIN is not set +# CONFIG_ARCH_HI3xxx is not set +# CONFIG_ARCH_MSM_DT is not set # errata # v5/v6 @@ -118,15 +115,8 @@ CONFIG_CPU_IDLE_GOV_MENU=y CONFIG_DEFAULT_MMAP_MIN_ADDR=32768 CONFIG_LSM_MMAP_MIN_ADDR=32768 -CONFIG_ARM_GLOBAL_TIMER=y - CONFIG_XZ_DEC_ARM=y -# Power management -CONFIG_PM_OPP=y -CONFIG_ARM_CPU_SUSPEND=y -CONFIG_GENERIC_CPUFREQ_CPU0=m - CONFIG_LOCAL_TIMERS=y CONFIG_UACCESS_WITH_MEMCPY=y CONFIG_CC_STACKPROTECTOR=y @@ -159,10 +149,27 @@ CONFIG_RTC_DRV_PL031=y CONFIG_PL330_DMA=m CONFIG_AMBA_PL08X=y -CONFIG_ARM_SP805_WATCHDOG=m CONFIG_GPIO_PL061=y CONFIG_PL320_MBOX=y +# highbank +CONFIG_EDAC_HIGHBANK_MC=m +CONFIG_EDAC_HIGHBANK_L2=m +CONFIG_SATA_HIGHBANK=m +CONFIG_ARM_HIGHBANK_CPUFREQ=m +# CONFIG_ARM_HIGHBANK_CPUIDLE is not set + +# Allwinner a1x +CONFIG_PINCTRL_SUNXI=y +CONFIG_SUNXI_WATCHDOG=m +CONFIG_MDIO_SUN4I=m +CONFIG_NET_VENDOR_ALLWINNER=y +CONFIG_SUN4I_EMAC=m +CONFIG_STMMAC_PLATFORM=y +CONFIG_DWMAC_SUNXI=y +CONFIG_EEPROM_SUNXI_SID=m +CONFIG_RTC_DRV_SUNXI=m + CONFIG_REGMAP=y CONFIG_REGMAP_I2C=m CONFIG_REGMAP_SPI=m @@ -170,6 +177,11 @@ CONFIG_REGMAP_SPMI=m CONFIG_REGMAP_MMIO=m CONFIG_REGMAP_IRQ=y +# Power management +CONFIG_PM_OPP=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_GENERIC_CPUFREQ_CPU0=m + # usb CONFIG_USB_OTG=y # CONFIG_USB_OTG_WHITELIST is not set @@ -214,6 +226,8 @@ CONFIG_USB_CONFIGFS_OBEX=y # CONFIG_USB_CONFIGFS_RNDIS is not set CONFIG_USB_CONFIGFS_SERIAL=y CONFIG_USB_CONFIGFS_STORAGE=y +# CONFIG_USB_CONFIGFS_F_LB_SS is not set +# CONFIG_USB_CONFIGFS_F_FS is not set # CONFIG_MUSB_PIO_ONLY is not set # CONFIG_USB_MUSB_DEBUG is not set @@ -256,6 +270,8 @@ CONFIG_PINCTRL_SINGLE=y CONFIG_GENERIC_PINCONF=y # CONFIG_PINCTRL_SAMSUNG is not set # CONFIG_PINCTRL_EXYNOS4 is not set +# CONFIG_PINCTRL_CAPRI is not set +# CONFIG_PINCTRL_MSM8X74 is not set # GPIO # CONFIG_GPIO_EM is not set @@ -267,8 +283,11 @@ CONFIG_GPIO_MC33880=m CONFIG_GPIO_TPS65910=y CONFIG_GPIO_TPS65912=m CONFIG_LEDS_GPIO=m +CONFIG_MDIO_BUS_MUX=m CONFIG_MDIO_BUS_MUX_GPIO=m CONFIG_MDIO_BUS_MUX_MMIOREG=m +CONFIG_INPUT_GPIO=m +CONFIG_INPUT_GPIO_BEEPER=m CONFIG_INPUT_GPIO_TILT_POLLED=m CONFIG_INPUT_MATRIXKMAP=m CONFIG_KEYBOARD_GPIO=m @@ -300,6 +319,7 @@ CONFIG_NFC_NCI_SPI=y # i2c CONFIG_I2C_DESIGNWARE_CORE=m CONFIG_I2C_DESIGNWARE_PLATFORM=m +CONFIG_I2C_MV64XXX=m # HW crypto and rng CONFIG_CRYPTO_SHA1_ARM=m @@ -331,6 +351,22 @@ CONFIG_MTD_DATAFLASH=m CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y CONFIG_MTD_DATAFLASH_OTP=y CONFIG_MTD_M25P80=m +CONFIG_MTD_NAND=m +CONFIG_MTD_NAND_CAFE=m +# CONFIG_MTD_NAND_DENALI is not set +CONFIG_MTD_NAND_DOCG4=m +CONFIG_MTD_NAND_ECC_SMC=y +CONFIG_MTD_NAND_FSMC=m +CONFIG_MTD_NAND_GPIO=m +CONFIG_MTD_NAND_MXC=m +CONFIG_MTD_NAND_NANDSIM=m +CONFIG_MTD_NAND_ORION=m +CONFIG_MTD_NAND_PLATFORM=m +CONFIG_MTD_NAND_PXA3xx=m +CONFIG_MTD_NAND_RICOH=m +CONFIG_MTD_NAND_TMIO=m +CONFIG_MTD_SPINAND_MT29F=m +CONFIG_MTD_SPINAND_ONDIEECC=y CONFIG_MTD_SST25L=m CONFIG_EEPROM_AT25=m CONFIG_EEPROM_93XX46=m @@ -347,6 +383,7 @@ CONFIG_SPI_DW_PCI=m # CONFIG_MMC_DW_SOCFPGA is not set # CONFIG_MMC_DW_EXYNOS is not set # CONFIG_MMC_DW_IDMAC is not set +# CONFIG_MMC_DW_K3 is not set CONFIG_USB_DWC2=m # CONFIG_USB_DWC2_DEBUG is not set # CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set @@ -355,6 +392,7 @@ CONFIG_USB_DWC3_OMAP=m CONFIG_USB_DWC3_EXYNOS=m CONFIG_USB_DWC3_PCI=m # CONFIG_USB_DWC3_DEBUG is not set +# CONFIG_USB_DWC3_KEYSTONE is not set CONFIG_DW_WATCHDOG=m CONFIG_PCIE_DW=y CONFIG_PCI_EXYNOS=y @@ -395,11 +433,12 @@ CONFIG_RTC_DRV_TPS80031=m # Regulators CONFIG_REGULATOR=y CONFIG_RFKILL_REGULATOR=m -# CONFIG_REGULATOR_DUMMY is not set -CONFIG_REGULATOR_FIXED_VOLTAGE=m +CONFIG_REGULATOR_DUMMY=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y CONFIG_REGULATOR_VIRTUAL_CONSUMER=m CONFIG_REGULATOR_USERSPACE_CONSUMER=m CONFIG_REGULATOR_GPIO=m +# CONFIG_REGULATOR_ACT8865 is not set CONFIG_REGULATOR_AD5398=m CONFIG_REGULATOR_DA9210=m CONFIG_REGULATOR_FAN53555=m @@ -476,18 +515,6 @@ CONFIG_LEDS_DAC124S085=m CONFIG_LEDS_PWM=m CONFIG_BMP085_SPI=m -# Contiguous Memory Allocator -CONFIG_OF_RESERVED_MEM=y -CONFIG_CMA=y -CONFIG_DMA_CMA=y -# CONFIG_CMA_DEBUG is not set -CONFIG_CMA_SIZE_MBYTES=16 -CONFIG_CMA_SIZE_SEL_MBYTES=y -# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set -# CONFIG_CMA_SIZE_SEL_MIN is not set -# CONFIG_CMA_SIZE_SEL_MAX is not set -CONFIG_CMA_ALIGNMENT=8 -CONFIG_CMA_AREAS=7 CONFIG_SRAM=y # Ethernet @@ -524,6 +551,9 @@ CONFIG_UBIFS_FS_LZO=y CONFIG_UBIFS_FS_ZLIB=y # CONFIG_UBIFS_FS_DEBUG is not set +# Sensors +CONFIG_SENSORS_HTU21=m + # Chromebook CONFIG_MFD_CROS_EC=m CONFIG_MFD_CROS_EC_I2C=m @@ -532,11 +562,10 @@ CONFIG_KEYBOARD_CROS_EC=m # Should be in generic CONFIG_BPF_JIT=y + # CONFIG_NET_VENDOR_CIRRUS is not set # CONFIG_NET_VENDOR_MICROCHIP is not set - # CONFIG_PATA_PLATFORM is not set - # CONFIG_DRM_EXYNOS is not set # CONFIG_DRM_TILCDC is not set # CONFIG_DRM_IMX is not set @@ -565,6 +594,8 @@ CONFIG_BPF_JIT=y # CONFIG_SPI_TOPCLIFF_PCH is not set # CONFIG_SPI_PXA2XX is not set # CONFIG_SPI_FSL_DSPI is not set +# CONFIG_FB_XILINX is not set +# CONFIG_USB_S3C_HSOTG is not set # these modules all fail with missing __bad_udelay # http://www.spinics.net/lists/arm/msg15615.html provides some background @@ -586,7 +617,5 @@ CONFIG_BPF_JIT=y # CONFIG_DEBUG_USER is not set # CONFIG_DEBUG_LL is not set # CONFIG_DEBUG_PINCTRL is not set -# CONFIG_ARM_DT_BL_CPUFREQ is not set - -# FIX ME -# CONFIG_FB_XILINX is not set +# CONFIG_DMADEVICES_VDEBUG is not set +# CONFIG_DMADEVICES_DEBUG is not set diff --git a/config-armv7-lpae b/config-armv7-lpae index c3b22bcd..25fe122d 100644 --- a/config-armv7-lpae +++ b/config-armv7-lpae @@ -1,8 +1,6 @@ # ARM A15 lpae unified arch kernel -CONFIG_ARCH_EXYNOS_MULTI=y CONFIG_ARCH_KEYSTONE=y CONFIG_ARCH_VIRT=y -CONFIG_ARCH_EXYNOS5=y # CONFIG_ARCH_MVEBU is not set # CONFIG_ARCH_MXC is not set @@ -12,23 +10,17 @@ CONFIG_ARCH_EXYNOS5=y # CONFIG_SOC_AM33XX is not set # CONFIG_SND_AM33XX_SOC_EVM is not set # CONFIG_SOC_AM43XX is not set +# CONFIG_SOC_DRA7XX is not set # CONFIG_ARCH_ROCKCHIP is not set # CONFIG_ARCH_SOCFPGA is not set -# CONFIG_ARCH_SUNXI is not set # CONFIG_ARCH_TEGRA is not set # CONFIG_ARCH_ZYNQ is not set - -# CONFIG_ARCH_EXYNOS4 is not set - -# CONFIG_EXYNOS_ATAGS is not set - CONFIG_ARM_LPAE=y CONFIG_SYS_SUPPORTS_HUGETLBFS=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_ARM_VIRT_EXT=y CONFIG_VIRTUALIZATION=y -CONFIG_ARM_SMMU=y CONFIG_ARM_DMA_IOMMU_ALIGNMENT=8 # Cortex-A15 @@ -41,7 +33,7 @@ CONFIG_KVM_ARM_MAX_VCPUS=8 CONFIG_KVM_ARM_VGIC=y CONFIG_KVM_ARM_TIMER=y -CONFIG_XEN=y +# CONFIG_XEN is not set CONFIG_XEN_FBDEV_FRONTEND=y CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m CONFIG_XEN_BLKDEV_FRONTEND=m @@ -58,6 +50,7 @@ CONFIG_XEN_SYS_HYPERVISOR=y CONFIG_XEN_GNTDEV=y CONFIG_XEN_GRANT_DEV_ALLOC=m CONFIG_XEN_WDT=m +# CONFIG_XEN_BALLOON is not set CONFIG_SERIAL_SAMSUNG=y CONFIG_SERIAL_SAMSUNG_CONSOLE=y @@ -72,9 +65,9 @@ CONFIG_SOC_EXYNOS5440=y CONFIG_EXYNOS_THERMAL=m CONFIG_PCI_EXYNOS=y -CONFIG_ARM_CCI=y CONFIG_TCG_TIS_I2C_INFINEON=m +# CONFIG_EXYNOS_ATAGS is not set CONFIG_PINCTRL_EXYNOS=y CONFIG_PINCTRL_EXYNOS5440=y CONFIG_EXYNOS_IOMMU=y @@ -113,11 +106,15 @@ CONFIG_SAMSUNG_USB3PHY=m CONFIG_MMC_DW_EXYNOS=m CONFIG_RTC_DRV_S3C=m -# Chromebook -CONFIG_MFD_CROS_EC=m -CONFIG_MFD_CROS_EC_I2C=m -CONFIG_MFD_CROS_EC_SPI=m -CONFIG_KEYBOARD_CROS_EC=m +# TI Keystone +CONFIG_KEYSTONE_USB_PHY=m +CONFIG_USB_DWC3_KEYSTONE=m +CONFIG_GPIO_DAVINCI=y +CONFIG_I2C_DAVINCI=m +# CONFIG_DAVINCI_WATCHDOG is not set +# CONFIG_SPI_DAVINCI is not set +# CONFIG_SND_DAVINCI_SOC is not set +# CONFIG_TI_SOC_THERMAL is not set # Arndale/Origen CONFIG_MFD_MAX8997=y @@ -136,7 +133,3 @@ CONFIG_S3C_LOWLEVEL_UART_PORT=1 # CONFIG_S3C2410_WATCHDOG is not set # CONFIG_MMC_SDHCI_S3C is not set # CONFIG_TEGRA_HOST1X is not set -# CONFIG_SPI_DAVINCI is not set -# CONFIG_I2C_DAVINCI is not set -# CONFIG_SND_DAVINCI_SOC is not set -# CONFIG_TI_SOC_THERMAL is not set diff --git a/config-debug b/config-debug index 8000b4e8..e2253260 100644 --- a/config-debug +++ b/config-debug @@ -26,8 +26,6 @@ CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y CONFIG_FAIL_IO_TIMEOUT=y CONFIG_FAIL_MMC_REQUEST=y -CONFIG_SLUB_DEBUG_ON=y - CONFIG_LOCK_STAT=y CONFIG_DEBUG_STACK_USAGE=y diff --git a/config-generic b/config-generic index f4299738..3ed2e5db 100644 --- a/config-generic +++ b/config-generic @@ -128,7 +128,8 @@ CONFIG_MMC=m CONFIG_SDIO_UART=m # CONFIG_MMC_TEST is not set # CONFIG_MMC_DEBUG is not set -# CONFIG_MMC_UNSAFE_RESUME is not set +# https://lists.fedoraproject.org/pipermail/kernel/2014-February/004889.html +CONFIG_MMC_UNSAFE_RESUME=y # CONFIG_MMC_CLKGATE is not set CONFIG_MMC_BLOCK=m CONFIG_MMC_BLOCK_MINORS=8 @@ -148,6 +149,7 @@ CONFIG_MMC_REALTEK_PCI=m CONFIG_MMC_VUB300=m # CONFIG_MMC_SDHCI_PXAV2 is not set # CONFIG_MMC_SDHCI_PXAV3 is not set +# CONFIG_MMC_SDHCI_OF_ARASAN is not set CONFIG_CB710_CORE=m @@ -182,6 +184,7 @@ CONFIG_INFINIBAND_NES=m CONFIG_INFINIBAND_QIB=m CONFIG_INFINIBAND_QIB_DCA=y # CONFIG_INFINIBAND_OCRDMA is not set +# CONFIG_INFINIBAND_USNIC is not set # # Executable file formats @@ -196,7 +199,6 @@ CONFIG_BINFMT_MISC=m # Device Drivers # -# CONFIG_COMMON_CLK_DEBUG is not set # CONFIG_COMMON_CLK_SI5351 is not set # @@ -313,6 +315,8 @@ CONFIG_BLK_DEV=y CONFIG_BLK_DEV_NULL_BLK=m CONFIG_BLK_DEV_FD=m # CONFIG_PARIDE is not set +CONFIG_ZRAM=m +# CONFIG_ZRAM_DEBUG is not set CONFIG_BLK_CPQ_DA=m CONFIG_BLK_CPQ_CISS_DA=m @@ -665,7 +669,7 @@ CONFIG_FIREWIRE_SBP2=m CONFIG_FIREWIRE_NET=m CONFIG_FIREWIRE_OHCI_DEBUG=y CONFIG_FIREWIRE_NOSY=m -CONFIG_FIREWIRE_SERIAL=m +# CONFIG_FIREWIRE_SERIAL is not set # CONFIG_FIREWIRE_OHCI_REMOTE_DMA is not set # @@ -857,6 +861,7 @@ CONFIG_NETFILTER_XT_TARGET_TPROXY=m CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m CONFIG_NETFILTER_XT_MATCH_BPF=m +CONFIG_NETFILTER_XT_MATCH_CGROUP=m CONFIG_NETFILTER_XT_MATCH_CLUSTER=m CONFIG_NETFILTER_XT_MATCH_COMMENT=m CONFIG_NETFILTER_XT_MATCH_CPU=m @@ -873,8 +878,10 @@ CONFIG_NETFILTER_XT_MATCH_ESP=m CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m CONFIG_NETFILTER_XT_MATCH_HELPER=m CONFIG_NETFILTER_XT_MATCH_HL=m +CONFIG_NETFILTER_XT_MATCH_IPCOMP=m CONFIG_NETFILTER_XT_MATCH_IPRANGE=m CONFIG_NETFILTER_XT_MATCH_IPVS=m +CONFIG_NETFILTER_XT_MATCH_L2TP=m CONFIG_NETFILTER_XT_MATCH_LENGTH=m CONFIG_NETFILTER_XT_MATCH_LIMIT=m CONFIG_NETFILTER_XT_MATCH_MAC=m @@ -988,6 +995,7 @@ CONFIG_IP6_NF_TARGET_MASQUERADE=m # nf_tables support CONFIG_NF_TABLES=m +CONFIG_NF_TABLES_INET=m CONFIG_NFT_EXTHDR=m CONFIG_NFT_META=m CONFIG_NFT_CT=m @@ -997,6 +1005,8 @@ CONFIG_NFT_COUNTER=m CONFIG_NFT_LOG=m CONFIG_NFT_LIMIT=m CONFIG_NFT_NAT=m +CONFIG_NFT_QUEUE=m +CONFIG_NFT_REJECT=m CONFIG_NFT_COMPAT=m CONFIG_NF_TABLES_IPV4=m @@ -1137,6 +1147,8 @@ CONFIG_NET_SCH_QFQ=m CONFIG_NET_SCH_CODEL=m CONFIG_NET_SCH_FQ_CODEL=m CONFIG_NET_SCH_FQ=m +CONFIG_NET_SCH_HHF=m +CONFIG_NET_SCH_PIE=m CONFIG_NET_SCH_PLUG=m CONFIG_NET_CLS=y CONFIG_NET_CLS_ACT=y @@ -1186,7 +1198,6 @@ CONFIG_OPENVSWITCH=m CONFIG_OPENVSWITCH_GRE=y CONFIG_OPENVSWITCH_VXLAN=y CONFIG_VSOCKETS=m -CONFIG_NETPRIO_CGROUP=m # @@ -1374,6 +1385,10 @@ CONFIG_IXGBE_DCB=y CONFIG_IXGBE_HWMON=y CONFIG_IXGBE_PTP=y CONFIG_I40E=m +# CONFIG_I40E_VXLAN is not set +# CONFIG_I40E_DCB is not set +# CONFIG_I40EVF is not set + # CONFIG_NET_VENDOR_I825XX is not set CONFIG_NET_VENDOR_MARVELL=y @@ -1620,6 +1635,9 @@ CONFIG_ATH9K_HTC=m CONFIG_ATH9K_BTCOEX_SUPPORT=y # CONFIG_ATH9K_HTC_DEBUGFS is not set # CONFIG_ATH9K_LEGACY_RATE_CONTROL is not set +# CONFIG_ATH9K_STATION_STATISTICS is not set +# CONFIG_ATH9K_WOW is not set +# CONFIG_ATH10K=m CONFIG_ATH10K_PCI=m # CONFIG_ATH10K_DEBUG is not set @@ -1737,6 +1755,7 @@ CONFIG_RT73USB=m CONFIG_RTL8180=m CONFIG_RTL8187=m # CONFIG_USB_ZD1201 is not set +# CONFIG_USB_NET_SR9800 is not set CONFIG_USB_NET_RNDIS_WLAN=m CONFIG_USB_NET_KALMIA=m CONFIG_USB_NET_QMI_WWAN=m @@ -1814,6 +1833,8 @@ CONFIG_NFC_HCI=m CONFIG_NFC_SHDLC=y CONFIG_NFC_LLCP=y CONFIG_NFC_SIM=m +CONFIG_NFC_MRVL=m +CONFIG_NFC_MRVL_USB=m # # Near Field Communication (NFC) devices @@ -2312,7 +2333,12 @@ CONFIG_I2C=m CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=m # CONFIG_I2C_MUX is not set +# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set # CONFIG_I2C_MUX_PCA954x is not set +# CONFIG_I2C_MUX_GPIO is not set +# CONFIG_I2C_MUX_PCA9541 is not set +# CONFIG_I2C_MUX_PINCTRL is not set +# # # I2C Algorithms @@ -2352,6 +2378,7 @@ CONFIG_I2C_NFORCE2=m # CONFIG_I2C_OCORES is not set CONFIG_I2C_PARPORT=m CONFIG_I2C_PARPORT_LIGHT=m +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set CONFIG_I2C_PASEMI=m CONFIG_I2C_PCA_PLATFORM=m # CONFIG_I2C_PIIX4 is not set @@ -2536,6 +2563,7 @@ CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y # CONFIG_MCP4725 is not set # CONFIG_ITG3200 is not set # CONFIG_APDS9300 is not set +# CONFIG_CM32181 is not set # CONFIG_CM36651 is not set # CONFIG_GP2AP020A00F is not set # CONFIG_TSL2583 is not set @@ -2550,6 +2578,7 @@ CONFIG_HID_SENSOR_ENUM_BASE_QUIRKS=y CONFIG_IIO_ST_GYRO_3AXIS=m CONFIG_IIO_ST_MAGN_3AXIS=m CONFIG_IIO_ST_ACCEL_3AXIS=m +CONFIG_HID_SENSOR_INCLINOMETER_3D=m # CONFIG_ADJD_S311 is not set # CONFIG_SENSORS_TSL2563 is not set # CONFIG_VCNL4000 is not set @@ -2587,6 +2616,8 @@ CONFIG_IIO_ST_ACCEL_3AXIS=m # CONFIG_ADXRS450 is not set # CONFIG_ADIS16400 is not set # CONFIG_ADIS16480 is not set +# CONFIG_DHT11 is not set +# CONFIG_MPL3115 is not set # staging IIO drivers # CONFIG_AD7291 is not set @@ -2718,6 +2749,7 @@ CONFIG_WM831X_WATCHDOG=m # CONFIG_DW_WATCHDOG is not set CONFIG_W83697UG_WDT=m # CONFIG_MEN_A21_WDT is not set +# CONFIG_GPIO_WATCHDOG is not set CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=m @@ -2781,6 +2813,7 @@ CONFIG_RTC_DRV_DS3232=m CONFIG_RTC_DRV_ISL12022=m # CONFIG_RTC_DRV_HID_SENSOR_TIME is not set # CONFIG_RTC_DRV_MOXART is not set +# CONFIG_RTC_DRV_ISL12057 is not set CONFIG_R3964=m # CONFIG_APPLICOM is not set @@ -2824,6 +2857,7 @@ CONFIG_DRM_I915=m CONFIG_DRM_I915_KMS=y CONFIG_DRM_I915_FBDEV=y # CONFIG_DRM_I915_PRELIMINARY_HW_SUPPORT is not set +# CONFIG_DRM_I915_UMS is not set CONFIG_DRM_VIA=m CONFIG_DRM_NOUVEAU=m CONFIG_NOUVEAU_DEBUG=5 @@ -2838,6 +2872,7 @@ CONFIG_DRM_UDL=m CONFIG_DRM_VMWGFX=m CONFIG_DRM_VMWGFX_FBCON=y CONFIG_DRM_QXL=m +CONFIG_DRM_BOCHS=m # # PCMCIA character devices @@ -2871,6 +2906,10 @@ CONFIG_VIDEO_V4L2=y # CONFIG_VIDEO_V4L2_INT_DEVICE is not set CONFIG_VIDEO_V4L2_SUBDEV_API=y # CONFIG_VIDEO_VIVI is not set +# CONFIG_USB_SI4713 is not set +# CONFIG_PLATFORM_SI4713 is not set +# CONFIG_I2C_SI4713 is not set +# CONFIG_USB_RAREMONO is not set # # Video For Linux @@ -2904,6 +2943,7 @@ CONFIG_VIDEO_CX88_BLACKBIRD=m CONFIG_VIDEO_CX88_ENABLE_VP3054=y CONFIG_VIDEO_CX88_VP3054=m CONFIG_VIDEO_EM28XX=m +CONFIG_VIDEO_EM28XX_V4L2=m CONFIG_VIDEO_EM28XX_ALSA=m CONFIG_VIDEO_EM28XX_DVB=m CONFIG_VIDEO_EM28XX_RC=y @@ -3195,6 +3235,7 @@ CONFIG_FB_EFI=y # CONFIG_FB_BROADSHEET is not set # CONFIG_FB_UDL is not set # CONFIG_FB_GOLDFISH is not set +# CONFIG_FB_OPENCORES is not set # CONFIG_FIRMWARE_EDID is not set @@ -3419,6 +3460,7 @@ CONFIG_USB_EHCI_TT_NEWSCHED=y CONFIG_USB_ISP1362_HCD=m CONFIG_USB_FUSBH200_HCD=m # CONFIG_USB_FOTG210_HCD is not set +# CONFIG_USB_GR_UDC is not set CONFIG_USB_OHCI_HCD=y CONFIG_USB_OHCI_HCD_PCI=y # CONFIG_USB_OHCI_HCD_SSB is not set @@ -3735,6 +3777,7 @@ CONFIG_USB_SERIAL_MOS7715_PARPORT=y # CONFIG_USB_SERIAL_ZTE is not set CONFIG_USB_SERIAL_MOS7840=m CONFIG_USB_SERIAL_MOTOROLA=m +# CONFIG_USB_SERIAL_MXUPORT is not set CONFIG_USB_SERIAL_NAVMAN=m CONFIG_USB_SERIAL_OPTION=m CONFIG_USB_SERIAL_OTI6858=m @@ -3778,6 +3821,7 @@ CONFIG_USB_APPLEDISPLAY=m # Physical Layer USB driver CONFIG_USB_PHY=y +# CONFIG_USB_OTG_FSM is not set # CONFIG_GENERIC_PHY is not set # CONFIG_PHY_EXYNOS_MIPI_VIDEO is not set @@ -3789,6 +3833,7 @@ CONFIG_USB_PHY=y # CONFIG_SAMSUNG_USBPHY is not set # CONFIG_SAMSUNG_USB2PHY is not set # CONFIG_SAMSUNG_USB3PHY is not set +# CONFIG_BCM_KONA_USB2_PHY is not set CONFIG_USB_RCAR_PHY=m CONFIG_USB_ATM=m CONFIG_USB_CXACRU=m @@ -3909,6 +3954,7 @@ CONFIG_MFD_VIPERBOARD=m # CONFIG_MFD_TPS65912 is not set # CONFIG_MFD_SYSCON is not set # CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_LP3943 is not set # # File systems @@ -3961,6 +4007,7 @@ CONFIG_CEPH_FS=m CONFIG_CEPH_FSCACHE=y CONFIG_BLK_DEV_RBD=m CONFIG_CEPH_LIB=m +CONFIG_CEPH_FS_POSIX_ACL=y # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set CONFIG_FSCACHE=m @@ -4269,6 +4316,7 @@ CONFIG_LOCKUP_DETECTOR=y # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set # CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set # CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_TIMEOUT=0 CONFIG_ATOMIC64_SELFTEST=y CONFIG_MEMORY_FAILURE=y CONFIG_HWPOISON_INJECT=m @@ -4479,6 +4527,8 @@ CONFIG_MEMCG_SWAP_ENABLED=y CONFIG_MEMCG_KMEM=y # CONFIG_CGROUP_HUGETLB is not set CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_NET_PRIO=m +# CONFIG_CGROUP_NET_CLASSID is not set CONFIG_BLK_CGROUP=y # CONFIG_SYSFS_DEPRECATED is not set @@ -4501,6 +4551,7 @@ CONFIG_THERMAL_GOV_FAIR_SHARE=y # CONFIG_THERMAL_GOV_USER_SPACE is not set CONFIG_THERMAL_GOV_STEP_WISE=y # CONFIG_THERMAL_EMULATION is not set +# CONFIG_THERMAL_OF is not set # CONFIG_CPU_THERMAL is not set CONFIG_INOTIFY=y @@ -4762,6 +4813,7 @@ CONFIG_NOZOMI=m CONFIG_INPUT_APANEL=m CONFIG_INPUT_GP2A=m # CONFIG_INPUT_GPIO_TILT_POLLED is not set +# CONFIG_INPUT_GPIO_BEEPER is not set # CONFIG_INTEL_MENLOW is not set CONFIG_ENCLOSURE_SERVICES=m @@ -4841,6 +4893,9 @@ CONFIG_STAGING_MEDIA=y # CONFIG_TI_ST is not set # CONFIG_FB_XGI is not set # CONFIG_VIDEO_GO7007 is not set +# CONFIG_I2C_BCM2048 is not set +# CONFIG_VIDEO_TCM825X is not set +# CONFIG_VIDEO_OMAP4 is not set # CONFIG_USB_MSI3101 is not set # CONFIG_DT3155 is not set # CONFIG_W35UND is not set @@ -4868,10 +4923,10 @@ CONFIG_RTL8192E=m # CONFIG_VIDEO_CX25821 is not set # CONFIG_R8187SE is not set # CONFIG_R8188EU is not set +# CONFIG_R8821AE is not set # CONFIG_RTL8192U is not set # CONFIG_FB_SM7XX is not set # CONFIG_SPECTRA is not set -# CONFIG_ZRAM is not set # CONFIG_EASYCAP is not set # CONFIG_SOLO6X10 is not set # CONFIG_ACPI_QUICKSTART is not set @@ -4896,7 +4951,6 @@ CONFIG_ALTERA_STAPL=m # CONFIG_RTS5139 is not set # CONFIG_NVEC_LEDS is not set # CONFIG_VT6655 is not set -# CONFIG_ZSMALLOC is not set # CONFIG_RAMSTER is not set # CONFIG_USB_WPAN_HCD is not set # CONFIG_WIMAX_GDM72XX is not set @@ -4913,6 +4967,7 @@ CONFIG_ALTERA_STAPL=m # CONFIG_XILLYBUS is not set # CONFIG_DGAP is not set # CONFIG_DGNC is not set +# CONFIG_RTS5208 is not set # END OF STAGING # @@ -4988,6 +5043,8 @@ CONFIG_PTP_1588_CLOCK_PCH=m CONFIG_CLEANCACHE=y CONFIG_FRONTSWAP=y CONFIG_ZSWAP=y +CONFIG_ZSMALLOC=y +# CONFIG_PGTABLE_MAPPING is not set # CONFIG_MDIO_GPIO is not set # CONFIG_KEYBOARD_GPIO is not set @@ -5027,16 +5084,17 @@ CONFIG_GPIO_VIPERBOARD=m # CONFIG_GPIO_GRGPIO is not set # CONFIG_GPIO_PL061 is not set # CONFIG_GPIO_BCM_KONA is not set +# CONFIG_GPIO_SCH311X is not set # FIXME: Why? CONFIG_EVENT_POWER_TRACING_DEPRECATED=y CONFIG_TEST_KSTRTOX=y CONFIG_XZ_DEC=y -# CONFIG_XZ_DEC_X86 is not set -# CONFIG_XZ_DEC_POWERPC is not set +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y # CONFIG_XZ_DEC_IA64 is not set -# CONFIG_XZ_DEC_ARM is not set +CONFIG_XZ_DEC_ARM=y # CONFIG_XZ_DEC_ARMTHUMB is not set # CONFIG_XZ_DEC_SPARC is not set # CONFIG_XZ_DEC_TEST is not set @@ -5059,6 +5117,8 @@ CONFIG_PSTORE_RAM=m # CONFIG_PSTORE_CONSOLE is not set # CONFIG_PSTORE_FTRACE is not set +# CONFIG_TEST_MODULE is not set +# CONFIG_TEST_USER_COPY is not set # CONFIG_AVERAGE is not set # CONFIG_VMXNET3 is not set @@ -5090,10 +5150,14 @@ CONFIG_FMC_TRIVIAL=m CONFIG_FMC_WRITE_EEPROM=m CONFIG_FMC_CHARDEV=m +# CONFIG_GENWQE is not set + # CONFIG_POWERCAP is not set # CONFIG_HSI is not set +# CONFIG_CPU_IDLE is not set + # CONFIG_ARM_ARCH_TIMER_EVTSTREAM is not set # CONFIG_PM_DEVFREQ is not set diff --git a/config-nodebug b/config-nodebug index f9f43091..ee4842bf 100644 --- a/config-nodebug +++ b/config-nodebug @@ -26,8 +26,6 @@ CONFIG_CPUMASK_OFFSTACK=y # CONFIG_FAIL_IO_TIMEOUT is not set # CONFIG_FAIL_MMC_REQUEST is not set -# CONFIG_SLUB_DEBUG_ON is not set - # CONFIG_LOCK_STAT is not set # CONFIG_DEBUG_STACK_USAGE is not set diff --git a/config-powerpc-generic b/config-powerpc-generic index a2f0dcfe..9c0ad601 100644 --- a/config-powerpc-generic +++ b/config-powerpc-generic @@ -321,6 +321,7 @@ CONFIG_SERIAL_GRLIB_GAISLER_APBUART=m # CONFIG_PPC_MPC512x is not set # CONFIG_RTC_DRV_MPC5121 is not set +# CONFIG_RTC_DRV_HYM8563 is not set # CONFIG_MPC512X_DMA is not set @@ -360,7 +361,7 @@ CONFIG_RCU_FANOUT_LEAF=16 # CONFIG_SPAPR_TCE_IOMMU is not set # CONFIG_TRANSPARENT_HUGEPAGE is not set -# CONFIG_PPC_DENORMALISATION is not set +CONFIG_PPC_DENORMALISATION=y # CONFIG_MDIO_BUS_MUX_MMIOREG is not set # CONFIG_GPIO_ADNP is not set # CONFIG_MFD_SYSCON is not set diff --git a/config-powerpc64 b/config-powerpc64 index 4cefd1ae..4b8ba84a 100644 --- a/config-powerpc64 +++ b/config-powerpc64 @@ -89,6 +89,8 @@ CONFIG_NR_CPUS=1024 CONFIG_RTAS_PROC=y CONFIG_IOMMU_VMERGE=y CONFIG_NUMA=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y CONFIG_PPC_64K_PAGES=y CONFIG_PPC_SUBPAGE_PROT=y CONFIG_SCHED_SMT=y @@ -99,6 +101,8 @@ CONFIG_HZ_100=y CONFIG_MEMORY_HOTREMOVE=y +CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y + CONFIG_CGROUP_HUGETLB=y # CONFIG_MV643XX_ETH is not set @@ -159,7 +163,8 @@ CONFIG_PSERIES_ENERGY=m CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_GOV_LADDER is not set -CONFIG_PSERIES_IDLE=y +CONFIG_PSERIES_CPUIDLE=y +CONFIG_POWERNV_CPUIDLE=y CONFIG_PPC_ICSWX=y CONFIG_IO_EVENT_IRQ=y diff --git a/config-powerpc64p7 b/config-powerpc64p7 index 8ff01178..4fe09eee 100644 --- a/config-powerpc64p7 +++ b/config-powerpc64p7 @@ -80,6 +80,8 @@ CONFIG_NR_CPUS=1024 CONFIG_RTAS_PROC=y CONFIG_IOMMU_VMERGE=y CONFIG_NUMA=y +CONFIG_NUMA_BALANCING=y +CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y CONFIG_PPC_64K_PAGES=y CONFIG_PPC_SUBPAGE_PROT=y CONFIG_SCHED_SMT=y @@ -90,6 +92,8 @@ CONFIG_HZ_100=y CONFIG_MEMORY_HOTREMOVE=y +CONFIG_PPC64_SUPPORTS_MEMORY_FAILURE=y + CONFIG_CGROUP_HUGETLB=y # CONFIG_MV643XX_ETH is not set @@ -150,7 +154,8 @@ CONFIG_PSERIES_ENERGY=m CONFIG_CPU_IDLE=y # CONFIG_CPU_IDLE_GOV_LADDER is not set -CONFIG_PSERIES_IDLE=y +CONFIG_PSERIES_CPUIDLE=y +CONFIG_POWERNV_CPUIDLE=y CONFIG_PPC_ICSWX=y CONFIG_IO_EVENT_IRQ=y diff --git a/config-x86-32-generic b/config-x86-32-generic index f3c11b3d..21fe6fe7 100644 --- a/config-x86-32-generic +++ b/config-x86-32-generic @@ -224,8 +224,13 @@ CONFIG_BACKLIGHT_PWM=m # CONFIG_GPIO_ADNP is not set # CONFIG_BACKLIGHT_OT200 is not set # CONFIG_RTC_DRV_SNVS is not set +# CONFIG_RTC_DRV_HYM8563 is not set # CONFIG_OF_DISPLAY_TIMING is not set # CONFIG_OF_VIDEOMODE is not set # CONFIG_MLX5_INFINIBAND is not set # CONFIG_PINCTRL_SINGLE is not set +# CONFIG_PINCTRL_CAPRI is not set +# CONFIG_PINCTRL_MSM8X74 is not set +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_QCOM is not set diff --git a/config-x86-generic b/config-x86-generic index 3d42bbcb..f6b3fa8c 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -41,6 +41,7 @@ CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE=y CONFIG_EFI_PCDP=y CONFIG_FB_EFI=y CONFIG_EARLY_PRINTK_EFI=y +CONFIG_EFI_RUNTIME_MAP=y # needs FB_SIMPLE to work correctly # CONFIG_X86_SYSFB is not set @@ -114,6 +115,9 @@ CONFIG_NVRAM=y CONFIG_CRYPTO_DEV_PADLOCK=m CONFIG_CRYPTO_DEV_PADLOCK_AES=m CONFIG_CRYPTO_DEV_PADLOCK_SHA=m +CONFIG_CRYPTO_DEV_CCP=y +CONFIG_CRYPTO_DEV_CCP_DD=m +CONFIG_CRYPTO_DEV_CCP_CRYPTO=m CONFIG_GENERIC_ISA_DMA=y @@ -200,6 +204,7 @@ CONFIG_COMPAL_LAPTOP=m CONFIG_DELL_LAPTOP=m CONFIG_CHROME_PLATFORMS=y CONFIG_CHROMEOS_LAPTOP=m +CONFIG_CHROMEOS_PSTORE=m CONFIG_EEEPC_LAPTOP=m CONFIG_FUJITSU_TABLET=m CONFIG_FUJITSU_LAPTOP=m @@ -216,6 +221,7 @@ CONFIG_ACER_WMI=m CONFIG_ACERHDF=m CONFIG_ASUS_WMI=m CONFIG_ASUS_NB_WMI=m +CONFIG_HP_WIRELESS=m CONFIG_HP_WMI=m # CONFIG_INTEL_SCU_IPC is not set CONFIG_DELL_WMI=m @@ -410,6 +416,7 @@ CONFIG_HP_ACCEL=m CONFIG_SCHED_SMT=y CONFIG_CC_STACKPROTECTOR=y +CONFIG_CC_STACKPROTECTOR_STRONG=y CONFIG_RELOCATABLE=y CONFIG_HYPERV=m @@ -446,6 +453,7 @@ CONFIG_PINCTRL_BAYTRAIL=y # CONFIG_INTEL_POWERCLAMP is not set CONFIG_X86_PKG_TEMP_THERMAL=m +CONFIG_ACPI_INT3403_THERMAL=m CONFIG_VMWARE_VMCI=m CONFIG_VMWARE_VMCI_VSOCKETS=m diff --git a/config-x86_64-generic b/config-x86_64-generic index 60a25145..02883b84 100644 --- a/config-x86_64-generic +++ b/config-x86_64-generic @@ -37,6 +37,7 @@ CONFIG_SWIOTLB=y # CONFIG_GART_IOMMU is not set CONFIG_TRANSPARENT_HUGEPAGE=y +CONFIG_TRANSPARENT_HUGEPAGE_MADVISE=y CONFIG_CGROUP_HUGETLB=y CONFIG_MEM_SOFT_DIRTY=y @@ -117,6 +118,7 @@ CONFIG_XEN_DEV_EVTCHN=m CONFIG_XEN_SYS_HYPERVISOR=y # CONFIG_XEN_MCE_LOG is not set # CONFIG_XEN_STUB is not set +# CONFIG_XEN_PVH is not set CONFIG_PROVIDE_OHCI1394_DMA_INIT=y @@ -170,3 +172,4 @@ CONFIG_SFC_MTD=y # Override MTD stuff because SFC_MTD needs it CONFIG_MTD_CHAR=m CONFIG_MTD_BLOCK=m + diff --git a/ipv6-addrconf-revert-if_inet6ifa_flag-format.patch b/ipv6-addrconf-revert-if_inet6ifa_flag-format.patch deleted file mode 100644 index 1282667f..00000000 --- a/ipv6-addrconf-revert-if_inet6ifa_flag-format.patch +++ /dev/null @@ -1,45 +0,0 @@ -Bugzilla: 1056711 -Upstream-status: Submitted for 3.15 - -This fixes the issue described here: -https://bugzilla.redhat.com/show_bug.cgi?id=1056711#c5 - -net-next commit 971a351ccbbd2b6eef136a2221da0b80aca50906 -Author: Jiri Pirko <jiri@resnulli.us> -Date: Tue Dec 10 13:56:29 2013 +0100 - - ipv6 addrconf: revert /proc/net/if_inet6 ifa_flag format - - Turned out that applications like ifconfig do not handle the change. - So revert ifa_flag format back to 2-letter hex value. - - Introduced by: - commit 479840ffdbe4242e8a25349218c8e0859223aa35 - "ipv6 addrconf: extend ifa_flags to u32" - -Signed-off-by: Jiri Pirko <jpirko@redhat.com> - -diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c -index be4dbbd..3c3425e 100644 ---- a/net/ipv6/addrconf.c -+++ b/net/ipv6/addrconf.c -@@ -3367,12 +3367,12 @@ static void if6_seq_stop(struct seq_file *seq, void *v) - static int if6_seq_show(struct seq_file *seq, void *v) - { - struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v; -- seq_printf(seq, "%pi6 %02x %02x %02x %03x %8s\n", -+ seq_printf(seq, "%pi6 %02x %02x %02x %02x %8s\n", - &ifp->addr, - ifp->idev->dev->ifindex, - ifp->prefix_len, - ifp->scope, -- ifp->flags, -+ (u8) ifp->flags, - ifp->idev->dev->name); - return 0; - } - -_______________________________________________ -kernel mailing list -kernel@lists.fedoraproject.org -https://admin.fedoraproject.org/mailman/listinfo/kernel diff --git a/ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch b/ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch deleted file mode 100644 index 54d1e915..00000000 --- a/ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch +++ /dev/null @@ -1,753 +0,0 @@ -This patch is made against 3.13 kernel. So it's suitable for F21 and for F20 -later on when F20 is rebased to 3.13. - -https://bugzilla.redhat.com/show_bug.cgi?id=1056711 - -NetworkManager depends on IFA_F_NOPREFIXROUTE IFA_F_MANAGETEMPADDR -in order to do SLAAC in userspace correctly. - -Split patches available here: - -http://people.redhat.com/jpirko/f21_backport_of_IFA_F_NOPREFIXROUTE_and_IFA_F_MANAGETEMPADDR/ - -Jiri Pirko (2): - ipv6 addrconf: extend ifa_flags to u32 - ipv6 addrconf: introduce IFA_F_MANAGETEMPADDR to tell kernel to manage - temporary addresses - -Li RongQing (1): - ipv6: unneccessary to get address prefix in addrconf_get_prefix_route - -Thomas Haller (2): - ipv6 addrconf: add IFA_F_NOPREFIXROUTE flag to suppress creation of - IP6 routes - ipv6 addrconf: don't cleanup prefix route for IFA_F_NOPREFIXROUTE - -stephen hemminger (1): - ipv6: addrconf spelling fixes - - include/net/addrconf.h | 4 +- - include/net/if_inet6.h | 2 +- - include/uapi/linux/if_addr.h | 6 + - net/ipv6/addrconf.c | 409 +++++++++++++++++++++++++------------------ - 4 files changed, 250 insertions(+), 171 deletions(-) - -Signed-off-by: Jiri Pirko <jpirko@redhat.com> - -diff --git a/include/net/addrconf.h b/include/net/addrconf.h -index 86505bf..e70278e 100644 ---- a/include/net/addrconf.h -+++ b/include/net/addrconf.h -@@ -81,9 +81,9 @@ int ipv6_dev_get_saddr(struct net *net, const struct net_device *dev, - const struct in6_addr *daddr, unsigned int srcprefs, - struct in6_addr *saddr); - int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, -- unsigned char banned_flags); -+ u32 banned_flags); - int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, -- unsigned char banned_flags); -+ u32 banned_flags); - int ipv6_rcv_saddr_equal(const struct sock *sk, const struct sock *sk2); - void addrconf_join_solict(struct net_device *dev, const struct in6_addr *addr); - void addrconf_leave_solict(struct inet6_dev *idev, const struct in6_addr *addr); -diff --git a/include/net/if_inet6.h b/include/net/if_inet6.h -index 65bb130..9650a3f 100644 ---- a/include/net/if_inet6.h -+++ b/include/net/if_inet6.h -@@ -50,8 +50,8 @@ struct inet6_ifaddr { - - int state; - -+ __u32 flags; - __u8 dad_probes; -- __u8 flags; - - __u16 scope; - -diff --git a/include/uapi/linux/if_addr.h b/include/uapi/linux/if_addr.h -index 23357ab..dea10a8 100644 ---- a/include/uapi/linux/if_addr.h -+++ b/include/uapi/linux/if_addr.h -@@ -18,6 +18,9 @@ struct ifaddrmsg { - * It makes no difference for normally configured broadcast interfaces, - * but for point-to-point IFA_ADDRESS is DESTINATION address, - * local address is supplied in IFA_LOCAL attribute. -+ * -+ * IFA_FLAGS is a u32 attribute that extends the u8 field ifa_flags. -+ * If present, the value from struct ifaddrmsg will be ignored. - */ - enum { - IFA_UNSPEC, -@@ -28,6 +31,7 @@ enum { - IFA_ANYCAST, - IFA_CACHEINFO, - IFA_MULTICAST, -+ IFA_FLAGS, - __IFA_MAX, - }; - -@@ -44,6 +48,8 @@ enum { - #define IFA_F_DEPRECATED 0x20 - #define IFA_F_TENTATIVE 0x40 - #define IFA_F_PERMANENT 0x80 -+#define IFA_F_MANAGETEMPADDR 0x100 -+#define IFA_F_NOPREFIXROUTE 0x200 - - struct ifa_cacheinfo { - __u32 ifa_prefered; -diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c -index 4b6b720..3c4e25d 100644 ---- a/net/ipv6/addrconf.c -+++ b/net/ipv6/addrconf.c -@@ -891,15 +891,95 @@ out: - goto out2; - } - -+enum cleanup_prefix_rt_t { -+ CLEANUP_PREFIX_RT_NOP, /* no cleanup action for prefix route */ -+ CLEANUP_PREFIX_RT_DEL, /* delete the prefix route */ -+ CLEANUP_PREFIX_RT_EXPIRE, /* update the lifetime of the prefix route */ -+}; -+ -+/* -+ * Check, whether the prefix for ifp would still need a prefix route -+ * after deleting ifp. The function returns one of the CLEANUP_PREFIX_RT_* -+ * constants. -+ * -+ * 1) we don't purge prefix if address was not permanent. -+ * prefix is managed by its own lifetime. -+ * 2) we also don't purge, if the address was IFA_F_NOPREFIXROUTE. -+ * 3) if there are no addresses, delete prefix. -+ * 4) if there are still other permanent address(es), -+ * corresponding prefix is still permanent. -+ * 5) if there are still other addresses with IFA_F_NOPREFIXROUTE, -+ * don't purge the prefix, assume user space is managing it. -+ * 6) otherwise, update prefix lifetime to the -+ * longest valid lifetime among the corresponding -+ * addresses on the device. -+ * Note: subsequent RA will update lifetime. -+ **/ -+static enum cleanup_prefix_rt_t -+check_cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long *expires) -+{ -+ struct inet6_ifaddr *ifa; -+ struct inet6_dev *idev = ifp->idev; -+ unsigned long lifetime; -+ enum cleanup_prefix_rt_t action = CLEANUP_PREFIX_RT_DEL; -+ -+ *expires = jiffies; -+ -+ list_for_each_entry(ifa, &idev->addr_list, if_list) { -+ if (ifa == ifp) -+ continue; -+ if (!ipv6_prefix_equal(&ifa->addr, &ifp->addr, -+ ifp->prefix_len)) -+ continue; -+ if (ifa->flags & (IFA_F_PERMANENT | IFA_F_NOPREFIXROUTE)) -+ return CLEANUP_PREFIX_RT_NOP; -+ -+ action = CLEANUP_PREFIX_RT_EXPIRE; -+ -+ spin_lock(&ifa->lock); -+ -+ lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ); -+ /* -+ * Note: Because this address is -+ * not permanent, lifetime < -+ * LONG_MAX / HZ here. -+ */ -+ if (time_before(*expires, ifa->tstamp + lifetime * HZ)) -+ *expires = ifa->tstamp + lifetime * HZ; -+ spin_unlock(&ifa->lock); -+ } -+ -+ return action; -+} -+ -+static void -+cleanup_prefix_route(struct inet6_ifaddr *ifp, unsigned long expires, bool del_rt) -+{ -+ struct rt6_info *rt; -+ -+ rt = addrconf_get_prefix_route(&ifp->addr, -+ ifp->prefix_len, -+ ifp->idev->dev, -+ 0, RTF_GATEWAY | RTF_DEFAULT); -+ if (rt) { -+ if (del_rt) -+ ip6_del_rt(rt); -+ else { -+ if (!(rt->rt6i_flags & RTF_EXPIRES)) -+ rt6_set_expires(rt, expires); -+ ip6_rt_put(rt); -+ } -+ } -+} -+ -+ - /* This function wants to get referenced ifp and releases it before return */ - - static void ipv6_del_addr(struct inet6_ifaddr *ifp) - { -- struct inet6_ifaddr *ifa, *ifn; -- struct inet6_dev *idev = ifp->idev; - int state; -- int deleted = 0, onlink = 0; -- unsigned long expires = jiffies; -+ enum cleanup_prefix_rt_t action = CLEANUP_PREFIX_RT_NOP; -+ unsigned long expires; - - spin_lock_bh(&ifp->state_lock); - state = ifp->state; -@@ -913,7 +993,7 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) - hlist_del_init_rcu(&ifp->addr_lst); - spin_unlock_bh(&addrconf_hash_lock); - -- write_lock_bh(&idev->lock); -+ write_lock_bh(&ifp->idev->lock); - - if (ifp->flags&IFA_F_TEMPORARY) { - list_del(&ifp->tmp_list); -@@ -924,45 +1004,13 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) - __in6_ifa_put(ifp); - } - -- list_for_each_entry_safe(ifa, ifn, &idev->addr_list, if_list) { -- if (ifa == ifp) { -- list_del_init(&ifp->if_list); -- __in6_ifa_put(ifp); -+ if (ifp->flags & IFA_F_PERMANENT && !(ifp->flags & IFA_F_NOPREFIXROUTE)) -+ action = check_cleanup_prefix_route(ifp, &expires); - -- if (!(ifp->flags & IFA_F_PERMANENT) || onlink > 0) -- break; -- deleted = 1; -- continue; -- } else if (ifp->flags & IFA_F_PERMANENT) { -- if (ipv6_prefix_equal(&ifa->addr, &ifp->addr, -- ifp->prefix_len)) { -- if (ifa->flags & IFA_F_PERMANENT) { -- onlink = 1; -- if (deleted) -- break; -- } else { -- unsigned long lifetime; -- -- if (!onlink) -- onlink = -1; -- -- spin_lock(&ifa->lock); -- -- lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ); -- /* -- * Note: Because this address is -- * not permanent, lifetime < -- * LONG_MAX / HZ here. -- */ -- if (time_before(expires, -- ifa->tstamp + lifetime * HZ)) -- expires = ifa->tstamp + lifetime * HZ; -- spin_unlock(&ifa->lock); -- } -- } -- } -- } -- write_unlock_bh(&idev->lock); -+ list_del_init(&ifp->if_list); -+ __in6_ifa_put(ifp); -+ -+ write_unlock_bh(&ifp->idev->lock); - - addrconf_del_dad_timer(ifp); - -@@ -970,41 +1018,9 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) - - inet6addr_notifier_call_chain(NETDEV_DOWN, ifp); - -- /* -- * Purge or update corresponding prefix -- * -- * 1) we don't purge prefix here if address was not permanent. -- * prefix is managed by its own lifetime. -- * 2) if there're no addresses, delete prefix. -- * 3) if there're still other permanent address(es), -- * corresponding prefix is still permanent. -- * 4) otherwise, update prefix lifetime to the -- * longest valid lifetime among the corresponding -- * addresses on the device. -- * Note: subsequent RA will update lifetime. -- * -- * --yoshfuji -- */ -- if ((ifp->flags & IFA_F_PERMANENT) && onlink < 1) { -- struct in6_addr prefix; -- struct rt6_info *rt; -- -- ipv6_addr_prefix(&prefix, &ifp->addr, ifp->prefix_len); -- -- rt = addrconf_get_prefix_route(&prefix, -- ifp->prefix_len, -- ifp->idev->dev, -- 0, RTF_GATEWAY | RTF_DEFAULT); -- -- if (rt) { -- if (onlink == 0) { -- ip6_del_rt(rt); -- rt = NULL; -- } else if (!(rt->rt6i_flags & RTF_EXPIRES)) { -- rt6_set_expires(rt, expires); -- } -- } -- ip6_rt_put(rt); -+ if (action != CLEANUP_PREFIX_RT_NOP) { -+ cleanup_prefix_route(ifp, expires, -+ action == CLEANUP_PREFIX_RT_DEL); - } - - /* clean up prefsrc entries */ -@@ -1024,7 +1040,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i - u32 addr_flags; - unsigned long now = jiffies; - -- write_lock(&idev->lock); -+ write_lock_bh(&idev->lock); - if (ift) { - spin_lock_bh(&ift->lock); - memcpy(&addr.s6_addr[8], &ift->addr.s6_addr[8], 8); -@@ -1036,7 +1052,7 @@ static int ipv6_create_tempaddr(struct inet6_ifaddr *ifp, struct inet6_ifaddr *i - retry: - in6_dev_hold(idev); - if (idev->cnf.use_tempaddr <= 0) { -- write_unlock(&idev->lock); -+ write_unlock_bh(&idev->lock); - pr_info("%s: use_tempaddr is disabled\n", __func__); - in6_dev_put(idev); - ret = -1; -@@ -1046,7 +1062,7 @@ retry: - if (ifp->regen_count++ >= idev->cnf.regen_max_retry) { - idev->cnf.use_tempaddr = -1; /*XXX*/ - spin_unlock_bh(&ifp->lock); -- write_unlock(&idev->lock); -+ write_unlock_bh(&idev->lock); - pr_warn("%s: regeneration time exceeded - disabled temporary address support\n", - __func__); - in6_dev_put(idev); -@@ -1072,7 +1088,7 @@ retry: - regen_advance = idev->cnf.regen_max_retry * - idev->cnf.dad_transmits * - idev->nd_parms->retrans_time / HZ; -- write_unlock(&idev->lock); -+ write_unlock_bh(&idev->lock); - - /* A temporary address is created only if this calculated Preferred - * Lifetime is greater than REGEN_ADVANCE time units. In particular, -@@ -1099,7 +1115,7 @@ retry: - in6_dev_put(idev); - pr_info("%s: retry temporary address regeneration\n", __func__); - tmpaddr = &addr; -- write_lock(&idev->lock); -+ write_lock_bh(&idev->lock); - goto retry; - } - -@@ -1200,7 +1216,7 @@ static int ipv6_get_saddr_eval(struct net *net, - * | d is scope of the destination. - * B-d | \ - * | \ <- smaller scope is better if -- * B-15 | \ if scope is enough for destinaion. -+ * B-15 | \ if scope is enough for destination. - * | ret = B - scope (-1 <= scope >= d <= 15). - * d-C-1 | / - * |/ <- greater is better -@@ -1407,7 +1423,7 @@ try_nextdev: - EXPORT_SYMBOL(ipv6_dev_get_saddr); - - int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, -- unsigned char banned_flags) -+ u32 banned_flags) - { - struct inet6_ifaddr *ifp; - int err = -EADDRNOTAVAIL; -@@ -1424,7 +1440,7 @@ int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, - } - - int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, -- unsigned char banned_flags) -+ u32 banned_flags) - { - struct inet6_dev *idev; - int err = -EADDRNOTAVAIL; -@@ -2016,6 +2032,73 @@ static struct inet6_dev *addrconf_add_dev(struct net_device *dev) - return idev; - } - -+static void manage_tempaddrs(struct inet6_dev *idev, -+ struct inet6_ifaddr *ifp, -+ __u32 valid_lft, __u32 prefered_lft, -+ bool create, unsigned long now) -+{ -+ u32 flags; -+ struct inet6_ifaddr *ift; -+ -+ read_lock_bh(&idev->lock); -+ /* update all temporary addresses in the list */ -+ list_for_each_entry(ift, &idev->tempaddr_list, tmp_list) { -+ int age, max_valid, max_prefered; -+ -+ if (ifp != ift->ifpub) -+ continue; -+ -+ /* RFC 4941 section 3.3: -+ * If a received option will extend the lifetime of a public -+ * address, the lifetimes of temporary addresses should -+ * be extended, subject to the overall constraint that no -+ * temporary addresses should ever remain "valid" or "preferred" -+ * for a time longer than (TEMP_VALID_LIFETIME) or -+ * (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR), respectively. -+ */ -+ age = (now - ift->cstamp) / HZ; -+ max_valid = idev->cnf.temp_valid_lft - age; -+ if (max_valid < 0) -+ max_valid = 0; -+ -+ max_prefered = idev->cnf.temp_prefered_lft - -+ idev->cnf.max_desync_factor - age; -+ if (max_prefered < 0) -+ max_prefered = 0; -+ -+ if (valid_lft > max_valid) -+ valid_lft = max_valid; -+ -+ if (prefered_lft > max_prefered) -+ prefered_lft = max_prefered; -+ -+ spin_lock(&ift->lock); -+ flags = ift->flags; -+ ift->valid_lft = valid_lft; -+ ift->prefered_lft = prefered_lft; -+ ift->tstamp = now; -+ if (prefered_lft > 0) -+ ift->flags &= ~IFA_F_DEPRECATED; -+ -+ spin_unlock(&ift->lock); -+ if (!(flags&IFA_F_TENTATIVE)) -+ ipv6_ifa_notify(0, ift); -+ } -+ -+ if ((create || list_empty(&idev->tempaddr_list)) && -+ idev->cnf.use_tempaddr > 0) { -+ /* When a new public address is created as described -+ * in [ADDRCONF], also create a new temporary address. -+ * Also create a temporary address if it's enabled but -+ * no temporary address currently exists. -+ */ -+ read_unlock_bh(&idev->lock); -+ ipv6_create_tempaddr(ifp, NULL); -+ } else { -+ read_unlock_bh(&idev->lock); -+ } -+} -+ - void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len, bool sllao) - { - struct prefix_info *pinfo; -@@ -2170,6 +2253,7 @@ ok: - return; - } - -+ ifp->flags |= IFA_F_MANAGETEMPADDR; - update_lft = 0; - create = 1; - ifp->cstamp = jiffies; -@@ -2178,9 +2262,8 @@ ok: - } - - if (ifp) { -- int flags; -+ u32 flags; - unsigned long now; -- struct inet6_ifaddr *ift; - u32 stored_lft; - - /* update lifetime (RFC2462 5.5.3 e) */ -@@ -2221,70 +2304,8 @@ ok: - } else - spin_unlock(&ifp->lock); - -- read_lock_bh(&in6_dev->lock); -- /* update all temporary addresses in the list */ -- list_for_each_entry(ift, &in6_dev->tempaddr_list, -- tmp_list) { -- int age, max_valid, max_prefered; -- -- if (ifp != ift->ifpub) -- continue; -- -- /* -- * RFC 4941 section 3.3: -- * If a received option will extend the lifetime -- * of a public address, the lifetimes of -- * temporary addresses should be extended, -- * subject to the overall constraint that no -- * temporary addresses should ever remain -- * "valid" or "preferred" for a time longer than -- * (TEMP_VALID_LIFETIME) or -- * (TEMP_PREFERRED_LIFETIME - DESYNC_FACTOR), -- * respectively. -- */ -- age = (now - ift->cstamp) / HZ; -- max_valid = in6_dev->cnf.temp_valid_lft - age; -- if (max_valid < 0) -- max_valid = 0; -- -- max_prefered = in6_dev->cnf.temp_prefered_lft - -- in6_dev->cnf.max_desync_factor - -- age; -- if (max_prefered < 0) -- max_prefered = 0; -- -- if (valid_lft > max_valid) -- valid_lft = max_valid; -- -- if (prefered_lft > max_prefered) -- prefered_lft = max_prefered; -- -- spin_lock(&ift->lock); -- flags = ift->flags; -- ift->valid_lft = valid_lft; -- ift->prefered_lft = prefered_lft; -- ift->tstamp = now; -- if (prefered_lft > 0) -- ift->flags &= ~IFA_F_DEPRECATED; -- -- spin_unlock(&ift->lock); -- if (!(flags&IFA_F_TENTATIVE)) -- ipv6_ifa_notify(0, ift); -- } -- -- if ((create || list_empty(&in6_dev->tempaddr_list)) && in6_dev->cnf.use_tempaddr > 0) { -- /* -- * When a new public address is created as -- * described in [ADDRCONF], also create a new -- * temporary address. Also create a temporary -- * address if it's enabled but no temporary -- * address currently exists. -- */ -- read_unlock_bh(&in6_dev->lock); -- ipv6_create_tempaddr(ifp, NULL); -- } else { -- read_unlock_bh(&in6_dev->lock); -- } -+ manage_tempaddrs(in6_dev, ifp, valid_lft, prefered_lft, -+ create, now); - - in6_ifa_put(ifp); - addrconf_verify(0); -@@ -2363,10 +2384,11 @@ err_exit: - /* - * Manual configuration of address on an interface - */ --static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *pfx, -+static int inet6_addr_add(struct net *net, int ifindex, -+ const struct in6_addr *pfx, - const struct in6_addr *peer_pfx, -- unsigned int plen, __u8 ifa_flags, __u32 prefered_lft, -- __u32 valid_lft) -+ unsigned int plen, __u32 ifa_flags, -+ __u32 prefered_lft, __u32 valid_lft) - { - struct inet6_ifaddr *ifp; - struct inet6_dev *idev; -@@ -2385,6 +2407,9 @@ static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *p - if (!valid_lft || prefered_lft > valid_lft) - return -EINVAL; - -+ if (ifa_flags & IFA_F_MANAGETEMPADDR && plen != 64) -+ return -EINVAL; -+ - dev = __dev_get_by_index(net, ifindex); - if (!dev) - return -ENODEV; -@@ -2417,14 +2442,20 @@ static int inet6_addr_add(struct net *net, int ifindex, const struct in6_addr *p - valid_lft, prefered_lft); - - if (!IS_ERR(ifp)) { -- addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev, -- expires, flags); -+ if (!(ifa_flags & IFA_F_NOPREFIXROUTE)) { -+ addrconf_prefix_route(&ifp->addr, ifp->prefix_len, dev, -+ expires, flags); -+ } -+ - /* - * Note that section 3.1 of RFC 4429 indicates - * that the Optimistic flag should not be set for - * manually configured addresses - */ - addrconf_dad_start(ifp); -+ if (ifa_flags & IFA_F_MANAGETEMPADDR) -+ manage_tempaddrs(idev, ifp, valid_lft, prefered_lft, -+ true, jiffies); - in6_ifa_put(ifp); - addrconf_verify(0); - return 0; -@@ -2857,7 +2888,7 @@ static int addrconf_notify(struct notifier_block *this, unsigned long event, - } - - /* -- * MTU falled under IPV6_MIN_MTU. -+ * if MTU under IPV6_MIN_MTU. - * Stop IPv6 on this interface. - */ - -@@ -3366,7 +3397,7 @@ static void if6_seq_stop(struct seq_file *seq, void *v) - static int if6_seq_show(struct seq_file *seq, void *v) - { - struct inet6_ifaddr *ifp = (struct inet6_ifaddr *)v; -- seq_printf(seq, "%pi6 %02x %02x %02x %02x %8s\n", -+ seq_printf(seq, "%pi6 %02x %02x %02x %03x %8s\n", - &ifp->addr, - ifp->idev->dev->ifindex, - ifp->prefix_len, -@@ -3593,6 +3624,7 @@ static const struct nla_policy ifa_ipv6_policy[IFA_MAX+1] = { - [IFA_ADDRESS] = { .len = sizeof(struct in6_addr) }, - [IFA_LOCAL] = { .len = sizeof(struct in6_addr) }, - [IFA_CACHEINFO] = { .len = sizeof(struct ifa_cacheinfo) }, -+ [IFA_FLAGS] = { .len = sizeof(u32) }, - }; - - static int -@@ -3616,16 +3648,22 @@ inet6_rtm_deladdr(struct sk_buff *skb, struct nlmsghdr *nlh) - return inet6_addr_del(net, ifm->ifa_index, pfx, ifm->ifa_prefixlen); - } - --static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags, -+static int inet6_addr_modify(struct inet6_ifaddr *ifp, u32 ifa_flags, - u32 prefered_lft, u32 valid_lft) - { - u32 flags; - clock_t expires; - unsigned long timeout; -+ bool was_managetempaddr; -+ bool had_prefixroute; - - if (!valid_lft || (prefered_lft > valid_lft)) - return -EINVAL; - -+ if (ifa_flags & IFA_F_MANAGETEMPADDR && -+ (ifp->flags & IFA_F_TEMPORARY || ifp->prefix_len != 64)) -+ return -EINVAL; -+ - timeout = addrconf_timeout_fixup(valid_lft, HZ); - if (addrconf_finite_timeout(timeout)) { - expires = jiffies_to_clock_t(timeout * HZ); -@@ -3645,7 +3683,13 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags, - } - - spin_lock_bh(&ifp->lock); -- ifp->flags = (ifp->flags & ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD | IFA_F_HOMEADDRESS)) | ifa_flags; -+ was_managetempaddr = ifp->flags & IFA_F_MANAGETEMPADDR; -+ had_prefixroute = ifp->flags & IFA_F_PERMANENT && -+ !(ifp->flags & IFA_F_NOPREFIXROUTE); -+ ifp->flags &= ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD | -+ IFA_F_HOMEADDRESS | IFA_F_MANAGETEMPADDR | -+ IFA_F_NOPREFIXROUTE); -+ ifp->flags |= ifa_flags; - ifp->tstamp = jiffies; - ifp->valid_lft = valid_lft; - ifp->prefered_lft = prefered_lft; -@@ -3654,8 +3698,30 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags, - if (!(ifp->flags&IFA_F_TENTATIVE)) - ipv6_ifa_notify(0, ifp); - -- addrconf_prefix_route(&ifp->addr, ifp->prefix_len, ifp->idev->dev, -- expires, flags); -+ if (!(ifa_flags & IFA_F_NOPREFIXROUTE)) { -+ addrconf_prefix_route(&ifp->addr, ifp->prefix_len, ifp->idev->dev, -+ expires, flags); -+ } else if (had_prefixroute) { -+ enum cleanup_prefix_rt_t action; -+ unsigned long rt_expires; -+ -+ write_lock_bh(&ifp->idev->lock); -+ action = check_cleanup_prefix_route(ifp, &rt_expires); -+ write_unlock_bh(&ifp->idev->lock); -+ -+ if (action != CLEANUP_PREFIX_RT_NOP) { -+ cleanup_prefix_route(ifp, rt_expires, -+ action == CLEANUP_PREFIX_RT_DEL); -+ } -+ } -+ -+ if (was_managetempaddr || ifp->flags & IFA_F_MANAGETEMPADDR) { -+ if (was_managetempaddr && !(ifp->flags & IFA_F_MANAGETEMPADDR)) -+ valid_lft = prefered_lft = 0; -+ manage_tempaddrs(ifp->idev, ifp, valid_lft, prefered_lft, -+ !was_managetempaddr, jiffies); -+ } -+ - addrconf_verify(0); - - return 0; -@@ -3671,7 +3737,7 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) - struct inet6_ifaddr *ifa; - struct net_device *dev; - u32 valid_lft = INFINITY_LIFE_TIME, preferred_lft = INFINITY_LIFE_TIME; -- u8 ifa_flags; -+ u32 ifa_flags; - int err; - - err = nlmsg_parse(nlh, sizeof(*ifm), tb, IFA_MAX, ifa_ipv6_policy); -@@ -3698,14 +3764,17 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) - if (dev == NULL) - return -ENODEV; - -+ ifa_flags = tb[IFA_FLAGS] ? nla_get_u32(tb[IFA_FLAGS]) : ifm->ifa_flags; -+ - /* We ignore other flags so far. */ -- ifa_flags = ifm->ifa_flags & (IFA_F_NODAD | IFA_F_HOMEADDRESS); -+ ifa_flags &= IFA_F_NODAD | IFA_F_HOMEADDRESS | IFA_F_MANAGETEMPADDR | -+ IFA_F_NOPREFIXROUTE; - - ifa = ipv6_get_ifaddr(net, pfx, dev, 1); - if (ifa == NULL) { - /* - * It would be best to check for !NLM_F_CREATE here but -- * userspace alreay relies on not having to provide this. -+ * userspace already relies on not having to provide this. - */ - return inet6_addr_add(net, ifm->ifa_index, pfx, peer_pfx, - ifm->ifa_prefixlen, ifa_flags, -@@ -3723,7 +3792,7 @@ inet6_rtm_newaddr(struct sk_buff *skb, struct nlmsghdr *nlh) - return err; - } - --static void put_ifaddrmsg(struct nlmsghdr *nlh, u8 prefixlen, u8 flags, -+static void put_ifaddrmsg(struct nlmsghdr *nlh, u8 prefixlen, u32 flags, - u8 scope, int ifindex) - { - struct ifaddrmsg *ifm; -@@ -3766,7 +3835,8 @@ static inline int inet6_ifaddr_msgsize(void) - return NLMSG_ALIGN(sizeof(struct ifaddrmsg)) - + nla_total_size(16) /* IFA_LOCAL */ - + nla_total_size(16) /* IFA_ADDRESS */ -- + nla_total_size(sizeof(struct ifa_cacheinfo)); -+ + nla_total_size(sizeof(struct ifa_cacheinfo)) -+ + nla_total_size(4) /* IFA_FLAGS */; - } - - static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa, -@@ -3815,6 +3885,9 @@ static int inet6_fill_ifaddr(struct sk_buff *skb, struct inet6_ifaddr *ifa, - if (put_cacheinfo(skb, ifa->cstamp, ifa->tstamp, preferred, valid) < 0) - goto error; - -+ if (nla_put_u32(skb, IFA_FLAGS, ifa->flags) < 0) -+ goto error; -+ - return nlmsg_end(skb, nlh); - - error: -_______________________________________________ -kernel mailing list -kernel@lists.fedoraproject.org -https://admin.fedoraproject.org/mailman/listinfo/kernel
\ No newline at end of file diff --git a/iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch b/iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch deleted file mode 100644 index 6db25b3d..00000000 --- a/iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch +++ /dev/null @@ -1,39 +0,0 @@ -Bugzilla: 1065663 -Upstream-status: 3.14 - -From ec6f678c74dbdb06a6a775bbb00f1d26c17c404b Mon Sep 17 00:00:00 2001 -From: Emmanuel Grumbach <emmanuel.grumbach@intel.com> -Date: Tue, 18 Feb 2014 10:30:18 +0200 -Subject: [PATCH] iwlwifi: dvm: clear IWL_STA_UCODE_INPROGRESS when assoc fails - -We set IWL_STA_UCODE_INPROGRESS flag when we add a station -and clear it when we send the LQ command for it. But the LQ -command is sent only when the association succeeds. -If the association doesn't succeed, we would leave this flag -set and that wouldn't indicate the station entry as vacant. - -This probably fixes: -https://bugzilla.redhat.com/show_bug.cgi?id=1065663 - -Cc: <stable@vger.kernel.org> -Reviewed-by: Johannes Berg <johannes.berg@intel.com> -Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> ---- - drivers/net/wireless/iwlwifi/dvm/sta.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/drivers/net/wireless/iwlwifi/dvm/sta.c b/drivers/net/wireless/iwlwifi/dvm/sta.c -index c0d070c..9cdd91c 100644 ---- a/drivers/net/wireless/iwlwifi/dvm/sta.c -+++ b/drivers/net/wireless/iwlwifi/dvm/sta.c -@@ -590,6 +590,7 @@ void iwl_deactivate_station(struct iwl_priv *priv, const u8 sta_id, - sizeof(priv->tid_data[sta_id][tid])); - - priv->stations[sta_id].used &= ~IWL_STA_DRIVER_ACTIVE; -+ priv->stations[sta_id].used &= ~IWL_STA_UCODE_INPROGRESS; - - priv->num_stations--; - --- -1.8.5.3 - diff --git a/kernel.spec b/kernel.spec index 394c77da..5397bf38 100644 --- a/kernel.spec +++ b/kernel.spec @@ -68,13 +68,13 @@ Summary: The Linux kernel # base_sublevel is the kernel version we're starting with and patching # on top of -- for example, 3.1-rc7-git1 starts with a 3.0 base, # which yields a base_sublevel of 0. -%define base_sublevel 13 +%define base_sublevel 14 ## If this is a released kernel ## %if 0%{?released_kernel} # Do we have a -stable update to apply? -%define stable_update 10 +%define stable_update 1 # Is it a -stable RC? %define stable_rc 0 # Set rpm version accordingly @@ -685,15 +685,14 @@ Patch21010: arm-omap-load-tfp410.patch # ARM tegra Patch21020: arm-tegra-usb-no-reset-linux33.patch +# Add panel support for tegra paz00 +# Backported from linux-next scheduled for 3.15 +Patch21021: arm-tegra-paz00-panel-dts.patch + # ARM i.MX6 # http://www.spinics.net/lists/devicetree/msg08276.html Patch21025: arm-imx6-utilite.patch -# am33xx (BeagleBone) -# https://github.com/beagleboard/kernel -# Pulled primarily from the above git repo and should be landing upstream -Patch21031: arm-am33xx-bblack.patch - #rhbz 754518 Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch @@ -707,60 +706,20 @@ Patch22000: weird-root-dentry-name-debug.patch Patch25047: drm-radeon-Disable-writeback-by-default-on-ppc.patch -# Fix 15sec NFS mount delay -Patch25152: sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch -Patch25153: sunrpc-replace-gssd_running-with-more-reliable-check.patch -Patch25154: nfs-check-gssd-running-before-krb5i-auth.patch -#rhbz 1037793 -Patch25166: sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch -Patch25167: rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch -Patch25168: rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch - -#rhbz 953211 -Patch25184: Input-ALPS-add-support-for-Dolphin-devices.patch - -#rhbz 1064430 1056711 -Patch25196: ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch -Patch25197: ipv6-addrconf-revert-if_inet6ifa_flag-format.patch - -#CVE-2014-0069 rhbz 1064253 1062584 -Patch25201: cifs-sanity-check-length-of-data-to-send-before-sending.patch - -#rhbz 1068862 -Patch25002: cifs-mask-off-top-byte-in-get_rfc1002_length.patch - -#CVE-2014-0102 rhbz 1071396 -Patch25026: keyring-fix.patch - -#rhbz 1065087 -Patch25028: tty-Fix-low_latency-BUG.patch - -#rhbz 1027465 -Patch25032: HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch - -#rhbz 1013466 -Patch25033: selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch - #rhbz 1051748 Patch25035: Bluetooth-allocate-static-minor-for-vhci.patch -#rhbz 1065663 -Patch25040: iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch - #rhbz 1046495 Patch25044: iwlwifi-dvm-take-mutex-when-sending-SYNC-BT-config-command.patch -#CVE-2014-2568 rhbz 1079012 1079013 -Patch25049: nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch - -#rhbz 1074235 -Patch25055: lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch - #CVE-2014-0155 rhbz 1081589 1085016 -Patch25057: KVM-ioapic-fix-assignment-of-ioapic-rtc_status-pending_eoi.patch +Patch25036: KVM-ioapic-fix-assignment-of-ioapic-rtc_status-pending_eoi.patch #rhbz 1048314 -Patch25058: 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch +Patch25062: 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch + +#rhbz 1074235 +Patch25055: lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch #CVE-2014-2851 rhbz 1086730 1087420 Patch25059: net-ipv4-current-group_info-should-be-put-after-using.patch @@ -1321,9 +1280,9 @@ ApplyPatch arm-lpae-ax88796.patch ApplyPatch arm-sound-soc-samsung-dma-avoid-another-64bit-division.patch ApplyPatch arm-omap-load-tfp410.patch ApplyPatch arm-tegra-usb-no-reset-linux33.patch +ApplyPatch arm-tegra-paz00-panel-dts.patch ApplyPatch arm-imx6-utilite.patch -ApplyPatch arm-am33xx-bblack.patch # # bugfixes to drivers and filesystems @@ -1388,8 +1347,6 @@ ApplyPatch crash-driver.patch # crypto/ -# keys - # secure boot ApplyPatch secure-modules.patch ApplyPatch modsign-uefi.patch @@ -1431,61 +1388,21 @@ ApplyPatch ath9k_rx_dma_stop_check.patch ApplyPatch drm-radeon-Disable-writeback-by-default-on-ppc.patch -# Fix 15sec NFS mount delay -ApplyPatch sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch -ApplyPatch sunrpc-replace-gssd_running-with-more-reliable-check.patch -ApplyPatch nfs-check-gssd-running-before-krb5i-auth.patch -#rhbz 1037793 -ApplyPatch rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch -ApplyPatch sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch -ApplyPatch rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch - -#rhbz 953211 -ApplyPatch Input-ALPS-add-support-for-Dolphin-devices.patch - -#rhbz 1064430 1056711 -ApplyPatch ipv6-introduce-IFA_F_NOPREFIXROUTE-and-IFA_F_MANAGETEMPADDR-flags.patch -ApplyPatch ipv6-addrconf-revert-if_inet6ifa_flag-format.patch - -#CVE-2014-0069 rhbz 1064253 1062584 -ApplyPatch cifs-sanity-check-length-of-data-to-send-before-sending.patch - -#rhbz 1068862 -ApplyPatch cifs-mask-off-top-byte-in-get_rfc1002_length.patch - -#CVE-2014-0102 rhbz 1071396 -ApplyPatch keyring-fix.patch - -#rhbz 1065087 -ApplyPatch tty-Fix-low_latency-BUG.patch - -#rhbz 1027465 -ApplyPatch HID-Bluetooth-hidp-make-sure-input-buffers-are-big-e.patch - -#rhbz 1013466 -ApplyPatch selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch - #rhbz 1051748 ApplyPatch Bluetooth-allocate-static-minor-for-vhci.patch -#rhbz 1065663 -ApplyPatch iwlwifi-dvm-clear-IWL_STA_UCODE_INPROGRESS-when-asso.patch - #rhbz 1046495 ApplyPatch iwlwifi-dvm-take-mutex-when-sending-SYNC-BT-config-command.patch -#CVE-2014-2568 rhbz 1079012 1079013 -ApplyPatch nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch - -#rhbz 1074235 -ApplyPatch lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch - #CVE-2014-0155 rhbz 1081589 1085016 ApplyPatch KVM-ioapic-fix-assignment-of-ioapic-rtc_status-pending_eoi.patch #rhbz 1048314 ApplyPatch 0001-HID-rmi-introduce-RMI-driver-for-Synaptics-touchpads.patch +#rhbz 1074235 +ApplyPatch lib-percpu_counter.c-fix-bad-percpu-counter-state-du.patch + #CVE-2014-2851 rhbz 1086730 1087420 ApplyPatch net-ipv4-current-group_info-should-be-put-after-using.patch @@ -2303,6 +2220,9 @@ fi # ||----w | # || || %changelog +* Mon Apr 21 2014 Justin M. Forbes <jforbes@fedoraproject.org> - 3.14.1-200 +- Linux v3.14.1 + * Thu Apr 17 2014 Hans de Goede <hdegoede@redhat.com> - Update min/max quirk patch to add a quirk for the ThinkPad L540 (rhbz1088588) diff --git a/keyring-fix.patch b/keyring-fix.patch deleted file mode 100644 index 6539144e..00000000 --- a/keyring-fix.patch +++ /dev/null @@ -1,17 +0,0 @@ -@@ -, +, @@ ---- ---- a/security/keys/keyring.c -+++ a/security/keys/keyring.c -@@ -1000,7 +1000,11 @@ static int keyring_detect_cycle_iterator(const void *object, - - kenter("{%d}", key->serial); - -- BUG_ON(key != ctx->match_data); -+ /* We might get a keyring with matching index-key that is nonetheless a -+ * different keyring. */ -+ if (key != ctx->match_data) -+ return 0; -+ - ctx->result = ERR_PTR(-EDEADLK); - return 1; - } diff --git a/nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch b/nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch deleted file mode 100644 index 107b7249..00000000 --- a/nfqueue-Orphan-frags-in-nfqnl_zcopy-and-handle-error.patch +++ /dev/null @@ -1,117 +0,0 @@ -Bugzilla: 1079013 -Upstream-status: Queued in netdev tree, backport for 3.13.y sent - -From 93f7cfcac69051641d5b10325164a0f313ef5185 Mon Sep 17 00:00:00 2001 -From: Josh Boyer <jwboyer@fedoraproject.org> -Date: Fri, 28 Mar 2014 09:32:19 -0400 -Subject: [PATCH] nfqueue: Orphan frags in nfqnl_zcopy and handle errors - -Backport of upstream commit 36d5fe6a0007 to 3.13.y - -nfqnl_zcopy can copy elements of the frags array between skbs, but it doesn't -orphan them. Also, it doesn't handle errors, so this patch takes care of that -as well, and modify the caller accordingly. skb_tx_error() is also added to -the callers so they will signal the failed delivery towards the creator of the -skb. - -Signed-off-by: Zoltan Kiss <zoltan.kiss@citrix.com> -Signed-off-by: David S. Miller <davem@davemloft.net> -Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> ---- - net/netfilter/nfnetlink_queue_core.c | 31 ++++++++++++++++++++++--------- - 1 file changed, 22 insertions(+), 9 deletions(-) - -diff --git a/net/netfilter/nfnetlink_queue_core.c b/net/netfilter/nfnetlink_queue_core.c -index 21258cf..b241654 100644 ---- a/net/netfilter/nfnetlink_queue_core.c -+++ b/net/netfilter/nfnetlink_queue_core.c -@@ -235,22 +235,23 @@ nfqnl_flush(struct nfqnl_instance *queue, nfqnl_cmpfn cmpfn, unsigned long data) - spin_unlock_bh(&queue->lock); - } - --static void --nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen) -+static int -+nfqnl_zcopy(struct sk_buff *to, struct sk_buff *from, int len, int hlen) - { - int i, j = 0; - int plen = 0; /* length of skb->head fragment */ -+ int ret; - struct page *page; - unsigned int offset; - - /* dont bother with small payloads */ -- if (len <= skb_tailroom(to)) { -- skb_copy_bits(from, 0, skb_put(to, len), len); -- return; -- } -+ if (len <= skb_tailroom(to)) -+ return skb_copy_bits(from, 0, skb_put(to, len), len); - - if (hlen) { -- skb_copy_bits(from, 0, skb_put(to, hlen), hlen); -+ ret = skb_copy_bits(from, 0, skb_put(to, hlen), hlen); -+ if (unlikely(ret)) -+ return ret; - len -= hlen; - } else { - plen = min_t(int, skb_headlen(from), len); -@@ -268,6 +269,11 @@ nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen) - to->len += len + plen; - to->data_len += len + plen; - -+ if (unlikely(skb_orphan_frags(from, GFP_ATOMIC))) { -+ skb_tx_error(from); -+ return -ENOMEM; -+ } -+ - for (i = 0; i < skb_shinfo(from)->nr_frags; i++) { - if (!len) - break; -@@ -278,6 +284,8 @@ nfqnl_zcopy(struct sk_buff *to, const struct sk_buff *from, int len, int hlen) - j++; - } - skb_shinfo(to)->nr_frags = j; -+ -+ return 0; - } - - static int -@@ -374,13 +382,16 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, - - skb = nfnetlink_alloc_skb(net, size, queue->peer_portid, - GFP_ATOMIC); -- if (!skb) -+ if (!skb) { -+ skb_tx_error(entskb); - return NULL; -+ } - - nlh = nlmsg_put(skb, 0, 0, - NFNL_SUBSYS_QUEUE << 8 | NFQNL_MSG_PACKET, - sizeof(struct nfgenmsg), 0); - if (!nlh) { -+ skb_tx_error(entskb); - kfree_skb(skb); - return NULL; - } -@@ -504,13 +515,15 @@ nfqnl_build_packet_message(struct net *net, struct nfqnl_instance *queue, - nla->nla_type = NFQA_PAYLOAD; - nla->nla_len = nla_attr_size(data_len); - -- nfqnl_zcopy(skb, entskb, data_len, hlen); -+ if (nfqnl_zcopy(skb, entskb, data_len, hlen)) -+ goto nla_put_failure; - } - - nlh->nlmsg_len = skb->len; - return skb; - - nla_put_failure: -+ skb_tx_error(entskb); - kfree_skb(skb); - net_err_ratelimited("nf_queue: error creating packet message\n"); - return NULL; --- -1.8.5.3 - diff --git a/nfs-check-gssd-running-before-krb5i-auth.patch b/nfs-check-gssd-running-before-krb5i-auth.patch deleted file mode 100644 index 1e282f0d..00000000 --- a/nfs-check-gssd-running-before-krb5i-auth.patch +++ /dev/null @@ -1,53 +0,0 @@ -Bugzilla: N/A -Upstream-status: sent for 3.14 - -From 6aa23d76a7b549521a03b63b6d5b7880ea87eab7 Mon Sep 17 00:00:00 2001 -From: Jeff Layton <jlayton@redhat.com> -Date: Thu, 14 Nov 2013 07:25:19 -0500 -Subject: [PATCH] nfs: check if gssd is running before attempting to use krb5i - auth in SETCLIENTID call - -Currently, the client will attempt to use krb5i in the SETCLIENTID call -even if rpc.gssd isn't running. When that fails, it'll then fall back to -RPC_AUTH_UNIX. This introduced a delay when mounting if rpc.gssd isn't -running, and causes warning messages to pop up in the ring buffer. - -Check to see if rpc.gssd is running before even attempting to use krb5i -auth, and just silently skip trying to do so if it isn't. In the event -that the admin is actually trying to mount with krb5*, it will still -fail at a later stage of the mount attempt. - -Signed-off-by: Jeff Layton <jlayton@redhat.com> -Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> ---- - fs/nfs/nfs4client.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/fs/nfs/nfs4client.c b/fs/nfs/nfs4client.c -index b4a160a..c1b7a80 100644 ---- a/fs/nfs/nfs4client.c -+++ b/fs/nfs/nfs4client.c -@@ -10,6 +10,7 @@ - #include <linux/sunrpc/auth.h> - #include <linux/sunrpc/xprt.h> - #include <linux/sunrpc/bc_xprt.h> -+#include <linux/sunrpc/rpc_pipe_fs.h> - #include "internal.h" - #include "callback.h" - #include "delegation.h" -@@ -370,7 +371,11 @@ struct nfs_client *nfs4_init_client(struct nfs_client *clp, - __set_bit(NFS_CS_INFINITE_SLOTS, &clp->cl_flags); - __set_bit(NFS_CS_DISCRTRY, &clp->cl_flags); - __set_bit(NFS_CS_NO_RETRANS_TIMEOUT, &clp->cl_flags); -- error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_GSS_KRB5I); -+ -+ error = -EINVAL; -+ if (gssd_running(clp->cl_net)) -+ error = nfs_create_rpc_client(clp, timeparms, -+ RPC_AUTH_GSS_KRB5I); - if (error == -EINVAL) - error = nfs_create_rpc_client(clp, timeparms, RPC_AUTH_UNIX); - if (error < 0) --- -1.8.2.1 - diff --git a/rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch b/rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch deleted file mode 100644 index ed03f34d..00000000 --- a/rpc_pipe-fix-cleanup-of-dummy-gssd-directory-when-notification-fails.patch +++ /dev/null @@ -1,50 +0,0 @@ -Bugzilla: 1037793 -Upstream-status: submitted for 3.14 - -Currently, it could leak dentry references in some cases. Make sure -we clean up properly. - -Signed-off-by: Jeff Layton <jlayton@redhat.com> ---- - net/sunrpc/rpc_pipe.c | 14 +++++++++++++- - 1 file changed, 13 insertions(+), 1 deletion(-) - -diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c -index 5d973b2..b185548 100644 ---- a/net/sunrpc/rpc_pipe.c -+++ b/net/sunrpc/rpc_pipe.c -@@ -1369,6 +1369,18 @@ out: - return pipe_dentry; - } - -+static void -+rpc_gssd_dummy_depopulate(struct dentry *pipe_dentry) -+{ -+ struct dentry *clnt_dir = pipe_dentry->d_parent; -+ struct dentry *gssd_dir = clnt_dir->d_parent; -+ -+ __rpc_rmpipe(clnt_dir->d_inode, pipe_dentry); -+ __rpc_depopulate(clnt_dir, gssd_dummy_info_file, 0, 1); -+ __rpc_depopulate(gssd_dir, gssd_dummy_clnt_dir, 0, 1); -+ dput(pipe_dentry); -+} -+ - static int - rpc_fill_super(struct super_block *sb, void *data, int silent) - { -@@ -1412,7 +1424,7 @@ rpc_fill_super(struct super_block *sb, void *data, int silent) - return 0; - - err_depopulate: -- dput(gssd_dentry); -+ rpc_gssd_dummy_depopulate(gssd_dentry); - blocking_notifier_call_chain(&rpc_pipefs_notifier_list, - RPC_PIPEFS_UMOUNT, - sb); --- -1.8.4.2 - --- -To unsubscribe from this list: send the line "unsubscribe linux-nfs" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch b/rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch deleted file mode 100644 index e4b1a255..00000000 --- a/rpc_pipe-remove-the-clntXX-dir-if-creating-the-pipe-fails.patch +++ /dev/null @@ -1,32 +0,0 @@ -Bugzilla: 1037793 -Upstream-status: submitted for 3.14 - -In the event that we create the gssd/clntXX dir, but the pipe creation -subsequently fails, then we should remove the clntXX dir before -returning. - -Signed-off-by: Jeff Layton <jlayton@redhat.com> ---- - net/sunrpc/rpc_pipe.c | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c -index 5cd7ad1..0b74c61 100644 ---- a/net/sunrpc/rpc_pipe.c -+++ b/net/sunrpc/rpc_pipe.c -@@ -1313,6 +1313,8 @@ rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data) - } - - pipe_dentry = rpc_mkpipe_dentry(clnt_dentry, "gssd", NULL, pipe_data); -+ if (IS_ERR(pipe_dentry)) -+ __rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1); - out: - dput(clnt_dentry); - dput(gssd_dentry); --- -1.8.4.2 - --- -To unsubscribe from this list: send the line "unsubscribe linux-nfs" in -the body of a message to majordomo@vger.kernel.org -More majordomo info at http://vger.kernel.org/majordomo-info.html diff --git a/secure-modules.patch b/secure-modules.patch index 21157c93..86bf9dc6 100644 --- a/secure-modules.patch +++ b/secure-modules.patch @@ -1,7 +1,7 @@ Bugzilla: N/A Upstream-status: Fedora mustard. Replaced by securelevels, but that was nak'd -From 0fc411ee00c81b8a18b1417d31f2736fad155d89 Mon Sep 17 00:00:00 2001 +From f212a4d8b8638a3e15e4cd76874d4fab60726752 Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 9 Aug 2013 17:58:15 -0400 Subject: [PATCH 01/14] Add secure_modules() call @@ -17,10 +17,10 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 2 files changed, 17 insertions(+) diff --git a/include/linux/module.h b/include/linux/module.h -index 05f2447..de97e77 100644 +index 15cd6b1..30702eb 100644 --- a/include/linux/module.h +++ b/include/linux/module.h -@@ -515,6 +515,8 @@ int unregister_module_notifier(struct notifier_block * nb); +@@ -512,6 +512,8 @@ int unregister_module_notifier(struct notifier_block * nb); extern void print_modules(void); @@ -29,7 +29,7 @@ index 05f2447..de97e77 100644 #else /* !CONFIG_MODULES... */ /* Given an address, look for it in the exception tables. */ -@@ -625,6 +627,11 @@ static inline int unregister_module_notifier(struct notifier_block * nb) +@@ -622,6 +624,11 @@ static inline int unregister_module_notifier(struct notifier_block * nb) static inline void print_modules(void) { } @@ -42,10 +42,10 @@ index 05f2447..de97e77 100644 #ifdef CONFIG_SYSFS diff --git a/kernel/module.c b/kernel/module.c -index dc58274..81206c1 100644 +index f5a3b1e..644c33e 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -3860,3 +3860,13 @@ void module_layout(struct module *mod, +@@ -3831,3 +3831,13 @@ void module_layout(struct module *mod, } EXPORT_SYMBOL(module_layout); #endif @@ -60,10 +60,10 @@ index dc58274..81206c1 100644 +} +EXPORT_SYMBOL(secure_modules); -- -1.8.3.1 +1.8.4.2 -From b94942e55b519e70366e970cea3665c464d1b7da Mon Sep 17 00:00:00 2001 +From 394a8259d0b457495dddda8704821ec9e56ea44a Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Thu, 8 Mar 2012 10:10:38 -0500 Subject: [PATCH 02/14] PCI: Lock down BAR access when module security is @@ -83,7 +83,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c -index d8eb880..a851ad6 100644 +index c91e6c1..447742e 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -29,6 +29,7 @@ @@ -94,7 +94,7 @@ index d8eb880..a851ad6 100644 #include "pci.h" static int sysfs_initialized; /* = 0 */ -@@ -644,6 +645,9 @@ pci_write_config(struct file* filp, struct kobject *kobj, +@@ -668,6 +669,9 @@ pci_write_config(struct file* filp, struct kobject *kobj, loff_t init_off = off; u8 *data = (u8*) buf; @@ -104,7 +104,7 @@ index d8eb880..a851ad6 100644 if (off > dev->cfg_size) return 0; if (off + count > dev->cfg_size) { -@@ -950,6 +954,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, +@@ -974,6 +978,9 @@ pci_mmap_resource(struct kobject *kobj, struct bin_attribute *attr, resource_size_t start, end; int i; @@ -114,7 +114,7 @@ index d8eb880..a851ad6 100644 for (i = 0; i < PCI_ROM_RESOURCE; i++) if (res == &pdev->resource[i]) break; -@@ -1057,6 +1064,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj, +@@ -1081,6 +1088,9 @@ pci_write_resource_io(struct file *filp, struct kobject *kobj, struct bin_attribute *attr, char *buf, loff_t off, size_t count) { @@ -125,7 +125,7 @@ index d8eb880..a851ad6 100644 } diff --git a/drivers/pci/proc.c b/drivers/pci/proc.c -index cdc7836..e3d498b 100644 +index 46d1378..294fe7b 100644 --- a/drivers/pci/proc.c +++ b/drivers/pci/proc.c @@ -117,6 +117,9 @@ proc_bus_pci_write(struct file *file, const char __user *buf, size_t nbytes, lof @@ -158,7 +158,7 @@ index cdc7836..e3d498b 100644 /* Make sure the caller is mapping a real resource for this device */ diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c -index e1c1ec5..bffbf71 100644 +index 24750a1..fa57896 100644 --- a/drivers/pci/syscall.c +++ b/drivers/pci/syscall.c @@ -10,6 +10,7 @@ @@ -179,10 +179,10 @@ index e1c1ec5..bffbf71 100644 dev = pci_get_bus_and_slot(bus, dfn); -- -1.8.3.1 +1.8.4.2 -From 36f34509fe52cc49e1b1f6815a3f235040f64a03 Mon Sep 17 00:00:00 2001 +From 69532e626cece8a43c2528246e0421488b468102 Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Thu, 8 Mar 2012 10:35:59 -0500 Subject: [PATCH 03/14] x86: Lock down IO port access when module security is @@ -252,10 +252,10 @@ index f895a8c..1af8664 100644 return -EFAULT; while (count-- > 0 && i < 65536) { -- -1.8.3.1 +1.8.4.2 -From 67d9800dcf60467e076587b0aac67bcdc516cfe2 Mon Sep 17 00:00:00 2001 +From 8771ff55273e964d707b174dd0dbe433783c0254 Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 9 Mar 2012 08:39:37 -0500 Subject: [PATCH 04/14] ACPI: Limit access to custom_method @@ -284,10 +284,10 @@ index 12b62f2..50647b3 100644 /* parse the table header to get the table length */ if (count <= sizeof(struct acpi_table_header)) -- -1.8.3.1 +1.8.4.2 -From bdf3761573167c20c72b151c1088b24fd24869ac Mon Sep 17 00:00:00 2001 +From 7d3e3db90e1b4cf33ba4a46624ae4a68f787e5fc Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 9 Mar 2012 08:46:50 -0500 Subject: [PATCH 05/14] asus-wmi: Restrict debugfs interface when module @@ -339,10 +339,10 @@ index 19c313b..db18ef66 100644 1, asus->debug.method_id, &input, &output); -- -1.8.3.1 +1.8.4.2 -From 65d88af5a2c6bb6d01da17819d8ba782bd208837 Mon Sep 17 00:00:00 2001 +From 98ebe083d75333e269730fe374cca42ac7f08a07 Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 9 Mar 2012 09:28:15 -0500 Subject: [PATCH 06/14] Restrict /dev/mem and /dev/kmem when module loading is @@ -382,10 +382,10 @@ index 1af8664..61406c8 100644 unsigned long to_write = min_t(unsigned long, count, (unsigned long)high_memory - p); -- -1.8.3.1 +1.8.4.2 -From 4aa42b7fa5d7f79eb1d179e728ffa561fd9cf354 Mon Sep 17 00:00:00 2001 +From 71353d491c70b303a07b4e79c896e729a4f74978 Mon Sep 17 00:00:00 2001 From: Josh Boyer <jwboyer@redhat.com> Date: Mon, 25 Jun 2012 19:57:30 -0400 Subject: [PATCH 07/14] acpi: Ignore acpi_rsdp kernel parameter when module @@ -401,7 +401,7 @@ Signed-off-by: Josh Boyer <jwboyer@redhat.com> 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c -index e5f416c..9311c00 100644 +index 54a20ff..d21d269 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c @@ -45,6 +45,7 @@ @@ -412,7 +412,7 @@ index e5f416c..9311c00 100644 #include <asm/io.h> #include <asm/uaccess.h> -@@ -249,7 +250,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp); +@@ -248,7 +249,7 @@ early_param("acpi_rsdp", setup_acpi_rsdp); acpi_physical_address __init acpi_os_get_root_pointer(void) { #ifdef CONFIG_KEXEC @@ -422,10 +422,10 @@ index e5f416c..9311c00 100644 #endif -- -1.8.3.1 +1.8.4.2 -From c9e62c2ce588d98a774a3853e56d95e48b9df98c Mon Sep 17 00:00:00 2001 +From e0a6b0dd91460123d71784d531b9df26449940ae Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 9 Aug 2013 03:33:56 -0400 Subject: [PATCH 08/14] kexec: Disable at runtime if the kernel enforces module @@ -441,7 +441,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 8 insertions(+) diff --git a/kernel/kexec.c b/kernel/kexec.c -index 2a74f30..13601e3 100644 +index 9c97016..8ad0d38 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c @@ -32,6 +32,7 @@ @@ -452,7 +452,7 @@ index 2a74f30..13601e3 100644 #include <asm/page.h> #include <asm/uaccess.h> -@@ -943,6 +944,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, +@@ -946,6 +947,13 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, return -EPERM; /* @@ -467,10 +467,10 @@ index 2a74f30..13601e3 100644 * This leaves us room for future extensions. */ -- -1.8.3.1 +1.8.4.2 -From d0e3cb2c13dc9634849ddacf75b6f0d94147516a Mon Sep 17 00:00:00 2001 +From c340630e68e5ed4d731d60d05ef9e2ae27080b66 Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Tue, 3 Sep 2013 11:23:29 -0400 Subject: [PATCH 09/14] uswsusp: Disable when module loading is restricted @@ -485,7 +485,7 @@ Signed-off-by: Matthew Garrett <matthew.garrett@nebula.com> 1 file changed, 4 insertions(+) diff --git a/kernel/power/user.c b/kernel/power/user.c -index 957f061..e570609d 100644 +index 98d3575..efe99de 100644 --- a/kernel/power/user.c +++ b/kernel/power/user.c @@ -24,6 +24,7 @@ @@ -507,10 +507,10 @@ index 957f061..e570609d 100644 if (!atomic_add_unless(&snapshot_device_available, -1, 0)) { -- -1.8.3.1 +1.8.4.2 -From b238417ed3c5a0b21bbfcac84f6c70011b8977c0 Mon Sep 17 00:00:00 2001 +From 273deda4ddec360ce67ac256b8cbdabdc5e8c51d Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 8 Feb 2013 11:12:13 -0800 Subject: [PATCH 10/14] x86: Restrict MSR access when module loading is @@ -552,10 +552,10 @@ index 05266b5..e2bd647 100644 err = -EFAULT; break; -- -1.8.3.1 +1.8.4.2 -From c3a9afb3b580b4f721d245fc5d13e378b99b9cd8 Mon Sep 17 00:00:00 2001 +From 089166c0d42f1b82988aad4f23607deb6ee531e7 Mon Sep 17 00:00:00 2001 From: Matthew Garrett <matthew.garrett@nebula.com> Date: Fri, 9 Aug 2013 18:36:30 -0400 Subject: [PATCH 11/14] Add option to automatically enforce module signatures @@ -591,10 +591,10 @@ index 199f453..ec38acf 100644 290/040 ALL edd_mbr_sig_buffer EDD MBR signatures 2D0/A00 ALL e820_map E820 memory map table diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index 725e157..fe212ef 100644 +index 5216e28..2a147a3 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -1604,6 +1604,16 @@ config EFI_STUB +@@ -1582,6 +1582,16 @@ config EFI_STUB See Documentation/efi-stub.txt for more information. @@ -673,10 +673,10 @@ index a7677ba..4e172e9 100644 setup_efi_pci(boot_params); diff --git a/arch/x86/include/uapi/asm/bootparam.h b/arch/x86/include/uapi/asm/bootparam.h -index 9c3733c..a7ba210 100644 +index 225b098..90dbfb7 100644 --- a/arch/x86/include/uapi/asm/bootparam.h +++ b/arch/x86/include/uapi/asm/bootparam.h -@@ -131,7 +131,8 @@ struct boot_params { +@@ -133,7 +133,8 @@ struct boot_params { __u8 eddbuf_entries; /* 0x1e9 */ __u8 edd_mbr_sig_buf_entries; /* 0x1ea */ __u8 kbd_status; /* 0x1eb */ @@ -687,10 +687,10 @@ index 9c3733c..a7ba210 100644 * The sentinel is set to a nonzero value (0xff) in header.S. * diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 918d489..fe429c1 100644 +index 182b3f9..ab6cc9e 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c -@@ -1127,6 +1127,12 @@ void __init setup_arch(char **cmdline_p) +@@ -1129,6 +1129,12 @@ void __init setup_arch(char **cmdline_p) io_delay_init(); @@ -704,7 +704,7 @@ index 918d489..fe429c1 100644 * Parse the ACPI tables for possible boot-time SMP configuration. */ diff --git a/include/linux/module.h b/include/linux/module.h -index de97e77..d69fe19 100644 +index 30702eb..3eb0f52 100644 --- a/include/linux/module.h +++ b/include/linux/module.h @@ -190,6 +190,12 @@ const struct exception_table_entry *search_exception_tables(unsigned long add); @@ -721,10 +721,10 @@ index de97e77..d69fe19 100644 extern int modules_disabled; /* for sysctl */ diff --git a/kernel/module.c b/kernel/module.c -index 81206c1..e1428f0 100644 +index 644c33e..92b73b1 100644 --- a/kernel/module.c +++ b/kernel/module.c -@@ -3861,6 +3861,13 @@ void module_layout(struct module *mod, +@@ -3832,6 +3832,13 @@ void module_layout(struct module *mod, EXPORT_SYMBOL(module_layout); #endif @@ -739,10 +739,10 @@ index 81206c1..e1428f0 100644 { #ifdef CONFIG_MODULE_SIG -- -1.8.3.1 +1.8.4.2 -From 27a1aa77c7fbaaae8c6a776190a38dcbf3c3d6d2 Mon Sep 17 00:00:00 2001 +From e9ad6bd405fa01b7dd52d8c75b9dc91ae52e131d Mon Sep 17 00:00:00 2001 From: Josh Boyer <jwboyer@redhat.com> Date: Tue, 5 Feb 2013 19:25:05 -0500 Subject: [PATCH 12/14] efi: Disable secure boot if shim is in insecure mode @@ -798,10 +798,10 @@ index 4e172e9..4905f4d 100644 } -- -1.8.3.1 +1.8.4.2 -From 2a445ca2c187da4497ef5f68f111574fd2b0d419 Mon Sep 17 00:00:00 2001 +From f9f355d5e58c1503bb7c03d92c9e89267e0f46ad Mon Sep 17 00:00:00 2001 From: Josh Boyer <jwboyer@fedoraproject.org> Date: Tue, 27 Aug 2013 13:28:43 -0400 Subject: [PATCH 13/14] efi: Make EFI_SECURE_BOOT_SIG_ENFORCE depend on EFI @@ -815,10 +815,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig -index fe212ef..bf83fd3 100644 +index 2a147a3..9e644d5 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig -@@ -1605,7 +1605,8 @@ config EFI_STUB +@@ -1583,7 +1583,8 @@ config EFI_STUB See Documentation/efi-stub.txt for more information. config EFI_SECURE_BOOT_SIG_ENFORCE @@ -829,10 +829,10 @@ index fe212ef..bf83fd3 100644 ---help--- UEFI Secure Boot provides a mechanism for ensuring that the -- -1.8.3.1 +1.8.4.2 -From b1c533cc1d1ca7a03497cc4f2e1b029bde95633c Mon Sep 17 00:00:00 2001 +From a30576a9db583213474b74360c5869e8882e6ed7 Mon Sep 17 00:00:00 2001 From: Josh Boyer <jwboyer@fedoraproject.org> Date: Tue, 27 Aug 2013 13:33:03 -0400 Subject: [PATCH 14/14] efi: Add EFI_SECURE_BOOT bit @@ -847,10 +847,10 @@ Signed-off-by: Josh Boyer <jwboyer@fedoraproject.org> 2 files changed, 3 insertions(+) diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index fe429c1..469fbf0 100644 +index ab6cc9e..99933cd 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c -@@ -1129,7 +1129,9 @@ void __init setup_arch(char **cmdline_p) +@@ -1131,7 +1131,9 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_EFI_SECURE_BOOT_SIG_ENFORCE if (boot_params.secure_boot) { @@ -861,17 +861,17 @@ index fe429c1..469fbf0 100644 #endif diff --git a/include/linux/efi.h b/include/linux/efi.h -index bc5687d..b010a2e 100644 +index 0a819e7..0c1d367 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h -@@ -653,6 +653,7 @@ extern int __init efi_setup_pcdp_console(char *); - #define EFI_RUNTIME_SERVICES 3 /* Can we use runtime services? */ +@@ -657,6 +657,7 @@ extern int __init efi_setup_pcdp_console(char *); #define EFI_MEMMAP 4 /* Can we use EFI memory map? */ #define EFI_64BIT 5 /* Is the firmware 64-bit? */ -+#define EFI_SECURE_BOOT 6 /* Are we in Secure Boot mode? */ + #define EFI_ARCH_1 6 /* First arch-specific bit */ ++#define EFI_SECURE_BOOT 7 /* Are we in Secure Boot mode? */ #ifdef CONFIG_EFI # ifdef CONFIG_X86 -- -1.8.3.1 +1.8.4.2 diff --git a/selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch b/selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch deleted file mode 100644 index 31e45488..00000000 --- a/selinux-put-the-mmap-DAC-controls-before-the-MAC-controls.patch +++ /dev/null @@ -1,94 +0,0 @@ -Bugzilla: 1013466 -Upstream-status: queued for 3.14/3.15? http://marc.info/?l=selinux&m=139351174702148&w=2 - -It turns out that doing the SELinux MAC checks for mmap() before the -DAC checks was causing users and the SELinux policy folks headaches -as users were seeing a lot of SELinux AVC denials for the -memprotect:mmap_zero permission that would have also been denied by -the normal DAC capability checks (CAP_SYS_RAWIO). - -Example: - - # cat mmap_test.c - #include <stdlib.h> - #include <stdio.h> - #include <errno.h> - #include <sys/mman.h> - - int main(int argc, char *argv[]) - { - int rc; - void *mem; - - mem = mmap(0x0, 4096, - PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); - if (mem == MAP_FAILED) - return errno; - printf("mem = %p\n", mem); - munmap(mem, 4096); - - return 0; - } - # gcc -g -O0 -o mmap_test mmap_test.c - # ./mmap_test - mem = (nil) - # ausearch -m AVC | grep mmap_zero - type=AVC msg=audit(...): avc: denied { mmap_zero } - for pid=1025 comm="mmap_test" - scontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 - tcontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 - tclass=memprotect - -This patch corrects things so that when the above example is run by a -user without CAP_SYS_RAWIO the SELinux AVC is no longer generated as -the DAC capability check fails before the SELinux permission check. - -Signed-off-by: Paul Moore <pmoore@redhat.com> ---- - security/selinux/hooks.c | 20 ++++++++------------ - 1 file changed, 8 insertions(+), 12 deletions(-) - -diff --git a/security/selinux/hooks.c b/security/selinux/hooks.c -index 57b0b49..e3664ae 100644 ---- a/security/selinux/hooks.c -+++ b/security/selinux/hooks.c -@@ -3205,24 +3205,20 @@ error: - - static int selinux_mmap_addr(unsigned long addr) - { -- int rc = 0; -- u32 sid = current_sid(); -+ int rc; -+ -+ /* do DAC check on address space usage */ -+ rc = cap_mmap_addr(addr); -+ if (rc) -+ return rc; - -- /* -- * notice that we are intentionally putting the SELinux check before -- * the secondary cap_file_mmap check. This is such a likely attempt -- * at bad behaviour/exploit that we always want to get the AVC, even -- * if DAC would have also denied the operation. -- */ - if (addr < CONFIG_LSM_MMAP_MIN_ADDR) { -+ u32 sid = current_sid(); - rc = avc_has_perm(sid, sid, SECCLASS_MEMPROTECT, - MEMPROTECT__MMAP_ZERO, NULL); -- if (rc) -- return rc; - } - -- /* do DAC check on address space usage */ -- return cap_mmap_addr(addr); -+ return rc; - } - - static int selinux_mmap_file(struct file *file, unsigned long reqprot, - -_______________________________________________ -Selinux mailing list -Selinux@tycho.nsa.gov -To unsubscribe, send email to Selinux-leave@tycho.nsa.gov. -To get help, send an email containing "help" to Selinux-request@tycho.nsa.gov. @@ -1,2 +1,2 @@ -0ecbaf65c00374eb4a826c2f9f37606f linux-3.13.tar.xz -dcf42b5013a7831d02168fd3eda5cce2 patch-3.13.10.xz +b621207b3f6ecbb67db18b13258f8ea8 linux-3.14.tar.xz +2526eb95793ecc1c22d7e1428ef23cdc patch-3.14.1.xz diff --git a/sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch b/sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch deleted file mode 100644 index dd3b5ba2..00000000 --- a/sunrpc-add-an-info-file-for-the-dummy-gssd-pipe.patch +++ /dev/null @@ -1,96 +0,0 @@ -Bugzilla: 1037793 -Upstream-status: submitted for 3.14 - -rpc.gssd expects to see an "info" file in each clntXX dir. Since adding -the dummy gssd pipe, users that run rpc.gssd see a lot of these messages -spamming the logs: - - rpc.gssd[508]: ERROR: can't open /var/lib/nfs/rpc_pipefs/gssd/clntXX/info: No such file or directory - rpc.gssd[508]: ERROR: failed to read service info - -Add a dummy gssd/clntXX/info file to help silence these messages. - -Signed-off-by: Jeff Layton <jlayton@redhat.com> ---- - net/sunrpc/rpc_pipe.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- - 1 file changed, 49 insertions(+), 1 deletion(-) - -diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c -index 0b74c61..5d973b2 100644 ---- a/net/sunrpc/rpc_pipe.c -+++ b/net/sunrpc/rpc_pipe.c -@@ -17,6 +17,7 @@ - #include <linux/fsnotify.h> - #include <linux/kernel.h> - #include <linux/rcupdate.h> -+#include <linux/utsname.h> - - #include <asm/ioctls.h> - #include <linux/poll.h> -@@ -1275,6 +1276,44 @@ static const struct rpc_pipe_ops gssd_dummy_pipe_ops = { - .downcall = dummy_downcall, - }; - -+/* -+ * Here we present a bogus "info" file to keep rpc.gssd happy. We don't expect -+ * that it will ever use this info to handle an upcall, but rpc.gssd expects -+ * that this file will be there and have a certain format. -+ */ -+static int -+rpc_show_dummy_info(struct seq_file *m, void *v) -+{ -+ seq_printf(m, "RPC server: %s\n", utsname()->nodename); -+ seq_printf(m, "service: foo (1) version 0\n"); -+ seq_printf(m, "address: 127.0.0.1\n"); -+ seq_printf(m, "protocol: tcp\n"); -+ seq_printf(m, "port: 0\n"); -+ return 0; -+} -+ -+static int -+rpc_dummy_info_open(struct inode *inode, struct file *file) -+{ -+ return single_open(file, rpc_show_dummy_info, NULL); -+} -+ -+static const struct file_operations rpc_dummy_info_operations = { -+ .owner = THIS_MODULE, -+ .open = rpc_dummy_info_open, -+ .read = seq_read, -+ .llseek = seq_lseek, -+ .release = single_release, -+}; -+ -+static const struct rpc_filelist gssd_dummy_info_file[] = { -+ [0] = { -+ .name = "info", -+ .i_fop = &rpc_dummy_info_operations, -+ .mode = S_IFREG | S_IRUSR, -+ }, -+}; -+ - /** - * rpc_gssd_dummy_populate - create a dummy gssd pipe - * @root: root of the rpc_pipefs filesystem -@@ -1312,9 +1351,18 @@ rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data) - goto out; - } - -+ ret = rpc_populate(clnt_dentry, gssd_dummy_info_file, 0, 1, NULL); -+ if (ret) { -+ __rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1); -+ pipe_dentry = ERR_PTR(ret); -+ goto out; -+ } -+ - pipe_dentry = rpc_mkpipe_dentry(clnt_dentry, "gssd", NULL, pipe_data); -- if (IS_ERR(pipe_dentry)) -+ if (IS_ERR(pipe_dentry)) { -+ __rpc_depopulate(clnt_dentry, gssd_dummy_info_file, 0, 1); - __rpc_depopulate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1); -+ } - out: - dput(clnt_dentry); - dput(gssd_dentry); --- -1.8.4.2 diff --git a/sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch b/sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch deleted file mode 100644 index 805498a7..00000000 --- a/sunrpc-create-a-new-dummy-pipe-for-gssd-to-hold-open.patch +++ /dev/null @@ -1,233 +0,0 @@ -Bugzilla: N/A -Upstream-status: queued in NFS git tree (for 3.13/3.14?) - -rpc.gssd will naturally hold open any pipe named */clnt*/gssd that shows -up under rpc_pipefs. That behavior gives us a reliable mechanism to tell -whether it's actually running or not. - -Create a new toplevel "gssd" directory in rpc_pipefs when it's mounted. -Under that directory create another directory called "clntXX", and then -within that a pipe called "gssd". - -We'll never send an upcall along that pipe, and any downcall written to -it will just return -EINVAL. - -Signed-off-by: Jeff Layton <jlayton@redhat.com> -Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> ---- - include/linux/sunrpc/rpc_pipe_fs.h | 3 +- - net/sunrpc/netns.h | 1 + - net/sunrpc/rpc_pipe.c | 93 ++++++++++++++++++++++++++++++++++- - net/sunrpc/sunrpc_syms.c | 8 +++- - 4 files changed, 100 insertions(+), 5 deletions(-) - -diff -up linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h ---- linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h.orig 2013-09-02 16:46:10.000000000 -0400 -+++ linux-3.11.9-200.fc19.x86_64/include/linux/sunrpc/rpc_pipe_fs.h 2013-11-21 10:11:17.893026000 -0500 -@@ -64,7 +64,8 @@ enum { - - extern struct dentry *rpc_d_lookup_sb(const struct super_block *sb, - const unsigned char *dir_name); --extern void rpc_pipefs_init_net(struct net *net); -+extern int rpc_pipefs_init_net(struct net *net); -+extern void rpc_pipefs_exit_net(struct net *net); - extern struct super_block *rpc_get_sb_net(const struct net *net); - extern void rpc_put_sb_net(const struct net *net); - -diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h ---- linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h.orig 2013-09-02 16:46:10.000000000 -0400 -+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/netns.h 2013-11-21 10:11:17.897029000 -0500 -@@ -14,6 +14,7 @@ struct sunrpc_net { - struct cache_detail *rsi_cache; - - struct super_block *pipefs_sb; -+ struct rpc_pipe *gssd_dummy; - struct mutex pipefs_sb_lock; - - struct list_head all_clients; -diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c ---- linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c.orig 2013-09-02 16:46:10.000000000 -0400 -+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/rpc_pipe.c 2013-11-21 10:11:17.903026000 -0500 -@@ -38,7 +38,7 @@ - #define NET_NAME(net) ((net == &init_net) ? " (init_net)" : "") - - static struct file_system_type rpc_pipe_fs_type; -- -+static const struct rpc_pipe_ops gssd_dummy_pipe_ops; - - static struct kmem_cache *rpc_inode_cachep __read_mostly; - -@@ -1019,6 +1019,7 @@ enum { - RPCAUTH_nfsd4_cb, - RPCAUTH_cache, - RPCAUTH_nfsd, -+ RPCAUTH_gssd, - RPCAUTH_RootEOF - }; - -@@ -1055,6 +1056,10 @@ static const struct rpc_filelist files[] - .name = "nfsd", - .mode = S_IFDIR | S_IRUGO | S_IXUGO, - }, -+ [RPCAUTH_gssd] = { -+ .name = "gssd", -+ .mode = S_IFDIR | S_IRUGO | S_IXUGO, -+ }, - }; - - /* -@@ -1068,13 +1073,25 @@ struct dentry *rpc_d_lookup_sb(const str - } - EXPORT_SYMBOL_GPL(rpc_d_lookup_sb); - --void rpc_pipefs_init_net(struct net *net) -+int rpc_pipefs_init_net(struct net *net) - { - struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); - -+ sn->gssd_dummy = rpc_mkpipe_data(&gssd_dummy_pipe_ops, 0); -+ if (IS_ERR(sn->gssd_dummy)) -+ return PTR_ERR(sn->gssd_dummy); -+ - mutex_init(&sn->pipefs_sb_lock); - sn->gssd_running = 1; - sn->pipe_version = -1; -+ return 0; -+} -+ -+void rpc_pipefs_exit_net(struct net *net) -+{ -+ struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); -+ -+ rpc_destroy_pipe_data(sn->gssd_dummy); - } - - /* -@@ -1104,11 +1121,73 @@ void rpc_put_sb_net(const struct net *ne - } - EXPORT_SYMBOL_GPL(rpc_put_sb_net); - -+static const struct rpc_filelist gssd_dummy_clnt_dir[] = { -+ [0] = { -+ .name = "clntXX", -+ .mode = S_IFDIR | S_IRUGO | S_IXUGO, -+ }, -+}; -+ -+static ssize_t -+dummy_downcall(struct file *filp, const char __user *src, size_t len) -+{ -+ return -EINVAL; -+} -+ -+static const struct rpc_pipe_ops gssd_dummy_pipe_ops = { -+ .upcall = rpc_pipe_generic_upcall, -+ .downcall = dummy_downcall, -+}; -+ -+/** -+ * rpc_gssd_dummy_populate - create a dummy gssd pipe -+ * @root: root of the rpc_pipefs filesystem -+ * @pipe_data: pipe data created when netns is initialized -+ * -+ * Create a dummy set of directories and a pipe that gssd can hold open to -+ * indicate that it is up and running. -+ */ -+static struct dentry * -+rpc_gssd_dummy_populate(struct dentry *root, struct rpc_pipe *pipe_data) -+{ -+ int ret = 0; -+ struct dentry *gssd_dentry; -+ struct dentry *clnt_dentry = NULL; -+ struct dentry *pipe_dentry = NULL; -+ struct qstr q = QSTR_INIT(files[RPCAUTH_gssd].name, -+ strlen(files[RPCAUTH_gssd].name)); -+ -+ /* We should never get this far if "gssd" doesn't exist */ -+ gssd_dentry = d_hash_and_lookup(root, &q); -+ if (!gssd_dentry) -+ return ERR_PTR(-ENOENT); -+ -+ ret = rpc_populate(gssd_dentry, gssd_dummy_clnt_dir, 0, 1, NULL); -+ if (ret) { -+ pipe_dentry = ERR_PTR(ret); -+ goto out; -+ } -+ -+ q.name = gssd_dummy_clnt_dir[0].name; -+ q.len = strlen(gssd_dummy_clnt_dir[0].name); -+ clnt_dentry = d_hash_and_lookup(gssd_dentry, &q); -+ if (!clnt_dentry) { -+ pipe_dentry = ERR_PTR(-ENOENT); -+ goto out; -+ } -+ -+ pipe_dentry = rpc_mkpipe_dentry(clnt_dentry, "gssd", NULL, pipe_data); -+out: -+ dput(clnt_dentry); -+ dput(gssd_dentry); -+ return pipe_dentry; -+} -+ - static int - rpc_fill_super(struct super_block *sb, void *data, int silent) - { - struct inode *inode; -- struct dentry *root; -+ struct dentry *root, *gssd_dentry; - struct net *net = data; - struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); - int err; -@@ -1126,6 +1205,13 @@ rpc_fill_super(struct super_block *sb, v - return -ENOMEM; - if (rpc_populate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF, NULL)) - return -ENOMEM; -+ -+ gssd_dentry = rpc_gssd_dummy_populate(root, sn->gssd_dummy); -+ if (IS_ERR(gssd_dentry)) { -+ __rpc_depopulate(root, files, RPCAUTH_lockd, RPCAUTH_RootEOF); -+ return PTR_ERR(gssd_dentry); -+ } -+ - dprintk("RPC: sending pipefs MOUNT notification for net %p%s\n", - net, NET_NAME(net)); - mutex_lock(&sn->pipefs_sb_lock); -@@ -1140,6 +1226,7 @@ rpc_fill_super(struct super_block *sb, v - return 0; - - err_depopulate: -+ dput(gssd_dentry); - blocking_notifier_call_chain(&rpc_pipefs_notifier_list, - RPC_PIPEFS_UMOUNT, - sb); -diff -up linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c.orig linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c ---- linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c.orig 2013-09-02 16:46:10.000000000 -0400 -+++ linux-3.11.9-200.fc19.x86_64/net/sunrpc/sunrpc_syms.c 2013-11-21 10:11:17.908026000 -0500 -@@ -44,12 +44,17 @@ static __net_init int sunrpc_init_net(st - if (err) - goto err_unixgid; - -- rpc_pipefs_init_net(net); -+ err = rpc_pipefs_init_net(net); -+ if (err) -+ goto err_pipefs; -+ - INIT_LIST_HEAD(&sn->all_clients); - spin_lock_init(&sn->rpc_client_lock); - spin_lock_init(&sn->rpcb_clnt_lock); - return 0; - -+err_pipefs: -+ unix_gid_cache_destroy(net); - err_unixgid: - ip_map_cache_destroy(net); - err_ipmap: -@@ -60,6 +65,7 @@ err_proc: - - static __net_exit void sunrpc_exit_net(struct net *net) - { -+ rpc_pipefs_exit_net(net); - unix_gid_cache_destroy(net); - ip_map_cache_destroy(net); - rpc_proc_exit(net); - diff --git a/sunrpc-replace-gssd_running-with-more-reliable-check.patch b/sunrpc-replace-gssd_running-with-more-reliable-check.patch deleted file mode 100644 index 8cd5c009..00000000 --- a/sunrpc-replace-gssd_running-with-more-reliable-check.patch +++ /dev/null @@ -1,139 +0,0 @@ -Bugzilla: N/A -Upstream-status: queued in NFS git tree (for 3.13/3.14?) - -Now that we have a more reliable method to tell if gssd is running, we -can replace the sn->gssd_running flag with a function that will query to -see if it's up and running. - -There's also no need to attempt an upcall that we know will fail, so -just return -EACCES if gssd isn't running. Finally, fix the warn_gss() -message not to claim that that the upcall timed out since we don't -necesarily perform one now when gssd isn't running, and remove the -extraneous newline from the message. - -Signed-off-by: Jeff Layton <jlayton@redhat.com> -Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> ---- - Fixed up to apply to 3.12.1 by Josh Boyer <jwboyer@fedoraproject.org> - - include/linux/sunrpc/rpc_pipe_fs.h | 2 ++ - net/sunrpc/auth_gss/auth_gss.c | 17 +++++++---------- - net/sunrpc/netns.h | 2 -- - net/sunrpc/rpc_pipe.c | 14 ++++++++++---- - 4 files changed, 19 insertions(+), 16 deletions(-) - -diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h -index 85f1342..7f490be 100644 ---- a/include/linux/sunrpc/rpc_pipe_fs.h -+++ b/include/linux/sunrpc/rpc_pipe_fs.h -@@ -131,5 +131,7 @@ extern int rpc_unlink(struct dentry *); - extern int register_rpc_pipefs(void); - extern void unregister_rpc_pipefs(void); - -+extern bool gssd_running(struct net *net); -+ - #endif - #endif -diff --git a/net/sunrpc/auth_gss/auth_gss.c b/net/sunrpc/auth_gss/auth_gss.c -index 0846566..1ada878 100644 ---- a/net/sunrpc/auth_gss/auth_gss.c -+++ b/net/sunrpc/auth_gss/auth_gss.c -@@ -517,8 +517,7 @@ static void warn_gssd(void) - unsigned long now = jiffies; - - if (time_after(now, ratelimit)) { -- printk(KERN_WARNING "RPC: AUTH_GSS upcall timed out.\n" -- "Please check user daemon is running.\n"); -+ pr_warn("RPC: AUTH_GSS upcall failed. Please check user daemon is running.\n"); - ratelimit = now + 15*HZ; - } - } -@@ -581,7 +580,6 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred) - struct rpc_pipe *pipe; - struct rpc_cred *cred = &gss_cred->gc_base; - struct gss_upcall_msg *gss_msg; -- unsigned long timeout; - DEFINE_WAIT(wait); - int err; - -@@ -589,17 +587,16 @@ gss_create_upcall(struct gss_auth *gss_auth, struct gss_cred *gss_cred) - __func__, from_kuid(&init_user_ns, cred->cr_uid)); - retry: - err = 0; -- /* Default timeout is 15s unless we know that gssd is not running */ -- timeout = 15 * HZ; -- if (!sn->gssd_running) -- timeout = HZ >> 2; -+ /* if gssd is down, just skip upcalling altogether */ -+ if (!gssd_running(net)) { -+ warn_gssd(); -+ return -EACCES; -+ } - gss_msg = gss_setup_upcall(gss_auth, cred); - if (PTR_ERR(gss_msg) == -EAGAIN) { - err = wait_event_interruptible_timeout(pipe_version_waitqueue, -- sn->pipe_version >= 0, timeout); -+ sn->pipe_version >= 0, 15 * HZ); - if (sn->pipe_version < 0) { -- if (err == 0) -- sn->gssd_running = 0; - warn_gssd(); - err = -EACCES; - } -diff --git a/net/sunrpc/netns.h b/net/sunrpc/netns.h -index 8a8e841..94e506f 100644 ---- a/net/sunrpc/netns.h -+++ b/net/sunrpc/netns.h -@@ -33,8 +33,6 @@ struct sunrpc_net { - int pipe_version; - atomic_t pipe_users; - struct proc_dir_entry *use_gssp_proc; -- -- unsigned int gssd_running; - }; - - extern int sunrpc_net_id; -diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c -index 40aef18..ad444f3 100644 ---- a/net/sunrpc/rpc_pipe.c -+++ b/net/sunrpc/rpc_pipe.c -@@ -216,14 +216,11 @@ rpc_destroy_inode(struct inode *inode) - static int - rpc_pipe_open(struct inode *inode, struct file *filp) - { -- struct net *net = inode->i_sb->s_fs_info; -- struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); - struct rpc_pipe *pipe; - int first_open; - int res = -ENXIO; - - mutex_lock(&inode->i_mutex); -- sn->gssd_running = 1; - pipe = RPC_I(inode)->pipe; - if (pipe == NULL) - goto out; -@@ -1231,7 +1228,6 @@ int rpc_pipefs_init_net(struct net *net) - return PTR_ERR(sn->gssd_dummy); - - mutex_init(&sn->pipefs_sb_lock); -- sn->gssd_running = 1; - sn->pipe_version = -1; - return 0; - } -@@ -1385,6 +1381,16 @@ err_depopulate: - return err; - } - -+bool -+gssd_running(struct net *net) -+{ -+ struct sunrpc_net *sn = net_generic(net, sunrpc_net_id); -+ struct rpc_pipe *pipe = sn->gssd_dummy; -+ -+ return pipe->nreaders || pipe->nwriters; -+} -+EXPORT_SYMBOL_GPL(gssd_running); -+ - static struct dentry * - rpc_mount(struct file_system_type *fs_type, - int flags, const char *dev_name, void *data) diff --git a/sysrq-secure-boot.patch b/sysrq-secure-boot.patch index b4bb80d0..c73e3d25 100644 --- a/sysrq-secure-boot.patch +++ b/sysrq-secure-boot.patch @@ -1,20 +1,23 @@ -From 71aac34ed679daa0bf772051eb40412b5bd95da3 Mon Sep 17 00:00:00 2001 +Bugzilla: N/A +Upstream-status: Fedora mustard + +From 29c1f71a2d0845a71ea2ebd2fb33542373dc52dd Mon Sep 17 00:00:00 2001 From: Kyle McMartin <kyle@redhat.com> Date: Fri, 30 Aug 2013 09:28:51 -0400 Subject: [PATCH] Add sysrq option to disable secure boot mode --- - arch/x86/kernel/setup.c | 35 +++++++++++++++++++++++++++++++++++ + arch/x86/kernel/setup.c | 36 ++++++++++++++++++++++++++++++++++++ drivers/input/misc/uinput.c | 1 + drivers/tty/sysrq.c | 19 +++++++++++++------ include/linux/input.h | 5 +++++ include/linux/sysrq.h | 8 +++++++- kernel/debug/kdb/kdb_main.c | 2 +- kernel/module.c | 4 ++-- - 7 files changed, 64 insertions(+), 10 deletions(-) + 7 files changed, 65 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c -index 08dc16e..6971f8e 100644 +index c773add..92c480c 100644 --- a/arch/x86/kernel/setup.c +++ b/arch/x86/kernel/setup.c @@ -70,6 +70,11 @@ @@ -29,11 +32,10 @@ index 08dc16e..6971f8e 100644 #include <video/edid.h> #include <asm/mtrr.h> -@@ -1253,3 +1258,33 @@ void __init i386_reserve_resources(void) - } +@@ -1275,6 +1280,37 @@ void __init i386_reserve_resources(void) #endif /* CONFIG_X86_32 */ -+ + +#ifdef CONFIG_MAGIC_SYSRQ +#ifdef CONFIG_MODULE_SIG +extern bool sig_enforce; @@ -63,8 +65,13 @@ index 08dc16e..6971f8e 100644 +} +late_initcall(secure_boot_sysrq); +#endif /*CONFIG_MAGIC_SYSRQ*/ ++ ++ + static struct notifier_block kernel_offset_notifier = { + .notifier_call = dump_kernel_offset + }; diff --git a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c -index a0a4bba..3327cc3 100644 +index 7728359..a3e8ba8 100644 --- a/drivers/input/misc/uinput.c +++ b/drivers/input/misc/uinput.c @@ -351,6 +351,7 @@ static int uinput_allocate_device(struct uinput_device *udev) @@ -76,10 +83,10 @@ index a0a4bba..3327cc3 100644 input_set_drvdata(udev->dev, udev); diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c -index d5cc3ac..05b33f5 100644 +index ce396ec..aee594a 100644 --- a/drivers/tty/sysrq.c +++ b/drivers/tty/sysrq.c -@@ -461,6 +461,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = { +@@ -462,6 +462,7 @@ static struct sysrq_key_op *sysrq_key_table[36] = { &sysrq_showstate_blocked_op, /* w */ /* x: May be registered on ppc/powerpc for xmon */ /* x: May be registered on sparc64 for global PMU dump */ @@ -87,7 +94,7 @@ index d5cc3ac..05b33f5 100644 NULL, /* x */ /* y: May be registered on sparc64 for global register dump */ NULL, /* y */ -@@ -504,7 +505,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p) +@@ -505,7 +506,7 @@ static void __sysrq_put_key_op(int key, struct sysrq_key_op *op_p) sysrq_key_table[i] = op_p; } @@ -96,7 +103,7 @@ index d5cc3ac..05b33f5 100644 { struct sysrq_key_op *op_p; int orig_log_level; -@@ -524,11 +525,15 @@ void __handle_sysrq(int key, bool check_mask) +@@ -525,11 +526,15 @@ void __handle_sysrq(int key, bool check_mask) op_p = __sysrq_get_key_op(key); if (op_p) { @@ -113,7 +120,7 @@ index d5cc3ac..05b33f5 100644 printk("%s\n", op_p->action_msg); console_loglevel = orig_log_level; op_p->handler(key); -@@ -559,7 +564,7 @@ void __handle_sysrq(int key, bool check_mask) +@@ -560,7 +565,7 @@ void __handle_sysrq(int key, bool check_mask) void handle_sysrq(int key) { if (sysrq_on()) @@ -122,7 +129,7 @@ index d5cc3ac..05b33f5 100644 } EXPORT_SYMBOL(handle_sysrq); -@@ -639,7 +644,7 @@ static void sysrq_do_reset(unsigned long _state) +@@ -640,7 +645,7 @@ static void sysrq_do_reset(unsigned long _state) static void sysrq_handle_reset_request(struct sysrq_state *state) { if (state->reset_requested) @@ -131,7 +138,7 @@ index d5cc3ac..05b33f5 100644 if (sysrq_reset_downtime_ms) mod_timer(&state->keyreset_timer, -@@ -756,8 +761,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq, +@@ -791,8 +796,10 @@ static bool sysrq_handle_keypress(struct sysrq_state *sysrq, default: if (sysrq->active && value && value != 2) { @@ -143,7 +150,7 @@ index d5cc3ac..05b33f5 100644 } break; } -@@ -1038,7 +1045,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, +@@ -1080,7 +1087,7 @@ static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, if (get_user(c, buf)) return -EFAULT; @@ -183,10 +190,10 @@ index 82ce323..9e534f2 100644 * Verify that we are in sync with input_device_id mod_devicetable.h #defines */ diff --git a/include/linux/sysrq.h b/include/linux/sysrq.h -index 7faf933..87ae634 100644 +index 387fa7d..4b07e30 100644 --- a/include/linux/sysrq.h +++ b/include/linux/sysrq.h -@@ -31,6 +31,8 @@ +@@ -28,6 +28,8 @@ #define SYSRQ_ENABLE_BOOT 0x0080 #define SYSRQ_ENABLE_RTNICE 0x0100 @@ -195,7 +202,7 @@ index 7faf933..87ae634 100644 struct sysrq_key_op { void (*handler)(int); char *help_msg; -@@ -45,8 +47,12 @@ struct sysrq_key_op { +@@ -42,8 +44,12 @@ struct sysrq_key_op { * are available -- else NULL's). */ @@ -210,10 +217,10 @@ index 7faf933..87ae634 100644 int unregister_sysrq_key(int key, struct sysrq_key_op *op); struct sysrq_key_op *__sysrq_get_key_op(int key); diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c -index 00eb8f7..54fbbcc 100644 +index 0b097c8..18b400d 100644 --- a/kernel/debug/kdb/kdb_main.c +++ b/kernel/debug/kdb/kdb_main.c -@@ -1921,7 +1921,7 @@ static int kdb_sr(int argc, const char **argv) +@@ -1924,7 +1924,7 @@ static int kdb_sr(int argc, const char **argv) if (argc != 1) return KDB_ARGCOUNT; kdb_trap_printk++; @@ -223,7 +230,7 @@ index 00eb8f7..54fbbcc 100644 return 0; diff --git a/kernel/module.c b/kernel/module.c -index bc7c987..5e4e2c2 100644 +index 92b73b1..a44fb2a 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -109,9 +109,9 @@ struct list_head *kdb_modules = &modules; /* kdb needs the list of modules */ @@ -239,5 +246,5 @@ index bc7c987..5e4e2c2 100644 static int param_set_bool_enable_only(const char *val, const struct kernel_param *kp) -- -1.8.3.1 +1.8.4.2 diff --git a/tty-Fix-low_latency-BUG.patch b/tty-Fix-low_latency-BUG.patch deleted file mode 100644 index 60b39581..00000000 --- a/tty-Fix-low_latency-BUG.patch +++ /dev/null @@ -1,158 +0,0 @@ -Bugzilla: 1065087 -Upstream-status: 3.14 - -From a9c3f68f3cd8d55f809fbdb0c138ed061ea1bd25 Mon Sep 17 00:00:00 2001 -From: Peter Hurley <peter@hurleysoftware.com> -Date: Sat, 22 Feb 2014 12:31:21 +0000 -Subject: tty: Fix low_latency BUG - -The user-settable knob, low_latency, has been the source of -several BUG reports which stem from flush_to_ldisc() running -in interrupt context. Since 3.12, which added several sleeping -locks (termios_rwsem and buf->lock) to the input processing path, -the frequency of these BUG reports has increased. - -Note that changes in 3.12 did not introduce this regression; -sleeping locks were first added to the input processing path -with the removal of the BKL from N_TTY in commit -a88a69c91256418c5907c2f1f8a0ec0a36f9e6cc, -'n_tty: Fix loss of echoed characters and remove bkl from n_tty' -and later in commit 38db89799bdf11625a831c5af33938dcb11908b6, -'tty: throttling race fix'. Since those changes, executing -flush_to_ldisc() in interrupt_context (ie, low_latency set), is unsafe. - -However, since most devices do not validate if the low_latency -setting is appropriate for the context (process or interrupt) in -which they receive data, some reports are due to misconfiguration. -Further, serial dma devices for which dma fails, resort to -interrupt receiving as a backup without resetting low_latency. - -Historically, low_latency was used to force wake-up the reading -process rather than wait for the next scheduler tick. The -effect was to trim multiple milliseconds of latency from -when the process would receive new data. - -Recent tests [1] have shown that the reading process now receives -data with only 10's of microseconds latency without low_latency set. - -Remove the low_latency rx steering from tty_flip_buffer_push(); -however, leave the knob as an optional hint to drivers that can -tune their rx fifos and such like. Cleanup stale code comments -regarding low_latency. - -[1] https://lkml.org/lkml/2014/2/20/434 - -"Yay.. thats an annoying historical pain in the butt gone." - -- Alan Cox - -Reported-by: Beat Bolli <bbolli@ewanet.ch> -Reported-by: Pavel Roskin <proski@gnu.org> -Acked-by: David Sterba <dsterba@suse.cz> -Cc: Grant Edwards <grant.b.edwards@gmail.com> -Cc: Stanislaw Gruszka <sgruszka@redhat.com> -Cc: Hal Murray <murray+fedora@ip-64-139-1-69.sjc.megapath.net> -Cc: <stable@vger.kernel.org> # 3.12.x+ -Signed-off-by: Peter Hurley <peter@hurleysoftware.com> -Signed-off-by: Alan Cox <alan@linux.intel.com> -Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> ---- -diff --git a/drivers/tty/ipwireless/tty.c b/drivers/tty/ipwireless/tty.c -index ebd5bff..17ee3bf 100644 ---- a/drivers/tty/ipwireless/tty.c -+++ b/drivers/tty/ipwireless/tty.c -@@ -176,9 +176,6 @@ void ipwireless_tty_received(struct ipw_tty *tty, unsigned char *data, - ": %d chars not inserted to flip buffer!\n", - length - work); - -- /* -- * This may sleep if ->low_latency is set -- */ - if (work) - tty_flip_buffer_push(&tty->port); - } -diff --git a/drivers/tty/tty_buffer.c b/drivers/tty/tty_buffer.c -index 765125d..8ebd9f8 100644 ---- a/drivers/tty/tty_buffer.c -+++ b/drivers/tty/tty_buffer.c -@@ -351,14 +351,11 @@ EXPORT_SYMBOL(tty_insert_flip_string_flags); - * Takes any pending buffers and transfers their ownership to the - * ldisc side of the queue. It then schedules those characters for - * processing by the line discipline. -- * Note that this function can only be used when the low_latency flag -- * is unset. Otherwise the workqueue won't be flushed. - */ - - void tty_schedule_flip(struct tty_port *port) - { - struct tty_bufhead *buf = &port->buf; -- WARN_ON(port->low_latency); - - buf->tail->commit = buf->tail->used; - schedule_work(&buf->work); -@@ -482,17 +479,15 @@ static void flush_to_ldisc(struct work_struct *work) - */ - void tty_flush_to_ldisc(struct tty_struct *tty) - { -- if (!tty->port->low_latency) -- flush_work(&tty->port->buf.work); -+ flush_work(&tty->port->buf.work); - } - - /** - * tty_flip_buffer_push - terminal - * @port: tty port to push - * -- * Queue a push of the terminal flip buffers to the line discipline. This -- * function must not be called from IRQ context if port->low_latency is -- * set. -+ * Queue a push of the terminal flip buffers to the line discipline. -+ * Can be called from IRQ/atomic context. - * - * In the event of the queue being busy for flipping the work will be - * held off and retried later. -@@ -500,14 +495,7 @@ void tty_flush_to_ldisc(struct tty_struct *tty) - - void tty_flip_buffer_push(struct tty_port *port) - { -- struct tty_bufhead *buf = &port->buf; -- -- buf->tail->commit = buf->tail->used; -- -- if (port->low_latency) -- flush_to_ldisc(&buf->work); -- else -- schedule_work(&buf->work); -+ tty_schedule_flip(port); - } - EXPORT_SYMBOL(tty_flip_buffer_push); - -diff --git a/drivers/usb/gadget/u_serial.c b/drivers/usb/gadget/u_serial.c -index b369292..ad0aca8 100644 ---- a/drivers/usb/gadget/u_serial.c -+++ b/drivers/usb/gadget/u_serial.c -@@ -549,8 +549,8 @@ static void gs_rx_push(unsigned long _port) - port->read_started--; - } - -- /* Push from tty to ldisc; without low_latency set this is handled by -- * a workqueue, so we won't get callbacks and can hold port_lock -+ /* Push from tty to ldisc; this is handled by a workqueue, -+ * so we won't get callbacks and can hold port_lock - */ - if (do_push) - tty_flip_buffer_push(&port->port); -diff --git a/include/linux/tty.h b/include/linux/tty.h -index 90b4fdc..b90b5c2 100644 ---- a/include/linux/tty.h -+++ b/include/linux/tty.h -@@ -208,7 +208,7 @@ struct tty_port { - wait_queue_head_t delta_msr_wait; /* Modem status change */ - unsigned long flags; /* TTY flags ASY_*/ - unsigned char console:1, /* port is a console */ -- low_latency:1; /* direct buffer flush */ -+ low_latency:1; /* optional: tune for latency */ - struct mutex mutex; /* Locking */ - struct mutex buf_mutex; /* Buffer alloc lock */ - unsigned char *xmit_buf; /* Optional buffer */ --- -cgit v0.9.2 |