diff --git a/debian/changelog b/debian/changelog index cf6a0e0ed..b61fdb8c0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +linux (3.6-1~experimental.1) UNRELEASED; urgency=low + + * New upstream release: http://kernelnewbies.org/Linux_3.6 + + -- Bastian Blank Thu, 04 Oct 2012 17:50:39 +0200 + linux (3.5.5-1~experimental.1) experimental; urgency=low * New upstream stable update: diff --git a/debian/patches/bugfix/all/hwmon-applesmc-Allow-negative-temperature-values.patch b/debian/patches/bugfix/all/hwmon-applesmc-Allow-negative-temperature-values.patch deleted file mode 100644 index 41f67eeed..000000000 --- a/debian/patches/bugfix/all/hwmon-applesmc-Allow-negative-temperature-values.patch +++ /dev/null @@ -1,77 +0,0 @@ -From: Henrik Rydberg -Date: Mon, 16 Jul 2012 09:18:10 +0200 -Subject: [3/5] hwmon: (applesmc) Allow negative temperature values - -commit b6e5122f09272cb30c2e1fc1d80a40bfa6e87757 upstream. - -There are many userland reports of sensors with unreasonably small and -large temperatures. There seem to be several reasons for this: - -Firstly, the major sensor type (sp78) is actually a signed number. -This explains why some sensors show very small or large values - they -are in fact all small, but of different sign. - -Secondly, the other sensor type (1-hex) is not properly understood; it -may be that it is not a temperature after all. - -Thirdly, some sensors are differential in nature, showing changes over -time rather than absolute numbers. This explains why those values are -small and of varying sign. - -This patch interprets the sp78 type as signed short, but keeps the -original scaling. For other types, -EINVAL is returned, since the -nature of those sensors is unknown. - -Signed-off-by: Henrik Rydberg -Signed-off-by: Guenter Roeck ---- - drivers/hwmon/applesmc.c | 19 ++++++++----------- - 1 file changed, 8 insertions(+), 11 deletions(-) - -diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c -index f41585e..75f87f1 100644 ---- a/drivers/hwmon/applesmc.c -+++ b/drivers/hwmon/applesmc.c -@@ -80,6 +80,8 @@ - #define FANS_MANUAL "FS! " /* r-w ui16 */ - #define FAN_ID_FMT "F%dID" /* r-o char[16] */ - -+#define TEMP_SENSOR_TYPE "sp78" -+ - /* List of keys used to read/write fan speeds */ - static const char *const fan_speed_fmt[] = { - "F%dAc", /* actual speed */ -@@ -720,27 +722,22 @@ static ssize_t applesmc_show_temperature(struct device *dev, - int index = smcreg.temp_begin + to_index(devattr); - const struct applesmc_entry *entry; - int ret; -- u8 buffer[2]; -- unsigned int temp; -+ s16 value; -+ int temp; - - entry = applesmc_get_entry_by_index(index); - if (IS_ERR(entry)) - return PTR_ERR(entry); -- if (entry->len > 2) -+ if (strcmp(entry->type, TEMP_SENSOR_TYPE)) - return -EINVAL; - -- ret = applesmc_read_entry(entry, buffer, entry->len); -+ ret = applesmc_read_s16(entry->key, &value); - if (ret) - return ret; - -- if (entry->len == 2) { -- temp = buffer[0] * 1000; -- temp += (buffer[1] >> 6) * 250; -- } else { -- temp = buffer[0] * 4000; -- } -+ temp = 250 * (value >> 6); - -- return snprintf(sysfsbuf, PAGE_SIZE, "%u\n", temp); -+ return snprintf(sysfsbuf, PAGE_SIZE, "%d\n", temp); - } - - static ssize_t applesmc_show_fan_speed(struct device *dev, diff --git a/debian/patches/bugfix/all/hwmon-applesmc-Decode-and-act-on-read-write-status-c.patch b/debian/patches/bugfix/all/hwmon-applesmc-Decode-and-act-on-read-write-status-c.patch deleted file mode 100644 index 76a5a8e85..000000000 --- a/debian/patches/bugfix/all/hwmon-applesmc-Decode-and-act-on-read-write-status-c.patch +++ /dev/null @@ -1,171 +0,0 @@ -From: Henrik Rydberg -Date: Fri, 27 Jul 2012 20:12:46 +0200 -Subject: [5/5] hwmon: (applesmc) Decode and act on read/write status codes - -commit 829917cd7246204d6c5f066c40b66d2b62d0930d upstream. - -The behavior of the SMC has changed several times over the years, -causing read failures in the driver. It seems the problem can be -explained by a shift in SMC speed combined with improper action on -status codes. - -We should first wait for the SMC to settle, which was the most -frequent response on the old slow machines. Then, if the SMC is busy, -we need to try again later by resending the command. This was the most -likely response until 2012. Now, with a shorter wait time, we are -again most likely to poll while the SMC is settling, and as a result -we see high failure rates on many old and new models. - -With the distinction between busy and failure, we can also wait longer -before retrying, without sacrificing speed. This seems to bring -failures down to virtually zero on all models. - -Tested on: MBA1,1 MBA3,1 MBA5,1 MBA5,2 MBP9,2 - -Tested-by: Adam Somerville -Tested-by: Hubert Eichner -Signed-off-by: Henrik Rydberg -Signed-off-by: Guenter Roeck ---- - drivers/hwmon/applesmc.c | 70 ++++++++++++++++++++++++++++++---------------- - 1 file changed, 46 insertions(+), 24 deletions(-) - -diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c -index 4d937a1..2827088 100644 ---- a/drivers/hwmon/applesmc.c -+++ b/drivers/hwmon/applesmc.c -@@ -55,9 +55,9 @@ - - /* wait up to 32 ms for a status change. */ - #define APPLESMC_MIN_WAIT 0x0010 -+#define APPLESMC_RETRY_WAIT 0x0100 - #define APPLESMC_MAX_WAIT 0x8000 - --#define APPLESMC_STATUS_MASK 0x0f - #define APPLESMC_READ_CMD 0x10 - #define APPLESMC_WRITE_CMD 0x11 - #define APPLESMC_GET_KEY_BY_INDEX_CMD 0x12 -@@ -162,51 +162,68 @@ static unsigned int key_at_index; - static struct workqueue_struct *applesmc_led_wq; - - /* -- * __wait_status - Wait up to 32ms for the status port to get a certain value -- * (masked with 0x0f), returning zero if the value is obtained. Callers must -+ * wait_read - Wait for a byte to appear on SMC port. Callers must - * hold applesmc_lock. - */ --static int __wait_status(u8 val) -+static int wait_read(void) - { -+ u8 status; - int us; -- -- val = val & APPLESMC_STATUS_MASK; -- - for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) { - udelay(us); -- if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == val) -+ status = inb(APPLESMC_CMD_PORT); -+ /* read: wait for smc to settle */ -+ if (status & 0x01) - return 0; - } - -+ pr_warn("wait_read() fail: 0x%02x\n", status); - return -EIO; - } - - /* -- * special treatment of command port - on newer macbooks, it seems necessary -- * to resend the command byte before polling the status again. Callers must -- * hold applesmc_lock. -+ * send_byte - Write to SMC port, retrying when necessary. Callers -+ * must hold applesmc_lock. - */ --static int send_command(u8 cmd) -+static int send_byte(u8 cmd, u16 port) - { -+ u8 status; - int us; -+ -+ outb(cmd, port); - for (us = APPLESMC_MIN_WAIT; us < APPLESMC_MAX_WAIT; us <<= 1) { -- outb(cmd, APPLESMC_CMD_PORT); - udelay(us); -- if ((inb(APPLESMC_CMD_PORT) & APPLESMC_STATUS_MASK) == 0x0c) -+ status = inb(APPLESMC_CMD_PORT); -+ /* write: wait for smc to settle */ -+ if (status & 0x02) -+ continue; -+ /* ready: cmd accepted, return */ -+ if (status & 0x04) - return 0; -+ /* timeout: give up */ -+ if (us << 1 == APPLESMC_MAX_WAIT) -+ break; -+ /* busy: long wait and resend */ -+ udelay(APPLESMC_RETRY_WAIT); -+ outb(cmd, port); - } -+ -+ pr_warn("send_byte(0x%02x, 0x%04x) fail: 0x%02x\n", cmd, port, status); - return -EIO; - } - -+static int send_command(u8 cmd) -+{ -+ return send_byte(cmd, APPLESMC_CMD_PORT); -+} -+ - static int send_argument(const char *key) - { - int i; - -- for (i = 0; i < 4; i++) { -- outb(key[i], APPLESMC_DATA_PORT); -- if (__wait_status(0x04)) -+ for (i = 0; i < 4; i++) -+ if (send_byte(key[i], APPLESMC_DATA_PORT)) - return -EIO; -- } - return 0; - } - -@@ -219,11 +236,14 @@ static int read_smc(u8 cmd, const char *key, u8 *buffer, u8 len) - return -EIO; - } - -- outb(len, APPLESMC_DATA_PORT); -+ if (send_byte(len, APPLESMC_DATA_PORT)) { -+ pr_warn("%.4s: read len fail\n", key); -+ return -EIO; -+ } - - for (i = 0; i < len; i++) { -- if (__wait_status(0x05)) { -- pr_warn("%.4s: read data fail\n", key); -+ if (wait_read()) { -+ pr_warn("%.4s: read data[%d] fail\n", key, i); - return -EIO; - } - buffer[i] = inb(APPLESMC_DATA_PORT); -@@ -241,14 +261,16 @@ static int write_smc(u8 cmd, const char *key, const u8 *buffer, u8 len) - return -EIO; - } - -- outb(len, APPLESMC_DATA_PORT); -+ if (send_byte(len, APPLESMC_DATA_PORT)) { -+ pr_warn("%.4s: write len fail\n", key); -+ return -EIO; -+ } - - for (i = 0; i < len; i++) { -- if (__wait_status(0x04)) { -+ if (send_byte(buffer[i], APPLESMC_DATA_PORT)) { - pr_warn("%s: write data fail\n", key); - return -EIO; - } -- outb(buffer[i], APPLESMC_DATA_PORT); - } - - return 0; diff --git a/debian/patches/bugfix/all/hwmon-applesmc-Ignore-some-temperature-registers.patch b/debian/patches/bugfix/all/hwmon-applesmc-Ignore-some-temperature-registers.patch deleted file mode 100644 index 2f0b69177..000000000 --- a/debian/patches/bugfix/all/hwmon-applesmc-Ignore-some-temperature-registers.patch +++ /dev/null @@ -1,171 +0,0 @@ -From: Henrik Rydberg -Date: Mon, 16 Jul 2012 09:18:11 +0200 -Subject: [4/5] hwmon: (applesmc) Ignore some temperature registers - -commit e30bca12573fbf54e2470723aadc047549d147ce upstream. - -Not all sensors in the T range are useful temperatures. This patch -creates a subset of sensors to be exported to userland, excluding the -unknown types. - -Signed-off-by: Henrik Rydberg -Signed-off-by: Guenter Roeck ---- - drivers/hwmon/applesmc.c | 75 +++++++++++++++++++++++++++++----------------- - 1 file changed, 47 insertions(+), 28 deletions(-) - -diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c -index 75f87f1..4d937a1 100644 ---- a/drivers/hwmon/applesmc.c -+++ b/drivers/hwmon/applesmc.c -@@ -133,11 +133,13 @@ static struct applesmc_registers { - unsigned int temp_count; /* number of temperature registers */ - unsigned int temp_begin; /* temperature lower index bound */ - unsigned int temp_end; /* temperature upper index bound */ -+ unsigned int index_count; /* size of temperature index array */ - int num_light_sensors; /* number of light sensors */ - bool has_accelerometer; /* has motion sensor */ - bool has_key_backlight; /* has keyboard backlight */ - bool init_complete; /* true when fully initialized */ - struct applesmc_entry *cache; /* cached key entries */ -+ const char **index; /* temperature key index */ - } smcreg = { - .mutex = __MUTEX_INITIALIZER(smcreg.mutex), - }; -@@ -469,6 +471,30 @@ static void applesmc_device_init(void) - pr_warn("failed to init the device\n"); - } - -+static int applesmc_init_index(struct applesmc_registers *s) -+{ -+ const struct applesmc_entry *entry; -+ unsigned int i; -+ -+ if (s->index) -+ return 0; -+ -+ s->index = kcalloc(s->temp_count, sizeof(s->index[0]), GFP_KERNEL); -+ if (!s->index) -+ return -ENOMEM; -+ -+ for (i = s->temp_begin; i < s->temp_end; i++) { -+ entry = applesmc_get_entry_by_index(i); -+ if (IS_ERR(entry)) -+ continue; -+ if (strcmp(entry->type, TEMP_SENSOR_TYPE)) -+ continue; -+ s->index[s->index_count++] = entry->key; -+ } -+ -+ return 0; -+} -+ - /* - * applesmc_init_smcreg_try - Try to initialize register cache. Idempotent. - */ -@@ -504,6 +530,10 @@ static int applesmc_init_smcreg_try(void) - return ret; - s->temp_count = s->temp_end - s->temp_begin; - -+ ret = applesmc_init_index(s); -+ if (ret) -+ return ret; -+ - ret = applesmc_has_key(LIGHT_SENSOR_LEFT_KEY, &left_light_sensor); - if (ret) - return ret; -@@ -520,8 +550,8 @@ static int applesmc_init_smcreg_try(void) - s->num_light_sensors = left_light_sensor + right_light_sensor; - s->init_complete = true; - -- pr_info("key=%d fan=%d temp=%d acc=%d lux=%d kbd=%d\n", -- s->key_count, s->fan_count, s->temp_count, -+ pr_info("key=%d fan=%d temp=%d index=%d acc=%d lux=%d kbd=%d\n", -+ s->key_count, s->fan_count, s->temp_count, s->index_count, - s->has_accelerometer, - s->num_light_sensors, - s->has_key_backlight); -@@ -529,6 +559,15 @@ static int applesmc_init_smcreg_try(void) - return 0; - } - -+static void applesmc_destroy_smcreg(void) -+{ -+ kfree(smcreg.index); -+ smcreg.index = NULL; -+ kfree(smcreg.cache); -+ smcreg.cache = NULL; -+ smcreg.init_complete = false; -+} -+ - /* - * applesmc_init_smcreg - Initialize register cache. - * -@@ -549,19 +588,11 @@ static int applesmc_init_smcreg(void) - msleep(INIT_WAIT_MSECS); - } - -- kfree(smcreg.cache); -- smcreg.cache = NULL; -+ applesmc_destroy_smcreg(); - - return ret; - } - --static void applesmc_destroy_smcreg(void) --{ -- kfree(smcreg.cache); -- smcreg.cache = NULL; -- smcreg.init_complete = false; --} -- - /* Device model stuff */ - static int applesmc_probe(struct platform_device *dev) - { -@@ -705,33 +736,21 @@ out: - static ssize_t applesmc_show_sensor_label(struct device *dev, - struct device_attribute *devattr, char *sysfsbuf) - { -- int index = smcreg.temp_begin + to_index(devattr); -- const struct applesmc_entry *entry; -+ const char *key = smcreg.index[to_index(devattr)]; - -- entry = applesmc_get_entry_by_index(index); -- if (IS_ERR(entry)) -- return PTR_ERR(entry); -- -- return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", entry->key); -+ return snprintf(sysfsbuf, PAGE_SIZE, "%s\n", key); - } - - /* Displays degree Celsius * 1000 */ - static ssize_t applesmc_show_temperature(struct device *dev, - struct device_attribute *devattr, char *sysfsbuf) - { -- int index = smcreg.temp_begin + to_index(devattr); -- const struct applesmc_entry *entry; -+ const char *key = smcreg.index[to_index(devattr)]; - int ret; - s16 value; - int temp; - -- entry = applesmc_get_entry_by_index(index); -- if (IS_ERR(entry)) -- return PTR_ERR(entry); -- if (strcmp(entry->type, TEMP_SENSOR_TYPE)) -- return -EINVAL; -- -- ret = applesmc_read_s16(entry->key, &value); -+ ret = applesmc_read_s16(key, &value); - if (ret) - return ret; - -@@ -1247,7 +1266,7 @@ static int __init applesmc_init(void) - if (ret) - goto out_info; - -- ret = applesmc_create_nodes(temp_group, smcreg.temp_count); -+ ret = applesmc_create_nodes(temp_group, smcreg.index_count); - if (ret) - goto out_fans; - diff --git a/debian/patches/bugfix/all/hwmon-applesmc-Shorten-minimum-wait-time.patch b/debian/patches/bugfix/all/hwmon-applesmc-Shorten-minimum-wait-time.patch deleted file mode 100644 index 2afe76248..000000000 --- a/debian/patches/bugfix/all/hwmon-applesmc-Shorten-minimum-wait-time.patch +++ /dev/null @@ -1,37 +0,0 @@ -From: Henrik Rydberg -Date: Mon, 9 Jul 2012 12:10:26 +0200 -Subject: [2/5] hwmon: (applesmc) Shorten minimum wait time - -commit a332bf9a65ab34b01226ed177f6937af843c8465 upstream. - -The 2012 series of MacBooks have a faster SMC, and the current driver -timings do not work at all. Tests show that decreasing the minimum -wait time, from 64 us to 16 us, works well. Since this is still larger -than the original minimum of 10 us used before 2008, there is nothing -inherently problematic with changing it. The fail frequency on older -machines seems to increase slightly, but not enough to be noticeable. - -Tested on MBA11, MBA31, MBA5,2, MBP9,2. - -The patch was originally written by adamski99 (ubuntuforums.org) and -later tested by janhouse (bbs.archlinux.org). - -Signed-off-by: Henrik Rydberg -Signed-off-by: Guenter Roeck ---- - drivers/hwmon/applesmc.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c -index 0162f55..f41585e 100644 ---- a/drivers/hwmon/applesmc.c -+++ b/drivers/hwmon/applesmc.c -@@ -54,7 +54,7 @@ - #define APPLESMC_MAX_DATA_LENGTH 32 - - /* wait up to 32 ms for a status change. */ --#define APPLESMC_MIN_WAIT 0x0040 -+#define APPLESMC_MIN_WAIT 0x0010 - #define APPLESMC_MAX_WAIT 0x8000 - - #define APPLESMC_STATUS_MASK 0x0f diff --git a/debian/patches/bugfix/all/hwmon-applesmc-Skip-sensor-mapping.patch b/debian/patches/bugfix/all/hwmon-applesmc-Skip-sensor-mapping.patch deleted file mode 100644 index daebc5190..000000000 --- a/debian/patches/bugfix/all/hwmon-applesmc-Skip-sensor-mapping.patch +++ /dev/null @@ -1,106 +0,0 @@ -From: Henrik Rydberg -Date: Wed, 20 Jun 2012 18:00:06 +0200 -Subject: [1/5] hwmon: (applesmc) Skip sensor mapping - -commit edf48f3a73b027a99c92edab2b07d78fe77523cc upstream. - -The special motion sensor mapping is unnecessary; remove it. - -Signed-off-by: Henrik Rydberg -Signed-off-by: Guenter Roeck ---- - drivers/hwmon/applesmc.c | 41 +++++++++++++---------------------------- - 1 file changed, 13 insertions(+), 28 deletions(-) - -diff --git a/drivers/hwmon/applesmc.c b/drivers/hwmon/applesmc.c -index 2cde9ec..0162f55 100644 ---- a/drivers/hwmon/applesmc.c -+++ b/drivers/hwmon/applesmc.c -@@ -96,10 +96,6 @@ static const char *const fan_speed_fmt[] = { - #define APPLESMC_INPUT_FUZZ 4 /* input event threshold */ - #define APPLESMC_INPUT_FLAT 4 - --#define SENSOR_X 0 --#define SENSOR_Y 1 --#define SENSOR_Z 2 -- - #define to_index(attr) (to_sensor_dev_attr(attr)->index & 0xffff) - #define to_option(attr) (to_sensor_dev_attr(attr)->index >> 16) - -@@ -432,30 +428,19 @@ static int applesmc_has_key(const char *key, bool *value) - } - - /* -- * applesmc_read_motion_sensor - Read motion sensor (X, Y or Z). -+ * applesmc_read_s16 - Read 16-bit signed big endian register - */ --static int applesmc_read_motion_sensor(int index, s16 *value) -+static int applesmc_read_s16(const char *key, s16 *value) - { - u8 buffer[2]; - int ret; - -- switch (index) { -- case SENSOR_X: -- ret = applesmc_read_key(MOTION_SENSOR_X_KEY, buffer, 2); -- break; -- case SENSOR_Y: -- ret = applesmc_read_key(MOTION_SENSOR_Y_KEY, buffer, 2); -- break; -- case SENSOR_Z: -- ret = applesmc_read_key(MOTION_SENSOR_Z_KEY, buffer, 2); -- break; -- default: -- ret = -EINVAL; -- } -+ ret = applesmc_read_key(key, buffer, 2); -+ if (ret) -+ return ret; - - *value = ((s16)buffer[0] << 8) | buffer[1]; -- -- return ret; -+ return 0; - } - - /* -@@ -624,8 +609,8 @@ static struct platform_driver applesmc_driver = { - */ - static void applesmc_calibrate(void) - { -- applesmc_read_motion_sensor(SENSOR_X, &rest_x); -- applesmc_read_motion_sensor(SENSOR_Y, &rest_y); -+ applesmc_read_s16(MOTION_SENSOR_X_KEY, &rest_x); -+ applesmc_read_s16(MOTION_SENSOR_Y_KEY, &rest_y); - rest_x = -rest_x; - } - -@@ -634,9 +619,9 @@ static void applesmc_idev_poll(struct input_polled_dev *dev) - struct input_dev *idev = dev->input; - s16 x, y; - -- if (applesmc_read_motion_sensor(SENSOR_X, &x)) -+ if (applesmc_read_s16(MOTION_SENSOR_X_KEY, &x)) - return; -- if (applesmc_read_motion_sensor(SENSOR_Y, &y)) -+ if (applesmc_read_s16(MOTION_SENSOR_Y_KEY, &y)) - return; - - x = -x; -@@ -659,13 +644,13 @@ static ssize_t applesmc_position_show(struct device *dev, - int ret; - s16 x, y, z; - -- ret = applesmc_read_motion_sensor(SENSOR_X, &x); -+ ret = applesmc_read_s16(MOTION_SENSOR_X_KEY, &x); - if (ret) - goto out; -- ret = applesmc_read_motion_sensor(SENSOR_Y, &y); -+ ret = applesmc_read_s16(MOTION_SENSOR_Y_KEY, &y); - if (ret) - goto out; -- ret = applesmc_read_motion_sensor(SENSOR_Z, &z); -+ ret = applesmc_read_s16(MOTION_SENSOR_Z_KEY, &z); - if (ret) - goto out; - diff --git a/debian/patches/bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch b/debian/patches/bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch deleted file mode 100644 index 3599fe709..000000000 --- a/debian/patches/bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch +++ /dev/null @@ -1,106 +0,0 @@ -From: =?UTF-8?q?Bj=C3=B8rn=20Mork?= -Date: Thu, 19 Jul 2012 06:28:40 +0000 -Subject: net: e100: ucode is optional in some cases -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -commit 8b0d2f9ed3d8e92feada7c5d70fa85be46e6f948 upstream. - -commit 9ac32e1b firmware: convert e100 driver to request_firmware() - -did a straight conversion of the in-driver ucode to external -files. This introduced the possibility of the driver failing -to enable an interface due to missing ucode. There was no -evaluation of the importance of the ucode at the time. - -Based on comments in earlier versions of this driver, and in -the source code for the FreeBSD fxp driver, we can assume that -the ucode implements the "CPU Cycle Saver" feature on supported -adapters. Although generally wanted, this is an optional -feature. The ucode source is not available, preventing it from -being included in free distributions. This creates unnecessary -problems for the end users. Doing a network install based on a -free distribution installer requires the user to download and -insert the ucode into the installer. - -Making the ucode optional when possible improves the user -experience and driver usability. - -The ucode for some adapters include a bugfix, making it -essential. We continue to fail for these adapters unless the -ucode is available. - -Signed-off-by: Bjørn Mork -Signed-off-by: David S. Miller ---- - drivers/net/ethernet/intel/e100.c | 40 ++++++++++++++++++++++++++++--------- - 1 file changed, 31 insertions(+), 9 deletions(-) - -diff --git a/drivers/net/ethernet/intel/e100.c b/drivers/net/ethernet/intel/e100.c -index ada720b..535f94f 100644 ---- a/drivers/net/ethernet/intel/e100.c -+++ b/drivers/net/ethernet/intel/e100.c -@@ -1249,20 +1249,35 @@ static const struct firmware *e100_request_firmware(struct nic *nic) - const struct firmware *fw = nic->fw; - u8 timer, bundle, min_size; - int err = 0; -+ bool required = false; - - /* do not load u-code for ICH devices */ - if (nic->flags & ich) - return NULL; - -- /* Search for ucode match against h/w revision */ -- if (nic->mac == mac_82559_D101M) -+ /* Search for ucode match against h/w revision -+ * -+ * Based on comments in the source code for the FreeBSD fxp -+ * driver, the FIRMWARE_D102E ucode includes both CPUSaver and -+ * -+ * "fixes for bugs in the B-step hardware (specifically, bugs -+ * with Inline Receive)." -+ * -+ * So we must fail if it cannot be loaded. -+ * -+ * The other microcode files are only required for the optional -+ * CPUSaver feature. Nice to have, but no reason to fail. -+ */ -+ if (nic->mac == mac_82559_D101M) { - fw_name = FIRMWARE_D101M; -- else if (nic->mac == mac_82559_D101S) -+ } else if (nic->mac == mac_82559_D101S) { - fw_name = FIRMWARE_D101S; -- else if (nic->mac == mac_82551_F || nic->mac == mac_82551_10) -+ } else if (nic->mac == mac_82551_F || nic->mac == mac_82551_10) { - fw_name = FIRMWARE_D102E; -- else /* No ucode on other devices */ -+ required = true; -+ } else { /* No ucode on other devices */ - return NULL; -+ } - - /* If the firmware has not previously been loaded, request a pointer - * to it. If it was previously loaded, we are reinitializing the -@@ -1273,10 +1288,17 @@ static const struct firmware *e100_request_firmware(struct nic *nic) - err = request_firmware(&fw, fw_name, &nic->pdev->dev); - - if (err) { -- netif_err(nic, probe, nic->netdev, -- "Failed to load firmware \"%s\": %d\n", -- fw_name, err); -- return ERR_PTR(err); -+ if (required) { -+ netif_err(nic, probe, nic->netdev, -+ "Failed to load firmware \"%s\": %d\n", -+ fw_name, err); -+ return ERR_PTR(err); -+ } else { -+ netif_info(nic, probe, nic->netdev, -+ "CPUSaver disabled. Needs \"%s\": %d\n", -+ fw_name, err); -+ return NULL; -+ } - } - - /* Firmware should be precisely UCODE_SIZE (words) plus three bytes diff --git a/debian/patches/bugfix/all/usb-Add-USB_QUIRK_RESET_RESUME-for-all-Logitech-UVC-.patch b/debian/patches/bugfix/all/usb-Add-USB_QUIRK_RESET_RESUME-for-all-Logitech-UVC-.patch deleted file mode 100644 index ec538738c..000000000 --- a/debian/patches/bugfix/all/usb-Add-USB_QUIRK_RESET_RESUME-for-all-Logitech-UVC-.patch +++ /dev/null @@ -1,99 +0,0 @@ -From: Laurent Pinchart -Date: Thu, 19 Jul 2012 12:39:14 +0200 -Subject: usb: Add USB_QUIRK_RESET_RESUME for all Logitech UVC webcams - -commit e387ef5c47ddeaeaa3cbdc54424cdb7a28dae2c0 upstream. - -Most Logitech UVC webcams (both early models that don't advertise UVC -compatibility and newer UVC-advertised devices) require the RESET_RESUME -quirk. Instead of listing each and every model, match the devices based -on the UVC interface information. - -Signed-off-by: Laurent Pinchart -Acked-by: Alan Stern -Signed-off-by: Greg Kroah-Hartman ---- - drivers/usb/core/quirks.c | 58 +++++++++++++-------------------------------- - 1 file changed, 16 insertions(+), 42 deletions(-) - -diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c -index cbd15d1..f15501f4c 100644 ---- a/drivers/usb/core/quirks.c -+++ b/drivers/usb/core/quirks.c -@@ -43,53 +43,23 @@ static const struct usb_device_id usb_quirk_list[] = { - /* Creative SB Audigy 2 NX */ - { USB_DEVICE(0x041e, 0x3020), .driver_info = USB_QUIRK_RESET_RESUME }, - -- /* Logitech Webcam C200 */ -- { USB_DEVICE(0x046d, 0x0802), .driver_info = USB_QUIRK_RESET_RESUME }, -+ /* Logitech Quickcam Fusion */ -+ { USB_DEVICE(0x046d, 0x08c1), .driver_info = USB_QUIRK_RESET_RESUME }, - -- /* Logitech Webcam C250 */ -- { USB_DEVICE(0x046d, 0x0804), .driver_info = USB_QUIRK_RESET_RESUME }, -+ /* Logitech Quickcam Orbit MP */ -+ { USB_DEVICE(0x046d, 0x08c2), .driver_info = USB_QUIRK_RESET_RESUME }, - -- /* Logitech Webcam C300 */ -- { USB_DEVICE(0x046d, 0x0805), .driver_info = USB_QUIRK_RESET_RESUME }, -+ /* Logitech Quickcam Pro for Notebook */ -+ { USB_DEVICE(0x046d, 0x08c3), .driver_info = USB_QUIRK_RESET_RESUME }, - -- /* Logitech Webcam B/C500 */ -- { USB_DEVICE(0x046d, 0x0807), .driver_info = USB_QUIRK_RESET_RESUME }, -+ /* Logitech Quickcam Pro 5000 */ -+ { USB_DEVICE(0x046d, 0x08c5), .driver_info = USB_QUIRK_RESET_RESUME }, - -- /* Logitech Webcam C600 */ -- { USB_DEVICE(0x046d, 0x0808), .driver_info = USB_QUIRK_RESET_RESUME }, -+ /* Logitech Quickcam OEM Dell Notebook */ -+ { USB_DEVICE(0x046d, 0x08c6), .driver_info = USB_QUIRK_RESET_RESUME }, - -- /* Logitech Webcam Pro 9000 */ -- { USB_DEVICE(0x046d, 0x0809), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C905 */ -- { USB_DEVICE(0x046d, 0x080a), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C210 */ -- { USB_DEVICE(0x046d, 0x0819), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C260 */ -- { USB_DEVICE(0x046d, 0x081a), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C310 */ -- { USB_DEVICE(0x046d, 0x081b), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C910 */ -- { USB_DEVICE(0x046d, 0x0821), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C160 */ -- { USB_DEVICE(0x046d, 0x0824), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Webcam C270 */ -- { USB_DEVICE(0x046d, 0x0825), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Quickcam Pro 9000 */ -- { USB_DEVICE(0x046d, 0x0990), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Quickcam E3500 */ -- { USB_DEVICE(0x046d, 0x09a4), .driver_info = USB_QUIRK_RESET_RESUME }, -- -- /* Logitech Quickcam Vision Pro */ -- { USB_DEVICE(0x046d, 0x09a6), .driver_info = USB_QUIRK_RESET_RESUME }, -+ /* Logitech Quickcam OEM Cisco VT Camera II */ -+ { USB_DEVICE(0x046d, 0x08c7), .driver_info = USB_QUIRK_RESET_RESUME }, - - /* Logitech Harmony 700-series */ - { USB_DEVICE(0x046d, 0xc122), .driver_info = USB_QUIRK_DELAY_INIT }, -@@ -162,6 +132,10 @@ static const struct usb_device_id usb_quirk_list[] = { - }; - - static const struct usb_device_id usb_interface_quirk_list[] = { -+ /* Logitech UVC Cameras */ -+ { USB_VENDOR_AND_INTERFACE_INFO(0x046d, USB_CLASS_VIDEO, 1, 0), -+ .driver_info = USB_QUIRK_RESET_RESUME }, -+ - { } /* terminating entry must be last */ - }; - diff --git a/debian/patches/bugfix/all/usb-Add-quirk-detection-based-on-interface-informati.patch b/debian/patches/bugfix/all/usb-Add-quirk-detection-based-on-interface-informati.patch deleted file mode 100644 index 24a6ff466..000000000 --- a/debian/patches/bugfix/all/usb-Add-quirk-detection-based-on-interface-informati.patch +++ /dev/null @@ -1,250 +0,0 @@ -From: Laurent Pinchart -Date: Thu, 19 Jul 2012 12:39:13 +0200 -Subject: usb: Add quirk detection based on interface information - -commit 80da2e0df5af700518611b7d1cc4fc9945bcaf95 upstream. - -When a whole class of devices (possibly from a specific vendor, or -across multiple vendors) require a quirk, explictly listing all devices -in the class make the quirks table unnecessarily large. Fix this by -allowing matching devices based on interface information. - -Signed-off-by: Laurent Pinchart -Acked-by: Alan Stern -Signed-off-by: Greg Kroah-Hartman ---- - drivers/usb/core/driver.c | 38 ++++++++++-------- - drivers/usb/core/hub.c | 10 +++-- - drivers/usb/core/quirks.c | 93 +++++++++++++++++++++++++++++++++++---------- - drivers/usb/core/usb.h | 4 ++ - 4 files changed, 106 insertions(+), 39 deletions(-) - ---- a/drivers/usb/core/driver.c -+++ b/drivers/usb/core/driver.c -@@ -606,22 +606,10 @@ int usb_match_device(struct usb_device * - } - - /* returns 0 if no match, 1 if match */ --int usb_match_one_id(struct usb_interface *interface, -- const struct usb_device_id *id) -+int usb_match_one_id_intf(struct usb_device *dev, -+ struct usb_host_interface *intf, -+ const struct usb_device_id *id) - { -- struct usb_host_interface *intf; -- struct usb_device *dev; -- -- /* proc_connectinfo in devio.c may call us with id == NULL. */ -- if (id == NULL) -- return 0; -- -- intf = interface->cur_altsetting; -- dev = interface_to_usbdev(interface); -- -- if (!usb_match_device(dev, id)) -- return 0; -- - /* The interface class, subclass, and protocol should never be - * checked for a match if the device class is Vendor Specific, - * unless the match record specifies the Vendor ID. */ -@@ -646,6 +634,26 @@ int usb_match_one_id(struct usb_interfac - - return 1; - } -+ -+/* returns 0 if no match, 1 if match */ -+int usb_match_one_id(struct usb_interface *interface, -+ const struct usb_device_id *id) -+{ -+ struct usb_host_interface *intf; -+ struct usb_device *dev; -+ -+ /* proc_connectinfo in devio.c may call us with id == NULL. */ -+ if (id == NULL) -+ return 0; -+ -+ intf = interface->cur_altsetting; -+ dev = interface_to_usbdev(interface); -+ -+ if (!usb_match_device(dev, id)) -+ return 0; -+ -+ return usb_match_one_id_intf(dev, intf, id); -+} - EXPORT_SYMBOL_GPL(usb_match_one_id); - - /** ---- a/drivers/usb/core/hub.c -+++ b/drivers/usb/core/hub.c -@@ -2066,7 +2066,7 @@ static int usb_enumerate_device(struct u - if (err < 0) { - dev_err(&udev->dev, "can't read configurations, error %d\n", - err); -- goto fail; -+ return err; - } - } - if (udev->wusb == 1 && udev->authorized == 0) { -@@ -2082,8 +2082,12 @@ static int usb_enumerate_device(struct u - udev->serial = usb_cache_string(udev, udev->descriptor.iSerialNumber); - } - err = usb_enumerate_device_otg(udev); --fail: -- return err; -+ if (err < 0) -+ return err; -+ -+ usb_detect_interface_quirks(udev); -+ -+ return 0; - } - - static void set_usb_port_removable(struct usb_device *udev) ---- a/drivers/usb/core/quirks.c -+++ b/drivers/usb/core/quirks.c -@@ -15,17 +15,22 @@ - #include - #include "usb.h" - --/* List of quirky USB devices. Please keep this list ordered by: -+/* Lists of quirky USB devices, split in device quirks and interface quirks. -+ * Device quirks are applied at the very beginning of the enumeration process, -+ * right after reading the device descriptor. They can thus only match on device -+ * information. -+ * -+ * Interface quirks are applied after reading all the configuration descriptors. -+ * They can match on both device and interface information. -+ * -+ * Note that the DELAY_INIT and HONOR_BNUMINTERFACES quirks do not make sense as -+ * interface quirks, as they only influence the enumeration process which is run -+ * before processing the interface quirks. -+ * -+ * Please keep the lists ordered by: - * 1) Vendor ID - * 2) Product ID - * 3) Class ID -- * -- * as we want specific devices to be overridden first, and only after that, any -- * class specific quirks. -- * -- * Right now the logic aborts if it finds a valid device in the table, we might -- * want to change that in the future if it turns out that a whole class of -- * devices is broken... - */ - static const struct usb_device_id usb_quirk_list[] = { - /* CBM - Flash disk */ -@@ -156,16 +161,53 @@ static const struct usb_device_id usb_qu - { } /* terminating entry must be last */ - }; - --static const struct usb_device_id *find_id(struct usb_device *udev) -+static const struct usb_device_id usb_interface_quirk_list[] = { -+ { } /* terminating entry must be last */ -+}; -+ -+static bool usb_match_any_interface(struct usb_device *udev, -+ const struct usb_device_id *id) -+{ -+ unsigned int i; -+ -+ for (i = 0; i < udev->descriptor.bNumConfigurations; ++i) { -+ struct usb_host_config *cfg = &udev->config[i]; -+ unsigned int j; -+ -+ for (j = 0; j < cfg->desc.bNumInterfaces; ++j) { -+ struct usb_interface_cache *cache; -+ struct usb_host_interface *intf; -+ -+ cache = cfg->intf_cache[j]; -+ if (cache->num_altsetting == 0) -+ continue; -+ -+ intf = &cache->altsetting[0]; -+ if (usb_match_one_id_intf(udev, intf, id)) -+ return true; -+ } -+ } -+ -+ return false; -+} -+ -+static u32 __usb_detect_quirks(struct usb_device *udev, -+ const struct usb_device_id *id) - { -- const struct usb_device_id *id = usb_quirk_list; -+ u32 quirks = 0; - -- for (; id->idVendor || id->bDeviceClass || id->bInterfaceClass || -- id->driver_info; id++) { -- if (usb_match_device(udev, id)) -- return id; -+ for (; id->match_flags; id++) { -+ if (!usb_match_device(udev, id)) -+ continue; -+ -+ if ((id->match_flags & USB_DEVICE_ID_MATCH_INT_INFO) && -+ !usb_match_any_interface(udev, id)) -+ continue; -+ -+ quirks |= (u32)(id->driver_info); - } -- return NULL; -+ -+ return quirks; - } - - /* -@@ -173,14 +215,10 @@ static const struct usb_device_id *find_ - */ - void usb_detect_quirks(struct usb_device *udev) - { -- const struct usb_device_id *id = usb_quirk_list; -- -- id = find_id(udev); -- if (id) -- udev->quirks = (u32)(id->driver_info); -+ udev->quirks = __usb_detect_quirks(udev, usb_quirk_list); - if (udev->quirks) - dev_dbg(&udev->dev, "USB quirks for this device: %x\n", -- udev->quirks); -+ udev->quirks); - - /* For the present, all devices default to USB-PERSIST enabled */ - #if 0 /* was: #ifdef CONFIG_PM */ -@@ -197,3 +235,16 @@ void usb_detect_quirks(struct usb_device - udev->persist_enabled = 1; - #endif /* CONFIG_PM */ - } -+ -+void usb_detect_interface_quirks(struct usb_device *udev) -+{ -+ u32 quirks; -+ -+ quirks = __usb_detect_quirks(udev, usb_interface_quirk_list); -+ if (quirks == 0) -+ return; -+ -+ dev_dbg(&udev->dev, "USB interface quirks for this device: %x\n", -+ quirks); -+ udev->quirks |= quirks; -+} ---- a/drivers/usb/core/usb.h -+++ b/drivers/usb/core/usb.h -@@ -24,6 +24,7 @@ extern void usb_disable_device(struct us - extern int usb_deauthorize_device(struct usb_device *); - extern int usb_authorize_device(struct usb_device *); - extern void usb_detect_quirks(struct usb_device *udev); -+extern void usb_detect_interface_quirks(struct usb_device *udev); - extern int usb_remove_device(struct usb_device *udev); - - extern int usb_get_device_descriptor(struct usb_device *dev, -@@ -35,6 +36,9 @@ extern int usb_set_configuration(struct - extern int usb_choose_configuration(struct usb_device *udev); - - extern void usb_kick_khubd(struct usb_device *dev); -+extern int usb_match_one_id_intf(struct usb_device *dev, -+ struct usb_host_interface *intf, -+ const struct usb_device_id *id); - extern int usb_match_device(struct usb_device *dev, - const struct usb_device_id *id); - extern void usb_forced_unbind_intf(struct usb_interface *intf); diff --git a/debian/patches/bugfix/x86/mfd-lpc_ich-Fix-a-3.5-kernel-regression-for-iTCO_wdt.patch b/debian/patches/bugfix/x86/mfd-lpc_ich-Fix-a-3.5-kernel-regression-for-iTCO_wdt.patch deleted file mode 100644 index 9eb6f19cb..000000000 --- a/debian/patches/bugfix/x86/mfd-lpc_ich-Fix-a-3.5-kernel-regression-for-iTCO_wdt.patch +++ /dev/null @@ -1,91 +0,0 @@ -From: Feng Tang -Date: Thu, 16 Aug 2012 15:50:10 +0800 -Subject: mfd: lpc_ich: Fix a 3.5 kernel regression for iTCO_wdt driver - -commit 092369efbd6ef6b4a215741ce9f65446bf45beff upstream. - -There are many reports (including 2 of my machines) that iTCO_wdt watchdog -driver fails to be initialized in 3.5 kernel with error message like: - -[ 5.265175] ACPI Warning: 0x00001060-0x0000107f SystemIO conflicts with Region \_SB_.PCI0.LPCB.TCOI 1 (20120320/utaddress-251) -[ 5.265192] ACPI: If an ACPI driver is available for this device, you should use it instead of the native driver -[ 5.265206] lpc_ich: Resource conflict(s) found affecting iTCO_wdt - -The root cause the iTCO_wdt driver in 3.4 probes the HW IO resource from -LPC's PCI config space, while in 3.5 kernel it relies on lpc_ich driver -for the probe, which adds a new acpi_check_resource_conflict() check, and -give up the probe if there is any conflict with ACPI. - -Fix it by removing all the checks for iTCO_wdt to keep the same behavior as -3.4 kernel. -https://bugzilla.kernel.org/show_bug.cgi?id=44991 - -Actually the same check could be removed for the gpio-ich in lpc_ich.c, -but I'm not sure if it will cause problems. - -Signed-off-by: Feng Tang -Cc: Aaron Sierra -Cc: Wim Van Sebroeck -Cc: Len Brown -Cc: Bob Moore -Signed-off-by: Samuel Ortiz ---- - drivers/mfd/lpc_ich.c | 20 +------------------- - 1 file changed, 1 insertion(+), 19 deletions(-) - -diff --git a/drivers/mfd/lpc_ich.c b/drivers/mfd/lpc_ich.c -index 027cc8f..a05fdfc 100644 ---- a/drivers/mfd/lpc_ich.c -+++ b/drivers/mfd/lpc_ich.c -@@ -765,7 +765,6 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev, - u32 base_addr_cfg; - u32 base_addr; - int ret; -- bool acpi_conflict = false; - struct resource *res; - - /* Setup power management base register */ -@@ -780,20 +779,11 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev, - res = wdt_io_res(ICH_RES_IO_TCO); - res->start = base_addr + ACPIBASE_TCO_OFF; - res->end = base_addr + ACPIBASE_TCO_END; -- ret = acpi_check_resource_conflict(res); -- if (ret) { -- acpi_conflict = true; -- goto wdt_done; -- } - - res = wdt_io_res(ICH_RES_IO_SMI); - res->start = base_addr + ACPIBASE_SMI_OFF; - res->end = base_addr + ACPIBASE_SMI_END; -- ret = acpi_check_resource_conflict(res); -- if (ret) { -- acpi_conflict = true; -- goto wdt_done; -- } -+ - lpc_ich_enable_acpi_space(dev); - - /* -@@ -813,11 +803,6 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev, - res = wdt_mem_res(ICH_RES_MEM_GCS); - res->start = base_addr + ACPIBASE_GCS_OFF; - res->end = base_addr + ACPIBASE_GCS_END; -- ret = acpi_check_resource_conflict(res); -- if (ret) { -- acpi_conflict = true; -- goto wdt_done; -- } - } - - lpc_ich_finalize_cell(&lpc_ich_cells[LPC_WDT], id); -@@ -825,9 +810,6 @@ static int __devinit lpc_ich_init_wdt(struct pci_dev *dev, - 1, NULL, 0); - - wdt_done: -- if (acpi_conflict) -- pr_warn("Resource conflict(s) found affecting %s\n", -- lpc_ich_cells[LPC_WDT].name); - return ret; - } - diff --git a/debian/patches/debian/dfsg/vs6624-disable.patch b/debian/patches/debian/dfsg/vs6624-disable.patch index 93c080182..e36b6d127 100644 --- a/debian/patches/debian/dfsg/vs6624-disable.patch +++ b/debian/patches/debian/dfsg/vs6624-disable.patch @@ -2,11 +2,7 @@ diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig index ce1e7ba..4bd5a0c 100644 --- a/drivers/media/video/Kconfig +++ b/drivers/media/video/Kconfig -@@ -483,6 +483,7 @@ config VIDEO_OV7670 +@@ -497,2 +497,3 @@ config VIDEO_OV7670 config VIDEO_VS6624 - tristate "ST VS6624 sensor support" - depends on VIDEO_V4L2 && I2C + depends on BROKEN - ---help--- - This is a Video4Linux2 sensor-level driver for the ST VS6624 - camera. + tristate "ST VS6624 sensor support" diff --git a/debian/patches/debian/version.patch b/debian/patches/debian/version.patch index a9f068f97..7bdd852b6 100644 --- a/debian/patches/debian/version.patch +++ b/debian/patches/debian/version.patch @@ -8,7 +8,7 @@ are set. --- a/Makefile +++ b/Makefile -@@ -806,7 +806,7 @@ endif +@@ -806,7 +806,7 @@ prepare2: prepare3 outputmakefile asm-generic prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \ @@ -17,7 +17,7 @@ are set. $(cmd_crmodverdir) archprepare: archheaders archscripts prepare1 scripts_basic -@@ -838,12 +838,25 @@ define filechk_version.h +@@ -838,12 +838,25 @@ echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';) endef @@ -45,7 +45,7 @@ are set. $(Q)find $(srctree)/include/ -name '*.h' | xargs --max-args 1 \ --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c -@@ -33,6 +33,7 @@ +@@ -31,6 +31,7 @@ #include #include #include @@ -53,7 +53,7 @@ are set. #include #include #include -@@ -166,11 +167,12 @@ static void show_last_breaking_event(str +@@ -164,11 +165,12 @@ */ void dump_stack(void) { @@ -68,7 +68,7 @@ are set. printk("Process %s (pid: %d, task: %p, ksp: %p)\n", current->comm, current->pid, current, (void *) current->thread.ksp); -@@ -217,11 +219,12 @@ void show_registers(struct pt_regs *regs +@@ -215,11 +217,12 @@ void show_regs(struct pt_regs *regs) { print_modules(); @@ -93,7 +93,7 @@ are set. #include #include #include "sysrq.h" -@@ -16,8 +17,9 @@ void __show_regs(struct pt_regs *regs) +@@ -16,8 +17,9 @@ { printk("\n"); print_modules(); @@ -107,7 +107,7 @@ are set. printk(KERN_INFO "RSP: %016lx EFLAGS: %08lx\n", PT_REGS_SP(regs), --- a/arch/x86/kernel/process.c +++ b/arch/x86/kernel/process.c -@@ -17,6 +17,7 @@ +@@ -19,6 +19,7 @@ #include #include #include @@ -115,21 +115,20 @@ are set. #include #include #include -@@ -146,11 +147,12 @@ void show_regs_common(void) +@@ -147,11 +148,12 @@ + /* Board Name is optional */ board = dmi_get_system_info(DMI_BOARD_NAME); - printk(KERN_CONT "\n"); -- printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s", -+ printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s%s", - current->pid, current->comm, print_tainted(), - init_utsname()->release, - (int)strcspn(init_utsname()->version, " "), -- init_utsname()->version); -+ init_utsname()->version, -+ LINUX_PACKAGE_ID); - printk(KERN_CONT " %s %s", vendor, product); - if (board) - printk(KERN_CONT "/%s", board); +- printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s %s %s%s%s\n", ++ printk(KERN_DEFAULT "Pid: %d, comm: %.20s %s %s %.*s%s %s %s%s%s\n", + current->pid, current->comm, print_tainted(), + init_utsname()->release, + (int)strcspn(init_utsname()->version, " "), + init_utsname()->version, ++ LINUX_PACKAGE_ID, + vendor, product, + board ? "/" : "", + board ? board : ""); --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -15,6 +15,7 @@ @@ -140,7 +139,7 @@ are set. #include -@@ -188,11 +189,12 @@ void dump_stack(void) +@@ -188,11 +189,12 @@ unsigned long stack; bp = stack_frame(current, NULL); @@ -165,7 +164,7 @@ are set. #include #include -@@ -112,9 +113,9 @@ show_regs (struct pt_regs *regs) +@@ -112,9 +113,9 @@ print_modules(); printk("\nPid: %d, CPU %d, comm: %20s\n", task_pid_nr(current), smp_processor_id(), current->comm); @@ -187,7 +186,7 @@ are set. #include #include -@@ -278,11 +279,12 @@ void __show_regs(struct pt_regs *regs) +@@ -278,11 +279,12 @@ unsigned long flags; char buf[64]; @@ -212,7 +211,7 @@ are set. #include #include -@@ -644,8 +645,9 @@ void show_regs(struct pt_regs * regs) +@@ -644,8 +645,9 @@ printk("NIP: "REG" LR: "REG" CTR: "REG"\n", regs->nip, regs->link, regs->ctr); @@ -234,7 +233,7 @@ are set. #include #include #include -@@ -33,10 +34,11 @@ void show_regs(struct pt_regs * regs) +@@ -33,10 +34,11 @@ { printk("\n"); printk("Pid : %d, Comm: \t\t%s\n", task_pid_nr(current), current->comm); diff --git a/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch b/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch index c7bf88144..97510f746 100644 --- a/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch +++ b/debian/patches/features/all/cgroups-Allow-memory-cgroup-support-to-be-included-b.patch @@ -16,11 +16,9 @@ Signed-off-by: Ben Hutchings mm/memcontrol.c | 3 +++ 4 files changed, 29 insertions(+), 6 deletions(-) -diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt -index cc85a92..38e0b44 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt -@@ -425,8 +425,8 @@ bytes respectively. Such letter suffixes can also be entirely omitted. +@@ -455,8 +455,8 @@ ccw_timeout_log [S390] See Documentation/s390/CommonIO for details. @@ -31,30 +29,26 @@ index cc85a92..38e0b44 100644 {Currently supported controllers - "memory"} checkreqprot [SELINUX] Set initial checkreqprot flag value. -diff --git a/init/Kconfig b/init/Kconfig -index d886b1e..3410369 100644 --- a/init/Kconfig +++ b/init/Kconfig -@@ -659,6 +659,14 @@ config CGROUP_MEM_RES_CTLR +@@ -709,6 +709,14 @@ This config option also selects MM_OWNER config option, which could in turn add some fork/exit overhead. -+config CGROUP_MEM_RES_CTLR_DISABLED ++config MEMCG_DISABLED + bool "Memory Resource Controller disabled by default" -+ depends on CGROUP_MEM_RES_CTLR ++ depends on MEMCG + default n + help + Disable the memory group resource controller unless explicitly + enabled using the kernel parameter "cgroup_enable=memory". + - config CGROUP_MEM_RES_CTLR_SWAP + config MEMCG_SWAP bool "Memory Resource Controller Swap Extension" - depends on CGROUP_MEM_RES_CTLR && SWAP -diff --git a/kernel/cgroup.c b/kernel/cgroup.c -index 25c7eb5..b3c5aa7 100644 + depends on MEMCG && SWAP --- a/kernel/cgroup.c +++ b/kernel/cgroup.c -@@ -4526,7 +4526,7 @@ static void cgroup_release_agent(struct work_struct *work) +@@ -5029,7 +5029,7 @@ mutex_unlock(&cgroup_mutex); } @@ -63,7 +57,7 @@ index 25c7eb5..b3c5aa7 100644 { int i; char *token; -@@ -4542,17 +4542,29 @@ static int __init cgroup_disable(char *str) +@@ -5045,17 +5045,29 @@ struct cgroup_subsys *ss = subsys[i]; if (!strcmp(token, ss->name)) { @@ -96,11 +90,9 @@ index 25c7eb5..b3c5aa7 100644 /* * Functons for CSS ID. */ -diff --git a/mm/memcontrol.c b/mm/memcontrol.c -index 010f916..f660a07 100644 --- a/mm/memcontrol.c +++ b/mm/memcontrol.c -@@ -5153,6 +5153,9 @@ static void mem_cgroup_move_task(struct cgroup_subsys *ss, +@@ -5596,6 +5596,9 @@ struct cgroup_subsys mem_cgroup_subsys = { .name = "memory", @@ -110,6 +102,3 @@ index 010f916..f660a07 100644 .subsys_id = mem_cgroup_subsys_id, .create = mem_cgroup_create, .pre_destroy = mem_cgroup_pre_destroy, --- -1.7.4.4 - diff --git a/debian/patches/features/all/fs-add-link-restriction-audit-reporting.patch b/debian/patches/features/all/fs-add-link-restriction-audit-reporting.patch deleted file mode 100644 index 5965b0a58..000000000 --- a/debian/patches/features/all/fs-add-link-restriction-audit-reporting.patch +++ /dev/null @@ -1,93 +0,0 @@ -From: Kees Cook -Date: Wed, 25 Jul 2012 17:29:08 -0700 -Subject: [2/2] fs: add link restriction audit reporting - -commit a51d9eaa41866ab6b4b6ecad7b621f8b66ece0dc upstream. - -Adds audit messages for unexpected link restriction violations so that -system owners will have some sort of potentially actionable information -about misbehaving processes. - -Signed-off-by: Kees Cook -Signed-off-by: Al Viro ---- - fs/namei.c | 2 ++ - include/linux/audit.h | 4 ++++ - kernel/audit.c | 21 +++++++++++++++++++++ - 3 files changed, 27 insertions(+) - ---- a/fs/namei.c -+++ b/fs/namei.c -@@ -652,6 +652,7 @@ static inline int may_follow_link(struct - - path_put_conditional(link, nd); - path_put(&nd->path); -+ audit_log_link_denied("follow_link", link); - return -EACCES; - } - -@@ -720,6 +721,7 @@ static int may_linkat(struct path *link) - capable(CAP_FOWNER)) - return 0; - -+ audit_log_link_denied("linkat", link); - return -EPERM; - } - ---- a/include/linux/audit.h -+++ b/include/linux/audit.h -@@ -130,6 +130,7 @@ - #define AUDIT_LAST_KERN_ANOM_MSG 1799 - #define AUDIT_ANOM_PROMISCUOUS 1700 /* Device changed promiscuous mode */ - #define AUDIT_ANOM_ABEND 1701 /* Process ended abnormally */ -+#define AUDIT_ANOM_LINK 1702 /* Suspicious use of file links */ - #define AUDIT_INTEGRITY_DATA 1800 /* Data integrity verification */ - #define AUDIT_INTEGRITY_METADATA 1801 /* Metadata integrity verification */ - #define AUDIT_INTEGRITY_STATUS 1802 /* Integrity enable status */ -@@ -687,6 +688,8 @@ extern void audit_log_d_path(struct - const struct path *path); - extern void audit_log_key(struct audit_buffer *ab, - char *key); -+extern void audit_log_link_denied(const char *operation, -+ struct path *link); - extern void audit_log_lost(const char *message); - #ifdef CONFIG_SECURITY - extern void audit_log_secctx(struct audit_buffer *ab, u32 secid); -@@ -716,6 +719,7 @@ extern int audit_enabled; - #define audit_log_untrustedstring(a,s) do { ; } while (0) - #define audit_log_d_path(b, p, d) do { ; } while (0) - #define audit_log_key(b, k) do { ; } while (0) -+#define audit_log_link_denied(o, l) do { ; } while (0) - #define audit_log_secctx(b,s) do { ; } while (0) - #define audit_enabled 0 - #endif ---- a/kernel/audit.c -+++ b/kernel/audit.c -@@ -1450,6 +1450,27 @@ void audit_log_key(struct audit_buffer * - } - - /** -+ * audit_log_link_denied - report a link restriction denial -+ * @operation: specific link opreation -+ * @link: the path that triggered the restriction -+ */ -+void audit_log_link_denied(const char *operation, struct path *link) -+{ -+ struct audit_buffer *ab; -+ -+ ab = audit_log_start(current->audit_context, GFP_KERNEL, -+ AUDIT_ANOM_LINK); -+ audit_log_format(ab, "op=%s action=denied", operation); -+ audit_log_format(ab, " pid=%d comm=", current->pid); -+ audit_log_untrustedstring(ab, current->comm); -+ audit_log_d_path(ab, " path=", link); -+ audit_log_format(ab, " dev="); -+ audit_log_untrustedstring(ab, link->dentry->d_inode->i_sb->s_id); -+ audit_log_format(ab, " ino=%lu", link->dentry->d_inode->i_ino); -+ audit_log_end(ab); -+} -+ -+/** - * audit_log_end - end one audit record - * @ab: the audit_buffer - * diff --git a/debian/patches/features/all/fs-add-link-restrictions.patch b/debian/patches/features/all/fs-add-link-restrictions.patch deleted file mode 100644 index 4e221b32c..000000000 --- a/debian/patches/features/all/fs-add-link-restrictions.patch +++ /dev/null @@ -1,356 +0,0 @@ -From: Kees Cook -Date: Wed, 25 Jul 2012 17:29:07 -0700 -Subject: [1/2] fs: add link restrictions -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -commit 800179c9b8a1e796e441674776d11cd4c05d61d7 upstream. - -This adds symlink and hardlink restrictions to the Linux VFS. - -Symlinks: - -A long-standing class of security issues is the symlink-based -time-of-check-time-of-use race, most commonly seen in world-writable -directories like /tmp. The common method of exploitation of this flaw -is to cross privilege boundaries when following a given symlink (i.e. a -root process follows a symlink belonging to another user). For a likely -incomplete list of hundreds of examples across the years, please see: -http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp - -The solution is to permit symlinks to only be followed when outside -a sticky world-writable directory, or when the uid of the symlink and -follower match, or when the directory owner matches the symlink's owner. - -Some pointers to the history of earlier discussion that I could find: - - 1996 Aug, Zygo Blaxell - http://marc.info/?l=bugtraq&m=87602167419830&w=2 - 1996 Oct, Andrew Tridgell - http://lkml.indiana.edu/hypermail/linux/kernel/9610.2/0086.html - 1997 Dec, Albert D Cahalan - http://lkml.org/lkml/1997/12/16/4 - 2005 Feb, Lorenzo Hernández García-Hierro - http://lkml.indiana.edu/hypermail/linux/kernel/0502.0/1896.html - 2010 May, Kees Cook - https://lkml.org/lkml/2010/5/30/144 - -Past objections and rebuttals could be summarized as: - - - Violates POSIX. - - POSIX didn't consider this situation and it's not useful to follow - a broken specification at the cost of security. - - Might break unknown applications that use this feature. - - Applications that break because of the change are easy to spot and - fix. Applications that are vulnerable to symlink ToCToU by not having - the change aren't. Additionally, no applications have yet been found - that rely on this behavior. - - Applications should just use mkstemp() or O_CREATE|O_EXCL. - - True, but applications are not perfect, and new software is written - all the time that makes these mistakes; blocking this flaw at the - kernel is a single solution to the entire class of vulnerability. - - This should live in the core VFS. - - This should live in an LSM. (https://lkml.org/lkml/2010/5/31/135) - - This should live in an LSM. - - This should live in the core VFS. (https://lkml.org/lkml/2010/8/2/188) - -Hardlinks: - -On systems that have user-writable directories on the same partition -as system files, a long-standing class of security issues is the -hardlink-based time-of-check-time-of-use race, most commonly seen in -world-writable directories like /tmp. The common method of exploitation -of this flaw is to cross privilege boundaries when following a given -hardlink (i.e. a root process follows a hardlink created by another -user). Additionally, an issue exists where users can "pin" a potentially -vulnerable setuid/setgid file so that an administrator will not actually -upgrade a system fully. - -The solution is to permit hardlinks to only be created when the user is -already the existing file's owner, or if they already have read/write -access to the existing file. - -Many Linux users are surprised when they learn they can link to files -they have no access to, so this change appears to follow the doctrine -of "least surprise". Additionally, this change does not violate POSIX, -which states "the implementation may require that the calling process -has permission to access the existing file"[1]. - -This change is known to break some implementations of the "at" daemon, -though the version used by Fedora and Ubuntu has been fixed[2] for -a while. Otherwise, the change has been undisruptive while in use in -Ubuntu for the last 1.5 years. - -[1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/linkat.html -[2] http://anonscm.debian.org/gitweb/?p=collab-maint/at.git;a=commitdiff;h=f4114656c3a6c6f6070e315ffdf940a49eda3279 - -This patch is based on the patches in Openwall and grsecurity, along with -suggestions from Al Viro. I have added a sysctl to enable the protected -behavior, and documentation. - -Signed-off-by: Kees Cook -Acked-by: Ingo Molnar -Signed-off-by: Andrew Morton -Signed-off-by: Al Viro -[bwh: Backported to 3.2: - - Adjust context - - In path_openat(), convert error from may_follow_link() to filp as it - won't be converted outside the loop] ---- - Documentation/sysctl/fs.txt | 42 +++++++++++++++ - fs/namei.c | 122 +++++++++++++++++++++++++++++++++++++++++++ - include/linux/fs.h | 2 + - kernel/sysctl.c | 18 +++++++ - 4 files changed, 184 insertions(+) - ---- a/Documentation/sysctl/fs.txt -+++ b/Documentation/sysctl/fs.txt -@@ -32,6 +32,8 @@ Currently, these files are in /proc/sys/ - - nr_open - - overflowuid - - overflowgid -+- protected_hardlinks -+- protected_symlinks - - suid_dumpable - - super-max - - super-nr -@@ -157,6 +159,46 @@ The default is 65534. - - ============================================================== - -+protected_hardlinks: -+ -+A long-standing class of security issues is the hardlink-based -+time-of-check-time-of-use race, most commonly seen in world-writable -+directories like /tmp. The common method of exploitation of this flaw -+is to cross privilege boundaries when following a given hardlink (i.e. a -+root process follows a hardlink created by another user). Additionally, -+on systems without separated partitions, this stops unauthorized users -+from "pinning" vulnerable setuid/setgid files against being upgraded by -+the administrator, or linking to special files. -+ -+When set to "0", hardlink creation behavior is unrestricted. -+ -+When set to "1" hardlinks cannot be created by users if they do not -+already own the source file, or do not have read/write access to it. -+ -+This protection is based on the restrictions in Openwall and grsecurity. -+ -+============================================================== -+ -+protected_symlinks: -+ -+A long-standing class of security issues is the symlink-based -+time-of-check-time-of-use race, most commonly seen in world-writable -+directories like /tmp. The common method of exploitation of this flaw -+is to cross privilege boundaries when following a given symlink (i.e. a -+root process follows a symlink belonging to another user). For a likely -+incomplete list of hundreds of examples across the years, please see: -+http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp -+ -+When set to "0", symlink following behavior is unrestricted. -+ -+When set to "1" symlinks are permitted to be followed only when outside -+a sticky world-writable directory, or when the uid of the symlink and -+follower match, or when the directory owner matches the symlink's owner. -+ -+This protection is based on the restrictions in Openwall and grsecurity. -+ -+============================================================== -+ - suid_dumpable: - - This value can be used to query and set the core dump mode for setuid ---- a/fs/namei.c -+++ b/fs/namei.c -@@ -624,6 +624,119 @@ static inline void put_link(struct namei - path_put(link); - } - -+int sysctl_protected_symlinks __read_mostly = 1; -+int sysctl_protected_hardlinks __read_mostly = 1; -+ -+/** -+ * may_follow_link - Check symlink following for unsafe situations -+ * @link: The path of the symlink -+ * -+ * In the case of the sysctl_protected_symlinks sysctl being enabled, -+ * CAP_DAC_OVERRIDE needs to be specifically ignored if the symlink is -+ * in a sticky world-writable directory. This is to protect privileged -+ * processes from failing races against path names that may change out -+ * from under them by way of other users creating malicious symlinks. -+ * It will permit symlinks to be followed only when outside a sticky -+ * world-writable directory, or when the uid of the symlink and follower -+ * match, or when the directory owner matches the symlink's owner. -+ * -+ * Returns 0 if following the symlink is allowed, -ve on error. -+ */ -+static inline int may_follow_link(struct path *link, struct nameidata *nd) -+{ -+ const struct inode *inode; -+ const struct inode *parent; -+ -+ if (!sysctl_protected_symlinks) -+ return 0; -+ -+ /* Allowed if owner and follower match. */ -+ inode = link->dentry->d_inode; -+ if (current_cred()->fsuid == inode->i_uid) -+ return 0; -+ -+ /* Allowed if parent directory not sticky and world-writable. */ -+ parent = nd->path.dentry->d_inode; -+ if ((parent->i_mode & (S_ISVTX|S_IWOTH)) != (S_ISVTX|S_IWOTH)) -+ return 0; -+ -+ /* Allowed if parent directory and link owner match. */ -+ if (parent->i_uid == inode->i_uid) -+ return 0; -+ -+ path_put_conditional(link, nd); -+ path_put(&nd->path); -+ return -EACCES; -+} -+ -+/** -+ * safe_hardlink_source - Check for safe hardlink conditions -+ * @inode: the source inode to hardlink from -+ * -+ * Return false if at least one of the following conditions: -+ * - inode is not a regular file -+ * - inode is setuid -+ * - inode is setgid and group-exec -+ * - access failure for read and write -+ * -+ * Otherwise returns true. -+ */ -+static bool safe_hardlink_source(struct inode *inode) -+{ -+ umode_t mode = inode->i_mode; -+ -+ /* Special files should not get pinned to the filesystem. */ -+ if (!S_ISREG(mode)) -+ return false; -+ -+ /* Setuid files should not get pinned to the filesystem. */ -+ if (mode & S_ISUID) -+ return false; -+ -+ /* Executable setgid files should not get pinned to the filesystem. */ -+ if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) -+ return false; -+ -+ /* Hardlinking to unreadable or unwritable sources is dangerous. */ -+ if (inode_permission(inode, MAY_READ | MAY_WRITE)) -+ return false; -+ -+ return true; -+} -+ -+/** -+ * may_linkat - Check permissions for creating a hardlink -+ * @link: the source to hardlink from -+ * -+ * Block hardlink when all of: -+ * - sysctl_protected_hardlinks enabled -+ * - fsuid does not match inode -+ * - hardlink source is unsafe (see safe_hardlink_source() above) -+ * - not CAP_FOWNER -+ * -+ * Returns 0 if successful, -ve on error. -+ */ -+static int may_linkat(struct path *link) -+{ -+ const struct cred *cred; -+ struct inode *inode; -+ -+ if (!sysctl_protected_hardlinks) -+ return 0; -+ -+ cred = current_cred(); -+ inode = link->dentry->d_inode; -+ -+ /* Source inode owner (or CAP_FOWNER) can hardlink all they like, -+ * otherwise, it must be a safe source. -+ */ -+ if (cred->fsuid == inode->i_uid || safe_hardlink_source(inode) || -+ capable(CAP_FOWNER)) -+ return 0; -+ -+ return -EPERM; -+} -+ - static __always_inline int - follow_link(struct path *link, struct nameidata *nd, void **p) - { -@@ -1613,6 +1726,9 @@ static int path_lookupat(int dfd, const - while (err > 0) { - void *cookie; - struct path link = path; -+ err = may_follow_link(&link, nd); -+ if (unlikely(err)) -+ break; - nd->flags |= LOOKUP_PARENT; - err = follow_link(&link, nd, &cookie); - if (!err) -@@ -2325,6 +2441,11 @@ static struct file *path_openat(int dfd, - filp = ERR_PTR(-ELOOP); - break; - } -+ error = may_follow_link(&link, nd); -+ if (unlikely(error)) { -+ filp = ERR_PTR(error); -+ break; -+ } - nd->flags |= LOOKUP_PARENT; - nd->flags &= ~(LOOKUP_OPEN|LOOKUP_CREATE|LOOKUP_EXCL); - error = follow_link(&link, nd, &cookie); -@@ -2972,6 +3093,9 @@ SYSCALL_DEFINE5(linkat, int, olddfd, con - error = -EXDEV; - if (old_path.mnt != new_path.mnt) - goto out_dput; -+ error = may_linkat(&old_path); -+ if (unlikely(error)) -+ goto out_dput; - error = mnt_want_write(new_path.mnt); - if (error) - goto out_dput; ---- a/include/linux/fs.h -+++ b/include/linux/fs.h -@@ -420,6 +420,8 @@ extern unsigned long get_max_files(void) - extern int sysctl_nr_open; - extern struct inodes_stat_t inodes_stat; - extern int leases_enable, lease_break_time; -+extern int sysctl_protected_symlinks; -+extern int sysctl_protected_hardlinks; - - struct buffer_head; - typedef int (get_block_t)(struct inode *inode, sector_t iblock, ---- a/kernel/sysctl.c -+++ b/kernel/sysctl.c -@@ -1495,6 +1495,24 @@ static struct ctl_table fs_table[] = { - #endif - #endif - { -+ .procname = "protected_symlinks", -+ .data = &sysctl_protected_symlinks, -+ .maxlen = sizeof(int), -+ .mode = 0600, -+ .proc_handler = proc_dointvec_minmax, -+ .extra1 = &zero, -+ .extra2 = &one, -+ }, -+ { -+ .procname = "protected_hardlinks", -+ .data = &sysctl_protected_hardlinks, -+ .maxlen = sizeof(int), -+ .mode = 0600, -+ .proc_handler = proc_dointvec_minmax, -+ .extra1 = &zero, -+ .extra2 = &one, -+ }, -+ { - .procname = "suid_dumpable", - .data = &suid_dumpable, - .maxlen = sizeof(int), diff --git a/debian/patches/features/all/wacom/0030-wacom-ignore-new-style-Wacom-multi-touch-packets-on-.patch b/debian/patches/features/all/wacom/0030-wacom-ignore-new-style-Wacom-multi-touch-packets-on-.patch deleted file mode 100644 index 69a1eae14..000000000 --- a/debian/patches/features/all/wacom/0030-wacom-ignore-new-style-Wacom-multi-touch-packets-on-.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Ping Cheng -Date: Sun, 24 Jun 2012 23:44:46 -0500 -Subject: wacom: ignore new-style Wacom multi touch packets on MT Tablet PC -Bug-Debian: http://bugs.debian.org/677164 - -Tablets such as 0xE6 (Thinkpad x220t) already worked fine before -adding support for the new packet format, so let's drop the -functionality for such devices for now. Meanwhile 0xE5 can still use -the new packet format. - -This should bring the behavior of TABLETPC2FG devices closer to that -from before 1963518b9b1b (Input: wacom - add 0xE5 (MT device) support, -2012-04-29). - -[jn: extracted from a larger commit in the input-wacom repository, - with new description] - -Signed-off-by: Ping Cheng -Signed-off-by: Jonathan Nieder ---- - drivers/input/tablet/wacom_wac.c | 6 +++++- - 1 file changed, 5 insertions(+), 1 deletion(-) - -diff --git a/drivers/input/tablet/wacom_wac.c b/drivers/input/tablet/wacom_wac.c -index 004bc1bb1544..d696ab7ecc2b 100644 ---- a/drivers/input/tablet/wacom_wac.c -+++ b/drivers/input/tablet/wacom_wac.c -@@ -1547,7 +1547,6 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev, - __set_bit(INPUT_PROP_POINTER, input_dev->propbit); - break; - -- case TABLETPC2FG: - case MTSCREEN: - if (features->device_type == BTN_TOOL_FINGER) { - -@@ -1559,6 +1558,11 @@ int wacom_setup_input_capabilities(struct input_dev *input_dev, - - for (i = 0; i < features->touch_max; i++) - wacom_wac->slots[i] = -1; -+ } -+ /* fall through */ -+ -+ case TABLETPC2FG: -+ if (features->device_type == BTN_TOOL_FINGER) { - - input_mt_init_slots(input_dev, features->touch_max); - input_set_abs_params(input_dev, ABS_MT_TOOL_TYPE, --- -1.7.11.rc3 - diff --git a/debian/patches/features/arm/ahci-Add-JMicron-362-device-IDs.patch b/debian/patches/features/arm/ahci-Add-JMicron-362-device-IDs.patch deleted file mode 100644 index 6bed66e7f..000000000 --- a/debian/patches/features/arm/ahci-Add-JMicron-362-device-IDs.patch +++ /dev/null @@ -1,27 +0,0 @@ -Subject: ahci: Add JMicron 362 device IDs -From: Ben Hutchings -Date: Fri, 22 Jul 2011 01:43:22 +0200 - -The JMicron JMB362 controller supports AHCI only, but some revisions -use the IDE class code. These need to be matched by device ID. - -These additions have apparently been included by QNAP in their NAS -devices using these controllers. - -Signed-off-by: Ben Hutchings ---- - drivers/ata/ahci.c | 3 +++ - 1 files changed, 3 insertions(+), 0 deletions(-) - ---- a/drivers/ata/ahci.c -+++ b/drivers/ata/ahci.c -@@ -264,6 +264,9 @@ static const struct pci_device_id ahci_p - /* JMicron 360/1/3/5/6, match class to avoid IDE function */ - { PCI_VENDOR_ID_JMICRON, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, - PCI_CLASS_STORAGE_SATA_AHCI, 0xffffff, board_ahci_ign_iferr }, -+ /* JMicron 362B and 362C have an AHCI function with IDE class code */ -+ { PCI_VDEVICE(JMICRON, 0x2362), board_ahci_ign_iferr }, -+ { PCI_VDEVICE(JMICRON, 0x236f), board_ahci_ign_iferr }, - - /* ATI */ - { PCI_VDEVICE(ATI, 0x4380), board_ahci_sb600 }, /* ATI SB600 */ diff --git a/debian/patches/series b/debian/patches/series index 0ab0d671e..0b212cf5a 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -8,12 +8,12 @@ features/all/sound-pci-cs46xx-request_firmware.patch # Patches and source files from aufs3 repository, imported with # debian/patches/features/all/aufs3/gen-patch. -features/all/aufs3/aufs3-base.patch -features/all/aufs3/aufs3-standalone.patch -features/all/aufs3/aufs3-kbuild.patch -features/all/aufs3/aufs3-add.patch +#features/all/aufs3/aufs3-base.patch +#features/all/aufs3/aufs3-standalone.patch +#features/all/aufs3/aufs3-kbuild.patch +#features/all/aufs3/aufs3-add.patch # mark as staging/crap -features/all/aufs3/mark-as-staging.patch +#features/all/aufs3/mark-as-staging.patch # fix added exports from security/device_cgroup.c features/all/aufs3/aufs3-fix-export-__devcgroup_inode_permission.patch @@ -41,28 +41,13 @@ bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch bugfix/arm/ixp4xx_iobe.patch debian/x86-memtest-WARN-if-bad-RAM-found.patch -# Add link security restrictions from 3.6 -features/all/fs-add-link-restrictions.patch -features/all/fs-add-link-restriction-audit-reporting.patch - features/all/wacom/0029-wacom-do-not-request-tablet-data-on-MT-Tablet-PC-pen.patch -features/all/wacom/0030-wacom-ignore-new-style-Wacom-multi-touch-packets-on-.patch bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch features/all/cpu-devices/Partially-revert-cpufreq-Add-support-for-x86-cpuinfo.patch -bugfix/all/net-e100-ucode-is-optional-in-some-cases.patch -bugfix/all/hwmon-applesmc-Skip-sensor-mapping.patch -bugfix/all/hwmon-applesmc-Shorten-minimum-wait-time.patch -bugfix/all/hwmon-applesmc-Allow-negative-temperature-values.patch -bugfix/all/hwmon-applesmc-Ignore-some-temperature-registers.patch -bugfix/all/hwmon-applesmc-Decode-and-act-on-read-write-status-c.patch -bugfix/x86/mfd-lpc_ich-Fix-a-3.5-kernel-regression-for-iTCO_wdt.patch debian/debugfs-set-default-mode-to-700.patch bugfix/all/media-rc-ite-cir-Initialise-ite_dev-rdev-earlier.patch features/all/USB-add-USB_VENDOR_AND_INTERFACE_INFO-macro.patch -bugfix/all/usb-Add-quirk-detection-based-on-interface-informati.patch -bugfix/all/usb-Add-USB_QUIRK_RESET_RESUME-for-all-Logitech-UVC-.patch bugfix/alpha/alpha-use-large-data-model.diff -features/arm/ahci-Add-JMicron-362-device-IDs.patch bugfix/all/speakup-lower-default-software-speech-rate.patch