Update to 3.7
Update aufs to aufs3.x-rcN-20121210. Disable rt, probably not available for 3.7. Refresh/drop patches. They apply but the result may not build. svn path=/dists/trunk/linux/; revision=19608
This commit is contained in:
parent
ef781eb6ee
commit
8123ace851
|
@ -1,7 +1,14 @@
|
|||
linux (3.6.9-1~experimental.2) UNRELEASED; urgency=low
|
||||
linux (3.7-1~experimental.1) UNRELEASED; urgency=low
|
||||
|
||||
* New upstream release: http://kernelnewbies.org/Linux_3.7
|
||||
|
||||
[ maximilian attems ]
|
||||
* Enable WIZNET_W5100, WIZNET_W5300, AMD_PHY, BCM87XX_PHY.
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* aufs: Update to aufs3.x-rcN-20121210
|
||||
* [rt] Disable until it is updated for Linux 3.7 or later
|
||||
|
||||
-- maximilian attems <maks@debian.org> Thu, 06 Dec 2012 18:14:33 +0100
|
||||
|
||||
linux (3.6.9-1~experimental.1) experimental; urgency=low
|
||||
|
|
|
@ -27,7 +27,7 @@ featuresets:
|
|||
rt
|
||||
|
||||
[featureset-rt_base]
|
||||
enabled: true
|
||||
enabled: false
|
||||
|
||||
[description]
|
||||
part-long-up: This kernel is not suitable for SMP (multi-processor,
|
||||
|
|
|
@ -95,7 +95,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|||
bprm->file = NULL;
|
||||
--- a/fs/exec.c
|
||||
+++ b/fs/exec.c
|
||||
@@ -1398,6 +1398,10 @@ int search_binary_handler(struct linux_b
|
||||
@@ -1371,6 +1371,10 @@ int search_binary_handler(struct linux_b
|
||||
struct linux_binfmt *fmt;
|
||||
pid_t old_pid, old_vpid;
|
||||
|
||||
|
@ -106,7 +106,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|||
retval = security_bprm_check(bprm);
|
||||
if (retval)
|
||||
return retval;
|
||||
@@ -1422,12 +1426,8 @@ int search_binary_handler(struct linux_b
|
||||
@@ -1395,12 +1399,8 @@ int search_binary_handler(struct linux_b
|
||||
if (!try_module_get(fmt->module))
|
||||
continue;
|
||||
read_unlock(&binfmt_lock);
|
||||
|
@ -122,7 +122,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|||
if (depth == 0) {
|
||||
--- a/include/linux/binfmts.h
|
||||
+++ b/include/linux/binfmts.h
|
||||
@@ -68,8 +68,6 @@ struct linux_binprm {
|
||||
@@ -54,8 +54,6 @@ struct linux_binprm {
|
||||
#define BINPRM_FLAGS_EXECFD_BIT 1
|
||||
#define BINPRM_FLAGS_EXECFD (1 << BINPRM_FLAGS_EXECFD_BIT)
|
||||
|
||||
|
@ -130,4 +130,4 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
|||
-
|
||||
/* Function parameter for binfmt->coredump */
|
||||
struct coredump_params {
|
||||
long signr;
|
||||
siginfo_t *siginfo;
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -19,17 +19,15 @@ removed in later patches.
|
|||
|
||||
--- a/drivers/base/firmware_class.c
|
||||
+++ b/drivers/base/firmware_class.c
|
||||
@@ -255,7 +255,8 @@ static ssize_t firmware_loading_store(st
|
||||
fw_priv->nr_pages,
|
||||
0, PAGE_KERNEL_RO);
|
||||
if (!fw_priv->fw->data) {
|
||||
- dev_err(dev, "%s: vmap() failed\n", __func__);
|
||||
@@ -500,14 +500,23 @@ static ssize_t firmware_loading_store(st
|
||||
* is completed.
|
||||
* */
|
||||
fw_map_pages_buf(fw_buf);
|
||||
+ if (!fw_buf->data)
|
||||
+ dev_err(dev->parent, "%s: vmap() failed\n",
|
||||
+ __func__);
|
||||
goto err;
|
||||
}
|
||||
/* Pages are now owned by 'struct firmware' */
|
||||
@@ -270,9 +271,14 @@ static ssize_t firmware_loading_store(st
|
||||
complete_all(&fw_buf->completion);
|
||||
break;
|
||||
}
|
||||
/* fallthrough */
|
||||
default:
|
||||
|
@ -43,10 +41,11 @@ removed in later patches.
|
|||
+ "firmware: agent aborted loading %s (not found?)\n",
|
||||
+ fw_priv->fw_id);
|
||||
+ /* fallthrough */
|
||||
err:
|
||||
+ err:
|
||||
fw_load_abort(fw_priv);
|
||||
break;
|
||||
@@ -435,6 +441,9 @@ static void firmware_class_timeout(u_lon
|
||||
}
|
||||
@@ -671,6 +680,9 @@ static void firmware_class_timeout(u_lon
|
||||
{
|
||||
struct firmware_priv *fw_priv = (struct firmware_priv *) data;
|
||||
|
||||
|
@ -56,7 +55,7 @@ removed in later patches.
|
|||
fw_load_abort(fw_priv);
|
||||
}
|
||||
|
||||
@@ -486,7 +495,8 @@ _request_firmware_prepare(const struct f
|
||||
@@ -798,7 +810,8 @@ _request_firmware_prepare(const struct f
|
||||
}
|
||||
|
||||
if (fw_get_builtin_firmware(firmware, name)) {
|
||||
|
@ -66,7 +65,7 @@ removed in later patches.
|
|||
return NULL;
|
||||
}
|
||||
|
||||
@@ -517,25 +527,29 @@ static int _request_firmware_load(struct
|
||||
@@ -874,25 +887,28 @@ static int _request_firmware_load(struct
|
||||
|
||||
retval = device_add(f_dev);
|
||||
if (retval) {
|
||||
|
@ -94,30 +93,29 @@ removed in later patches.
|
|||
|
||||
if (uevent) {
|
||||
dev_set_uevent_suppress(f_dev, false);
|
||||
- dev_dbg(f_dev, "firmware: requesting %s\n", fw_priv->fw_id);
|
||||
+ dev_dbg(f_dev->parent, "firmware: requesting %s\n",
|
||||
+ fw_priv->fw_id);
|
||||
- dev_dbg(f_dev, "firmware: requesting %s\n", buf->fw_id);
|
||||
+ dev_dbg(f_dev->parent, "firmware: requesting %s\n", buf->fw_id);
|
||||
if (timeout != MAX_SCHEDULE_TIMEOUT)
|
||||
mod_timer(&fw_priv->timeout,
|
||||
round_jiffies_up(jiffies + timeout));
|
||||
@@ -549,8 +563,15 @@ static int _request_firmware_load(struct
|
||||
del_timer_sync(&fw_priv->timeout);
|
||||
@@ -906,8 +922,15 @@ static int _request_firmware_load(struct
|
||||
|
||||
handle_fw:
|
||||
mutex_lock(&fw_lock);
|
||||
- if (!fw_priv->fw->size || test_bit(FW_STATUS_ABORT, &fw_priv->status))
|
||||
+ if (test_bit(FW_STATUS_ABORT, &fw_priv->status)) {
|
||||
- if (!buf->size || test_bit(FW_STATUS_ABORT, &buf->status))
|
||||
+ if (test_bit(FW_STATUS_ABORT, &buf->status)) {
|
||||
+ /* failure has already been logged */
|
||||
+ retval = -ENOENT;
|
||||
+ } else if (!fw_priv->fw->size) {
|
||||
retval = -ENOENT;
|
||||
+ } else if (!buf->size) {
|
||||
+ dev_err(f_dev->parent,
|
||||
+ "firmware: agent loaded no data for %s (not found?)\n",
|
||||
+ name);
|
||||
retval = -ENOENT;
|
||||
+ retval = -ENOENT;
|
||||
+ }
|
||||
fw_priv->fw = NULL;
|
||||
mutex_unlock(&fw_lock);
|
||||
|
||||
@@ -601,6 +622,9 @@ request_firmware(const struct firmware *
|
||||
/*
|
||||
* add firmware name into devres list so that we can auto cache
|
||||
@@ -986,6 +1009,9 @@ request_firmware(const struct firmware *
|
||||
}
|
||||
if (ret)
|
||||
_request_firmware_cleanup(firmware_p);
|
||||
|
@ -127,7 +125,7 @@ removed in later patches.
|
|||
|
||||
return ret;
|
||||
}
|
||||
@@ -650,7 +674,7 @@ static void request_firmware_work_func(s
|
||||
@@ -1035,7 +1061,7 @@ static void request_firmware_work_func(s
|
||||
ret = _request_firmware_load(fw_priv, fw_work->uevent, timeout);
|
||||
usermodehelper_read_unlock();
|
||||
} else {
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
Date: Sun, 26 Aug 2012 23:35:17 +0200
|
||||
Subject: speakup: lower default software speech rate
|
||||
|
||||
commit cfd757010691eae4e17acc246f74e7622c3a2f05 upstream.
|
||||
|
||||
Speech synthesis beginners need a low speech rate, and trained people
|
||||
want a high speech rate. A medium speech rate is thus actually not a
|
||||
good default for neither. Since trained people will typically know how
|
||||
to change the rate, better default for a low speech rate, which
|
||||
beginners can grasp and learn how to increase it afterwards
|
||||
|
||||
This was agreed with users on the speakup mailing list.
|
||||
|
||||
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
|
||||
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
||||
---
|
||||
drivers/staging/speakup/speakup_soft.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/staging/speakup/speakup_soft.c b/drivers/staging/speakup/speakup_soft.c
|
||||
index 42cdafe..2a67610 100644
|
||||
--- a/drivers/staging/speakup/speakup_soft.c
|
||||
+++ b/drivers/staging/speakup/speakup_soft.c
|
||||
@@ -46,7 +46,7 @@ static int misc_registered;
|
||||
static struct var_t vars[] = {
|
||||
{ CAPS_START, .u.s = {"\x01+3p" } },
|
||||
{ CAPS_STOP, .u.s = {"\x01-3p" } },
|
||||
- { RATE, .u.n = {"\x01%ds", 5, 0, 9, 0, 0, NULL } },
|
||||
+ { RATE, .u.n = {"\x01%ds", 2, 0, 9, 0, 0, NULL } },
|
||||
{ PITCH, .u.n = {"\x01%dp", 5, 0, 9, 0, 0, NULL } },
|
||||
{ VOL, .u.n = {"\x01%dv", 5, 0, 9, 0, 0, NULL } },
|
||||
{ TONE, .u.n = {"\x01%dx", 1, 0, 2, 0, 0, NULL } },
|
|
@ -1,58 +0,0 @@
|
|||
From f6bc8c29383456b89ac1b6f1aa768d195670fb53 Mon Sep 17 00:00:00 2001
|
||||
From: Roger Quadros <rogerq@ti.com>
|
||||
Date: Mon, 29 Oct 2012 16:44:46 +0200
|
||||
Subject: [PATCH] usb: otg: Fix build errors if USB_MUSB_OMAP2PLUS is selected
|
||||
as module
|
||||
|
||||
TWL4030_USB & TWL6030_USB must depend on USB_MUSB_OMAP2PLUS in Kconfig else
|
||||
we get build errors with
|
||||
|
||||
CONFIG_USB_MUSB_HDRC=m
|
||||
CONFIG_USB_MUSB_OMAP2PLUS=m
|
||||
CONFIG_TWL4030_USB=y
|
||||
CONFIG_TWL6030_USB=y
|
||||
|
||||
LD init/built-in.o
|
||||
drivers/built-in.o: In function `twl4030_usb_irq':
|
||||
drivers/usb/otg/twl4030-usb.c:518: undefined reference to `omap_musb_mailbox'
|
||||
drivers/built-in.o: In function `twl4030_usb_phy_init':
|
||||
drivers/usb/otg/twl4030-usb.c:540: undefined reference to `omap_musb_mailbox'
|
||||
|
||||
drivers/built-in.o: In function `twl6030_usb_irq':
|
||||
drivers/usb/otg/twl6030-usb.c:230: undefined reference to `omap_musb_mailbox'
|
||||
drivers/usb/otg/twl6030-usb.c:225: undefined reference to `omap_musb_mailbox'
|
||||
drivers/built-in.o: In function `twl6030_usbotg_irq':
|
||||
drivers/usb/otg/twl6030-usb.c:259: undefined reference to `omap_musb_mailbox'
|
||||
|
||||
CC: Peter Meerwald <pmeerw@pmeerw.net>
|
||||
Signed-off-by: Roger Quadros <rogerq@ti.com>
|
||||
Signed-off-by: Felipe Balbi <balbi@ti.com>
|
||||
---
|
||||
drivers/usb/otg/Kconfig | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
|
||||
index d8c8a42..6223062 100644
|
||||
--- a/drivers/usb/otg/Kconfig
|
||||
+++ b/drivers/usb/otg/Kconfig
|
||||
@@ -58,7 +58,7 @@ config USB_ULPI_VIEWPORT
|
||||
|
||||
config TWL4030_USB
|
||||
tristate "TWL4030 USB Transceiver Driver"
|
||||
- depends on TWL4030_CORE && REGULATOR_TWL4030
|
||||
+ depends on TWL4030_CORE && REGULATOR_TWL4030 && USB_MUSB_OMAP2PLUS
|
||||
select USB_OTG_UTILS
|
||||
help
|
||||
Enable this to support the USB OTG transceiver on TWL4030
|
||||
@@ -68,7 +68,7 @@ config TWL4030_USB
|
||||
|
||||
config TWL6030_USB
|
||||
tristate "TWL6030 USB Transceiver Driver"
|
||||
- depends on TWL4030_CORE && OMAP_USB2
|
||||
+ depends on TWL4030_CORE && OMAP_USB2 && USB_MUSB_OMAP2PLUS
|
||||
select USB_OTG_UTILS
|
||||
help
|
||||
Enable this to support the USB OTG transceiver on TWL6030
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,256 +0,0 @@
|
|||
From 0e98de67bacba812b1b465b90a3f940d24401c27 Mon Sep 17 00:00:00 2001
|
||||
From: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
Date: Thu, 6 Sep 2012 20:27:07 +0530
|
||||
Subject: [PATCH] usb: otg: make twl6030_usb as a comparator driver to
|
||||
omap_usb2
|
||||
|
||||
All the PHY configuration other than VBUS, ID GND and OTG SRP are removed
|
||||
from twl6030. The phy configurations are taken care by the dedicated
|
||||
usb2 phy driver. So twl6030 is made as comparator driver for VBUS and
|
||||
ID detection.
|
||||
|
||||
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
Signed-off-by: Felipe Balbi <balbi@ti.com>
|
||||
---
|
||||
drivers/usb/otg/Kconfig | 2 +-
|
||||
drivers/usb/otg/twl6030-usb.c | 118 +++++++----------------------------------
|
||||
2 files changed, 19 insertions(+), 101 deletions(-)
|
||||
|
||||
diff --git a/drivers/usb/otg/Kconfig b/drivers/usb/otg/Kconfig
|
||||
index 13fd1ddf..d8c8a42 100644
|
||||
--- a/drivers/usb/otg/Kconfig
|
||||
+++ b/drivers/usb/otg/Kconfig
|
||||
@@ -68,7 +68,7 @@ config TWL4030_USB
|
||||
|
||||
config TWL6030_USB
|
||||
tristate "TWL6030 USB Transceiver Driver"
|
||||
- depends on TWL4030_CORE
|
||||
+ depends on TWL4030_CORE && OMAP_USB2
|
||||
select USB_OTG_UTILS
|
||||
help
|
||||
Enable this to support the USB OTG transceiver on TWL6030
|
||||
diff --git a/drivers/usb/otg/twl6030-usb.c b/drivers/usb/otg/twl6030-usb.c
|
||||
index 6907d8d..32525bb 100644
|
||||
--- a/drivers/usb/otg/twl6030-usb.c
|
||||
+++ b/drivers/usb/otg/twl6030-usb.c
|
||||
@@ -25,8 +25,9 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
-#include <linux/usb/otg.h>
|
||||
#include <linux/usb/musb-omap.h>
|
||||
+#include <linux/usb/phy_companion.h>
|
||||
+#include <linux/usb/omap_usb.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/err.h>
|
||||
@@ -87,7 +88,7 @@
|
||||
#define VBUS_DET BIT(2)
|
||||
|
||||
struct twl6030_usb {
|
||||
- struct usb_phy phy;
|
||||
+ struct phy_companion comparator;
|
||||
struct device *dev;
|
||||
|
||||
/* for vbus reporting with irqs disabled */
|
||||
@@ -107,7 +108,7 @@ struct twl6030_usb {
|
||||
unsigned long features;
|
||||
};
|
||||
|
||||
-#define phy_to_twl(x) container_of((x), struct twl6030_usb, phy)
|
||||
+#define comparator_to_twl(x) container_of((x), struct twl6030_usb, comparator)
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
@@ -137,50 +138,9 @@ static inline u8 twl6030_readb(struct twl6030_usb *twl, u8 module, u8 address)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int twl6030_phy_init(struct usb_phy *x)
|
||||
+static int twl6030_start_srp(struct phy_companion *comparator)
|
||||
{
|
||||
- struct twl6030_usb *twl;
|
||||
- struct device *dev;
|
||||
- struct twl4030_usb_data *pdata;
|
||||
-
|
||||
- twl = phy_to_twl(x);
|
||||
- dev = twl->dev;
|
||||
- pdata = dev->platform_data;
|
||||
-
|
||||
- if (twl->linkstat == OMAP_MUSB_ID_GROUND)
|
||||
- pdata->phy_power(twl->dev, 1, 1);
|
||||
- else
|
||||
- pdata->phy_power(twl->dev, 0, 1);
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static void twl6030_phy_shutdown(struct usb_phy *x)
|
||||
-{
|
||||
- struct twl6030_usb *twl;
|
||||
- struct device *dev;
|
||||
- struct twl4030_usb_data *pdata;
|
||||
-
|
||||
- twl = phy_to_twl(x);
|
||||
- dev = twl->dev;
|
||||
- pdata = dev->platform_data;
|
||||
- pdata->phy_power(twl->dev, 0, 0);
|
||||
-}
|
||||
-
|
||||
-static int twl6030_phy_suspend(struct usb_phy *x, int suspend)
|
||||
-{
|
||||
- struct twl6030_usb *twl = phy_to_twl(x);
|
||||
- struct device *dev = twl->dev;
|
||||
- struct twl4030_usb_data *pdata = dev->platform_data;
|
||||
-
|
||||
- pdata->phy_suspend(dev, suspend);
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int twl6030_start_srp(struct usb_otg *otg)
|
||||
-{
|
||||
- struct twl6030_usb *twl = phy_to_twl(otg->phy);
|
||||
+ struct twl6030_usb *twl = comparator_to_twl(comparator);
|
||||
|
||||
twl6030_writeb(twl, TWL_MODULE_USB, 0x24, USB_VBUS_CTRL_SET);
|
||||
twl6030_writeb(twl, TWL_MODULE_USB, 0x84, USB_VBUS_CTRL_SET);
|
||||
@@ -313,23 +273,8 @@ static irqreturn_t twl6030_usbotg_irq(int irq, void *_twl)
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
-static int twl6030_set_peripheral(struct usb_otg *otg,
|
||||
- struct usb_gadget *gadget)
|
||||
+static int twl6030_enable_irq(struct twl6030_usb *twl)
|
||||
{
|
||||
- if (!otg)
|
||||
- return -ENODEV;
|
||||
-
|
||||
- otg->gadget = gadget;
|
||||
- if (!gadget)
|
||||
- otg->phy->state = OTG_STATE_UNDEFINED;
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-static int twl6030_enable_irq(struct usb_phy *x)
|
||||
-{
|
||||
- struct twl6030_usb *twl = phy_to_twl(x);
|
||||
-
|
||||
twl6030_writeb(twl, TWL_MODULE_USB, 0x1, USB_ID_INT_EN_HI_SET);
|
||||
twl6030_interrupt_unmask(0x05, REG_INT_MSK_LINE_C);
|
||||
twl6030_interrupt_unmask(0x05, REG_INT_MSK_STS_C);
|
||||
@@ -362,9 +307,9 @@ static void otg_set_vbus_work(struct work_struct *data)
|
||||
CHARGERUSB_CTRL1);
|
||||
}
|
||||
|
||||
-static int twl6030_set_vbus(struct usb_otg *otg, bool enabled)
|
||||
+static int twl6030_set_vbus(struct phy_companion *comparator, bool enabled)
|
||||
{
|
||||
- struct twl6030_usb *twl = phy_to_twl(otg->phy);
|
||||
+ struct twl6030_usb *twl = comparator_to_twl(comparator);
|
||||
|
||||
twl->vbus_enable = enabled;
|
||||
schedule_work(&twl->set_vbus_work);
|
||||
@@ -372,23 +317,12 @@ static int twl6030_set_vbus(struct usb_otg *otg, bool enabled)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int twl6030_set_host(struct usb_otg *otg, struct usb_bus *host)
|
||||
-{
|
||||
- if (!otg)
|
||||
- return -ENODEV;
|
||||
-
|
||||
- otg->host = host;
|
||||
- if (!host)
|
||||
- otg->phy->state = OTG_STATE_UNDEFINED;
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int __devinit twl6030_usb_probe(struct platform_device *pdev)
|
||||
{
|
||||
+ u32 ret;
|
||||
struct twl6030_usb *twl;
|
||||
int status, err;
|
||||
struct twl4030_usb_data *pdata;
|
||||
- struct usb_otg *otg;
|
||||
struct device *dev = &pdev->dev;
|
||||
pdata = dev->platform_data;
|
||||
|
||||
@@ -396,28 +330,20 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
|
||||
if (!twl)
|
||||
return -ENOMEM;
|
||||
|
||||
- otg = devm_kzalloc(dev, sizeof *otg, GFP_KERNEL);
|
||||
- if (!otg)
|
||||
- return -ENOMEM;
|
||||
-
|
||||
twl->dev = &pdev->dev;
|
||||
twl->irq1 = platform_get_irq(pdev, 0);
|
||||
twl->irq2 = platform_get_irq(pdev, 1);
|
||||
twl->features = pdata->features;
|
||||
twl->linkstat = OMAP_MUSB_UNKNOWN;
|
||||
|
||||
- twl->phy.dev = twl->dev;
|
||||
- twl->phy.label = "twl6030";
|
||||
- twl->phy.otg = otg;
|
||||
- twl->phy.init = twl6030_phy_init;
|
||||
- twl->phy.shutdown = twl6030_phy_shutdown;
|
||||
- twl->phy.set_suspend = twl6030_phy_suspend;
|
||||
+ twl->comparator.set_vbus = twl6030_set_vbus;
|
||||
+ twl->comparator.start_srp = twl6030_start_srp;
|
||||
|
||||
- otg->phy = &twl->phy;
|
||||
- otg->set_host = twl6030_set_host;
|
||||
- otg->set_peripheral = twl6030_set_peripheral;
|
||||
- otg->set_vbus = twl6030_set_vbus;
|
||||
- otg->start_srp = twl6030_start_srp;
|
||||
+ ret = omap_usb2_set_comparator(&twl->comparator);
|
||||
+ if (ret == -ENODEV) {
|
||||
+ dev_info(&pdev->dev, "phy not ready, deferring probe");
|
||||
+ return -EPROBE_DEFER;
|
||||
+ }
|
||||
|
||||
/* init spinlock for workqueue */
|
||||
spin_lock_init(&twl->lock);
|
||||
@@ -427,7 +353,6 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
|
||||
dev_err(&pdev->dev, "ldo init failed\n");
|
||||
return err;
|
||||
}
|
||||
- usb_add_phy(&twl->phy, USB_PHY_TYPE_USB2);
|
||||
|
||||
platform_set_drvdata(pdev, twl);
|
||||
if (device_create_file(&pdev->dev, &dev_attr_vbus))
|
||||
@@ -458,9 +383,7 @@ static int __devinit twl6030_usb_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
twl->asleep = 0;
|
||||
- pdata->phy_init(dev);
|
||||
- twl6030_phy_suspend(&twl->phy, 0);
|
||||
- twl6030_enable_irq(&twl->phy);
|
||||
+ twl6030_enable_irq(twl);
|
||||
dev_info(&pdev->dev, "Initialized TWL6030 USB module\n");
|
||||
|
||||
return 0;
|
||||
@@ -470,10 +393,6 @@ static int __exit twl6030_usb_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct twl6030_usb *twl = platform_get_drvdata(pdev);
|
||||
|
||||
- struct twl4030_usb_data *pdata;
|
||||
- struct device *dev = &pdev->dev;
|
||||
- pdata = dev->platform_data;
|
||||
-
|
||||
twl6030_interrupt_mask(TWL6030_USBOTG_INT_MASK,
|
||||
REG_INT_MSK_LINE_C);
|
||||
twl6030_interrupt_mask(TWL6030_USBOTG_INT_MASK,
|
||||
@@ -481,7 +400,6 @@ static int __exit twl6030_usb_remove(struct platform_device *pdev)
|
||||
free_irq(twl->irq1, twl);
|
||||
free_irq(twl->irq2, twl);
|
||||
regulator_put(twl->usb3v3);
|
||||
- pdata->phy_exit(twl->dev);
|
||||
device_remove_file(twl->dev, &dev_attr_vbus);
|
||||
cancel_work_sync(&twl->set_vbus_work);
|
||||
|
||||
--
|
||||
1.7.9.5
|
||||
|
|
@ -1,449 +0,0 @@
|
|||
From 657b306a7bdfca4ae1514b533a0e7c3c6d26dbc6 Mon Sep 17 00:00:00 2001
|
||||
From: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
Date: Thu, 6 Sep 2012 20:27:06 +0530
|
||||
Subject: [PATCH] usb: phy: add a new driver for omap usb2 phy
|
||||
|
||||
All phy related programming like enabling/disabling the clocks, powering
|
||||
on/off the phy is taken care of by this driver. It is also used for OTG
|
||||
related functionality like srp.
|
||||
|
||||
This also includes device tree support for usb2 phy driver and
|
||||
the documentation with device tree binding information is updated.
|
||||
|
||||
Currently writing to control module register is taken care in this
|
||||
driver which will be removed once the control module driver is in place.
|
||||
|
||||
Cc: Felipe Balbi <balbi@ti.com>
|
||||
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
Signed-off-by: Felipe Balbi <balbi@ti.com>
|
||||
---
|
||||
Documentation/devicetree/bindings/usb/usb-phy.txt | 17 ++
|
||||
drivers/usb/phy/Kconfig | 9 +
|
||||
drivers/usb/phy/Makefile | 1 +
|
||||
drivers/usb/phy/omap-usb2.c | 271 +++++++++++++++++++++
|
||||
include/linux/usb/omap_usb.h | 46 ++++
|
||||
include/linux/usb/phy_companion.h | 34 +++
|
||||
6 files changed, 378 insertions(+)
|
||||
create mode 100644 Documentation/devicetree/bindings/usb/usb-phy.txt
|
||||
create mode 100644 drivers/usb/phy/omap-usb2.c
|
||||
create mode 100644 include/linux/usb/omap_usb.h
|
||||
create mode 100644 include/linux/usb/phy_companion.h
|
||||
|
||||
Index: experimental/Documentation/devicetree/bindings/usb/usb-phy.txt
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ experimental/Documentation/devicetree/bindings/usb/usb-phy.txt 2012-12-05 11:46:39.767567050 +0100
|
||||
@@ -0,0 +1,17 @@
|
||||
+USB PHY
|
||||
+
|
||||
+OMAP USB2 PHY
|
||||
+
|
||||
+Required properties:
|
||||
+ - compatible: Should be "ti,omap-usb2"
|
||||
+ - reg : Address and length of the register set for the device. Also
|
||||
+add the address of control module dev conf register until a driver for
|
||||
+control module is added
|
||||
+
|
||||
+This is usually a subnode of ocp2scp to which it is connected.
|
||||
+
|
||||
+usb2phy@4a0ad080 {
|
||||
+ compatible = "ti,omap-usb2";
|
||||
+ reg = <0x4a0ad080 0x58>,
|
||||
+ <0x4a002300 0x4>;
|
||||
+};
|
||||
Index: experimental/drivers/usb/phy/Kconfig
|
||||
===================================================================
|
||||
--- experimental.orig/drivers/usb/phy/Kconfig 2012-12-03 20:39:49.000000000 +0100
|
||||
+++ experimental/drivers/usb/phy/Kconfig 2012-12-05 11:46:39.775567051 +0100
|
||||
@@ -4,6 +4,15 @@
|
||||
comment "USB Physical Layer drivers"
|
||||
depends on USB || USB_GADGET
|
||||
|
||||
+config OMAP_USB2
|
||||
+ tristate "OMAP USB2 PHY Driver"
|
||||
+ select USB_OTG_UTILS
|
||||
+ help
|
||||
+ Enable this to support the transceiver that is part of SOC. This
|
||||
+ driver takes care of all the PHY functionality apart from comparator.
|
||||
+ The USB OTG controller communicates with the comparator using this
|
||||
+ driver.
|
||||
+
|
||||
config USB_ISP1301
|
||||
tristate "NXP ISP1301 USB transceiver support"
|
||||
depends on USB || USB_GADGET
|
||||
Index: experimental/drivers/usb/phy/Makefile
|
||||
===================================================================
|
||||
--- experimental.orig/drivers/usb/phy/Makefile 2012-12-03 20:39:49.000000000 +0100
|
||||
+++ experimental/drivers/usb/phy/Makefile 2012-12-05 11:46:39.807567048 +0100
|
||||
@@ -4,4 +4,5 @@
|
||||
|
||||
ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG
|
||||
|
||||
+obj-$(CONFIG_OMAP_USB2) += omap-usb2.o
|
||||
obj-$(CONFIG_USB_ISP1301) += isp1301.o
|
||||
Index: experimental/drivers/usb/phy/omap-usb2.c
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ experimental/drivers/usb/phy/omap-usb2.c 2012-12-05 11:46:39.819567049 +0100
|
||||
@@ -0,0 +1,271 @@
|
||||
+/*
|
||||
+ * omap-usb2.c - USB PHY, talking to musb controller in OMAP.
|
||||
+ *
|
||||
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/platform_device.h>
|
||||
+#include <linux/slab.h>
|
||||
+#include <linux/of.h>
|
||||
+#include <linux/io.h>
|
||||
+#include <linux/usb/omap_usb.h>
|
||||
+#include <linux/usb/phy_companion.h>
|
||||
+#include <linux/clk.h>
|
||||
+#include <linux/err.h>
|
||||
+#include <linux/pm_runtime.h>
|
||||
+#include <linux/delay.h>
|
||||
+
|
||||
+/**
|
||||
+ * omap_usb2_set_comparator - links the comparator present in the sytem with
|
||||
+ * this phy
|
||||
+ * @comparator - the companion phy(comparator) for this phy
|
||||
+ *
|
||||
+ * The phy companion driver should call this API passing the phy_companion
|
||||
+ * filled with set_vbus and start_srp to be used by usb phy.
|
||||
+ *
|
||||
+ * For use by phy companion driver
|
||||
+ */
|
||||
+int omap_usb2_set_comparator(struct phy_companion *comparator)
|
||||
+{
|
||||
+ struct omap_usb *phy;
|
||||
+ struct usb_phy *x = usb_get_phy(USB_PHY_TYPE_USB2);
|
||||
+
|
||||
+ if (IS_ERR(x))
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ phy = phy_to_omapusb(x);
|
||||
+ phy->comparator = comparator;
|
||||
+ return 0;
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(omap_usb2_set_comparator);
|
||||
+
|
||||
+/**
|
||||
+ * omap_usb_phy_power - power on/off the phy using control module reg
|
||||
+ * @phy: struct omap_usb *
|
||||
+ * @on: 0 or 1, based on powering on or off the PHY
|
||||
+ *
|
||||
+ * XXX: Remove this function once control module driver gets merged
|
||||
+ */
|
||||
+static void omap_usb_phy_power(struct omap_usb *phy, int on)
|
||||
+{
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (on) {
|
||||
+ val = readl(phy->control_dev);
|
||||
+ if (val & PHY_PD) {
|
||||
+ writel(~PHY_PD, phy->control_dev);
|
||||
+ /* XXX: add proper documentation for this delay */
|
||||
+ mdelay(200);
|
||||
+ }
|
||||
+ } else {
|
||||
+ writel(PHY_PD, phy->control_dev);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int omap_usb_set_vbus(struct usb_otg *otg, bool enabled)
|
||||
+{
|
||||
+ struct omap_usb *phy = phy_to_omapusb(otg->phy);
|
||||
+
|
||||
+ if (!phy->comparator)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ return phy->comparator->set_vbus(phy->comparator, enabled);
|
||||
+}
|
||||
+
|
||||
+static int omap_usb_start_srp(struct usb_otg *otg)
|
||||
+{
|
||||
+ struct omap_usb *phy = phy_to_omapusb(otg->phy);
|
||||
+
|
||||
+ if (!phy->comparator)
|
||||
+ return -ENODEV;
|
||||
+
|
||||
+ return phy->comparator->start_srp(phy->comparator);
|
||||
+}
|
||||
+
|
||||
+static int omap_usb_set_host(struct usb_otg *otg, struct usb_bus *host)
|
||||
+{
|
||||
+ struct usb_phy *phy = otg->phy;
|
||||
+
|
||||
+ otg->host = host;
|
||||
+ if (!host)
|
||||
+ phy->state = OTG_STATE_UNDEFINED;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int omap_usb_set_peripheral(struct usb_otg *otg,
|
||||
+ struct usb_gadget *gadget)
|
||||
+{
|
||||
+ struct usb_phy *phy = otg->phy;
|
||||
+
|
||||
+ otg->gadget = gadget;
|
||||
+ if (!gadget)
|
||||
+ phy->state = OTG_STATE_UNDEFINED;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int omap_usb2_suspend(struct usb_phy *x, int suspend)
|
||||
+{
|
||||
+ u32 ret;
|
||||
+ struct omap_usb *phy = phy_to_omapusb(x);
|
||||
+
|
||||
+ if (suspend && !phy->is_suspended) {
|
||||
+ omap_usb_phy_power(phy, 0);
|
||||
+ pm_runtime_put_sync(phy->dev);
|
||||
+ phy->is_suspended = 1;
|
||||
+ } else if (!suspend && phy->is_suspended) {
|
||||
+ ret = pm_runtime_get_sync(phy->dev);
|
||||
+ if (ret < 0) {
|
||||
+ dev_err(phy->dev, "get_sync failed with err %d\n",
|
||||
+ ret);
|
||||
+ return ret;
|
||||
+ }
|
||||
+ omap_usb_phy_power(phy, 1);
|
||||
+ phy->is_suspended = 0;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __devinit omap_usb2_probe(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct omap_usb *phy;
|
||||
+ struct usb_otg *otg;
|
||||
+ struct resource *res;
|
||||
+
|
||||
+ phy = devm_kzalloc(&pdev->dev, sizeof(*phy), GFP_KERNEL);
|
||||
+ if (!phy) {
|
||||
+ dev_err(&pdev->dev, "unable to allocate memory for USB2 PHY\n");
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ otg = devm_kzalloc(&pdev->dev, sizeof(*otg), GFP_KERNEL);
|
||||
+ if (!otg) {
|
||||
+ dev_err(&pdev->dev, "unable to allocate memory for USB OTG\n");
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ phy->dev = &pdev->dev;
|
||||
+
|
||||
+ phy->phy.dev = phy->dev;
|
||||
+ phy->phy.label = "omap-usb2";
|
||||
+ phy->phy.set_suspend = omap_usb2_suspend;
|
||||
+ phy->phy.otg = otg;
|
||||
+
|
||||
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
|
||||
+
|
||||
+ phy->control_dev = devm_request_and_ioremap(&pdev->dev, res);
|
||||
+ if (phy->control_dev == NULL) {
|
||||
+ dev_err(&pdev->dev, "Failed to obtain io memory\n");
|
||||
+ return -ENXIO;
|
||||
+ }
|
||||
+
|
||||
+ phy->is_suspended = 1;
|
||||
+ omap_usb_phy_power(phy, 0);
|
||||
+
|
||||
+ otg->set_host = omap_usb_set_host;
|
||||
+ otg->set_peripheral = omap_usb_set_peripheral;
|
||||
+ otg->set_vbus = omap_usb_set_vbus;
|
||||
+ otg->start_srp = omap_usb_start_srp;
|
||||
+ otg->phy = &phy->phy;
|
||||
+
|
||||
+ phy->wkupclk = devm_clk_get(phy->dev, "usb_phy_cm_clk32k");
|
||||
+ if (IS_ERR(phy->wkupclk)) {
|
||||
+ dev_err(&pdev->dev, "unable to get usb_phy_cm_clk32k\n");
|
||||
+ return PTR_ERR(phy->wkupclk);
|
||||
+ }
|
||||
+ clk_prepare(phy->wkupclk);
|
||||
+
|
||||
+ usb_add_phy(&phy->phy, USB_PHY_TYPE_USB2);
|
||||
+
|
||||
+ platform_set_drvdata(pdev, phy);
|
||||
+
|
||||
+ pm_runtime_enable(phy->dev);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int __devexit omap_usb2_remove(struct platform_device *pdev)
|
||||
+{
|
||||
+ struct omap_usb *phy = platform_get_drvdata(pdev);
|
||||
+
|
||||
+ clk_unprepare(phy->wkupclk);
|
||||
+ usb_remove_phy(&phy->phy);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#ifdef CONFIG_PM_RUNTIME
|
||||
+
|
||||
+static int omap_usb2_runtime_suspend(struct device *dev)
|
||||
+{
|
||||
+ struct platform_device *pdev = to_platform_device(dev);
|
||||
+ struct omap_usb *phy = platform_get_drvdata(pdev);
|
||||
+
|
||||
+ clk_disable(phy->wkupclk);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int omap_usb2_runtime_resume(struct device *dev)
|
||||
+{
|
||||
+ u32 ret = 0;
|
||||
+ struct platform_device *pdev = to_platform_device(dev);
|
||||
+ struct omap_usb *phy = platform_get_drvdata(pdev);
|
||||
+
|
||||
+ ret = clk_enable(phy->wkupclk);
|
||||
+ if (ret < 0)
|
||||
+ dev_err(phy->dev, "Failed to enable wkupclk %d\n", ret);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static const struct dev_pm_ops omap_usb2_pm_ops = {
|
||||
+ SET_RUNTIME_PM_OPS(omap_usb2_runtime_suspend, omap_usb2_runtime_resume,
|
||||
+ NULL)
|
||||
+};
|
||||
+
|
||||
+#define DEV_PM_OPS (&omap_usb2_pm_ops)
|
||||
+#else
|
||||
+#define DEV_PM_OPS NULL
|
||||
+#endif
|
||||
+
|
||||
+#ifdef CONFIG_OF
|
||||
+static const struct of_device_id omap_usb2_id_table[] = {
|
||||
+ { .compatible = "ti,omap-usb2" },
|
||||
+ {}
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, omap_usb2_id_table);
|
||||
+#endif
|
||||
+
|
||||
+static struct platform_driver omap_usb2_driver = {
|
||||
+ .probe = omap_usb2_probe,
|
||||
+ .remove = __devexit_p(omap_usb2_remove),
|
||||
+ .driver = {
|
||||
+ .name = "omap-usb2",
|
||||
+ .owner = THIS_MODULE,
|
||||
+ .pm = DEV_PM_OPS,
|
||||
+ .of_match_table = of_match_ptr(omap_usb2_id_table),
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+module_platform_driver(omap_usb2_driver);
|
||||
+
|
||||
+MODULE_ALIAS("platform: omap_usb2");
|
||||
+MODULE_AUTHOR("Texas Instruments Inc.");
|
||||
+MODULE_DESCRIPTION("OMAP USB2 phy driver");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
Index: experimental/include/linux/usb/omap_usb.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ experimental/include/linux/usb/omap_usb.h 2012-12-05 11:46:39.827567048 +0100
|
||||
@@ -0,0 +1,46 @@
|
||||
+/*
|
||||
+ * omap_usb.h -- omap usb2 phy header file
|
||||
+ *
|
||||
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#ifndef __DRIVERS_OMAP_USB2_H
|
||||
+#define __DRIVERS_OMAP_USB2_H
|
||||
+
|
||||
+#include <linux/usb/otg.h>
|
||||
+
|
||||
+struct omap_usb {
|
||||
+ struct usb_phy phy;
|
||||
+ struct phy_companion *comparator;
|
||||
+ struct device *dev;
|
||||
+ u32 __iomem *control_dev;
|
||||
+ struct clk *wkupclk;
|
||||
+ u8 is_suspended:1;
|
||||
+};
|
||||
+
|
||||
+#define PHY_PD 0x1
|
||||
+
|
||||
+#define phy_to_omapusb(x) container_of((x), struct omap_usb, phy)
|
||||
+
|
||||
+#if defined(CONFIG_OMAP_USB2) || defined(CONFIG_OMAP_USB2_MODULE)
|
||||
+extern int omap_usb2_set_comparator(struct phy_companion *comparator);
|
||||
+#else
|
||||
+static inline int omap_usb2_set_comparator(struct phy_companion *comparator)
|
||||
+{
|
||||
+ return -ENODEV;
|
||||
+}
|
||||
+#endif
|
||||
+
|
||||
+#endif /* __DRIVERS_OMAP_USB_H */
|
||||
Index: experimental/include/linux/usb/phy_companion.h
|
||||
===================================================================
|
||||
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
|
||||
+++ experimental/include/linux/usb/phy_companion.h 2012-12-05 11:46:39.839567047 +0100
|
||||
@@ -0,0 +1,34 @@
|
||||
+/*
|
||||
+ * phy-companion.h -- phy companion to indicate the comparator part of PHY
|
||||
+ *
|
||||
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
|
||||
+ * This program is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
+ * the Free Software Foundation; either version 2 of the License, or
|
||||
+ * (at your option) any later version.
|
||||
+ *
|
||||
+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
|
||||
+ *
|
||||
+ * This program is distributed in the hope that it will be useful,
|
||||
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
+ * GNU General Public License for more details.
|
||||
+ *
|
||||
+ */
|
||||
+
|
||||
+#ifndef __DRIVERS_PHY_COMPANION_H
|
||||
+#define __DRIVERS_PHY_COMPANION_H
|
||||
+
|
||||
+#include <linux/usb/otg.h>
|
||||
+
|
||||
+/* phy_companion to take care of VBUS, ID and srp capabilities */
|
||||
+struct phy_companion {
|
||||
+
|
||||
+ /* effective for A-peripheral, ignored for B devices */
|
||||
+ int (*set_vbus)(struct phy_companion *x, bool enabled);
|
||||
+
|
||||
+ /* for B devices only: start session with A-Host */
|
||||
+ int (*start_srp)(struct phy_companion *x);
|
||||
+};
|
||||
+
|
||||
+#endif /* __DRIVERS_PHY_COMPANION_H */
|
|
@ -1,34 +0,0 @@
|
|||
From ef1c2096fcf390f2f6a6a835d9d26105e82abda5 Mon Sep 17 00:00:00 2001
|
||||
From: Rob Herring <rob.herring@calxeda.com>
|
||||
Date: Wed, 15 Aug 2012 16:28:36 +0100
|
||||
Subject: [PATCH] ARM: 7492/1: add strstr declaration for decompressors
|
||||
|
||||
With the generic unaligned.h, more kernel headers get pulled in including
|
||||
dynamic_debug.h which needs strstr. As it is not really used, we only need
|
||||
a declaration here.
|
||||
|
||||
Signed-off-by: Rob Herring <rob.herring@calxeda.com>
|
||||
Tested-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
|
||||
Reviewed-by: Arnd Bergmann <arnd@arndb.de>
|
||||
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
|
||||
---
|
||||
arch/arm/boot/compressed/decompress.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/compressed/decompress.c b/arch/arm/boot/compressed/decompress.c
|
||||
index f41b38c..9deb56a 100644
|
||||
--- a/arch/arm/boot/compressed/decompress.c
|
||||
+++ b/arch/arm/boot/compressed/decompress.c
|
||||
@@ -32,6 +32,9 @@ extern void error(char *);
|
||||
# define Tracecv(c,x)
|
||||
#endif
|
||||
|
||||
+/* Not needed, but used in some headers pulled in by decompressors */
|
||||
+extern char * strstr(const char * s1, const char *s2);
|
||||
+
|
||||
#ifdef CONFIG_KERNEL_GZIP
|
||||
#include "../../../../lib/decompress_inflate.c"
|
||||
#endif
|
||||
--
|
||||
1.8.0
|
||||
|
|
@ -1,7 +1,8 @@
|
|||
From 65cb587d7058441c8c910e8766ee86538c7274d8 Mon Sep 17 00:00:00 2001
|
||||
From: Arnd Bergmann <arnd@arndb.de>
|
||||
Date: Fri, 28 Sep 2012 22:36:00 +0100
|
||||
Subject: [PATCH] staging/iio/lis3l02dq: fix building without irq_to_gpio
|
||||
Subject: staging/iio/lis3l02dq: fix building without irq_to_gpio
|
||||
|
||||
commit 65cb587d7058441c8c910e8766ee86538c7274d8 upstream.
|
||||
|
||||
The driver has not been building for some time after the
|
||||
irq_to_gpio function has been removed from the kernel.
|
||||
|
@ -27,10 +28,10 @@ Signed-off-by: Jonathan Cameron <jic23@kernel.org>
|
|||
drivers/staging/iio/accel/lis3l02dq_ring.c | 2 +-
|
||||
3 files changed, 8 insertions(+), 5 deletions(-)
|
||||
|
||||
Index: experimental/drivers/staging/iio/accel/lis3l02dq.h
|
||||
===================================================================
|
||||
--- experimental.orig/drivers/staging/iio/accel/lis3l02dq.h 2012-12-03 20:39:49.000000000 +0100
|
||||
+++ experimental/drivers/staging/iio/accel/lis3l02dq.h 2012-12-05 11:32:50.159603549 +0100
|
||||
diff --git a/drivers/staging/iio/accel/lis3l02dq.h b/drivers/staging/iio/accel/lis3l02dq.h
|
||||
index f9bcd41..2bac722 100644
|
||||
--- a/drivers/staging/iio/accel/lis3l02dq.h
|
||||
+++ b/drivers/staging/iio/accel/lis3l02dq.h
|
||||
@@ -158,6 +158,7 @@ struct lis3l02dq_state {
|
||||
struct spi_device *us;
|
||||
struct iio_trigger *trig;
|
||||
|
@ -39,10 +40,10 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq.h
|
|||
bool trigger_on;
|
||||
|
||||
u8 tx[LIS3L02DQ_MAX_RX] ____cacheline_aligned;
|
||||
Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
|
||||
===================================================================
|
||||
--- experimental.orig/drivers/staging/iio/accel/lis3l02dq_core.c 2012-12-03 20:39:49.000000000 +0100
|
||||
+++ experimental/drivers/staging/iio/accel/lis3l02dq_core.c 2012-12-05 11:32:50.159603549 +0100
|
||||
diff --git a/drivers/staging/iio/accel/lis3l02dq_core.c b/drivers/staging/iio/accel/lis3l02dq_core.c
|
||||
index 21b0469..d13c7e9 100644
|
||||
--- a/drivers/staging/iio/accel/lis3l02dq_core.c
|
||||
+++ b/drivers/staging/iio/accel/lis3l02dq_core.c
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
|
@ -51,7 +52,7 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
|
|||
#include <linux/mutex.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/kernel.h>
|
||||
@@ -690,6 +691,7 @@ static int __devinit lis3l02dq_probe(str
|
||||
@@ -690,6 +691,7 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
|
||||
spi_set_drvdata(spi, indio_dev);
|
||||
|
||||
st->us = spi;
|
||||
|
@ -59,7 +60,7 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
|
|||
mutex_init(&st->buf_lock);
|
||||
indio_dev->name = spi->dev.driver->name;
|
||||
indio_dev->dev.parent = &spi->dev;
|
||||
@@ -711,7 +713,7 @@ static int __devinit lis3l02dq_probe(str
|
||||
@@ -711,7 +713,7 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
|
||||
goto error_unreg_buffer_funcs;
|
||||
}
|
||||
|
||||
|
@ -68,7 +69,7 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
|
|||
ret = request_threaded_irq(st->us->irq,
|
||||
&lis3l02dq_th,
|
||||
&lis3l02dq_event_handler,
|
||||
@@ -738,10 +740,10 @@ static int __devinit lis3l02dq_probe(str
|
||||
@@ -738,10 +740,10 @@ static int __devinit lis3l02dq_probe(struct spi_device *spi)
|
||||
return 0;
|
||||
|
||||
error_remove_trigger:
|
||||
|
@ -81,22 +82,22 @@ Index: experimental/drivers/staging/iio/accel/lis3l02dq_core.c
|
|||
free_irq(st->us->irq, indio_dev);
|
||||
error_uninitialize_buffer:
|
||||
iio_buffer_unregister(indio_dev);
|
||||
@@ -796,7 +798,7 @@ static int lis3l02dq_remove(struct spi_d
|
||||
if (ret)
|
||||
goto err_ret;
|
||||
@@ -790,7 +792,7 @@ static int __devexit lis3l02dq_remove(struct spi_device *spi)
|
||||
lis3l02dq_disable_all_events(indio_dev);
|
||||
lis3l02dq_stop_device(indio_dev);
|
||||
|
||||
- if (spi->irq && gpio_is_valid(irq_to_gpio(spi->irq)) > 0)
|
||||
+ if (spi->irq)
|
||||
free_irq(st->us->irq, indio_dev);
|
||||
|
||||
lis3l02dq_remove_trigger(indio_dev);
|
||||
Index: experimental/drivers/staging/iio/accel/lis3l02dq_ring.c
|
||||
===================================================================
|
||||
--- experimental.orig/drivers/staging/iio/accel/lis3l02dq_ring.c 2012-12-03 20:39:49.000000000 +0100
|
||||
+++ experimental/drivers/staging/iio/accel/lis3l02dq_ring.c 2012-12-05 11:32:50.183603549 +0100
|
||||
@@ -264,7 +264,7 @@ static int lis3l02dq_trig_try_reen(struc
|
||||
/* If gpio still high (or high again) */
|
||||
/* In theory possible we will need to do this several times */
|
||||
diff --git a/drivers/staging/iio/accel/lis3l02dq_ring.c b/drivers/staging/iio/accel/lis3l02dq_ring.c
|
||||
index fa4190d..13c0b4b 100644
|
||||
--- a/drivers/staging/iio/accel/lis3l02dq_ring.c
|
||||
+++ b/drivers/staging/iio/accel/lis3l02dq_ring.c
|
||||
@@ -263,7 +263,7 @@ static int lis3l02dq_trig_try_reen(struct iio_trigger *trig)
|
||||
/* If gpio still high (or high again)
|
||||
* In theory possible we will need to do this several times */
|
||||
for (i = 0; i < 5; i++)
|
||||
- if (gpio_get_value(irq_to_gpio(st->us->irq)))
|
||||
+ if (gpio_get_value(st->gpio))
|
||||
|
|
|
@ -1,29 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Thu, 7 Jun 2012 04:40:34 +0100
|
||||
Subject: [PATCH] IA64: Export <asm/cmpxchg.h> to userland
|
||||
|
||||
Parts of <asm/intrinsics.h> were moved to <asm/cmpxchg.h>, and the
|
||||
former now includes the latter. The former is exported to userland
|
||||
so the latter must be too.
|
||||
|
||||
Cc: stable@vger.kernel.org # v3.4
|
||||
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
||||
---
|
||||
arch/ia64/include/asm/Kbuild | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/ia64/include/asm/Kbuild b/arch/ia64/include/asm/Kbuild
|
||||
index 241d1c5..c929a53 100644
|
||||
--- a/arch/ia64/include/asm/Kbuild
|
||||
+++ b/arch/ia64/include/asm/Kbuild
|
||||
@@ -6,6 +6,7 @@ header-y += gcc_intrin.h
|
||||
header-y += ia64regs.h
|
||||
header-y += intel_intrin.h
|
||||
header-y += intrinsics.h
|
||||
+header-y += cmpxchg.h
|
||||
header-y += perfmon.h
|
||||
header-y += perfmon_default_smpl.h
|
||||
header-y += ptrace_offsets.h
|
||||
--
|
||||
1.7.10
|
||||
|
|
@ -15,7 +15,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
|
||||
--- a/drivers/gpu/drm/nouveau/Kconfig
|
||||
+++ b/drivers/gpu/drm/nouveau/Kconfig
|
||||
@@ -11,8 +11,8 @@
|
||||
@@ -11,8 +11,8 @@ config DRM_NOUVEAU
|
||||
select FRAMEBUFFER_CONSOLE if !EXPERT
|
||||
select FB_BACKLIGHT if DRM_NOUVEAU_BACKLIGHT
|
||||
select ACPI_VIDEO if ACPI && X86 && BACKLIGHT_CLASS_DEVICE && VIDEO_OUTPUT_CONTROL && INPUT
|
||||
|
@ -28,21 +28,22 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
Choose this option for open-source nVidia support.
|
||||
--- a/drivers/gpu/drm/nouveau/Makefile
|
||||
+++ b/drivers/gpu/drm/nouveau/Makefile
|
||||
@@ -42,6 +42,8 @@
|
||||
nouveau-$(CONFIG_DRM_NOUVEAU_DEBUG) += nouveau_debugfs.o
|
||||
@@ -186,7 +186,9 @@ nouveau-y += nouveau_mem.o
|
||||
|
||||
# other random bits
|
||||
nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o
|
||||
nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o
|
||||
+ifdef CONFIG_X86
|
||||
nouveau-$(CONFIG_ACPI) += nouveau_acpi.o
|
||||
+endif
|
||||
nouveau-$(CONFIG_DRM_NOUVEAU_BACKLIGHT) += nouveau_backlight.o
|
||||
|
||||
obj-$(CONFIG_DRM_NOUVEAU)+= nouveau.o
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_drv.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_drv.h
|
||||
@@ -1095,7 +1095,7 @@
|
||||
--- a/drivers/gpu/drm/nouveau/nouveau_acpi.h
|
||||
+++ b/drivers/gpu/drm/nouveau/nouveau_acpi.h
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
/* nouveau_acpi.c */
|
||||
#define ROM_BIOS_PAGE 4096
|
||||
|
||||
-#if defined(CONFIG_ACPI)
|
||||
+#if defined(CONFIG_ACPI) && defined(CONFIG_X86)
|
||||
void nouveau_register_dsm_handler(void);
|
||||
|
|
|
@ -5,8 +5,8 @@ Subject: [PATCH 2/2] cgroups: Document the Debian memory resource controller
|
|||
---
|
||||
--- a/Documentation/cgroups/memory.txt
|
||||
+++ b/Documentation/cgroups/memory.txt
|
||||
@@ -47,6 +47,10 @@ Features:
|
||||
Kernel memory support is work in progress, and the current version provides
|
||||
@@ -46,6 +46,10 @@ Features:
|
||||
Kernel memory support is a work in progress, and the current version provides
|
||||
basically functionality. (See Section 2.7)
|
||||
|
||||
+NOTE: In Debian kernel packages, the memory resource controller is
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Subject: debugfs: Set default mode to 700
|
||||
Bug-Debian: http://bugs.debian.org/681418
|
||||
|
||||
As discussed here
|
||||
<http://lists.linux-foundation.org/pipermail/ksummit-2012-discuss/2012-July/000891.html>.
|
||||
|
||||
Mounting of debugfs is a significant security liability, but there are
|
||||
applications that depend on some interfaces based on debugfs and they
|
||||
(or their packages) will mount it automatically anyway.
|
||||
|
||||
Setting the default mode for the debugfs root to 700 (accessible
|
||||
to root only) should leave it functional, since most such applications
|
||||
will require root anyway, and users can override it to relax
|
||||
permissions if they really don't care about the security problems.
|
||||
|
||||
--- a/fs/debugfs/inode.c
|
||||
+++ b/fs/debugfs/inode.c
|
||||
@@ -28,7 +28,7 @@
|
||||
#include <linux/magic.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
-#define DEBUGFS_DEFAULT_MODE 0755
|
||||
+#define DEBUGFS_DEFAULT_MODE 0700
|
||||
|
||||
static struct vfsmount *debugfs_mount;
|
||||
static int debugfs_mount_count;
|
|
@ -1,24 +1,14 @@
|
|||
From 2a7d7ecc9fdcdaa0b82865078fd2a47e3b46da1b Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Mon, 17 Aug 2009 02:45:41 +0100
|
||||
Subject: [PATCH 1/2] dvb-usb-af9005: mark as broken
|
||||
Subject: dvb-usb-af9005: mark as broken
|
||||
|
||||
---
|
||||
drivers/media/dvb/dvb-usb/Kconfig | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig
|
||||
index 496c1a3..868e1cb 100644
|
||||
--- a/drivers/media/dvb/dvb-usb/Kconfig
|
||||
+++ b/drivers/media/dvb/dvb-usb/Kconfig
|
||||
@@ -238,6 +238,7 @@ config DVB_USB_OPERA1
|
||||
--- a/drivers/media/usb/dvb-usb/Kconfig
|
||||
+++ b/drivers/media/usb/dvb-usb/Kconfig
|
||||
@@ -227,6 +227,7 @@ config DVB_USB_OPERA1
|
||||
|
||||
config DVB_USB_AF9005
|
||||
tristate "Afatech AF9005 DVB-T USB1.1 support"
|
||||
+ depends on BROKEN
|
||||
depends on DVB_USB && EXPERIMENTAL
|
||||
select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
|
||||
--
|
||||
1.6.3.3
|
||||
|
||||
depends on DVB_USB
|
||||
select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
|
||||
|
|
|
@ -1,8 +1,14 @@
|
|||
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
|
||||
@@ -497,2 +497,3 @@ config VIDEO_OV7670
|
||||
From: Ben Hutchings <ben@decadent.org.uk>
|
||||
Date: Sun, 27 May 2012 01:56:58 +0100
|
||||
Subject: vs6624: mark as broken
|
||||
|
||||
--- a/drivers/media/i2c/Kconfig
|
||||
+++ b/drivers/media/i2c/Kconfig
|
||||
@@ -422,6 +422,7 @@ config VIDEO_OV7670
|
||||
controller.
|
||||
|
||||
config VIDEO_VS6624
|
||||
+ depends on BROKEN
|
||||
tristate "ST VS6624 sensor support"
|
||||
depends on VIDEO_V4L2 && I2C
|
||||
depends on MEDIA_CAMERA_SUPPORT
|
||||
|
|
|
@ -99,5 +99,5 @@ use of $(ARCH) needs to be moved after this.
|
|||
+ hdr-arch := m68k
|
||||
+endif
|
||||
|
||||
# Use LINUXINCLUDE when you must reference the include/ directory.
|
||||
# Needed to be compatible with the O= option
|
||||
# Use USERINCLUDE when you must reference the UAPI directories only.
|
||||
USERINCLUDE := \
|
||||
|
|
|
@ -33,8 +33,8 @@ to both DRM and radeon.
|
|||
---
|
||||
--- a/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
|
||||
@@ -37,6 +37,8 @@
|
||||
#include "drm_pciids.h"
|
||||
@@ -36,6 +36,8 @@
|
||||
#include <drm/drm_pciids.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/module.h>
|
||||
+#include <linux/namei.h>
|
||||
|
@ -42,7 +42,7 @@ to both DRM and radeon.
|
|||
|
||||
|
||||
/*
|
||||
@@ -378,6 +380,24 @@ static struct pci_driver radeon_kms_pci_
|
||||
@@ -411,6 +413,24 @@ static struct pci_driver radeon_kms_pci_
|
||||
.resume = radeon_pci_resume,
|
||||
};
|
||||
|
||||
|
@ -67,7 +67,7 @@ to both DRM and radeon.
|
|||
static int __init radeon_init(void)
|
||||
{
|
||||
driver = &driver_old;
|
||||
@@ -402,6 +422,13 @@ static int __init radeon_init(void)
|
||||
@@ -435,6 +455,13 @@ static int __init radeon_init(void)
|
||||
radeon_modeset = 0;
|
||||
#endif
|
||||
}
|
||||
|
|
|
@ -8,16 +8,16 @@ are set.
|
|||
|
||||
--- a/Makefile
|
||||
+++ b/Makefile
|
||||
@@ -806,7 +806,7 @@ endif
|
||||
@@ -822,7 +822,7 @@ endif
|
||||
prepare2: prepare3 outputmakefile asm-generic
|
||||
|
||||
prepare1: prepare2 include/linux/version.h include/generated/utsrelease.h \
|
||||
prepare1: prepare2 $(version_h) include/generated/utsrelease.h \
|
||||
- include/config/auto.conf
|
||||
+ include/config/auto.conf include/generated/package.h
|
||||
$(cmd_crmodverdir)
|
||||
|
||||
archprepare: archheaders archscripts prepare1 scripts_basic
|
||||
@@ -838,12 +838,25 @@ define filechk_version.h
|
||||
@@ -854,12 +854,25 @@ define filechk_version.h
|
||||
echo '#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))';)
|
||||
endef
|
||||
|
||||
|
@ -31,7 +31,7 @@ are set.
|
|||
+endef
|
||||
+endif
|
||||
+
|
||||
include/linux/version.h: $(srctree)/Makefile FORCE
|
||||
$(version_h): $(srctree)/Makefile FORCE
|
||||
$(call filechk,version.h)
|
||||
|
||||
include/generated/utsrelease.h: include/config/kernel.release FORCE
|
||||
|
@ -53,7 +53,7 @@ are set.
|
|||
#include <asm/uaccess.h>
|
||||
#include <asm/io.h>
|
||||
#include <linux/atomic.h>
|
||||
@@ -164,11 +165,12 @@ static void show_last_breaking_event(str
|
||||
@@ -181,11 +182,12 @@ static void show_last_breaking_event(str
|
||||
*/
|
||||
void dump_stack(void)
|
||||
{
|
||||
|
@ -68,10 +68,10 @@ are set.
|
|||
printk("Process %s (pid: %d, task: %p, ksp: %p)\n",
|
||||
current->comm, current->pid, current,
|
||||
(void *) current->thread.ksp);
|
||||
@@ -215,11 +217,12 @@ void show_registers(struct pt_regs *regs
|
||||
@@ -231,11 +233,12 @@ void show_registers(struct pt_regs *regs
|
||||
|
||||
void show_regs(struct pt_regs *regs)
|
||||
{
|
||||
print_modules();
|
||||
- printk("CPU: %d %s %s %.*s\n",
|
||||
+ printk("CPU: %d %s %s %.*s%s\n",
|
||||
task_thread_info(current)->cpu, print_tainted(),
|
||||
|
@ -92,7 +92,7 @@ are set.
|
|||
+#include <generated/package.h>
|
||||
#include <asm/current.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include "sysrq.h"
|
||||
#include <asm/sysrq.h>
|
||||
@@ -16,8 +17,9 @@ void __show_regs(struct pt_regs *regs)
|
||||
{
|
||||
printk("\n");
|
||||
|
@ -115,7 +115,7 @@ are set.
|
|||
#include <asm/cpu.h>
|
||||
#include <asm/apic.h>
|
||||
#include <asm/syscalls.h>
|
||||
@@ -147,11 +148,12 @@ void show_regs_common(void)
|
||||
@@ -135,11 +136,12 @@ void show_regs_common(void)
|
||||
/* Board Name is optional */
|
||||
board = dmi_get_system_info(DMI_BOARD_NAME);
|
||||
|
||||
|
@ -178,14 +178,14 @@ are set.
|
|||
regs->ar_unat, regs->ar_pfs, regs->ar_rsc);
|
||||
--- a/arch/arm/kernel/process.c
|
||||
+++ b/arch/arm/kernel/process.c
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <linux/random.h>
|
||||
@@ -32,6 +32,7 @@
|
||||
#include <linux/hw_breakpoint.h>
|
||||
#include <linux/cpuidle.h>
|
||||
#include <linux/leds.h>
|
||||
+#include <generated/package.h>
|
||||
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/processor.h>
|
||||
@@ -278,11 +279,12 @@ void __show_regs(struct pt_regs *regs)
|
||||
unsigned long flags;
|
||||
char buf[64];
|
||||
|
@ -211,7 +211,7 @@ are set.
|
|||
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/uaccess.h>
|
||||
@@ -644,8 +645,9 @@ void show_regs(struct pt_regs * regs)
|
||||
@@ -643,8 +644,9 @@ void show_regs(struct pt_regs * regs)
|
||||
|
||||
printk("NIP: "REG" LR: "REG" CTR: "REG"\n",
|
||||
regs->nip, regs->link, regs->ctr);
|
||||
|
|
|
@ -18,8 +18,6 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
scripts/kconfig/lkc_proto.h | 1 +
|
||||
4 files changed, 44 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/scripts/kconfig/conf.c b/scripts/kconfig/conf.c
|
||||
index f208f90..ffaa787 100644
|
||||
--- a/scripts/kconfig/conf.c
|
||||
+++ b/scripts/kconfig/conf.c
|
||||
@@ -364,7 +364,6 @@ static void conf(struct menu *menu)
|
||||
|
@ -27,10 +25,10 @@ index f208f90..ffaa787 100644
|
|||
case P_MENU:
|
||||
if ((input_mode == silentoldconfig ||
|
||||
- input_mode == listnewconfig ||
|
||||
input_mode == oldnoconfig) &&
|
||||
input_mode == olddefconfig) &&
|
||||
rootEntry != menu) {
|
||||
check_conf(menu);
|
||||
@@ -425,11 +424,7 @@ static void check_conf(struct menu *menu)
|
||||
@@ -425,11 +424,7 @@ static void check_conf(struct menu *menu
|
||||
if (sym && !sym_has_value(sym)) {
|
||||
if (sym_is_changable(sym) ||
|
||||
(sym_is_choice(sym) && sym_get_tristate_value(sym) == yes)) {
|
||||
|
@ -38,12 +36,12 @@ index f208f90..ffaa787 100644
|
|||
- if (sym->name && !sym_is_choice_value(sym)) {
|
||||
- printf("%s%s\n", CONFIG_, sym->name);
|
||||
- }
|
||||
- } else if (input_mode != oldnoconfig) {
|
||||
+ if (input_mode != oldnoconfig) {
|
||||
- } else if (input_mode != olddefconfig) {
|
||||
+ if (input_mode != olddefconfig) {
|
||||
if (!conf_cnt++)
|
||||
printf(_("*\n* Restart config...\n*\n"));
|
||||
rootEntry = menu_get_parent_menu(menu);
|
||||
@@ -442,6 +437,30 @@ static void check_conf(struct menu *menu)
|
||||
@@ -442,6 +437,30 @@ static void check_conf(struct menu *menu
|
||||
check_conf(child);
|
||||
}
|
||||
|
||||
|
@ -74,7 +72,7 @@ index f208f90..ffaa787 100644
|
|||
static struct option long_opts[] = {
|
||||
{"oldaskconfig", no_argument, NULL, oldaskconfig},
|
||||
{"oldconfig", no_argument, NULL, oldconfig},
|
||||
@@ -482,6 +501,7 @@ int main(int ac, char **av)
|
||||
@@ -489,6 +508,7 @@ int main(int ac, char **av)
|
||||
const char *progname = av[0];
|
||||
int opt;
|
||||
const char *name, *defconfig_file = NULL /* gcc uninit */;
|
||||
|
@ -82,12 +80,12 @@ index f208f90..ffaa787 100644
|
|||
struct stat tmpstat;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
@@ -634,16 +654,18 @@ int main(int ac, char **av)
|
||||
@@ -651,16 +671,18 @@ int main(int ac, char **av)
|
||||
input_mode = silentoldconfig;
|
||||
/* fall through */
|
||||
case oldconfig:
|
||||
- case listnewconfig:
|
||||
case oldnoconfig:
|
||||
case olddefconfig:
|
||||
case silentoldconfig:
|
||||
/* Update until a loop caused no more changes */
|
||||
do {
|
||||
|
@ -95,8 +93,8 @@ index f208f90..ffaa787 100644
|
|||
check_conf(&rootmenu);
|
||||
- } while (conf_cnt &&
|
||||
- (input_mode != listnewconfig &&
|
||||
- input_mode != oldnoconfig));
|
||||
+ } while (conf_cnt && input_mode != oldnoconfig);
|
||||
- input_mode != olddefconfig));
|
||||
+ } while (conf_cnt && input_mode != olddefconfig);
|
||||
+ break;
|
||||
+ case listnewconfig:
|
||||
+ conf_set_all_new_symbols(def_default);
|
||||
|
@ -105,11 +103,9 @@ index f208f90..ffaa787 100644
|
|||
break;
|
||||
}
|
||||
|
||||
diff --git a/scripts/kconfig/confdata.c b/scripts/kconfig/confdata.c
|
||||
index 59b667c..d2be252 100644
|
||||
--- a/scripts/kconfig/confdata.c
|
||||
+++ b/scripts/kconfig/confdata.c
|
||||
@@ -695,6 +695,14 @@ next_menu:
|
||||
@@ -727,6 +727,14 @@ next_menu:
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -124,7 +120,7 @@ index 59b667c..d2be252 100644
|
|||
int conf_write(const char *name)
|
||||
{
|
||||
FILE *out;
|
||||
@@ -1079,6 +1087,7 @@ void conf_set_all_new_symbols(enum conf_def_mode mode)
|
||||
@@ -1111,6 +1119,7 @@ void conf_set_all_new_symbols(enum conf_
|
||||
for_all_symbols(i, sym) {
|
||||
if (sym_has_value(sym))
|
||||
continue;
|
||||
|
@ -132,11 +128,9 @@ index 59b667c..d2be252 100644
|
|||
switch (sym_get_type(sym)) {
|
||||
case S_BOOLEAN:
|
||||
case S_TRISTATE:
|
||||
diff --git a/scripts/kconfig/expr.h b/scripts/kconfig/expr.h
|
||||
index 80fce57..0db77f3 100644
|
||||
--- a/scripts/kconfig/expr.h
|
||||
+++ b/scripts/kconfig/expr.h
|
||||
@@ -104,6 +104,8 @@ struct symbol {
|
||||
@@ -106,6 +106,8 @@ struct symbol {
|
||||
#define SYMBOL_DEF3 0x40000 /* symbol.def[S_DEF_3] is valid */
|
||||
#define SYMBOL_DEF4 0x80000 /* symbol.def[S_DEF_4] is valid */
|
||||
|
||||
|
@ -145,11 +139,9 @@ index 80fce57..0db77f3 100644
|
|||
#define SYMBOL_MAXLENGTH 256
|
||||
#define SYMBOL_HASHSIZE 9973
|
||||
|
||||
diff --git a/scripts/kconfig/lkc_proto.h b/scripts/kconfig/lkc_proto.h
|
||||
index 47fe9c3..dd0024a 100644
|
||||
--- a/scripts/kconfig/lkc_proto.h
|
||||
+++ b/scripts/kconfig/lkc_proto.h
|
||||
@@ -7,6 +7,7 @@ P(conf_read_simple,int,(const char *name, int));
|
||||
@@ -7,6 +7,7 @@ P(conf_read_simple,int,(const char *name
|
||||
P(conf_write_defconfig,int,(const char *name));
|
||||
P(conf_write,int,(const char *name));
|
||||
P(conf_write_autoconf,int,(void));
|
||||
|
@ -157,6 +149,3 @@ index 47fe9c3..dd0024a 100644
|
|||
P(conf_get_changed,bool,(void));
|
||||
P(conf_set_changed_callback, void,(void (*fn)(void)));
|
||||
P(conf_set_message_callback, void,(void (*fn)(const char *fmt, va_list ap)));
|
||||
--
|
||||
1.7.5.4
|
||||
|
||||
|
|
|
@ -313,8 +313,8 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_H__ */
|
||||
--- a/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/branch.c 2012-10-29 03:30:14.227048051 +0000
|
||||
@@ -0,0 +1,1169 @@
|
||||
+++ b/fs/aufs/branch.c 2012-12-16 14:11:13.354479811 +0000
|
||||
@@ -0,0 +1,1172 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -373,7 +373,10 @@
|
|||
+ else
|
||||
+ break;
|
||||
+
|
||||
+ /* recursive lock, s_umount of branch's */
|
||||
+ lockdep_off();
|
||||
+ mntput(br->br_mnt);
|
||||
+ lockdep_on();
|
||||
+ kfree(wbr);
|
||||
+ kfree(br);
|
||||
+}
|
||||
|
@ -949,7 +952,7 @@
|
|||
+ continue;
|
||||
+
|
||||
+ /* AuDbgInode(i); */
|
||||
+ if (au_iigen(i) == sigen)
|
||||
+ if (au_iigen(i, NULL) == sigen)
|
||||
+ ii_read_lock_child(i);
|
||||
+ else {
|
||||
+ ii_write_lock_child(i);
|
||||
|
@ -1759,7 +1762,7 @@
|
|||
+
|
||||
+-include ${srctree}/${src}/conf_priv.mk
|
||||
--- a/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/cpup.c 2012-10-29 03:30:14.227048051 +0000
|
||||
+++ b/fs/aufs/cpup.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,1085 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -2185,7 +2188,7 @@
|
|||
+ goto out;
|
||||
+
|
||||
+ err = -ENOMEM;
|
||||
+ sym.k = __getname_gfp(GFP_NOFS);
|
||||
+ sym.k = (void *)__get_free_page(GFP_NOFS);
|
||||
+ if (unlikely(!sym.k))
|
||||
+ goto out;
|
||||
+
|
||||
|
@ -2200,7 +2203,7 @@
|
|||
+ sym.k[symlen] = 0;
|
||||
+ err = vfsub_symlink(h_dir, h_path, sym.k);
|
||||
+ }
|
||||
+ __putname(sym.k);
|
||||
+ free_page((unsigned long)sym.k);
|
||||
+
|
||||
+out:
|
||||
+ return err;
|
||||
|
@ -3663,7 +3666,7 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_DCSUB_H__ */
|
||||
--- a/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/debug.c 2012-10-29 03:30:14.227048051 +0000
|
||||
+++ b/fs/aufs/debug.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,490 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -3791,7 +3794,7 @@
|
|||
+ if (!iinfo)
|
||||
+ return;
|
||||
+ dpri("i-1: bstart %d, bend %d, gen %d\n",
|
||||
+ iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode));
|
||||
+ iinfo->ii_bstart, iinfo->ii_bend, au_iigen(inode, NULL));
|
||||
+ if (iinfo->ii_bstart < 0)
|
||||
+ return;
|
||||
+ hn = 0;
|
||||
|
@ -4401,8 +4404,8 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_DEBUG_H__ */
|
||||
--- a/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/dentry.c 2012-10-29 03:30:14.231048075 +0000
|
||||
@@ -0,0 +1,1063 @@
|
||||
+++ b/fs/aufs/dentry.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,1060 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -4438,7 +4441,6 @@
|
|||
+struct au_do_lookup_args {
|
||||
+ unsigned int flags;
|
||||
+ mode_t type;
|
||||
+ unsigned int nd_flags;
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
|
@ -4529,8 +4531,7 @@
|
|||
+ * otherwise an error.
|
||||
+ * can be called at unlinking with @type is zero.
|
||||
+ */
|
||||
+int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type,
|
||||
+ unsigned int flags)
|
||||
+int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type)
|
||||
+{
|
||||
+ int npositive, err;
|
||||
+ aufs_bindex_t bindex, btail, bdiropq;
|
||||
|
@ -4538,8 +4539,7 @@
|
|||
+ struct qstr whname;
|
||||
+ struct au_do_lookup_args args = {
|
||||
+ .flags = 0,
|
||||
+ .type = type,
|
||||
+ .nd_flags = flags
|
||||
+ .type = type
|
||||
+ };
|
||||
+ const struct qstr *name = &dentry->d_name;
|
||||
+ struct dentry *parent;
|
||||
|
@ -5137,7 +5137,7 @@
|
|||
+ * if current working dir is removed, it returns an error.
|
||||
+ * but the dentry is legal.
|
||||
+ */
|
||||
+ err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0, /*flags*/0);
|
||||
+ err = au_lkup_dentry(dentry, /*bstart*/0, /*type*/0);
|
||||
+ AuDbgDentry(dentry);
|
||||
+ au_di_swap(tmp, dinfo);
|
||||
+ if (err == -ENOENT)
|
||||
|
@ -5467,8 +5467,8 @@
|
|||
+ .d_release = aufs_d_release
|
||||
+};
|
||||
--- a/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/dentry.h 2012-10-29 03:30:14.231048075 +0000
|
||||
@@ -0,0 +1,235 @@
|
||||
+++ b/fs/aufs/dentry.h 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,234 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -5522,8 +5522,7 @@
|
|||
+int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir,
|
||||
+ struct dentry *h_parent, struct au_branch *br);
|
||||
+
|
||||
+int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type,
|
||||
+ unsigned int flags);
|
||||
+int au_lkup_dentry(struct dentry *dentry, aufs_bindex_t bstart, mode_t type);
|
||||
+int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex);
|
||||
+int au_refresh_dentry(struct dentry *dentry, struct dentry *parent);
|
||||
+int au_reval_dpath(struct dentry *dentry, unsigned int sigen);
|
||||
|
@ -7488,7 +7487,7 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_DYNOP_H__ */
|
||||
--- a/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/export.c 2012-10-29 03:30:14.235048090 +0000
|
||||
+++ b/fs/aufs/export.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,811 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -7714,7 +7713,7 @@
|
|||
+ sigen = au_sigen(sb);
|
||||
+ if (unlikely(is_bad_inode(inode)
|
||||
+ || IS_DEADDIR(inode)
|
||||
+ || sigen != au_iigen(inode)))
|
||||
+ || sigen != au_iigen(inode, NULL)))
|
||||
+ goto out_iput;
|
||||
+
|
||||
+ dentry = NULL;
|
||||
|
@ -7859,7 +7858,7 @@
|
|||
+ goto out;
|
||||
+
|
||||
+ dentry = ERR_PTR(-ENOMEM);
|
||||
+ arg.name = __getname_gfp(GFP_NOFS);
|
||||
+ arg.name = (void *)__get_free_page(GFP_NOFS);
|
||||
+ if (unlikely(!arg.name))
|
||||
+ goto out_file;
|
||||
+ arg.ino = ino;
|
||||
|
@ -7891,7 +7890,7 @@
|
|||
+ }
|
||||
+
|
||||
+out_name:
|
||||
+ __putname(arg.name);
|
||||
+ free_page((unsigned long)arg.name);
|
||||
+out_file:
|
||||
+ fput(file);
|
||||
+out:
|
||||
|
@ -8302,8 +8301,8 @@
|
|||
+ atomic_set(&sbinfo->si_xigen_next, u);
|
||||
+}
|
||||
--- a/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/f_op.c 2012-10-29 03:30:14.235048090 +0000
|
||||
@@ -0,0 +1,724 @@
|
||||
+++ b/fs/aufs/f_op.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,723 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -8779,7 +8778,6 @@
|
|||
+{
|
||||
+ return AuConv_VM_MAP(flags, GROWSDOWN)
|
||||
+ | AuConv_VM_MAP(flags, DENYWRITE)
|
||||
+ | AuConv_VM_MAP(flags, EXECUTABLE)
|
||||
+ | AuConv_VM_MAP(flags, LOCKED);
|
||||
+}
|
||||
+
|
||||
|
@ -11993,8 +11991,8 @@
|
|||
+ au_hn_destroy_cache();
|
||||
+}
|
||||
--- a/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/i_op.c 2012-10-29 03:30:14.239048114 +0000
|
||||
@@ -0,0 +1,1009 @@
|
||||
+++ b/fs/aufs/i_op.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,1026 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -12160,15 +12158,21 @@
|
|||
+
|
||||
+ IMustLock(dir);
|
||||
+
|
||||
+ /* todo: support rcu-walk? */
|
||||
+ ret = ERR_PTR(-ECHILD);
|
||||
+ if (flags & LOOKUP_RCU)
|
||||
+ goto out;
|
||||
+
|
||||
+ ret = ERR_PTR(-ENAMETOOLONG);
|
||||
+ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN))
|
||||
+ goto out;
|
||||
+
|
||||
+ sb = dir->i_sb;
|
||||
+ err = si_read_lock(sb, AuLock_FLUSH | AuLock_NOPLM);
|
||||
+ ret = ERR_PTR(err);
|
||||
+ if (unlikely(err))
|
||||
+ goto out;
|
||||
+
|
||||
+ ret = ERR_PTR(-ENAMETOOLONG);
|
||||
+ if (unlikely(dentry->d_name.len > AUFS_MAX_NAMELEN))
|
||||
+ goto out_si;
|
||||
+ err = au_di_init(dentry);
|
||||
+ ret = ERR_PTR(err);
|
||||
+ if (unlikely(err))
|
||||
|
@ -12183,7 +12187,7 @@
|
|||
+ err = au_digen_test(parent, au_sigen(sb));
|
||||
+ if (!err) {
|
||||
+ npositive = au_lkup_dentry(dentry, au_dbstart(parent),
|
||||
+ /*type*/0, flags);
|
||||
+ /*type*/0);
|
||||
+ err = npositive;
|
||||
+ }
|
||||
+ di_read_unlock(parent, AuLock_IR);
|
||||
|
@ -12201,6 +12205,13 @@
|
|||
+ }
|
||||
+
|
||||
+ ret = d_splice_alias(inode, dentry);
|
||||
+#if 0
|
||||
+ if (unlikely(d_need_lookup(dentry))) {
|
||||
+ spin_lock(&dentry->d_lock);
|
||||
+ dentry->d_flags &= ~DCACHE_NEED_LOOKUP;
|
||||
+ spin_unlock(&dentry->d_lock);
|
||||
+ } else
|
||||
+#endif
|
||||
+ if (unlikely(IS_ERR(ret) && inode)) {
|
||||
+ ii_write_unlock(inode);
|
||||
+ iput(inode);
|
||||
|
@ -12904,7 +12915,7 @@
|
|||
+ } buf;
|
||||
+
|
||||
+ err = -ENOMEM;
|
||||
+ buf.k = __getname_gfp(GFP_NOFS);
|
||||
+ buf.k = (void *)__get_free_page(GFP_NOFS);
|
||||
+ if (unlikely(!buf.k))
|
||||
+ goto out;
|
||||
+
|
||||
|
@ -12929,7 +12940,7 @@
|
|||
+ }
|
||||
+
|
||||
+out_name:
|
||||
+ __putname(buf.k);
|
||||
+ free_page((unsigned long)buf.k);
|
||||
+out:
|
||||
+ AuTraceErr(err);
|
||||
+ return ERR_PTR(err);
|
||||
|
@ -12938,7 +12949,11 @@
|
|||
+static void aufs_put_link(struct dentry *dentry __maybe_unused,
|
||||
+ struct nameidata *nd, void *cookie __maybe_unused)
|
||||
+{
|
||||
+ __putname(nd_get_link(nd));
|
||||
+ char *p;
|
||||
+
|
||||
+ p = nd_get_link(nd);
|
||||
+ if (!IS_ERR_OR_NULL(p))
|
||||
+ free_page((unsigned long)p);
|
||||
+}
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
|
@ -13005,8 +13020,8 @@
|
|||
+ .update_time = aufs_update_time
|
||||
+};
|
||||
--- a/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/i_op_add.c 2012-10-29 03:30:14.239048114 +0000
|
||||
@@ -0,0 +1,712 @@
|
||||
+++ b/fs/aufs/i_op_add.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,713 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -13276,7 +13291,8 @@
|
|||
+ h_dir = au_pinned_h_dir(&pin);
|
||||
+ switch (arg->type) {
|
||||
+ case Creat:
|
||||
+ err = vfsub_create(h_dir, &h_path, arg->u.c.mode, arg->u.c.want_excl);
|
||||
+ err = vfsub_create(h_dir, &h_path, arg->u.c.mode,
|
||||
+ arg->u.c.want_excl);
|
||||
+ break;
|
||||
+ case Symlink:
|
||||
+ err = vfsub_symlink(h_dir, &h_path, arg->u.s.symname);
|
||||
|
@ -13720,8 +13736,8 @@
|
|||
+ return err;
|
||||
+}
|
||||
--- a/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/i_op_del.c 2012-10-29 03:30:14.239048114 +0000
|
||||
@@ -0,0 +1,478 @@
|
||||
+++ b/fs/aufs/i_op_del.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,477 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -13792,8 +13808,7 @@
|
|||
+ au_di_cp(tmp, dinfo);
|
||||
+ au_di_swap(tmp, dinfo);
|
||||
+ /* returns the number of positive dentries */
|
||||
+ need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0,
|
||||
+ /*flags*/0);
|
||||
+ need_wh = au_lkup_dentry(dentry, bstart + 1, /*type*/0);
|
||||
+ au_di_swap(tmp, dinfo);
|
||||
+ au_rw_write_unlock(&tmp->di_rwsem);
|
||||
+ au_di_free(tmp);
|
||||
|
@ -15230,8 +15245,8 @@
|
|||
+ return err;
|
||||
+}
|
||||
--- a/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/iinfo.c 2012-01-10 02:15:56.000000000 +0000
|
||||
@@ -0,0 +1,264 @@
|
||||
+++ b/fs/aufs/iinfo.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,276 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -15344,10 +15359,22 @@
|
|||
+ hinode->hi_whdentry = h_wh;
|
||||
+}
|
||||
+
|
||||
+void au_update_iigen(struct inode *inode)
|
||||
+void au_update_iigen(struct inode *inode, int half)
|
||||
+{
|
||||
+ atomic_set(&au_ii(inode)->ii_generation, au_sigen(inode->i_sb));
|
||||
+ /* smp_mb(); */ /* atomic_set */
|
||||
+ struct au_iinfo *iinfo;
|
||||
+ struct au_iigen *iigen;
|
||||
+ unsigned int sigen;
|
||||
+
|
||||
+ sigen = au_sigen(inode->i_sb);
|
||||
+ iinfo = au_ii(inode);
|
||||
+ iigen = &iinfo->ii_generation;
|
||||
+ spin_lock(&iinfo->ii_genspin);
|
||||
+ iigen->ig_generation = sigen;
|
||||
+ if (half)
|
||||
+ au_ig_fset(iigen->ig_flags, HALF_REFRESHED);
|
||||
+ else
|
||||
+ au_ig_fclr(iigen->ig_flags, HALF_REFRESHED);
|
||||
+ spin_unlock(&iinfo->ii_genspin);
|
||||
+}
|
||||
+
|
||||
+/* it may be called at remount time, too */
|
||||
|
@ -15398,6 +15425,7 @@
|
|||
+ struct au_iinfo *iinfo = &c->iinfo;
|
||||
+ static struct lock_class_key aufs_ii;
|
||||
+
|
||||
+ spin_lock_init(&iinfo->ii_genspin);
|
||||
+ au_rw_init(&iinfo->ii_rwsem);
|
||||
+ au_rw_class(&iinfo->ii_rwsem, &aufs_ii);
|
||||
+ inode_init_once(&c->vfs_inode);
|
||||
|
@ -15420,8 +15448,7 @@
|
|||
+ for (i = 0; i < nbr; i++)
|
||||
+ iinfo->ii_hinode[i].hi_id = -1;
|
||||
+
|
||||
+ atomic_set(&iinfo->ii_generation, au_sigen(sb));
|
||||
+ /* smp_mb(); */ /* atomic_set */
|
||||
+ iinfo->ii_generation.ig_generation = au_sigen(sb);
|
||||
+ iinfo->ii_bstart = -1;
|
||||
+ iinfo->ii_bend = -1;
|
||||
+ iinfo->ii_vdir = NULL;
|
||||
|
@ -15497,8 +15524,8 @@
|
|||
+ AuRwDestroy(&iinfo->ii_rwsem);
|
||||
+}
|
||||
--- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/inode.c 2012-10-29 03:30:14.239048114 +0000
|
||||
@@ -0,0 +1,478 @@
|
||||
+++ b/fs/aufs/inode.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,488 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -15535,7 +15562,7 @@
|
|||
+static void au_refresh_hinode_attr(struct inode *inode, int do_version)
|
||||
+{
|
||||
+ au_cpup_attr_all(inode, /*force*/0);
|
||||
+ au_update_iigen(inode);
|
||||
+ au_update_iigen(inode, /*half*/1);
|
||||
+ if (do_version)
|
||||
+ inode->i_version++;
|
||||
+}
|
||||
|
@ -15754,6 +15781,8 @@
|
|||
+static int reval_inode(struct inode *inode, struct dentry *dentry)
|
||||
+{
|
||||
+ int err;
|
||||
+ unsigned int gen;
|
||||
+ struct au_iigen iigen;
|
||||
+ aufs_bindex_t bindex, bend;
|
||||
+ struct inode *h_inode, *h_dinode;
|
||||
+
|
||||
|
@ -15772,12 +15801,20 @@
|
|||
+ bend = au_ibend(inode);
|
||||
+ for (bindex = au_ibstart(inode); bindex <= bend; bindex++) {
|
||||
+ h_inode = au_h_iptr(inode, bindex);
|
||||
+ if (h_inode && h_inode == h_dinode) {
|
||||
+ err = 0;
|
||||
+ if (au_iigen_test(inode, au_digen(dentry)))
|
||||
+ err = au_refresh_hinode(inode, dentry);
|
||||
+ if (!h_inode || h_inode != h_dinode)
|
||||
+ continue;
|
||||
+
|
||||
+ err = 0;
|
||||
+ gen = au_iigen(inode, &iigen);
|
||||
+ if (gen == au_digen(dentry)
|
||||
+ && !au_ig_ftest(iigen.ig_flags, HALF_REFRESHED))
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ /* fully refresh inode using dentry */
|
||||
+ err = au_refresh_hinode(inode, dentry);
|
||||
+ if (!err)
|
||||
+ au_update_iigen(inode, /*half*/0);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (unlikely(err))
|
||||
|
@ -15978,8 +16015,8 @@
|
|||
+ return au_test_h_perm(h_inode, mask);
|
||||
+}
|
||||
--- a/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/inode.h 2012-10-29 03:30:14.243048129 +0000
|
||||
@@ -0,0 +1,560 @@
|
||||
+++ b/fs/aufs/inode.h 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,588 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -16033,9 +16070,22 @@
|
|||
+ struct dentry *hi_whdentry;
|
||||
+};
|
||||
+
|
||||
+/* ig_flags */
|
||||
+#define AuIG_HALF_REFRESHED 1
|
||||
+#define au_ig_ftest(flags, name) ((flags) & AuIG_##name)
|
||||
+#define au_ig_fset(flags, name) \
|
||||
+ do { (flags) |= AuIG_##name; } while (0)
|
||||
+#define au_ig_fclr(flags, name) \
|
||||
+ do { (flags) &= ~AuIG_##name; } while (0)
|
||||
+
|
||||
+struct au_iigen {
|
||||
+ __u32 ig_generation, ig_flags;
|
||||
+};
|
||||
+
|
||||
+struct au_vdir;
|
||||
+struct au_iinfo {
|
||||
+ atomic_t ii_generation;
|
||||
+ spinlock_t ii_genspin;
|
||||
+ struct au_iigen ii_generation;
|
||||
+ struct super_block *ii_hsb1; /* no get/put */
|
||||
+
|
||||
+ struct au_rwsem ii_rwsem;
|
||||
|
@ -16184,7 +16234,7 @@
|
|||
+void au_set_h_iptr(struct inode *inode, aufs_bindex_t bindex,
|
||||
+ struct inode *h_inode, unsigned int flags);
|
||||
+
|
||||
+void au_update_iigen(struct inode *inode);
|
||||
+void au_update_iigen(struct inode *inode, int half);
|
||||
+void au_update_ibrange(struct inode *inode, int do_put_zero);
|
||||
+
|
||||
+void au_icntnr_init_once(void *_c);
|
||||
|
@ -16292,9 +16342,19 @@
|
|||
+#endif
|
||||
+}
|
||||
+
|
||||
+static inline unsigned int au_iigen(struct inode *inode)
|
||||
+static inline unsigned int au_iigen(struct inode *inode, struct au_iigen *iigen)
|
||||
+{
|
||||
+ return atomic_read(&au_ii(inode)->ii_generation);
|
||||
+ unsigned int gen;
|
||||
+ struct au_iinfo *iinfo;
|
||||
+
|
||||
+ iinfo = au_ii(inode);
|
||||
+ spin_lock(&iinfo->ii_genspin);
|
||||
+ if (iigen)
|
||||
+ *iigen = iinfo->ii_generation;
|
||||
+ gen = iinfo->ii_generation.ig_generation;
|
||||
+ spin_unlock(&iinfo->ii_genspin);
|
||||
+
|
||||
+ return gen;
|
||||
+}
|
||||
+
|
||||
+/* tiny test for inode number */
|
||||
|
@ -16311,7 +16371,12 @@
|
|||
+
|
||||
+static inline void au_iigen_dec(struct inode *inode)
|
||||
+{
|
||||
+ atomic_dec(&au_ii(inode)->ii_generation);
|
||||
+ struct au_iinfo *iinfo;
|
||||
+
|
||||
+ iinfo = au_ii(inode);
|
||||
+ spin_lock(&iinfo->ii_genspin);
|
||||
+ iinfo->ii_generation.ig_generation--;
|
||||
+ spin_unlock(&iinfo->ii_genspin);
|
||||
+}
|
||||
+
|
||||
+static inline int au_iigen_test(struct inode *inode, unsigned int sigen)
|
||||
|
@ -16319,7 +16384,7 @@
|
|||
+ int err;
|
||||
+
|
||||
+ err = 0;
|
||||
+ if (unlikely(inode && au_iigen(inode) != sigen))
|
||||
+ if (unlikely(inode && au_iigen(inode, NULL) != sigen))
|
||||
+ err = -EIO;
|
||||
+
|
||||
+ return err;
|
||||
|
@ -16986,8 +17051,8 @@
|
|||
+ccflags-y += -DHFSPLUS_SUPER_MAGIC=0x482b
|
||||
+endif
|
||||
--- a/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/module.c 2012-03-11 05:01:22.000000000 +0000
|
||||
@@ -0,0 +1,196 @@
|
||||
+++ b/fs/aufs/module.c 2012-12-16 14:11:13.358479829 +0000
|
||||
@@ -0,0 +1,202 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -17055,6 +17120,12 @@
|
|||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ /*
|
||||
+ * Make sure all delayed rcu free inodes are flushed before we
|
||||
+ * destroy cache.
|
||||
+ */
|
||||
+ rcu_barrier();
|
||||
+
|
||||
+ /* excluding AuCache_HNOTIFY */
|
||||
+ BUILD_BUG_ON(AuCache_HNOTIFY + 1 != AuCache_Last);
|
||||
+ for (i = 0; i < AuCache_HNOTIFY; i++)
|
||||
|
@ -20509,7 +20580,7 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_RWSEM_H__ */
|
||||
--- a/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/sbinfo.c 2012-01-10 02:15:56.000000000 +0000
|
||||
+++ b/fs/aufs/sbinfo.c 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,343 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -20670,7 +20741,7 @@
|
|||
+
|
||||
+ gen = ++au_sbi(sb)->si_generation;
|
||||
+ au_update_digen(sb->s_root);
|
||||
+ au_update_iigen(sb->s_root->d_inode);
|
||||
+ au_update_iigen(sb->s_root->d_inode, /*half*/0);
|
||||
+ sb->s_root->d_inode->i_version++;
|
||||
+ return gen;
|
||||
+}
|
||||
|
@ -20920,8 +20991,8 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_SPL_H__ */
|
||||
--- a/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/super.c 2012-10-29 03:30:14.243048129 +0000
|
||||
@@ -0,0 +1,962 @@
|
||||
+++ b/fs/aufs/super.c 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,993 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -21341,6 +21412,36 @@
|
|||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+static int aufs_sync_fs(struct super_block *sb, int wait)
|
||||
+{
|
||||
+ int err, e;
|
||||
+ aufs_bindex_t bend, bindex;
|
||||
+ struct au_branch *br;
|
||||
+ struct super_block *h_sb;
|
||||
+
|
||||
+ err = 0;
|
||||
+ si_noflush_read_lock(sb);
|
||||
+ bend = au_sbend(sb);
|
||||
+ for (bindex = 0; bindex <= bend; bindex++) {
|
||||
+ br = au_sbr(sb, bindex);
|
||||
+ if (!au_br_writable(br->br_perm))
|
||||
+ continue;
|
||||
+
|
||||
+ h_sb = au_sbr_sb(sb, bindex);
|
||||
+ if (h_sb->s_op->sync_fs) {
|
||||
+ e = h_sb->s_op->sync_fs(h_sb, wait);
|
||||
+ if (unlikely(e && !err))
|
||||
+ err = e;
|
||||
+ /* go on even if an error happens */
|
||||
+ }
|
||||
+ }
|
||||
+ si_read_unlock(sb);
|
||||
+
|
||||
+ return err;
|
||||
+}
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+/* final actions when unmounting a file system */
|
||||
+static void aufs_put_super(struct super_block *sb)
|
||||
+{
|
||||
|
@ -21551,7 +21652,7 @@
|
|||
+ sigen = au_sigen(sb);
|
||||
+ for (ull = 0; ull < max; ull++) {
|
||||
+ inode = array[ull];
|
||||
+ if (au_iigen(inode) != sigen) {
|
||||
+ if (au_iigen(inode, NULL) != sigen) {
|
||||
+ ii_write_lock_child(inode);
|
||||
+ e = au_refresh_hinode_self(inode);
|
||||
+ ii_write_unlock(inode);
|
||||
|
@ -21704,6 +21805,7 @@
|
|||
+ .show_options = aufs_show_options,
|
||||
+ .statfs = aufs_statfs,
|
||||
+ .put_super = aufs_put_super,
|
||||
+ .sync_fs = aufs_sync_fs,
|
||||
+ .remount_fs = aufs_remount_fs
|
||||
+};
|
||||
+
|
||||
|
@ -23060,7 +23162,7 @@
|
|||
+ pr_err("err %d (ignored)\n", err);
|
||||
+}
|
||||
--- a/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/vdir.c 2012-01-10 02:15:56.000000000 +0000
|
||||
+++ b/fs/aufs/vdir.c 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,885 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -23586,7 +23688,7 @@
|
|||
+ AuDebugOn(!au_opt_test(au_mntflags(sb), SHWH));
|
||||
+
|
||||
+ err = -ENOMEM;
|
||||
+ o = p = __getname_gfp(GFP_NOFS);
|
||||
+ o = p = (void *)__get_free_page(GFP_NOFS);
|
||||
+ if (unlikely(!p))
|
||||
+ goto out;
|
||||
+
|
||||
|
@ -23606,7 +23708,7 @@
|
|||
+ }
|
||||
+ }
|
||||
+
|
||||
+ __putname(o);
|
||||
+ free_page((unsigned long)o);
|
||||
+
|
||||
+out:
|
||||
+ AuTraceErr(err);
|
||||
|
@ -24728,8 +24830,8 @@
|
|||
+ return err;
|
||||
+}
|
||||
--- a/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/vfsub.h 2012-10-29 03:30:14.243048129 +0000
|
||||
@@ -0,0 +1,283 @@
|
||||
+++ b/fs/aufs/vfsub.h 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,284 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ *
|
||||
|
@ -24895,7 +24997,8 @@
|
|||
+void vfsub_unlock_rename(struct dentry *d1, struct au_hinode *hdir1,
|
||||
+ struct dentry *d2, struct au_hinode *hdir2);
|
||||
+
|
||||
+int vfsub_create(struct inode *dir, struct path *path, int mode, bool want_excl);
|
||||
+int vfsub_create(struct inode *dir, struct path *path, int mode,
|
||||
+ bool want_excl);
|
||||
+int vfsub_symlink(struct inode *dir, struct path *path,
|
||||
+ const char *symname);
|
||||
+int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev);
|
||||
|
@ -25717,7 +25820,7 @@
|
|||
+ }
|
||||
+};
|
||||
--- a/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/whout.c 2012-10-29 03:30:14.247048152 +0000
|
||||
+++ b/fs/aufs/whout.c 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,1042 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -26536,7 +26639,7 @@
|
|||
+ struct au_vdir_destr *str;
|
||||
+
|
||||
+ err = -ENOMEM;
|
||||
+ p = __getname_gfp(GFP_NOFS);
|
||||
+ p = (void *)__get_free_page(GFP_NOFS);
|
||||
+ wh_name.name = p;
|
||||
+ if (unlikely(!wh_name.name))
|
||||
+ goto out;
|
||||
|
@ -26566,7 +26669,7 @@
|
|||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ __putname(wh_name.name);
|
||||
+ free_page((unsigned long)wh_name.name);
|
||||
+
|
||||
+out:
|
||||
+ return err;
|
||||
|
@ -27165,7 +27268,7 @@
|
|||
+#endif /* __KERNEL__ */
|
||||
+#endif /* __AUFS_WKQ_H__ */
|
||||
--- a/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/fs/aufs/xino.c 2012-07-22 01:31:00.000000000 +0100
|
||||
+++ b/fs/aufs/xino.c 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,1264 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
|
@ -28377,7 +28480,7 @@
|
|||
+
|
||||
+ if (bwr >= 0) {
|
||||
+ file = ERR_PTR(-ENOMEM);
|
||||
+ page = __getname_gfp(GFP_NOFS);
|
||||
+ page = (void *)__get_free_page(GFP_NOFS);
|
||||
+ if (unlikely(!page))
|
||||
+ goto out;
|
||||
+ path.mnt = br->br_mnt;
|
||||
|
@ -28391,7 +28494,7 @@
|
|||
+ if (!IS_ERR(file))
|
||||
+ au_xino_brid_set(sb, br->br_id);
|
||||
+ }
|
||||
+ __putname(page);
|
||||
+ free_page((unsigned long)page);
|
||||
+ } else {
|
||||
+ file = au_xino_create(sb, AUFS_XINO_DEFPATH, /*silent*/0);
|
||||
+ if (IS_ERR(file))
|
||||
|
@ -28432,10 +28535,10 @@
|
|||
+ return err;
|
||||
+}
|
||||
--- a/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/include/linux/aufs_type.h 2012-10-29 03:30:14.247048152 +0000
|
||||
@@ -0,0 +1,233 @@
|
||||
+++ b/include/linux/aufs_type.h 2012-12-16 14:11:13.362479850 +0000
|
||||
@@ -0,0 +1,19 @@
|
||||
+/*
|
||||
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
|
||||
+ * Copyright (C) 2012 Junjiro R. Okajima
|
||||
+ *
|
||||
+ * This program, aufs is free software; you can redistribute it and/or modify
|
||||
+ * it under the terms of the GNU General Public License as published by
|
||||
|
@ -28452,218 +28555,4 @@
|
|||
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
+ */
|
||||
+
|
||||
+#ifndef __AUFS_TYPE_H__
|
||||
+#define __AUFS_TYPE_H__
|
||||
+
|
||||
+#define AUFS_NAME "aufs"
|
||||
+
|
||||
+#ifdef __KERNEL__
|
||||
+/*
|
||||
+ * define it before including all other headers.
|
||||
+ * sched.h may use pr_* macros before defining "current", so define the
|
||||
+ * no-current version first, and re-define later.
|
||||
+ */
|
||||
+#define pr_fmt(fmt) AUFS_NAME " %s:%d: " fmt, __func__, __LINE__
|
||||
+#include <linux/sched.h>
|
||||
+#undef pr_fmt
|
||||
+#define pr_fmt(fmt) AUFS_NAME " %s:%d:%s[%d]: " fmt, \
|
||||
+ __func__, __LINE__, current->comm, current->pid
|
||||
+#else
|
||||
+#include <stdint.h>
|
||||
+#include <sys/types.h>
|
||||
+#endif /* __KERNEL__ */
|
||||
+
|
||||
+#include <linux/limits.h>
|
||||
+
|
||||
+#define AUFS_VERSION "3.6-20121015"
|
||||
+
|
||||
+/* todo? move this to linux-2.6.19/include/magic.h */
|
||||
+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+#ifdef CONFIG_AUFS_BRANCH_MAX_127
|
||||
+typedef int8_t aufs_bindex_t;
|
||||
+#define AUFS_BRANCH_MAX 127
|
||||
+#else
|
||||
+typedef int16_t aufs_bindex_t;
|
||||
+#ifdef CONFIG_AUFS_BRANCH_MAX_511
|
||||
+#define AUFS_BRANCH_MAX 511
|
||||
+#elif defined(CONFIG_AUFS_BRANCH_MAX_1023)
|
||||
+#define AUFS_BRANCH_MAX 1023
|
||||
+#elif defined(CONFIG_AUFS_BRANCH_MAX_32767)
|
||||
+#define AUFS_BRANCH_MAX 32767
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+#ifdef __KERNEL__
|
||||
+#ifndef AUFS_BRANCH_MAX
|
||||
+#error unknown CONFIG_AUFS_BRANCH_MAX value
|
||||
+#endif
|
||||
+#endif /* __KERNEL__ */
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+#define AUFS_FSTYPE AUFS_NAME
|
||||
+
|
||||
+#define AUFS_ROOT_INO 2
|
||||
+#define AUFS_FIRST_INO 11
|
||||
+
|
||||
+#define AUFS_WH_PFX ".wh."
|
||||
+#define AUFS_WH_PFX_LEN ((int)sizeof(AUFS_WH_PFX) - 1)
|
||||
+#define AUFS_WH_TMP_LEN 4
|
||||
+/* a limit for rmdir/rename a dir */
|
||||
+#define AUFS_MAX_NAMELEN (NAME_MAX \
|
||||
+ - AUFS_WH_PFX_LEN * 2 /* doubly whiteouted */\
|
||||
+ - 1 /* dot */\
|
||||
+ - AUFS_WH_TMP_LEN) /* hex */
|
||||
+#define AUFS_XINO_FNAME "." AUFS_NAME ".xino"
|
||||
+#define AUFS_XINO_DEFPATH "/tmp/" AUFS_XINO_FNAME
|
||||
+#define AUFS_XINO_TRUNC_INIT 64 /* blocks */
|
||||
+#define AUFS_XINO_TRUNC_STEP 4 /* blocks */
|
||||
+#define AUFS_DIRWH_DEF 3
|
||||
+#define AUFS_RDCACHE_DEF 10 /* seconds */
|
||||
+#define AUFS_RDCACHE_MAX 3600 /* seconds */
|
||||
+#define AUFS_RDBLK_DEF 512 /* bytes */
|
||||
+#define AUFS_RDHASH_DEF 32
|
||||
+#define AUFS_WKQ_NAME AUFS_NAME "d"
|
||||
+#define AUFS_MFS_DEF_SEC 30 /* seconds */
|
||||
+#define AUFS_MFS_MAX_SEC 3600 /* seconds */
|
||||
+#define AUFS_PLINK_WARN 100 /* number of plinks */
|
||||
+
|
||||
+/* pseudo-link maintenace under /proc */
|
||||
+#define AUFS_PLINK_MAINT_NAME "plink_maint"
|
||||
+#define AUFS_PLINK_MAINT_DIR "fs/" AUFS_NAME
|
||||
+#define AUFS_PLINK_MAINT_PATH AUFS_PLINK_MAINT_DIR "/" AUFS_PLINK_MAINT_NAME
|
||||
+
|
||||
+#define AUFS_DIROPQ_NAME AUFS_WH_PFX ".opq" /* whiteouted doubly */
|
||||
+#define AUFS_WH_DIROPQ AUFS_WH_PFX AUFS_DIROPQ_NAME
|
||||
+
|
||||
+#define AUFS_BASE_NAME AUFS_WH_PFX AUFS_NAME
|
||||
+#define AUFS_PLINKDIR_NAME AUFS_WH_PFX "plnk"
|
||||
+#define AUFS_ORPHDIR_NAME AUFS_WH_PFX "orph"
|
||||
+
|
||||
+/* doubly whiteouted */
|
||||
+#define AUFS_WH_BASE AUFS_WH_PFX AUFS_BASE_NAME
|
||||
+#define AUFS_WH_PLINKDIR AUFS_WH_PFX AUFS_PLINKDIR_NAME
|
||||
+#define AUFS_WH_ORPHDIR AUFS_WH_PFX AUFS_ORPHDIR_NAME
|
||||
+
|
||||
+/* branch permissions and attributes */
|
||||
+#define AUFS_BRPERM_RW "rw"
|
||||
+#define AUFS_BRPERM_RO "ro"
|
||||
+#define AUFS_BRPERM_RR "rr"
|
||||
+#define AUFS_BRRATTR_WH "wh"
|
||||
+#define AUFS_BRWATTR_NLWH "nolwh"
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+/* ioctl */
|
||||
+enum {
|
||||
+ /* readdir in userspace */
|
||||
+ AuCtl_RDU,
|
||||
+ AuCtl_RDU_INO,
|
||||
+
|
||||
+ /* pathconf wrapper */
|
||||
+ AuCtl_WBR_FD,
|
||||
+
|
||||
+ /* busy inode */
|
||||
+ AuCtl_IBUSY
|
||||
+};
|
||||
+
|
||||
+/* borrowed from linux/include/linux/kernel.h */
|
||||
+#ifndef ALIGN
|
||||
+#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a)-1)
|
||||
+#define __ALIGN_MASK(x, mask) (((x)+(mask))&~(mask))
|
||||
+#endif
|
||||
+
|
||||
+/* borrowed from linux/include/linux/compiler-gcc3.h */
|
||||
+#ifndef __aligned
|
||||
+#define __aligned(x) __attribute__((aligned(x)))
|
||||
+#endif
|
||||
+
|
||||
+#ifdef __KERNEL__
|
||||
+#ifndef __packed
|
||||
+#define __packed __attribute__((packed))
|
||||
+#endif
|
||||
+#endif
|
||||
+
|
||||
+struct au_rdu_cookie {
|
||||
+ uint64_t h_pos;
|
||||
+ int16_t bindex;
|
||||
+ uint8_t flags;
|
||||
+ uint8_t pad;
|
||||
+ uint32_t generation;
|
||||
+} __aligned(8);
|
||||
+
|
||||
+struct au_rdu_ent {
|
||||
+ uint64_t ino;
|
||||
+ int16_t bindex;
|
||||
+ uint8_t type;
|
||||
+ uint8_t nlen;
|
||||
+ uint8_t wh;
|
||||
+ char name[0];
|
||||
+} __aligned(8);
|
||||
+
|
||||
+static inline int au_rdu_len(int nlen)
|
||||
+{
|
||||
+ /* include the terminating NULL */
|
||||
+ return ALIGN(sizeof(struct au_rdu_ent) + nlen + 1,
|
||||
+ sizeof(uint64_t));
|
||||
+}
|
||||
+
|
||||
+union au_rdu_ent_ul {
|
||||
+ struct au_rdu_ent __user *e;
|
||||
+ uint64_t ul;
|
||||
+};
|
||||
+
|
||||
+enum {
|
||||
+ AufsCtlRduV_SZ,
|
||||
+ AufsCtlRduV_End
|
||||
+};
|
||||
+
|
||||
+struct aufs_rdu {
|
||||
+ /* input */
|
||||
+ union {
|
||||
+ uint64_t sz; /* AuCtl_RDU */
|
||||
+ uint64_t nent; /* AuCtl_RDU_INO */
|
||||
+ };
|
||||
+ union au_rdu_ent_ul ent;
|
||||
+ uint16_t verify[AufsCtlRduV_End];
|
||||
+
|
||||
+ /* input/output */
|
||||
+ uint32_t blk;
|
||||
+
|
||||
+ /* output */
|
||||
+ union au_rdu_ent_ul tail;
|
||||
+ /* number of entries which were added in a single call */
|
||||
+ uint64_t rent;
|
||||
+ uint8_t full;
|
||||
+ uint8_t shwh;
|
||||
+
|
||||
+ struct au_rdu_cookie cookie;
|
||||
+} __aligned(8);
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+struct aufs_wbr_fd {
|
||||
+ uint32_t oflags;
|
||||
+ int16_t brid;
|
||||
+} __aligned(8);
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+struct aufs_ibusy {
|
||||
+ uint64_t ino, h_ino;
|
||||
+ int16_t bindex;
|
||||
+} __aligned(8);
|
||||
+
|
||||
+/* ---------------------------------------------------------------------- */
|
||||
+
|
||||
+#define AuCtlType 'A'
|
||||
+#define AUFS_CTL_RDU _IOWR(AuCtlType, AuCtl_RDU, struct aufs_rdu)
|
||||
+#define AUFS_CTL_RDU_INO _IOWR(AuCtlType, AuCtl_RDU_INO, struct aufs_rdu)
|
||||
+#define AUFS_CTL_WBR_FD _IOW(AuCtlType, AuCtl_WBR_FD, \
|
||||
+ struct aufs_wbr_fd)
|
||||
+#define AUFS_CTL_IBUSY _IOWR(AuCtlType, AuCtl_IBUSY, struct aufs_ibusy)
|
||||
+
|
||||
+#endif /* __AUFS_TYPE_H__ */
|
||||
+#include <uapi/linux/aufs_type.h>
|
||||
|
|
|
@ -1,7 +1,20 @@
|
|||
aufs3.6 base patch
|
||||
aufs3.x-rcN base patch
|
||||
|
||||
diff --git a/fs/file_table.c b/fs/file_table.c
|
||||
index a72bf9d..dac6792 100644
|
||||
--- a/fs/file_table.c
|
||||
+++ b/fs/file_table.c
|
||||
@@ -36,7 +36,7 @@ struct files_stat_struct files_stat = {
|
||||
.max_files = NR_FILE
|
||||
};
|
||||
|
||||
-DEFINE_STATIC_LGLOCK(files_lglock);
|
||||
+DEFINE_LGLOCK(files_lglock);
|
||||
|
||||
/* SLAB cache for file structures */
|
||||
static struct kmem_cache *filp_cachep __read_mostly;
|
||||
diff --git a/fs/inode.c b/fs/inode.c
|
||||
index ac8d904..7b2c8fa 100644
|
||||
index b03c719..ee497f9 100644
|
||||
--- a/fs/inode.c
|
||||
+++ b/fs/inode.c
|
||||
@@ -1491,7 +1491,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode,
|
||||
|
@ -14,7 +27,7 @@ index ac8d904..7b2c8fa 100644
|
|||
if (inode->i_op->update_time)
|
||||
return inode->i_op->update_time(inode, time, flags);
|
||||
diff --git a/fs/splice.c b/fs/splice.c
|
||||
index 41514dd..663b402 100644
|
||||
index 13e5b47..f185c6c 100644
|
||||
--- a/fs/splice.c
|
||||
+++ b/fs/splice.c
|
||||
@@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
|
||||
|
@ -42,10 +55,10 @@ index 41514dd..663b402 100644
|
|||
ssize_t (*splice_read)(struct file *, loff_t *,
|
||||
struct pipe_inode_info *, size_t, unsigned int);
|
||||
diff --git a/include/linux/fs.h b/include/linux/fs.h
|
||||
index aa11047..9116d2e 100644
|
||||
index b33cfc9..963a61b 100644
|
||||
--- a/include/linux/fs.h
|
||||
+++ b/include/linux/fs.h
|
||||
@@ -2741,6 +2741,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
|
||||
@@ -2558,6 +2558,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *);
|
||||
extern int inode_newsize_ok(const struct inode *, loff_t offset);
|
||||
extern void setattr_copy(struct inode *inode, const struct iattr *attr);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
aufs3.6 kbuild patch
|
||||
aufs3.x-rcN kbuild patch
|
||||
|
||||
diff --git a/fs/Kconfig b/fs/Kconfig
|
||||
index f95ae3a..6d8a9a5 100644
|
||||
|
@ -13,23 +13,11 @@ index f95ae3a..6d8a9a5 100644
|
|||
endif # MISC_FILESYSTEMS
|
||||
|
||||
diff --git a/fs/Makefile b/fs/Makefile
|
||||
index 2fb9779..abefac5 100644
|
||||
index 1d7af79..06db6eb 100644
|
||||
--- a/fs/Makefile
|
||||
+++ b/fs/Makefile
|
||||
@@ -125,3 +125,4 @@ obj-$(CONFIG_GFS2_FS) += gfs2/
|
||||
@@ -126,3 +126,4 @@ obj-$(CONFIG_GFS2_FS) += gfs2/
|
||||
obj-y += exofs/ # Multiple modules
|
||||
obj-$(CONFIG_CEPH_FS) += ceph/
|
||||
obj-$(CONFIG_PSTORE) += pstore/
|
||||
+obj-$(CONFIG_AUFS_FS) += aufs/
|
||||
diff --git a/include/linux/Kbuild b/include/linux/Kbuild
|
||||
index fa21760..ee029e3 100644
|
||||
--- a/include/linux/Kbuild
|
||||
+++ b/include/linux/Kbuild
|
||||
@@ -66,6 +66,7 @@ header-y += atmppp.h
|
||||
header-y += atmsap.h
|
||||
header-y += atmsvc.h
|
||||
header-y += audit.h
|
||||
+header-y += aufs_type.h
|
||||
header-y += auto_fs.h
|
||||
header-y += auto_fs4.h
|
||||
header-y += auxvec.h
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
aufs3.6 standalone patch
|
||||
aufs3.x-rcN standalone patch
|
||||
|
||||
diff --git a/fs/file_table.c b/fs/file_table.c
|
||||
index 701985e..a9fe741 100644
|
||||
index dac6792..e3f2c15 100644
|
||||
--- a/fs/file_table.c
|
||||
+++ b/fs/file_table.c
|
||||
@@ -37,6 +37,7 @@ struct files_stat_struct files_stat = {
|
||||
|
@ -12,7 +12,7 @@ index 701985e..a9fe741 100644
|
|||
|
||||
/* SLAB cache for file structures */
|
||||
static struct kmem_cache *filp_cachep __read_mostly;
|
||||
@@ -509,6 +510,8 @@ void file_sb_list_del(struct file *file)
|
||||
@@ -403,6 +404,8 @@ void file_sb_list_del(struct file *file)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -22,7 +22,7 @@ index 701985e..a9fe741 100644
|
|||
|
||||
/*
|
||||
diff --git a/fs/inode.c b/fs/inode.c
|
||||
index 7b2c8fa..0c4318d 100644
|
||||
index ee497f9..5e7eee7 100644
|
||||
--- a/fs/inode.c
|
||||
+++ b/fs/inode.c
|
||||
@@ -56,6 +56,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
|
||||
|
@ -42,7 +42,7 @@ index 7b2c8fa..0c4318d 100644
|
|||
/**
|
||||
* touch_atime - update the access time
|
||||
diff --git a/fs/namespace.c b/fs/namespace.c
|
||||
index 7bdf790..5b85c4c 100644
|
||||
index 2496062..3e66a90 100644
|
||||
--- a/fs/namespace.c
|
||||
+++ b/fs/namespace.c
|
||||
@@ -50,6 +50,7 @@ EXPORT_SYMBOL_GPL(fs_kobj);
|
||||
|
@ -123,7 +123,7 @@ index f104d56..54f36db 100644
|
|||
static int fsnotify_mark_destroy(void *ignored)
|
||||
{
|
||||
diff --git a/fs/open.c b/fs/open.c
|
||||
index e1f2cdb..2804cd6 100644
|
||||
index 59071f5..7e4c856 100644
|
||||
--- a/fs/open.c
|
||||
+++ b/fs/open.c
|
||||
@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
|
||||
|
@ -135,7 +135,7 @@ index e1f2cdb..2804cd6 100644
|
|||
static long do_sys_truncate(const char __user *pathname, loff_t length)
|
||||
{
|
||||
diff --git a/fs/splice.c b/fs/splice.c
|
||||
index 663b402..51e1deb 100644
|
||||
index f185c6c..f3d89da 100644
|
||||
--- a/fs/splice.c
|
||||
+++ b/fs/splice.c
|
||||
@@ -1117,6 +1117,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
|
||||
|
@ -171,7 +171,7 @@ index 6dbae46..9f4f29a 100644
|
|||
}
|
||||
+EXPORT_SYMBOL_GPL(cap_mmap_file);
|
||||
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
|
||||
index 442204c..e644a1c 100644
|
||||
index b08d20c..a90420b 100644
|
||||
--- a/security/device_cgroup.c
|
||||
+++ b/security/device_cgroup.c
|
||||
@@ -7,6 +7,7 @@
|
||||
|
@ -182,19 +182,19 @@ index 442204c..e644a1c 100644
|
|||
#include <linux/list.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/seq_file.h>
|
||||
@@ -493,6 +494,7 @@ found:
|
||||
|
||||
return -EPERM;
|
||||
@@ -617,6 +618,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask)
|
||||
return __devcgroup_check_permission(type, imajor(inode), iminor(inode),
|
||||
access);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(__devcgroup_inode_permission);
|
||||
|
||||
int devcgroup_inode_mknod(int mode, dev_t dev)
|
||||
{
|
||||
diff --git a/security/security.c b/security/security.c
|
||||
index 860aeb3..ffb57bf 100644
|
||||
index 8dcd4ae..6efe561 100644
|
||||
--- a/security/security.c
|
||||
+++ b/security/security.c
|
||||
@@ -384,6 +384,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
|
||||
@@ -396,6 +396,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
|
||||
return 0;
|
||||
return security_ops->path_rmdir(dir, dentry);
|
||||
}
|
||||
|
@ -202,7 +202,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_path_unlink(struct path *dir, struct dentry *dentry)
|
||||
{
|
||||
@@ -400,6 +401,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
|
||||
@@ -412,6 +413,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
|
||||
return 0;
|
||||
return security_ops->path_symlink(dir, dentry, old_name);
|
||||
}
|
||||
|
@ -210,7 +210,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||
struct dentry *new_dentry)
|
||||
@@ -408,6 +410,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||
@@ -420,6 +422,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
|
||||
return 0;
|
||||
return security_ops->path_link(old_dentry, new_dir, new_dentry);
|
||||
}
|
||||
|
@ -218,7 +218,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
|
||||
struct path *new_dir, struct dentry *new_dentry)
|
||||
@@ -426,6 +429,7 @@ int security_path_truncate(struct path *path)
|
||||
@@ -438,6 +441,7 @@ int security_path_truncate(struct path *path)
|
||||
return 0;
|
||||
return security_ops->path_truncate(path);
|
||||
}
|
||||
|
@ -226,15 +226,15 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_path_chmod(struct path *path, umode_t mode)
|
||||
{
|
||||
@@ -433,6 +437,7 @@ int security_path_chmod(struct path *path, umode_t mode)
|
||||
@@ -445,6 +449,7 @@ int security_path_chmod(struct path *path, umode_t mode)
|
||||
return 0;
|
||||
return security_ops->path_chmod(path, mode);
|
||||
}
|
||||
+EXPORT_SYMBOL_GPL(security_path_chmod);
|
||||
|
||||
int security_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||
int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
|
||||
{
|
||||
@@ -440,6 +445,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
|
||||
@@ -452,6 +457,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
|
||||
return 0;
|
||||
return security_ops->path_chown(path, uid, gid);
|
||||
}
|
||||
|
@ -242,7 +242,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_path_chroot(struct path *path)
|
||||
{
|
||||
@@ -516,6 +522,7 @@ int security_inode_readlink(struct dentry *dentry)
|
||||
@@ -528,6 +534,7 @@ int security_inode_readlink(struct dentry *dentry)
|
||||
return 0;
|
||||
return security_ops->inode_readlink(dentry);
|
||||
}
|
||||
|
@ -250,7 +250,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
|
||||
{
|
||||
@@ -530,6 +537,7 @@ int security_inode_permission(struct inode *inode, int mask)
|
||||
@@ -542,6 +549,7 @@ int security_inode_permission(struct inode *inode, int mask)
|
||||
return 0;
|
||||
return security_ops->inode_permission(inode, mask);
|
||||
}
|
||||
|
@ -258,7 +258,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
{
|
||||
@@ -645,6 +653,7 @@ int security_file_permission(struct file *file, int mask)
|
||||
@@ -663,6 +671,7 @@ int security_file_permission(struct file *file, int mask)
|
||||
|
||||
return fsnotify_perm(file, mask);
|
||||
}
|
||||
|
@ -266,7 +266,7 @@ index 860aeb3..ffb57bf 100644
|
|||
|
||||
int security_file_alloc(struct file *file)
|
||||
{
|
||||
@@ -705,6 +714,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
|
||||
@@ -723,6 +732,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
|
||||
return ret;
|
||||
return ima_file_mmap(file, prot);
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
|
||||
--- a/Documentation/kernel-parameters.txt
|
||||
+++ b/Documentation/kernel-parameters.txt
|
||||
@@ -455,8 +455,8 @@
|
||||
@@ -455,8 +455,8 @@ bytes respectively. Such letter suffixes
|
||||
ccw_timeout_log [S390]
|
||||
See Documentation/s390/CommonIO for details.
|
||||
|
||||
|
@ -32,7 +32,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
checkreqprot [SELINUX] Set initial checkreqprot flag value.
|
||||
--- a/init/Kconfig
|
||||
+++ b/init/Kconfig
|
||||
@@ -709,6 +709,14 @@
|
||||
@@ -784,6 +784,14 @@ config MEMCG
|
||||
This config option also selects MM_OWNER config option, which
|
||||
could in turn add some fork/exit overhead.
|
||||
|
||||
|
@ -49,7 +49,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
depends on MEMCG && SWAP
|
||||
--- a/kernel/cgroup.c
|
||||
+++ b/kernel/cgroup.c
|
||||
@@ -5029,7 +5029,7 @@
|
||||
@@ -5132,7 +5132,7 @@ static void cgroup_release_agent(struct
|
||||
mutex_unlock(&cgroup_mutex);
|
||||
}
|
||||
|
||||
|
@ -58,8 +58,8 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
{
|
||||
int i;
|
||||
char *token;
|
||||
@@ -5045,17 +5045,29 @@
|
||||
struct cgroup_subsys *ss = subsys[i];
|
||||
@@ -5152,17 +5152,29 @@ static int __init cgroup_disable(char *s
|
||||
continue;
|
||||
|
||||
if (!strcmp(token, ss->name)) {
|
||||
- ss->disabled = 1;
|
||||
|
@ -93,7 +93,7 @@ Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
|
|||
*/
|
||||
--- a/mm/memcontrol.c
|
||||
+++ b/mm/memcontrol.c
|
||||
@@ -5596,6 +5596,9 @@
|
||||
@@ -5630,6 +5630,9 @@ static void mem_cgroup_move_task(struct
|
||||
|
||||
struct cgroup_subsys mem_cgroup_subsys = {
|
||||
.name = "memory",
|
||||
|
|
|
@ -11,26 +11,22 @@ a version of the script which is directly derived from the driver.
|
|||
drivers/media/dvb/dvb-usb/af9005-fe.c | 66 ++++++++++++++++++++++++++------
|
||||
2 files changed, 54 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig
|
||||
index 868e1cb..1c3d56d 100644
|
||||
--- a/drivers/media/dvb/dvb-usb/Kconfig
|
||||
+++ b/drivers/media/dvb/dvb-usb/Kconfig
|
||||
@@ -238,10 +238,10 @@ config DVB_USB_OPERA1
|
||||
--- a/drivers/media/usb/dvb-usb/Kconfig
|
||||
+++ b/drivers/media/usb/dvb-usb/Kconfig
|
||||
@@ -227,10 +227,10 @@ config DVB_USB_OPERA1
|
||||
|
||||
config DVB_USB_AF9005
|
||||
tristate "Afatech AF9005 DVB-T USB1.1 support"
|
||||
- depends on BROKEN
|
||||
depends on DVB_USB && EXPERIMENTAL
|
||||
select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
|
||||
select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
|
||||
depends on DVB_USB
|
||||
select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
|
||||
select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
|
||||
+ select FW_LOADER
|
||||
help
|
||||
Say Y here to support the Afatech AF9005 based DVB-T USB1.1 receiver
|
||||
and the TerraTec Cinergy T USB XE (Rev.1)
|
||||
diff --git a/drivers/media/dvb/dvb-usb/af9005-fe.c b/drivers/media/dvb/dvb-usb/af9005-fe.c
|
||||
index 199ece0..bcc26c8 100644
|
||||
--- a/drivers/media/dvb/dvb-usb/af9005-fe.c
|
||||
+++ b/drivers/media/dvb/dvb-usb/af9005-fe.c
|
||||
--- a/drivers/media/usb/dvb-usb/af9005-fe.c
|
||||
+++ b/drivers/media/usb/dvb-usb/af9005-fe.c
|
||||
@@ -22,10 +22,26 @@
|
||||
* see Documentation/dvb/README.dvb-usb for more information
|
||||
*/
|
||||
|
@ -59,7 +55,7 @@ index 199ece0..bcc26c8 100644
|
|||
|
||||
struct af9005_fe_state {
|
||||
struct dvb_usb_device *d;
|
||||
@@ -818,6 +834,8 @@ static int af9005_fe_init(struct dvb_frontend *fe)
|
||||
@@ -816,6 +832,8 @@ static int af9005_fe_init(struct dvb_fro
|
||||
{
|
||||
struct af9005_fe_state *state = fe->demodulator_priv;
|
||||
struct dvb_usb_adapter *adap = fe->dvb->priv;
|
||||
|
@ -68,7 +64,7 @@ index 199ece0..bcc26c8 100644
|
|||
int ret, i, scriptlen;
|
||||
u8 temp, temp0 = 0, temp1 = 0, temp2 = 0;
|
||||
u8 buf[2];
|
||||
@@ -969,37 +987,55 @@ static int af9005_fe_init(struct dvb_frontend *fe)
|
||||
@@ -968,37 +986,55 @@ static int af9005_fe_init(struct dvb_fro
|
||||
if ((ret = af9005_write_ofdm_register(state->d, 0xaefb, 0x01)))
|
||||
return ret;
|
||||
|
||||
|
@ -136,7 +132,7 @@ index 199ece0..bcc26c8 100644
|
|||
|
||||
/* save original TOPs */
|
||||
deb_info("save original TOPs\n");
|
||||
@@ -1079,6 +1115,10 @@ static int af9005_fe_init(struct dvb_frontend *fe)
|
||||
@@ -1078,6 +1114,10 @@ static int af9005_fe_init(struct dvb_fro
|
||||
|
||||
deb_info("profit!\n");
|
||||
return 0;
|
||||
|
@ -147,6 +143,3 @@ index 199ece0..bcc26c8 100644
|
|||
}
|
||||
|
||||
static int af9005_fe_sleep(struct dvb_frontend *fe)
|
||||
--
|
||||
1.6.3.3
|
||||
|
||||
|
|
|
@ -38,22 +38,14 @@ bugfix/ia64/nouveau-ACPI-support-is-dependent-on-X86.patch
|
|||
bugfix/arm/ixp4xx_iobe.patch
|
||||
debian/x86-memtest-WARN-if-bad-RAM-found.patch
|
||||
|
||||
bugfix/ia64/IA64-Export-asm-cmpxchg.h-to-userland.patch
|
||||
features/all/cpu-devices/Partially-revert-cpufreq-Add-support-for-x86-cpuinfo.patch
|
||||
|
||||
debian/debugfs-set-default-mode-to-700.patch
|
||||
|
||||
bugfix/alpha/alpha-use-large-data-model.diff
|
||||
bugfix/all/speakup-lower-default-software-speech-rate.patch
|
||||
debian/iwlwifi-do-not-request-unreleased-firmware.patch
|
||||
debian/cirrus-disable-modeset-by-default.patch
|
||||
debian/fs-enable-link-security-restrictions-by-default.patch
|
||||
bugfix/all/hid-add-apple-wireless-keyboard-2011-ansi-to-special-driver-list.patch
|
||||
bugfix/arm/ARM-7492-1-add-strstr-declaration-for-decompressors.patch
|
||||
bugfix/arm/lis3l02dq-fix-building-without-irq-to-gpio.patch
|
||||
bugfix/arm/0001-usb-phy-add-a-new-driver-for-omap-usb2-phy.patch
|
||||
bugfix/arm/0001-usb-otg-make-twl6030_usb-as-a-comparator-driver-to-o.patch
|
||||
bugfix/arm/0001-usb-otg-Fix-build-errors-if-USB_MUSB_OMAP2PLUS-is-se.patch
|
||||
bugfix/arm/omap-musb-choice.patch
|
||||
bugfix/x86/asus-laptop-Do-not-call-HWRS-on-init.patch
|
||||
|
||||
|
|
Loading…
Reference in New Issue