Linux 3.4.2
This commit is contained in:
parent
c701cb2c67
commit
14735d3577
|
@ -1,37 +0,0 @@
|
|||
From a9e1e167d934aa74f48008393ade4f09fc587432 Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Thu, 12 Apr 2012 13:55:36 -0400
|
||||
Subject: [PATCH] ALSA: hda/realtek - Add quirk for Mac Pro 5,1 machines
|
||||
|
||||
A user reported that setting model=imac24 used to allow sound to work on their
|
||||
Mac Pro 5,1 machine. Commit 5671087ffa "Move ALC885 macpro and imac24 models
|
||||
to auto-parser" removed this model option. All Mac machines are now explicitly
|
||||
handled with a quirk and the auto-parser. This adds a quirk for the device
|
||||
found on the Mac Pro 5,1 machines.
|
||||
|
||||
This (partially) fixes https://bugzilla.redhat.com/show_bug.cgi?id=808559
|
||||
|
||||
[sorted the new entry in the ID number order by tiwai]
|
||||
|
||||
Reported-by: Gabriel Somlo <somlo@cmu.edu>
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
||||
---
|
||||
sound/pci/hda/patch_realtek.c | 1 +
|
||||
1 files changed, 1 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
|
||||
index 22c73b7..bd34b51 100644
|
||||
--- a/sound/pci/hda/patch_realtek.c
|
||||
+++ b/sound/pci/hda/patch_realtek.c
|
||||
@@ -4659,6 +4659,7 @@ static const struct snd_pci_quirk alc882_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x106b, 0x2800, "AppleTV", ALC885_FIXUP_MACPRO_GPIO),
|
||||
SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
|
||||
SND_PCI_QUIRK(0x106b, 0x3e00, "iMac 24 Aluminum", ALC885_FIXUP_MACPRO_GPIO),
|
||||
+ SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 5,1", ALC885_FIXUP_MACPRO_GPIO),
|
||||
|
||||
SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC882_FIXUP_EAPD),
|
||||
SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3),
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -1,153 +0,0 @@
|
|||
From: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
||||
Currently, we will correctly optimise away a truncate that doesn't
|
||||
change the file size. However, in the case of open(O_TRUNC), we
|
||||
also want to optimise away the time changes.
|
||||
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
fs/nfs/dir.c | 25 +++++++++++++++++++------
|
||||
fs/nfs/inode.c | 4 ++--
|
||||
fs/nfs/nfs4proc.c | 10 +++++++---
|
||||
3 files changed, 28 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
|
||||
index fd9a872..bb132a8 100644
|
||||
--- a/fs/nfs/dir.c
|
||||
+++ b/fs/nfs/dir.c
|
||||
@@ -1429,6 +1429,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
|
||||
}
|
||||
|
||||
open_flags = nd->intent.open.flags;
|
||||
+ attr.ia_valid = 0;
|
||||
|
||||
ctx = create_nfs_open_context(dentry, open_flags);
|
||||
res = ERR_CAST(ctx);
|
||||
@@ -1437,11 +1438,14 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
|
||||
|
||||
if (nd->flags & LOOKUP_CREATE) {
|
||||
attr.ia_mode = nd->intent.open.create_mode;
|
||||
- attr.ia_valid = ATTR_MODE;
|
||||
+ attr.ia_valid |= ATTR_MODE;
|
||||
attr.ia_mode &= ~current_umask();
|
||||
- } else {
|
||||
+ } else
|
||||
open_flags &= ~(O_EXCL | O_CREAT);
|
||||
- attr.ia_valid = 0;
|
||||
+
|
||||
+ if (open_flags & O_TRUNC) {
|
||||
+ attr.ia_valid |= ATTR_SIZE;
|
||||
+ attr.ia_size = 0;
|
||||
}
|
||||
|
||||
/* Open the file on the server */
|
||||
@@ -1495,6 +1499,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
|
||||
struct inode *inode;
|
||||
struct inode *dir;
|
||||
struct nfs_open_context *ctx;
|
||||
+ struct iattr attr;
|
||||
int openflags, ret = 0;
|
||||
|
||||
if (nd->flags & LOOKUP_RCU)
|
||||
@@ -1523,19 +1528,27 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
|
||||
/* We cannot do exclusive creation on a positive dentry */
|
||||
if ((openflags & (O_CREAT|O_EXCL)) == (O_CREAT|O_EXCL))
|
||||
goto no_open_dput;
|
||||
- /* We can't create new files, or truncate existing ones here */
|
||||
- openflags &= ~(O_CREAT|O_EXCL|O_TRUNC);
|
||||
+ /* We can't create new files here */
|
||||
+ openflags &= ~(O_CREAT|O_EXCL);
|
||||
|
||||
ctx = create_nfs_open_context(dentry, openflags);
|
||||
ret = PTR_ERR(ctx);
|
||||
if (IS_ERR(ctx))
|
||||
goto out;
|
||||
+
|
||||
+ attr.ia_valid = 0;
|
||||
+ if (openflags & O_TRUNC) {
|
||||
+ attr.ia_valid |= ATTR_SIZE;
|
||||
+ attr.ia_size = 0;
|
||||
+ nfs_wb_all(inode);
|
||||
+ }
|
||||
+
|
||||
/*
|
||||
* Note: we're not holding inode->i_mutex and so may be racing with
|
||||
* operations that change the directory. We therefore save the
|
||||
* change attribute *before* we do the RPC call.
|
||||
*/
|
||||
- inode = NFS_PROTO(dir)->open_context(dir, ctx, openflags, NULL);
|
||||
+ inode = NFS_PROTO(dir)->open_context(dir, ctx, openflags, &attr);
|
||||
if (IS_ERR(inode)) {
|
||||
ret = PTR_ERR(inode);
|
||||
switch (ret) {
|
||||
diff --git a/fs/nfs/inode.c b/fs/nfs/inode.c
|
||||
index f649fba..57d0abb 100644
|
||||
--- a/fs/nfs/inode.c
|
||||
+++ b/fs/nfs/inode.c
|
||||
@@ -401,7 +401,7 @@ out_no_inode:
|
||||
goto out;
|
||||
}
|
||||
|
||||
-#define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE)
|
||||
+#define NFS_VALID_ATTRS (ATTR_MODE|ATTR_UID|ATTR_GID|ATTR_SIZE|ATTR_ATIME|ATTR_ATIME_SET|ATTR_MTIME|ATTR_MTIME_SET|ATTR_FILE|ATTR_OPEN)
|
||||
|
||||
int
|
||||
nfs_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
@@ -423,7 +423,7 @@ nfs_setattr(struct dentry *dentry, struct iattr *attr)
|
||||
|
||||
/* Optimization: if the end result is no change, don't RPC */
|
||||
attr->ia_valid &= NFS_VALID_ATTRS;
|
||||
- if ((attr->ia_valid & ~ATTR_FILE) == 0)
|
||||
+ if ((attr->ia_valid & ~(ATTR_FILE|ATTR_OPEN)) == 0)
|
||||
return 0;
|
||||
|
||||
/* Write all dirty data */
|
||||
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
|
||||
index 1515e45..c4c6b48 100644
|
||||
--- a/fs/nfs/nfs4proc.c
|
||||
+++ b/fs/nfs/nfs4proc.c
|
||||
@@ -833,7 +833,7 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
|
||||
p->o_arg.bitmask = server->attr_bitmask;
|
||||
p->o_arg.dir_bitmask = server->cache_consistency_bitmask;
|
||||
p->o_arg.claim = NFS4_OPEN_CLAIM_NULL;
|
||||
- if (flags & O_CREAT) {
|
||||
+ if (attrs != NULL && attrs->ia_valid != 0) {
|
||||
u32 *s;
|
||||
|
||||
p->o_arg.u.attrs = &p->attrs;
|
||||
@@ -890,7 +890,7 @@ static int can_open_cached(struct nfs4_state *state, fmode_t mode, int open_mode
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
- if (open_mode & O_EXCL)
|
||||
+ if (open_mode & (O_EXCL|O_TRUNC))
|
||||
goto out;
|
||||
switch (mode & (FMODE_READ|FMODE_WRITE)) {
|
||||
case FMODE_READ:
|
||||
@@ -1038,7 +1038,7 @@ static struct nfs4_state *nfs4_try_open_cached(struct nfs4_opendata *opendata)
|
||||
struct nfs4_state *state = opendata->state;
|
||||
struct nfs_inode *nfsi = NFS_I(state->inode);
|
||||
struct nfs_delegation *delegation;
|
||||
- int open_mode = opendata->o_arg.open_flags & O_EXCL;
|
||||
+ int open_mode = opendata->o_arg.open_flags & (O_EXCL|O_TRUNC);
|
||||
fmode_t fmode = opendata->o_arg.fmode;
|
||||
nfs4_stateid stateid;
|
||||
int ret = -EAGAIN;
|
||||
@@ -2439,6 +2439,10 @@ nfs4_proc_setattr(struct dentry *dentry, struct nfs_fattr *fattr,
|
||||
}
|
||||
}
|
||||
|
||||
+ /* Deal with open(O_TRUNC) */
|
||||
+ if (sattr->ia_valid & ATTR_OPEN)
|
||||
+ sattr->ia_valid &= ~(ATTR_MTIME|ATTR_CTIME|ATTR_OPEN);
|
||||
+
|
||||
status = nfs4_do_setattr(inode, cred, fattr, sattr, state);
|
||||
if (status == 0)
|
||||
nfs_setattr_update_inode(inode, sattr);
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
_______________________________________________
|
||||
kernel mailing list
|
||||
kernel@lists.fedoraproject.org
|
||||
https://admin.fedoraproject.org/mailman/listinfo/kernel
|
|
@ -1,109 +0,0 @@
|
|||
diff -up linux-3.2.noarch/fs/nfs/idmap.c.orig linux-3.2.noarch/fs/nfs/idmap.c
|
||||
--- linux-3.2.noarch/fs/nfs/idmap.c.orig 2012-03-14 13:08:37.462928792 -0400
|
||||
+++ linux-3.2.noarch/fs/nfs/idmap.c 2012-03-14 13:10:17.076030982 -0400
|
||||
@@ -365,7 +365,7 @@ struct idmap_hashent {
|
||||
|
||||
struct idmap_hashtable {
|
||||
__u8 h_type;
|
||||
- struct idmap_hashent h_entries[IDMAP_HASH_SZ];
|
||||
+ struct idmap_hashent *h_entries;
|
||||
};
|
||||
|
||||
struct idmap {
|
||||
@@ -420,20 +420,39 @@ nfs_idmap_new(struct nfs_client *clp)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static void
|
||||
+idmap_alloc_hashtable(struct idmap_hashtable *h)
|
||||
+{
|
||||
+ if (h->h_entries != NULL)
|
||||
+ return;
|
||||
+ h->h_entries = kcalloc(IDMAP_HASH_SZ,
|
||||
+ sizeof(*h->h_entries),
|
||||
+ GFP_KERNEL);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+idmap_free_hashtable(struct idmap_hashtable *h)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if (h->h_entries == NULL)
|
||||
+ return;
|
||||
+ for (i = 0; i < IDMAP_HASH_SZ; i++)
|
||||
+ kfree(h->h_entries[i].ih_name);
|
||||
+ kfree(h->h_entries);
|
||||
+}
|
||||
+
|
||||
void
|
||||
nfs_idmap_delete(struct nfs_client *clp)
|
||||
{
|
||||
struct idmap *idmap = clp->cl_idmap;
|
||||
- int i;
|
||||
|
||||
if (!idmap)
|
||||
return;
|
||||
rpc_unlink(idmap->idmap_dentry);
|
||||
clp->cl_idmap = NULL;
|
||||
- for (i = 0; i < ARRAY_SIZE(idmap->idmap_user_hash.h_entries); i++)
|
||||
- kfree(idmap->idmap_user_hash.h_entries[i].ih_name);
|
||||
- for (i = 0; i < ARRAY_SIZE(idmap->idmap_group_hash.h_entries); i++)
|
||||
- kfree(idmap->idmap_group_hash.h_entries[i].ih_name);
|
||||
+ idmap_free_hashtable(&idmap->idmap_user_hash);
|
||||
+ idmap_free_hashtable(&idmap->idmap_group_hash);
|
||||
kfree(idmap);
|
||||
}
|
||||
|
||||
@@ -443,6 +462,8 @@ nfs_idmap_delete(struct nfs_client *clp)
|
||||
static inline struct idmap_hashent *
|
||||
idmap_name_hash(struct idmap_hashtable* h, const char *name, size_t len)
|
||||
{
|
||||
+ if (h->h_entries == NULL)
|
||||
+ return NULL;
|
||||
return &h->h_entries[fnvhash32(name, len) % IDMAP_HASH_SZ];
|
||||
}
|
||||
|
||||
@@ -451,6 +472,8 @@ idmap_lookup_name(struct idmap_hashtable
|
||||
{
|
||||
struct idmap_hashent *he = idmap_name_hash(h, name, len);
|
||||
|
||||
+ if (he == NULL)
|
||||
+ return NULL;
|
||||
if (he->ih_namelen != len || memcmp(he->ih_name, name, len) != 0)
|
||||
return NULL;
|
||||
if (time_after(jiffies, he->ih_expires))
|
||||
@@ -461,6 +484,8 @@ idmap_lookup_name(struct idmap_hashtable
|
||||
static inline struct idmap_hashent *
|
||||
idmap_id_hash(struct idmap_hashtable* h, __u32 id)
|
||||
{
|
||||
+ if (h->h_entries == NULL)
|
||||
+ return NULL;
|
||||
return &h->h_entries[fnvhash32(&id, sizeof(id)) % IDMAP_HASH_SZ];
|
||||
}
|
||||
|
||||
@@ -468,6 +493,9 @@ static struct idmap_hashent *
|
||||
idmap_lookup_id(struct idmap_hashtable *h, __u32 id)
|
||||
{
|
||||
struct idmap_hashent *he = idmap_id_hash(h, id);
|
||||
+
|
||||
+ if (he == NULL)
|
||||
+ return NULL;
|
||||
if (he->ih_id != id || he->ih_namelen == 0)
|
||||
return NULL;
|
||||
if (time_after(jiffies, he->ih_expires))
|
||||
@@ -483,12 +511,14 @@ idmap_lookup_id(struct idmap_hashtable *
|
||||
static inline struct idmap_hashent *
|
||||
idmap_alloc_name(struct idmap_hashtable *h, char *name, size_t len)
|
||||
{
|
||||
+ idmap_alloc_hashtable(h);
|
||||
return idmap_name_hash(h, name, len);
|
||||
}
|
||||
|
||||
static inline struct idmap_hashent *
|
||||
idmap_alloc_id(struct idmap_hashtable *h, __u32 id)
|
||||
{
|
||||
+ idmap_alloc_hashtable(h);
|
||||
return idmap_id_hash(h, id);
|
||||
}
|
||||
|
|
@ -1,51 +0,0 @@
|
|||
From 14977489ffdb80d4caf5a184ba41b23b02fbacd9 Mon Sep 17 00:00:00 2001
|
||||
From: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
Date: Tue, 27 Mar 2012 18:31:25 -0400
|
||||
Subject: [PATCH] NFSv4: Minor cleanups for nfs4_handle_exception and
|
||||
nfs4_async_handle_error
|
||||
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
---
|
||||
fs/nfs/nfs4proc.c | 10 +++++-----
|
||||
1 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
|
||||
index 1933e67..f82bde0 100644
|
||||
--- a/fs/nfs/nfs4proc.c
|
||||
+++ b/fs/nfs/nfs4proc.c
|
||||
@@ -270,7 +270,7 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc
|
||||
case 0:
|
||||
return 0;
|
||||
case -NFS4ERR_OPENMODE:
|
||||
- if (nfs_have_delegation(inode, FMODE_READ)) {
|
||||
+ if (inode && nfs_have_delegation(inode, FMODE_READ)) {
|
||||
nfs_inode_return_delegation(inode);
|
||||
exception->retry = 1;
|
||||
return 0;
|
||||
@@ -282,10 +282,9 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc
|
||||
case -NFS4ERR_DELEG_REVOKED:
|
||||
case -NFS4ERR_ADMIN_REVOKED:
|
||||
case -NFS4ERR_BAD_STATEID:
|
||||
- if (state != NULL)
|
||||
- nfs_remove_bad_delegation(state->inode);
|
||||
if (state == NULL)
|
||||
break;
|
||||
+ nfs_remove_bad_delegation(state->inode);
|
||||
nfs4_schedule_stateid_recovery(server, state);
|
||||
goto wait_on_recovery;
|
||||
case -NFS4ERR_EXPIRED:
|
||||
@@ -3825,8 +3824,9 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server,
|
||||
case -NFS4ERR_DELEG_REVOKED:
|
||||
case -NFS4ERR_ADMIN_REVOKED:
|
||||
case -NFS4ERR_BAD_STATEID:
|
||||
- if (state != NULL)
|
||||
- nfs_remove_bad_delegation(state->inode);
|
||||
+ if (state == NULL)
|
||||
+ break;
|
||||
+ nfs_remove_bad_delegation(state->inode);
|
||||
case -NFS4ERR_OPENMODE:
|
||||
if (state == NULL)
|
||||
break;
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From 34d91cfbc163c6e2a136a27c96918fc35de06341 Mon Sep 17 00:00:00 2001
|
||||
From: William Dauchy <wdauchy@gmail.com>
|
||||
Date: Wed, 14 Mar 2012 12:32:04 +0100
|
||||
Subject: [PATCH] NFSv4: Rate limit the state manager for lock reclaim warning
|
||||
messages
|
||||
|
||||
Adding rate limit on `Lock reclaim failed` messages since it could fill
|
||||
up system logs
|
||||
Signed-off-by: William Dauchy <wdauchy@gmail.com>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
||||
Conflicts:
|
||||
|
||||
fs/nfs/nfs4state.c
|
||||
---
|
||||
fs/nfs/nfs4state.c | 5 +++--
|
||||
1 files changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c
|
||||
index bacb271..3676b5c 100644
|
||||
--- a/fs/nfs/nfs4state.c
|
||||
+++ b/fs/nfs/nfs4state.c
|
||||
@@ -1247,8 +1247,9 @@ restart:
|
||||
spin_lock(&state->state_lock);
|
||||
list_for_each_entry(lock, &state->lock_states, ls_locks) {
|
||||
if (!(lock->ls_flags & NFS_LOCK_INITIALIZED))
|
||||
- printk("%s: Lock reclaim failed!\n",
|
||||
- __func__);
|
||||
+ pr_warn_ratelimited("NFS: "
|
||||
+ "%s: Lock reclaim "
|
||||
+ "failed!\n", __func__);
|
||||
}
|
||||
spin_unlock(&state->state_lock);
|
||||
nfs4_put_open_state(state);
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -1,46 +0,0 @@
|
|||
diff -up linux-3.2.noarch/fs/nfs/idmap.c.orig linux-3.2.noarch/fs/nfs/idmap.c
|
||||
--- linux-3.2.noarch/fs/nfs/idmap.c.orig 2012-02-07 07:12:52.585471833 -0500
|
||||
+++ linux-3.2.noarch/fs/nfs/idmap.c 2012-03-14 13:08:37.462928792 -0400
|
||||
@@ -360,7 +360,7 @@ struct idmap_hashent {
|
||||
unsigned long ih_expires;
|
||||
__u32 ih_id;
|
||||
size_t ih_namelen;
|
||||
- char ih_name[IDMAP_NAMESZ];
|
||||
+ const char *ih_name;
|
||||
};
|
||||
|
||||
struct idmap_hashtable {
|
||||
@@ -424,11 +424,16 @@ void
|
||||
nfs_idmap_delete(struct nfs_client *clp)
|
||||
{
|
||||
struct idmap *idmap = clp->cl_idmap;
|
||||
+ int i;
|
||||
|
||||
if (!idmap)
|
||||
return;
|
||||
rpc_unlink(idmap->idmap_dentry);
|
||||
clp->cl_idmap = NULL;
|
||||
+ for (i = 0; i < ARRAY_SIZE(idmap->idmap_user_hash.h_entries); i++)
|
||||
+ kfree(idmap->idmap_user_hash.h_entries[i].ih_name);
|
||||
+ for (i = 0; i < ARRAY_SIZE(idmap->idmap_group_hash.h_entries); i++)
|
||||
+ kfree(idmap->idmap_group_hash.h_entries[i].ih_name);
|
||||
kfree(idmap);
|
||||
}
|
||||
|
||||
@@ -491,9 +496,14 @@ static void
|
||||
idmap_update_entry(struct idmap_hashent *he, const char *name,
|
||||
size_t namelen, __u32 id)
|
||||
{
|
||||
+ char *str = kmalloc(namelen + 1, GFP_KERNEL);
|
||||
+ if (str == NULL)
|
||||
+ return;
|
||||
+ kfree(he->ih_name);
|
||||
he->ih_id = id;
|
||||
- memcpy(he->ih_name, name, namelen);
|
||||
- he->ih_name[namelen] = '\0';
|
||||
+ memcpy(str, name, namelen);
|
||||
+ str[namelen] = '\0';
|
||||
+ he->ih_name = str;
|
||||
he->ih_namelen = namelen;
|
||||
he->ih_expires = jiffies + nfs_idmap_cache_timeout;
|
||||
}
|
|
@ -1,69 +0,0 @@
|
|||
From: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
|
||||
If the file wasn't opened for writing, then truncate and ftruncate
|
||||
need to report the appropriate errors.
|
||||
|
||||
Reported-by: Miklos Szeredi <miklos@szeredi.hu>
|
||||
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
---
|
||||
fs/nfs/dir.c | 4 ++--
|
||||
fs/nfs/nfs4proc.c | 15 ++++++++++++---
|
||||
2 files changed, 14 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
|
||||
index bb132a8..51a2686 100644
|
||||
--- a/fs/nfs/dir.c
|
||||
+++ b/fs/nfs/dir.c
|
||||
@@ -1429,7 +1429,7 @@ static struct dentry *nfs_atomic_lookup(struct inode *dir, struct dentry *dentry
|
||||
}
|
||||
|
||||
open_flags = nd->intent.open.flags;
|
||||
- attr.ia_valid = 0;
|
||||
+ attr.ia_valid = ATTR_OPEN;
|
||||
|
||||
ctx = create_nfs_open_context(dentry, open_flags);
|
||||
res = ERR_CAST(ctx);
|
||||
@@ -1536,7 +1536,7 @@ static int nfs_open_revalidate(struct dentry *dentry, struct nameidata *nd)
|
||||
if (IS_ERR(ctx))
|
||||
goto out;
|
||||
|
||||
- attr.ia_valid = 0;
|
||||
+ attr.ia_valid = ATTR_OPEN;
|
||||
if (openflags & O_TRUNC) {
|
||||
attr.ia_valid |= ATTR_SIZE;
|
||||
attr.ia_size = 0;
|
||||
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
|
||||
index c4c6b48..e2a2893 100644
|
||||
--- a/fs/nfs/nfs4proc.c
|
||||
+++ b/fs/nfs/nfs4proc.c
|
||||
@@ -1921,10 +1921,19 @@ static int nfs4_do_setattr(struct inode *inode, struct rpc_cred *cred,
|
||||
};
|
||||
int err;
|
||||
do {
|
||||
- err = nfs4_handle_exception(server,
|
||||
- _nfs4_do_setattr(inode, cred, fattr, sattr, state),
|
||||
- &exception);
|
||||
+ err = _nfs4_do_setattr(inode, cred, fattr, sattr, state);
|
||||
+ switch (err) {
|
||||
+ case -NFS4ERR_OPENMODE:
|
||||
+ if (state && !(state->state & FMODE_WRITE)) {
|
||||
+ err = -EBADF;
|
||||
+ if (sattr->ia_valid & ATTR_OPEN)
|
||||
+ err = -EACCES;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ }
|
||||
+ err = nfs4_handle_exception(server, err, &exception);
|
||||
} while (exception.retry);
|
||||
+out:
|
||||
return err;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
_______________________________________________
|
||||
kernel mailing list
|
||||
kernel@lists.fedoraproject.org
|
||||
https://admin.fedoraproject.org/mailman/listinfo/kernel
|
|
@ -0,0 +1,327 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Stanislav Kinsbursky <skinsbursky@parallels.com>
|
||||
Newsgroups: gmane.linux.kernel,gmane.linux.nfs,gmane.linux.openvz.devel
|
||||
Subject: [PATCH 2/2] SUNRPC: move per-net operations from svc_destroy()
|
||||
Date: Fri, 01 Jun 2012 15:17:50 +0400
|
||||
Lines: 281
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <20120601111750.7846.23782.stgit@localhost.localdomain>
|
||||
References: <20120601111619.7846.95457.stgit@localhost.localdomain>
|
||||
NNTP-Posting-Host: plane.gmane.org
|
||||
Mime-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Trace: dough.gmane.org 1338549639 9108 80.91.229.3 (1 Jun 2012 11:20:39 GMT)
|
||||
X-Complaints-To: usenet@dough.gmane.org
|
||||
NNTP-Posting-Date: Fri, 1 Jun 2012 11:20:39 +0000 (UTC)
|
||||
Cc: linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org,
|
||||
devel@openvz.org
|
||||
To: bfields@fieldses.org, Trond.Myklebust@netapp.com
|
||||
Original-X-From: linux-kernel-owner@vger.kernel.org Fri Jun 01 13:20:37 2012
|
||||
Return-path: <linux-kernel-owner@vger.kernel.org>
|
||||
Envelope-to: glk-linux-kernel-3@plane.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by plane.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-kernel-owner@vger.kernel.org>)
|
||||
id 1SaPuE-0002JL-ED
|
||||
for glk-linux-kernel-3@plane.gmane.org; Fri, 01 Jun 2012 13:20:34 +0200
|
||||
Original-Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S1759489Ab2FALUJ (ORCPT <rfc822;glk-linux-kernel-3@m.gmane.org>);
|
||||
Fri, 1 Jun 2012 07:20:09 -0400
|
||||
Original-Received: from mailhub.sw.ru ([195.214.232.25]:7947 "EHLO relay.sw.ru"
|
||||
rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
|
||||
id S1759474Ab2FALUE (ORCPT <rfc822;linux-kernel@vger.kernel.org>);
|
||||
Fri, 1 Jun 2012 07:20:04 -0400
|
||||
Original-Received: from localhost.localdomain ([10.30.21.131])
|
||||
by relay.sw.ru (8.13.4/8.13.4) with ESMTP id q51BJrkd020556;
|
||||
Fri, 1 Jun 2012 15:19:54 +0400 (MSK)
|
||||
In-Reply-To: <20120601111619.7846.95457.stgit@localhost.localdomain>
|
||||
User-Agent: StGit/0.16
|
||||
Original-Sender: linux-kernel-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-kernel.vger.kernel.org>
|
||||
X-Mailing-List: linux-kernel@vger.kernel.org
|
||||
Xref: news.gmane.org gmane.linux.kernel:1306567 gmane.linux.nfs:50236 gmane.linux.openvz.devel:1597
|
||||
Archived-At: <http://permalink.gmane.org/gmane.linux.kernel/1306567>
|
||||
|
||||
This patch was back-ported from 3.5 kernel.
|
||||
|
||||
The idea is to separate service destruction and per-net operations, because
|
||||
these are two different things and it's mix looks ugly.
|
||||
|
||||
Notes:
|
||||
1) For NFS server this patch looks ugly (sorry for that). But these place will
|
||||
be
|
||||
rewritten soon during NFSd containerization.
|
||||
2) LockD per-net counter increase int lockd_up() was moved prior to
|
||||
make_socks() to make lockd_down_net() call safe in case of error.
|
||||
|
||||
Signed-off-by: Stanislav Kinsbursky <skinsbursky@parallels.com>
|
||||
---
|
||||
fs/lockd/svc.c | 27 +++++++++++++++------------
|
||||
fs/nfs/callback.c | 3 +++
|
||||
fs/nfsd/nfsctl.c | 12 +++++++++---
|
||||
fs/nfsd/nfssvc.c | 14 ++++++++++++++
|
||||
net/sunrpc/svc.c | 4 ----
|
||||
5 files changed, 41 insertions(+), 19 deletions(-)
|
||||
|
||||
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
|
||||
index b1d0708..f1b3cce 100644
|
||||
--- a/fs/lockd/svc.c
|
||||
+++ b/fs/lockd/svc.c
|
||||
@@ -257,7 +257,7 @@ static int lockd_up_net(struct net *net)
|
||||
struct svc_serv *serv = nlmsvc_rqst->rq_server;
|
||||
int error;
|
||||
|
||||
- if (ln->nlmsvc_users)
|
||||
+ if (ln->nlmsvc_users++)
|
||||
return 0;
|
||||
|
||||
error = svc_rpcb_setup(serv, net);
|
||||
@@ -272,6 +272,7 @@ static int lockd_up_net(struct net *net)
|
||||
err_socks:
|
||||
svc_rpcb_cleanup(serv, net);
|
||||
err_rpcb:
|
||||
+ ln->nlmsvc_users--;
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -300,6 +301,7 @@ int lockd_up(void)
|
||||
struct svc_serv *serv;
|
||||
int error = 0;
|
||||
struct net *net = current->nsproxy->net_ns;
|
||||
+ struct lockd_net *ln = net_generic(net, lockd_net_id);
|
||||
|
||||
mutex_lock(&nlmsvc_mutex);
|
||||
/*
|
||||
@@ -331,9 +333,11 @@ int lockd_up(void)
|
||||
goto destroy_and_out;
|
||||
}
|
||||
|
||||
+ ln->nlmsvc_users++;
|
||||
+
|
||||
error = make_socks(serv, net);
|
||||
if (error < 0)
|
||||
- goto destroy_and_out;
|
||||
+ goto err_start;
|
||||
|
||||
/*
|
||||
* Create the kernel thread and wait for it to start.
|
||||
@@ -345,7 +349,7 @@ int lockd_up(void)
|
||||
printk(KERN_WARNING
|
||||
"lockd_up: svc_rqst allocation failed, error=%d\n",
|
||||
error);
|
||||
- goto destroy_and_out;
|
||||
+ goto err_start;
|
||||
}
|
||||
|
||||
svc_sock_update_bufs(serv);
|
||||
@@ -359,7 +363,7 @@ int lockd_up(void)
|
||||
nlmsvc_rqst = NULL;
|
||||
printk(KERN_WARNING
|
||||
"lockd_up: kthread_run failed, error=%d\n", error);
|
||||
- goto destroy_and_out;
|
||||
+ goto err_start;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -369,14 +373,14 @@ int lockd_up(void)
|
||||
destroy_and_out:
|
||||
svc_destroy(serv);
|
||||
out:
|
||||
- if (!error) {
|
||||
- struct lockd_net *ln = net_generic(net, lockd_net_id);
|
||||
-
|
||||
- ln->nlmsvc_users++;
|
||||
+ if (!error)
|
||||
nlmsvc_users++;
|
||||
- }
|
||||
mutex_unlock(&nlmsvc_mutex);
|
||||
return error;
|
||||
+
|
||||
+err_start:
|
||||
+ lockd_down_net(net);
|
||||
+ goto destroy_and_out;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(lockd_up);
|
||||
|
||||
@@ -387,11 +391,10 @@ void
|
||||
lockd_down(void)
|
||||
{
|
||||
mutex_lock(&nlmsvc_mutex);
|
||||
+ lockd_down_net(current->nsproxy->net_ns);
|
||||
if (nlmsvc_users) {
|
||||
- if (--nlmsvc_users) {
|
||||
- lockd_down_net(current->nsproxy->net_ns);
|
||||
+ if (--nlmsvc_users)
|
||||
goto out;
|
||||
- }
|
||||
} else {
|
||||
printk(KERN_ERR "lockd_down: no users! task=%p\n",
|
||||
nlmsvc_task);
|
||||
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
|
||||
index 0563237..38a44c6 100644
|
||||
--- a/fs/nfs/callback.c
|
||||
+++ b/fs/nfs/callback.c
|
||||
@@ -313,6 +313,8 @@ out_err:
|
||||
dprintk("NFS: Couldn't create callback socket or server thread; "
|
||||
"err = %d\n", ret);
|
||||
cb_info->users--;
|
||||
+ if (serv)
|
||||
+ svc_shutdown_net(serv, net);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -327,6 +329,7 @@ void nfs_callback_down(int minorversion)
|
||||
cb_info->users--;
|
||||
if (cb_info->users == 0 && cb_info->task != NULL) {
|
||||
kthread_stop(cb_info->task);
|
||||
+ svc_shutdown_net(cb_info->serv, &init_net);
|
||||
svc_exit_thread(cb_info->rqst);
|
||||
cb_info->serv = NULL;
|
||||
cb_info->rqst = NULL;
|
||||
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
|
||||
index 2c53be6..3ab12eb 100644
|
||||
--- a/fs/nfsd/nfsctl.c
|
||||
+++ b/fs/nfsd/nfsctl.c
|
||||
@@ -651,6 +651,7 @@ static ssize_t __write_ports_addfd(char *buf)
|
||||
{
|
||||
char *mesg = buf;
|
||||
int fd, err;
|
||||
+ struct net *net = &init_net;
|
||||
|
||||
err = get_int(&mesg, &fd);
|
||||
if (err != 0 || fd < 0)
|
||||
@@ -662,6 +663,8 @@ static ssize_t __write_ports_addfd(char *buf)
|
||||
|
||||
err = svc_addsock(nfsd_serv, fd, buf, SIMPLE_TRANSACTION_LIMIT);
|
||||
if (err < 0) {
|
||||
+ if (nfsd_serv->sv_nrthreads == 1)
|
||||
+ svc_shutdown_net(nfsd_serv, net);
|
||||
svc_destroy(nfsd_serv);
|
||||
return err;
|
||||
}
|
||||
@@ -699,6 +702,7 @@ static ssize_t __write_ports_addxprt(char *buf)
|
||||
char transport[16];
|
||||
struct svc_xprt *xprt;
|
||||
int port, err;
|
||||
+ struct net *net = &init_net;
|
||||
|
||||
if (sscanf(buf, "%15s %4u", transport, &port) != 2)
|
||||
return -EINVAL;
|
||||
@@ -710,12 +714,12 @@ static ssize_t __write_ports_addxprt(char *buf)
|
||||
if (err != 0)
|
||||
return err;
|
||||
|
||||
- err = svc_create_xprt(nfsd_serv, transport, &init_net,
|
||||
+ err = svc_create_xprt(nfsd_serv, transport, net,
|
||||
PF_INET, port, SVC_SOCK_ANONYMOUS);
|
||||
if (err < 0)
|
||||
goto out_err;
|
||||
|
||||
- err = svc_create_xprt(nfsd_serv, transport, &init_net,
|
||||
+ err = svc_create_xprt(nfsd_serv, transport, net,
|
||||
PF_INET6, port, SVC_SOCK_ANONYMOUS);
|
||||
if (err < 0 && err != -EAFNOSUPPORT)
|
||||
goto out_close;
|
||||
@@ -724,12 +728,14 @@ static ssize_t __write_ports_addxprt(char *buf)
|
||||
nfsd_serv->sv_nrthreads--;
|
||||
return 0;
|
||||
out_close:
|
||||
- xprt = svc_find_xprt(nfsd_serv, transport, &init_net, PF_INET, port);
|
||||
+ xprt = svc_find_xprt(nfsd_serv, transport, net, PF_INET, port);
|
||||
if (xprt != NULL) {
|
||||
svc_close_xprt(xprt);
|
||||
svc_xprt_put(xprt);
|
||||
}
|
||||
out_err:
|
||||
+ if (nfsd_serv->sv_nrthreads == 1)
|
||||
+ svc_shutdown_net(nfsd_serv, net);
|
||||
svc_destroy(nfsd_serv);
|
||||
return err;
|
||||
}
|
||||
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
|
||||
index a6461f3..da50e1c 100644
|
||||
--- a/fs/nfsd/nfssvc.c
|
||||
+++ b/fs/nfsd/nfssvc.c
|
||||
@@ -382,6 +382,7 @@ int nfsd_set_nrthreads(int n, int *nthreads)
|
||||
int i = 0;
|
||||
int tot = 0;
|
||||
int err = 0;
|
||||
+ struct net *net = &init_net;
|
||||
|
||||
WARN_ON(!mutex_is_locked(&nfsd_mutex));
|
||||
|
||||
@@ -426,6 +427,9 @@ int nfsd_set_nrthreads(int n, int *nthreads)
|
||||
if (err)
|
||||
break;
|
||||
}
|
||||
+
|
||||
+ if (nfsd_serv->sv_nrthreads == 1)
|
||||
+ svc_shutdown_net(nfsd_serv, net);
|
||||
svc_destroy(nfsd_serv);
|
||||
|
||||
return err;
|
||||
@@ -441,6 +445,7 @@ nfsd_svc(unsigned short port, int nrservs)
|
||||
{
|
||||
int error;
|
||||
bool nfsd_up_before;
|
||||
+ struct net *net = &init_net;
|
||||
|
||||
mutex_lock(&nfsd_mutex);
|
||||
dprintk("nfsd: creating service\n");
|
||||
@@ -473,6 +478,8 @@ out_shutdown:
|
||||
if (error < 0 && !nfsd_up_before)
|
||||
nfsd_shutdown();
|
||||
out_destroy:
|
||||
+ if (nfsd_serv->sv_nrthreads == 1)
|
||||
+ svc_shutdown_net(nfsd_serv, net);
|
||||
svc_destroy(nfsd_serv); /* Release server */
|
||||
out:
|
||||
mutex_unlock(&nfsd_mutex);
|
||||
@@ -556,6 +563,9 @@ nfsd(void *vrqstp)
|
||||
nfsdstats.th_cnt --;
|
||||
|
||||
out:
|
||||
+ if (rqstp->rq_server->sv_nrthreads == 1)
|
||||
+ svc_shutdown_net(rqstp->rq_server, &init_net);
|
||||
+
|
||||
/* Release the thread */
|
||||
svc_exit_thread(rqstp);
|
||||
|
||||
@@ -668,8 +678,12 @@ int nfsd_pool_stats_open(struct inode *inode, struct file *file)
|
||||
int nfsd_pool_stats_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
int ret = seq_release(inode, file);
|
||||
+ struct net *net = &init_net;
|
||||
+
|
||||
mutex_lock(&nfsd_mutex);
|
||||
/* this function really, really should have been called svc_put() */
|
||||
+ if (nfsd_serv->sv_nrthreads == 1)
|
||||
+ svc_shutdown_net(nfsd_serv, net);
|
||||
svc_destroy(nfsd_serv);
|
||||
mutex_unlock(&nfsd_mutex);
|
||||
return ret;
|
||||
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
|
||||
index e6d542c..b7210f5 100644
|
||||
--- a/net/sunrpc/svc.c
|
||||
+++ b/net/sunrpc/svc.c
|
||||
@@ -537,8 +537,6 @@ EXPORT_SYMBOL_GPL(svc_shutdown_net);
|
||||
void
|
||||
svc_destroy(struct svc_serv *serv)
|
||||
{
|
||||
- struct net *net = current->nsproxy->net_ns;
|
||||
-
|
||||
dprintk("svc: svc_destroy(%s, %d)\n",
|
||||
serv->sv_program->pg_name,
|
||||
serv->sv_nrthreads);
|
||||
@@ -553,8 +551,6 @@ svc_destroy(struct svc_serv *serv)
|
||||
|
||||
del_timer_sync(&serv->sv_temptimer);
|
||||
|
||||
- svc_shutdown_net(serv, net);
|
||||
-
|
||||
/*
|
||||
* The last user is gone and thus all sockets have to be destroyed to
|
||||
* the point. Check this.
|
||||
|
|
@ -0,0 +1,249 @@
|
|||
Path: news.gmane.org!not-for-mail
|
||||
From: Stanislav Kinsbursky <skinsbursky-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
|
||||
Newsgroups: gmane.linux.nfs,gmane.linux.kernel,gmane.linux.openvz.devel
|
||||
Subject: [PATCH 1/2] SUNRPC: new svc_bind() routine introduced
|
||||
Date: Fri, 01 Jun 2012 15:17:42 +0400
|
||||
Lines: 203
|
||||
Approved: news@gmane.org
|
||||
Message-ID: <20120601111742.7846.99872.stgit@localhost.localdomain>
|
||||
References: <20120601111619.7846.95457.stgit@localhost.localdomain>
|
||||
NNTP-Posting-Host: plane.gmane.org
|
||||
Mime-Version: 1.0
|
||||
Content-Type: text/plain; charset="utf-8"
|
||||
Content-Transfer-Encoding: 7bit
|
||||
X-Trace: dough.gmane.org 1338549604 8815 80.91.229.3 (1 Jun 2012 11:20:04 GMT)
|
||||
X-Complaints-To: usenet@dough.gmane.org
|
||||
NNTP-Posting-Date: Fri, 1 Jun 2012 11:20:04 +0000 (UTC)
|
||||
Cc: linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
|
||||
devel-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org
|
||||
To: bfields-uC3wQj2KruNg9hUCZPvPmw@public.gmane.org, Trond.Myklebust-HgOvQuBEEgTQT0dZR+AlfA@public.gmane.org
|
||||
Original-X-From: linux-nfs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Fri Jun 01 13:20:02 2012
|
||||
Return-path: <linux-nfs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>
|
||||
Envelope-to: glN-linux-nfs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org
|
||||
Original-Received: from vger.kernel.org ([209.132.180.67])
|
||||
by plane.gmane.org with esmtp (Exim 4.69)
|
||||
(envelope-from <linux-nfs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>)
|
||||
id 1SaPtg-0001Xs-F8
|
||||
for glN-linux-nfs-wOFGN7rlS/M9smdsby/KFg@public.gmane.org; Fri, 01 Jun 2012 13:20:00 +0200
|
||||
Original-Received: (majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org) by vger.kernel.org via listexpand
|
||||
id S1759450Ab2FALT7 (ORCPT <rfc822;glN-linux-nfs@m.gmane.org>);
|
||||
Fri, 1 Jun 2012 07:19:59 -0400
|
||||
Original-Received: from mailhub.sw.ru ([195.214.232.25]:20534 "EHLO relay.sw.ru"
|
||||
rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
|
||||
id S1759448Ab2FALT6 (ORCPT <rfc822;linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>);
|
||||
Fri, 1 Jun 2012 07:19:58 -0400
|
||||
Original-Received: from localhost.localdomain ([10.30.21.131])
|
||||
by relay.sw.ru (8.13.4/8.13.4) with ESMTP id q51BJjDD010948;
|
||||
Fri, 1 Jun 2012 15:19:46 +0400 (MSK)
|
||||
In-Reply-To: <20120601111619.7846.95457.stgit-bi+AKbBUZKY6gyzm1THtWbp2dZbC/Bob@public.gmane.org>
|
||||
User-Agent: StGit/0.16
|
||||
Original-Sender: linux-nfs-owner-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
Precedence: bulk
|
||||
List-ID: <linux-nfs.vger.kernel.org>
|
||||
X-Mailing-List: linux-nfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
Xref: news.gmane.org gmane.linux.nfs:50234 gmane.linux.kernel:1306565 gmane.linux.openvz.devel:1595
|
||||
Archived-At: <http://permalink.gmane.org/gmane.linux.nfs/50234>
|
||||
|
||||
This patch was back-ported from 3.5 kernel.
|
||||
|
||||
New routine is responsible for service registration in specified network
|
||||
context.
|
||||
The idea is to separate service creation from per-net operations.
|
||||
Since registering service with svc_bind() can fail, then service will be
|
||||
destroyed and during destruction it will try to unregister itself from
|
||||
rpcbind. In this case unregister have to be skipped.
|
||||
|
||||
Signed-off-by: Stanislav Kinsbursky <skinsbursky-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>
|
||||
---
|
||||
fs/lockd/svc.c | 6 ++++++
|
||||
fs/nfs/callback.c | 13 ++++++++++---
|
||||
fs/nfsd/nfssvc.c | 9 +++++++++
|
||||
include/linux/sunrpc/svc.h | 1 +
|
||||
net/sunrpc/rpcb_clnt.c | 12 +++++++-----
|
||||
net/sunrpc/svc.c | 19 ++++++++++---------
|
||||
6 files changed, 43 insertions(+), 17 deletions(-)
|
||||
|
||||
diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c
|
||||
index f49b9af..b1d0708 100644
|
||||
--- a/fs/lockd/svc.c
|
||||
+++ b/fs/lockd/svc.c
|
||||
@@ -325,6 +325,12 @@ int lockd_up(void)
|
||||
goto out;
|
||||
}
|
||||
|
||||
+ error = svc_bind(serv, net);
|
||||
+ if (error < 0) {
|
||||
+ printk(KERN_WARNING "lockd_up: bind service failed\n");
|
||||
+ goto destroy_and_out;
|
||||
+ }
|
||||
+
|
||||
error = make_socks(serv, net);
|
||||
if (error < 0)
|
||||
goto destroy_and_out;
|
||||
diff --git a/fs/nfs/callback.c b/fs/nfs/callback.c
|
||||
index eb95f50..0563237 100644
|
||||
--- a/fs/nfs/callback.c
|
||||
+++ b/fs/nfs/callback.c
|
||||
@@ -106,7 +106,7 @@ nfs4_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt)
|
||||
{
|
||||
int ret;
|
||||
|
||||
- ret = svc_create_xprt(serv, "tcp", xprt->xprt_net, PF_INET,
|
||||
+ ret = svc_create_xprt(serv, "tcp", &init_net, PF_INET,
|
||||
nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS);
|
||||
if (ret <= 0)
|
||||
goto out_err;
|
||||
@@ -114,7 +114,7 @@ nfs4_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt)
|
||||
dprintk("NFS: Callback listener port = %u (af %u)\n",
|
||||
nfs_callback_tcpport, PF_INET);
|
||||
|
||||
- ret = svc_create_xprt(serv, "tcp", xprt->xprt_net, PF_INET6,
|
||||
+ ret = svc_create_xprt(serv, "tcp", &init_net, PF_INET6,
|
||||
nfs_callback_set_tcpport, SVC_SOCK_ANONYMOUS);
|
||||
if (ret > 0) {
|
||||
nfs_callback_tcpport6 = ret;
|
||||
@@ -183,7 +183,7 @@ nfs41_callback_up(struct svc_serv *serv, struct rpc_xprt *xprt)
|
||||
* fore channel connection.
|
||||
* Returns the input port (0) and sets the svc_serv bc_xprt on success
|
||||
*/
|
||||
- ret = svc_create_xprt(serv, "tcp-bc", xprt->xprt_net, PF_INET, 0,
|
||||
+ ret = svc_create_xprt(serv, "tcp-bc", &init_net, PF_INET, 0,
|
||||
SVC_SOCK_ANONYMOUS);
|
||||
if (ret < 0) {
|
||||
rqstp = ERR_PTR(ret);
|
||||
@@ -253,6 +253,7 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
|
||||
char svc_name[12];
|
||||
int ret = 0;
|
||||
int minorversion_setup;
|
||||
+ struct net *net = &init_net;
|
||||
|
||||
mutex_lock(&nfs_callback_mutex);
|
||||
if (cb_info->users++ || cb_info->task != NULL) {
|
||||
@@ -265,6 +266,12 @@ int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt)
|
||||
goto out_err;
|
||||
}
|
||||
|
||||
+ ret = svc_bind(serv, net);
|
||||
+ if (ret < 0) {
|
||||
+ printk(KERN_WARNING "NFS: bind callback service failed\n");
|
||||
+ goto out_err;
|
||||
+ }
|
||||
+
|
||||
minorversion_setup = nfs_minorversion_callback_svc_setup(minorversion,
|
||||
serv, xprt, &rqstp, &callback_svc);
|
||||
if (!minorversion_setup) {
|
||||
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
|
||||
index 28dfad3..a6461f3 100644
|
||||
--- a/fs/nfsd/nfssvc.c
|
||||
+++ b/fs/nfsd/nfssvc.c
|
||||
@@ -11,6 +11,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/fs_struct.h>
|
||||
#include <linux/swap.h>
|
||||
+#include <linux/nsproxy.h>
|
||||
|
||||
#include <linux/sunrpc/stats.h>
|
||||
#include <linux/sunrpc/svcsock.h>
|
||||
@@ -330,6 +331,8 @@ static int nfsd_get_default_max_blksize(void)
|
||||
|
||||
int nfsd_create_serv(void)
|
||||
{
|
||||
+ int error;
|
||||
+
|
||||
WARN_ON(!mutex_is_locked(&nfsd_mutex));
|
||||
if (nfsd_serv) {
|
||||
svc_get(nfsd_serv);
|
||||
@@ -343,6 +346,12 @@ int nfsd_create_serv(void)
|
||||
if (nfsd_serv == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
+ error = svc_bind(nfsd_serv, current->nsproxy->net_ns);
|
||||
+ if (error < 0) {
|
||||
+ svc_destroy(nfsd_serv);
|
||||
+ return error;
|
||||
+ }
|
||||
+
|
||||
set_max_drc();
|
||||
do_gettimeofday(&nfssvc_boot); /* record boot time */
|
||||
return 0;
|
||||
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
|
||||
index 51b29ac..2b43e02 100644
|
||||
--- a/include/linux/sunrpc/svc.h
|
||||
+++ b/include/linux/sunrpc/svc.h
|
||||
@@ -416,6 +416,7 @@ struct svc_procedure {
|
||||
*/
|
||||
int svc_rpcb_setup(struct svc_serv *serv, struct net *net);
|
||||
void svc_rpcb_cleanup(struct svc_serv *serv, struct net *net);
|
||||
+int svc_bind(struct svc_serv *serv, struct net *net);
|
||||
struct svc_serv *svc_create(struct svc_program *, unsigned int,
|
||||
void (*shutdown)(struct svc_serv *, struct net *net));
|
||||
struct svc_rqst *svc_prepare_thread(struct svc_serv *serv,
|
||||
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
|
||||
index 78ac39f..4c38b33 100644
|
||||
--- a/net/sunrpc/rpcb_clnt.c
|
||||
+++ b/net/sunrpc/rpcb_clnt.c
|
||||
@@ -180,14 +180,16 @@ void rpcb_put_local(struct net *net)
|
||||
struct sunrpc_net *sn = net_generic(net, sunrpc_net_id);
|
||||
struct rpc_clnt *clnt = sn->rpcb_local_clnt;
|
||||
struct rpc_clnt *clnt4 = sn->rpcb_local_clnt4;
|
||||
- int shutdown;
|
||||
+ int shutdown = 0;
|
||||
|
||||
spin_lock(&sn->rpcb_clnt_lock);
|
||||
- if (--sn->rpcb_users == 0) {
|
||||
- sn->rpcb_local_clnt = NULL;
|
||||
- sn->rpcb_local_clnt4 = NULL;
|
||||
+ if (sn->rpcb_users) {
|
||||
+ if (--sn->rpcb_users == 0) {
|
||||
+ sn->rpcb_local_clnt = NULL;
|
||||
+ sn->rpcb_local_clnt4 = NULL;
|
||||
+ }
|
||||
+ shutdown = !sn->rpcb_users;
|
||||
}
|
||||
- shutdown = !sn->rpcb_users;
|
||||
spin_unlock(&sn->rpcb_clnt_lock);
|
||||
|
||||
if (shutdown) {
|
||||
diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c
|
||||
index 4153846..e6d542c 100644
|
||||
--- a/net/sunrpc/svc.c
|
||||
+++ b/net/sunrpc/svc.c
|
||||
@@ -407,6 +407,14 @@ static int svc_uses_rpcbind(struct svc_serv *serv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int svc_bind(struct svc_serv *serv, struct net *net)
|
||||
+{
|
||||
+ if (!svc_uses_rpcbind(serv))
|
||||
+ return 0;
|
||||
+ return svc_rpcb_setup(serv, net);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(svc_bind);
|
||||
+
|
||||
/*
|
||||
* Create an RPC service
|
||||
*/
|
||||
@@ -471,15 +479,8 @@ __svc_create(struct svc_program *prog, unsigned int bufsize, int npools,
|
||||
spin_lock_init(&pool->sp_lock);
|
||||
}
|
||||
|
||||
- if (svc_uses_rpcbind(serv)) {
|
||||
- if (svc_rpcb_setup(serv, current->nsproxy->net_ns) < 0) {
|
||||
- kfree(serv->sv_pools);
|
||||
- kfree(serv);
|
||||
- return NULL;
|
||||
- }
|
||||
- if (!serv->sv_shutdown)
|
||||
- serv->sv_shutdown = svc_rpcb_cleanup;
|
||||
- }
|
||||
+ if (svc_uses_rpcbind(serv) && (!serv->sv_shutdown))
|
||||
+ serv->sv_shutdown = svc_rpcb_cleanup;
|
||||
|
||||
return serv;
|
||||
}
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
|
||||
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
|
|
@ -1,393 +0,0 @@
|
|||
commit 626cf236608505d376e4799adb4f7eb00a8594af
|
||||
Author: Hans Verkuil <hans.verkuil@cisco.com>
|
||||
Date: Fri Mar 23 15:02:27 2012 -0700
|
||||
|
||||
poll: add poll_requested_events() and poll_does_not_wait() functions
|
||||
|
||||
In some cases the poll() implementation in a driver has to do different
|
||||
things depending on the events the caller wants to poll for. An example
|
||||
is when a driver needs to start a DMA engine if the caller polls for
|
||||
POLLIN, but doesn't want to do that if POLLIN is not requested but instead
|
||||
only POLLOUT or POLLPRI is requested. This is something that can happen
|
||||
in the video4linux subsystem among others.
|
||||
|
||||
Unfortunately, the current epoll/poll/select implementation doesn't
|
||||
provide that information reliably. The poll_table_struct does have it: it
|
||||
has a key field with the event mask. But once a poll() call matches one
|
||||
or more bits of that mask any following poll() calls are passed a NULL
|
||||
poll_table pointer.
|
||||
|
||||
Also, the eventpoll implementation always left the key field at ~0 instead
|
||||
of using the requested events mask.
|
||||
|
||||
This was changed in eventpoll.c so the key field now contains the actual
|
||||
events that should be polled for as set by the caller.
|
||||
|
||||
The solution to the NULL poll_table pointer is to set the qproc field to
|
||||
NULL in poll_table once poll() matches the events, not the poll_table
|
||||
pointer itself. That way drivers can obtain the mask through a new
|
||||
poll_requested_events inline.
|
||||
|
||||
The poll_table_struct can still be NULL since some kernel code calls it
|
||||
internally (netfs_state_poll() in ./drivers/staging/pohmelfs/netfs.h). In
|
||||
that case poll_requested_events() returns ~0 (i.e. all events).
|
||||
|
||||
Very rarely drivers might want to know whether poll_wait will actually
|
||||
wait. If another earlier file descriptor in the set already matched the
|
||||
events the caller wanted to wait for, then the kernel will return from the
|
||||
select() call without waiting. This might be useful information in order
|
||||
to avoid doing expensive work.
|
||||
|
||||
A new helper function poll_does_not_wait() is added that drivers can use
|
||||
to detect this situation. This is now used in sock_poll_wait() in
|
||||
include/net/sock.h. This was the only place in the kernel that needed
|
||||
this information.
|
||||
|
||||
Drivers should no longer access any of the poll_table internals, but use
|
||||
the poll_requested_events() and poll_does_not_wait() access functions
|
||||
instead. In order to enforce that the poll_table fields are now prepended
|
||||
with an underscore and a comment was added warning against using them
|
||||
directly.
|
||||
|
||||
This required a change in unix_dgram_poll() in unix/af_unix.c which used
|
||||
the key field to get the requested events. It's been replaced by a call
|
||||
to poll_requested_events().
|
||||
|
||||
For qproc it was especially important to change its name since the
|
||||
behavior of that field changes with this patch since this function pointer
|
||||
can now be NULL when that wasn't possible in the past.
|
||||
|
||||
Any driver accessing the qproc or key fields directly will now fail to compile.
|
||||
|
||||
Some notes regarding the correctness of this patch: the driver's poll()
|
||||
function is called with a 'struct poll_table_struct *wait' argument. This
|
||||
pointer may or may not be NULL, drivers can never rely on it being one or
|
||||
the other as that depends on whether or not an earlier file descriptor in
|
||||
the select()'s fdset matched the requested events.
|
||||
|
||||
There are only three things a driver can do with the wait argument:
|
||||
|
||||
1) obtain the key field:
|
||||
|
||||
events = wait ? wait->key : ~0;
|
||||
|
||||
This will still work although it should be replaced with the new
|
||||
poll_requested_events() function (which does exactly the same).
|
||||
This will now even work better, since wait is no longer set to NULL
|
||||
unnecessarily.
|
||||
|
||||
2) use the qproc callback. This could be deadly since qproc can now be
|
||||
NULL. Renaming qproc should prevent this from happening. There are no
|
||||
kernel drivers that actually access this callback directly, BTW.
|
||||
|
||||
3) test whether wait == NULL to determine whether poll would return without
|
||||
waiting. This is no longer sufficient as the correct test is now
|
||||
wait == NULL || wait->_qproc == NULL.
|
||||
|
||||
However, the worst that can happen here is a slight performance hit in
|
||||
the case where wait != NULL and wait->_qproc == NULL. In that case the
|
||||
driver will assume that poll_wait() will actually add the fd to the set
|
||||
of waiting file descriptors. Of course, poll_wait() will not do that
|
||||
since it tests for wait->_qproc. This will not break anything, though.
|
||||
|
||||
There is only one place in the whole kernel where this happens
|
||||
(sock_poll_wait() in include/net/sock.h) and that code will be replaced
|
||||
by a call to poll_does_not_wait() in the next patch.
|
||||
|
||||
Note that even if wait->_qproc != NULL drivers cannot rely on poll_wait()
|
||||
actually waiting. The next file descriptor from the set might match the
|
||||
event mask and thus any possible waits will never happen.
|
||||
|
||||
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
|
||||
Reviewed-by: Jonathan Corbet <corbet@lwn.net>
|
||||
Reviewed-by: Al Viro <viro@zeniv.linux.org.uk>
|
||||
Cc: Davide Libenzi <davidel@xmailserver.org>
|
||||
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Cc: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
Cc: David Miller <davem@davemloft.net>
|
||||
Cc: Eric Dumazet <eric.dumazet@gmail.com>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
|
||||
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
|
||||
index 4d9d3a4..ca30007 100644
|
||||
--- a/fs/eventpoll.c
|
||||
+++ b/fs/eventpoll.c
|
||||
@@ -699,9 +699,12 @@ static int ep_read_events_proc(struct eventpoll *ep, struct list_head *head,
|
||||
void *priv)
|
||||
{
|
||||
struct epitem *epi, *tmp;
|
||||
+ poll_table pt;
|
||||
|
||||
+ init_poll_funcptr(&pt, NULL);
|
||||
list_for_each_entry_safe(epi, tmp, head, rdllink) {
|
||||
- if (epi->ffd.file->f_op->poll(epi->ffd.file, NULL) &
|
||||
+ pt._key = epi->event.events;
|
||||
+ if (epi->ffd.file->f_op->poll(epi->ffd.file, &pt) &
|
||||
epi->event.events)
|
||||
return POLLIN | POLLRDNORM;
|
||||
else {
|
||||
@@ -1097,6 +1100,7 @@ static int ep_insert(struct eventpoll *ep, struct epoll_event *event,
|
||||
/* Initialize the poll table using the queue callback */
|
||||
epq.epi = epi;
|
||||
init_poll_funcptr(&epq.pt, ep_ptable_queue_proc);
|
||||
+ epq.pt._key = event->events;
|
||||
|
||||
/*
|
||||
* Attach the item to the poll hooks and get current event bits.
|
||||
@@ -1191,6 +1195,9 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
|
||||
{
|
||||
int pwake = 0;
|
||||
unsigned int revents;
|
||||
+ poll_table pt;
|
||||
+
|
||||
+ init_poll_funcptr(&pt, NULL);
|
||||
|
||||
/*
|
||||
* Set the new event interest mask before calling f_op->poll();
|
||||
@@ -1198,13 +1205,14 @@ static int ep_modify(struct eventpoll *ep, struct epitem *epi, struct epoll_even
|
||||
* f_op->poll() call and the new event set registering.
|
||||
*/
|
||||
epi->event.events = event->events;
|
||||
+ pt._key = event->events;
|
||||
epi->event.data = event->data; /* protected by mtx */
|
||||
|
||||
/*
|
||||
* Get current event bits. We can safely use the file* here because
|
||||
* its usage count has been increased by the caller of this function.
|
||||
*/
|
||||
- revents = epi->ffd.file->f_op->poll(epi->ffd.file, NULL);
|
||||
+ revents = epi->ffd.file->f_op->poll(epi->ffd.file, &pt);
|
||||
|
||||
/*
|
||||
* If the item is "hot" and it is not registered inside the ready
|
||||
@@ -1239,6 +1247,9 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
|
||||
unsigned int revents;
|
||||
struct epitem *epi;
|
||||
struct epoll_event __user *uevent;
|
||||
+ poll_table pt;
|
||||
+
|
||||
+ init_poll_funcptr(&pt, NULL);
|
||||
|
||||
/*
|
||||
* We can loop without lock because we are passed a task private list.
|
||||
@@ -1251,7 +1262,8 @@ static int ep_send_events_proc(struct eventpoll *ep, struct list_head *head,
|
||||
|
||||
list_del_init(&epi->rdllink);
|
||||
|
||||
- revents = epi->ffd.file->f_op->poll(epi->ffd.file, NULL) &
|
||||
+ pt._key = epi->event.events;
|
||||
+ revents = epi->ffd.file->f_op->poll(epi->ffd.file, &pt) &
|
||||
epi->event.events;
|
||||
|
||||
/*
|
||||
diff --git a/fs/select.c b/fs/select.c
|
||||
index e782258..ecfd0b1 100644
|
||||
--- a/fs/select.c
|
||||
+++ b/fs/select.c
|
||||
@@ -223,7 +223,7 @@ static void __pollwait(struct file *filp, wait_queue_head_t *wait_address,
|
||||
get_file(filp);
|
||||
entry->filp = filp;
|
||||
entry->wait_address = wait_address;
|
||||
- entry->key = p->key;
|
||||
+ entry->key = p->_key;
|
||||
init_waitqueue_func_entry(&entry->wait, pollwake);
|
||||
entry->wait.private = pwq;
|
||||
add_wait_queue(wait_address, &entry->wait);
|
||||
@@ -386,13 +386,11 @@ get_max:
|
||||
static inline void wait_key_set(poll_table *wait, unsigned long in,
|
||||
unsigned long out, unsigned long bit)
|
||||
{
|
||||
- if (wait) {
|
||||
- wait->key = POLLEX_SET;
|
||||
- if (in & bit)
|
||||
- wait->key |= POLLIN_SET;
|
||||
- if (out & bit)
|
||||
- wait->key |= POLLOUT_SET;
|
||||
- }
|
||||
+ wait->_key = POLLEX_SET;
|
||||
+ if (in & bit)
|
||||
+ wait->_key |= POLLIN_SET;
|
||||
+ if (out & bit)
|
||||
+ wait->_key |= POLLOUT_SET;
|
||||
}
|
||||
|
||||
int do_select(int n, fd_set_bits *fds, struct timespec *end_time)
|
||||
@@ -414,7 +412,7 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)
|
||||
poll_initwait(&table);
|
||||
wait = &table.pt;
|
||||
if (end_time && !end_time->tv_sec && !end_time->tv_nsec) {
|
||||
- wait = NULL;
|
||||
+ wait->_qproc = NULL;
|
||||
timed_out = 1;
|
||||
}
|
||||
|
||||
@@ -459,17 +457,17 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)
|
||||
if ((mask & POLLIN_SET) && (in & bit)) {
|
||||
res_in |= bit;
|
||||
retval++;
|
||||
- wait = NULL;
|
||||
+ wait->_qproc = NULL;
|
||||
}
|
||||
if ((mask & POLLOUT_SET) && (out & bit)) {
|
||||
res_out |= bit;
|
||||
retval++;
|
||||
- wait = NULL;
|
||||
+ wait->_qproc = NULL;
|
||||
}
|
||||
if ((mask & POLLEX_SET) && (ex & bit)) {
|
||||
res_ex |= bit;
|
||||
retval++;
|
||||
- wait = NULL;
|
||||
+ wait->_qproc = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -481,7 +479,7 @@ int do_select(int n, fd_set_bits *fds, struct timespec *end_time)
|
||||
*rexp = res_ex;
|
||||
cond_resched();
|
||||
}
|
||||
- wait = NULL;
|
||||
+ wait->_qproc = NULL;
|
||||
if (retval || timed_out || signal_pending(current))
|
||||
break;
|
||||
if (table.error) {
|
||||
@@ -720,7 +718,7 @@ struct poll_list {
|
||||
* interested in events matching the pollfd->events mask, and the result
|
||||
* matching that mask is both recorded in pollfd->revents and returned. The
|
||||
* pwait poll_table will be used by the fd-provided poll handler for waiting,
|
||||
- * if non-NULL.
|
||||
+ * if pwait->_qproc is non-NULL.
|
||||
*/
|
||||
static inline unsigned int do_pollfd(struct pollfd *pollfd, poll_table *pwait)
|
||||
{
|
||||
@@ -738,9 +736,7 @@ static inline unsigned int do_pollfd(struct pollfd *pollfd, poll_table *pwait)
|
||||
if (file != NULL) {
|
||||
mask = DEFAULT_POLLMASK;
|
||||
if (file->f_op && file->f_op->poll) {
|
||||
- if (pwait)
|
||||
- pwait->key = pollfd->events |
|
||||
- POLLERR | POLLHUP;
|
||||
+ pwait->_key = pollfd->events|POLLERR|POLLHUP;
|
||||
mask = file->f_op->poll(file, pwait);
|
||||
}
|
||||
/* Mask out unneeded events. */
|
||||
@@ -763,7 +759,7 @@ static int do_poll(unsigned int nfds, struct poll_list *list,
|
||||
|
||||
/* Optimise the no-wait case */
|
||||
if (end_time && !end_time->tv_sec && !end_time->tv_nsec) {
|
||||
- pt = NULL;
|
||||
+ pt->_qproc = NULL;
|
||||
timed_out = 1;
|
||||
}
|
||||
|
||||
@@ -781,22 +777,22 @@ static int do_poll(unsigned int nfds, struct poll_list *list,
|
||||
for (; pfd != pfd_end; pfd++) {
|
||||
/*
|
||||
* Fish for events. If we found one, record it
|
||||
- * and kill the poll_table, so we don't
|
||||
+ * and kill poll_table->_qproc, so we don't
|
||||
* needlessly register any other waiters after
|
||||
* this. They'll get immediately deregistered
|
||||
* when we break out and return.
|
||||
*/
|
||||
if (do_pollfd(pfd, pt)) {
|
||||
count++;
|
||||
- pt = NULL;
|
||||
+ pt->_qproc = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*
|
||||
* All waiters have already been registered, so don't provide
|
||||
- * a poll_table to them on the next loop iteration.
|
||||
+ * a poll_table->_qproc to them on the next loop iteration.
|
||||
*/
|
||||
- pt = NULL;
|
||||
+ pt->_qproc = NULL;
|
||||
if (!count) {
|
||||
count = wait->error;
|
||||
if (signal_pending(current))
|
||||
diff --git a/include/linux/poll.h b/include/linux/poll.h
|
||||
index cf40010..48fe8bc 100644
|
||||
--- a/include/linux/poll.h
|
||||
+++ b/include/linux/poll.h
|
||||
@@ -32,21 +32,46 @@ struct poll_table_struct;
|
||||
*/
|
||||
typedef void (*poll_queue_proc)(struct file *, wait_queue_head_t *, struct poll_table_struct *);
|
||||
|
||||
+/*
|
||||
+ * Do not touch the structure directly, use the access functions
|
||||
+ * poll_does_not_wait() and poll_requested_events() instead.
|
||||
+ */
|
||||
typedef struct poll_table_struct {
|
||||
- poll_queue_proc qproc;
|
||||
- unsigned long key;
|
||||
+ poll_queue_proc _qproc;
|
||||
+ unsigned long _key;
|
||||
} poll_table;
|
||||
|
||||
static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
|
||||
{
|
||||
- if (p && wait_address)
|
||||
- p->qproc(filp, wait_address, p);
|
||||
+ if (p && p->_qproc && wait_address)
|
||||
+ p->_qproc(filp, wait_address, p);
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Return true if it is guaranteed that poll will not wait. This is the case
|
||||
+ * if the poll() of another file descriptor in the set got an event, so there
|
||||
+ * is no need for waiting.
|
||||
+ */
|
||||
+static inline bool poll_does_not_wait(const poll_table *p)
|
||||
+{
|
||||
+ return p == NULL || p->_qproc == NULL;
|
||||
+}
|
||||
+
|
||||
+/*
|
||||
+ * Return the set of events that the application wants to poll for.
|
||||
+ * This is useful for drivers that need to know whether a DMA transfer has
|
||||
+ * to be started implicitly on poll(). You typically only want to do that
|
||||
+ * if the application is actually polling for POLLIN and/or POLLOUT.
|
||||
+ */
|
||||
+static inline unsigned long poll_requested_events(const poll_table *p)
|
||||
+{
|
||||
+ return p ? p->_key : ~0UL;
|
||||
}
|
||||
|
||||
static inline void init_poll_funcptr(poll_table *pt, poll_queue_proc qproc)
|
||||
{
|
||||
- pt->qproc = qproc;
|
||||
- pt->key = ~0UL; /* all events enabled */
|
||||
+ pt->_qproc = qproc;
|
||||
+ pt->_key = ~0UL; /* all events enabled */
|
||||
}
|
||||
|
||||
struct poll_table_entry {
|
||||
diff --git a/include/net/sock.h b/include/net/sock.h
|
||||
index 04bc0b3..a6ba1f8 100644
|
||||
--- a/include/net/sock.h
|
||||
+++ b/include/net/sock.h
|
||||
@@ -1854,7 +1854,7 @@ static inline bool wq_has_sleeper(struct socket_wq *wq)
|
||||
static inline void sock_poll_wait(struct file *filp,
|
||||
wait_queue_head_t *wait_address, poll_table *p)
|
||||
{
|
||||
- if (p && wait_address) {
|
||||
+ if (!poll_does_not_wait(p) && wait_address) {
|
||||
poll_wait(filp, wait_address, p);
|
||||
/*
|
||||
* We need to be sure we are in sync with the
|
||||
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c
|
||||
index eb4277c..d510353 100644
|
||||
--- a/net/unix/af_unix.c
|
||||
+++ b/net/unix/af_unix.c
|
||||
@@ -2206,7 +2206,7 @@ static unsigned int unix_dgram_poll(struct file *file, struct socket *sock,
|
||||
}
|
||||
|
||||
/* No write status requested, avoid expensive OUT tests. */
|
||||
- if (wait && !(wait->key & (POLLWRBAND | POLLWRNORM | POLLOUT)))
|
||||
+ if (!(poll_requested_events(wait) & (POLLWRBAND|POLLWRNORM|POLLOUT)))
|
||||
return mask;
|
||||
|
||||
writable = unix_writable(sk);
|
|
@ -178,7 +178,7 @@ index 0a9326a..859ea84 100644
|
|||
|
||||
static int atl1c_get_eeprom_len(struct net_device *netdev)
|
||||
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c
|
||||
index 23f2ab0..2ea6a21 100644
|
||||
index bd1667c..ff9c738 100644
|
||||
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c
|
||||
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.c
|
||||
@@ -43,7 +43,7 @@ int atl1c_check_eeprom_exist(struct atl1c_hw *hw)
|
||||
|
@ -376,14 +376,14 @@ index 23f2ab0..2ea6a21 100644
|
|||
+ AT_WRITE_REG(hw, REG_MDIO_CTRL, 0);
|
||||
+ atl1c_wait_mdio_idle(hw);
|
||||
+}
|
||||
|
||||
+
|
||||
+void atl1c_start_phy_polling(struct atl1c_hw *hw, u16 clk_sel)
|
||||
+{
|
||||
+ u32 val;
|
||||
+
|
||||
+ if (!(hw->ctrl_flags & ATL1C_FPGA_VERSION))
|
||||
+ return;
|
||||
+
|
||||
|
||||
+ val = MDIO_CTRL_SPRES_PRMBL |
|
||||
+ FIELDX(MDIO_CTRL_CLK_SEL, clk_sel) |
|
||||
+ FIELDX(MDIO_CTRL_REG, 1) |
|
||||
|
@ -2024,7 +2024,7 @@ index 655fc6c..17d935b 100644
|
|||
|
||||
#endif /*_ATL1C_HW_H_*/
|
||||
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
index 47a9bb2..f6f3fe3 100644
|
||||
index 1ef0c92..9cc1570 100644
|
||||
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
|
||||
@@ -24,14 +24,6 @@
|
||||
|
@ -2282,16 +2282,16 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
|
||||
@@ -469,7 +474,7 @@ static int atl1c_set_mac_addr(struct net_device *netdev, void *p)
|
||||
memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
|
||||
@@ -470,7 +475,7 @@ static int atl1c_set_mac_addr(struct net_device *netdev, void *p)
|
||||
memcpy(adapter->hw.mac_addr, addr->sa_data, netdev->addr_len);
|
||||
netdev->addr_assign_type &= ~NET_ADDR_RANDOM;
|
||||
|
||||
- atl1c_hw_set_mac_addr(&adapter->hw);
|
||||
+ atl1c_hw_set_mac_addr(&adapter->hw, adapter->hw.mac_addr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -522,11 +527,16 @@ static int atl1c_set_features(struct net_device *netdev,
|
||||
@@ -523,11 +528,16 @@ static int atl1c_set_features(struct net_device *netdev,
|
||||
static int atl1c_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
{
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
|
@ -2310,7 +2310,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
if (netif_msg_link(adapter))
|
||||
dev_warn(&adapter->pdev->dev, "invalid MTU setting\n");
|
||||
return -EINVAL;
|
||||
@@ -542,14 +552,6 @@ static int atl1c_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
@@ -543,14 +553,6 @@ static int atl1c_change_mtu(struct net_device *netdev, int new_mtu)
|
||||
netdev_update_features(netdev);
|
||||
atl1c_up(adapter);
|
||||
clear_bit(__AT_RESETTING, &adapter->flags);
|
||||
|
@ -2325,7 +2325,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -562,7 +564,7 @@ static int atl1c_mdio_read(struct net_device *netdev, int phy_id, int reg_num)
|
||||
@@ -563,7 +565,7 @@ static int atl1c_mdio_read(struct net_device *netdev, int phy_id, int reg_num)
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
u16 result;
|
||||
|
||||
|
@ -2334,7 +2334,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
return result;
|
||||
}
|
||||
|
||||
@@ -571,7 +573,7 @@ static void atl1c_mdio_write(struct net_device *netdev, int phy_id,
|
||||
@@ -572,7 +574,7 @@ static void atl1c_mdio_write(struct net_device *netdev, int phy_id,
|
||||
{
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
|
@ -2343,7 +2343,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -686,21 +688,15 @@ static void atl1c_set_mac_type(struct atl1c_hw *hw)
|
||||
@@ -687,21 +689,15 @@ static void atl1c_set_mac_type(struct atl1c_hw *hw)
|
||||
|
||||
static int atl1c_setup_mac_funcs(struct atl1c_hw *hw)
|
||||
{
|
||||
|
@ -2367,7 +2367,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
hw->ctrl_flags |= ATL1C_ASPM_CTRL_MON;
|
||||
|
||||
if (hw->nic_type == athr_l1c ||
|
||||
@@ -709,6 +705,55 @@ static int atl1c_setup_mac_funcs(struct atl1c_hw *hw)
|
||||
@@ -710,6 +706,55 @@ static int atl1c_setup_mac_funcs(struct atl1c_hw *hw)
|
||||
hw->link_cap_flags |= ATL1C_LINK_CAP_1000M;
|
||||
return 0;
|
||||
}
|
||||
|
@ -2423,7 +2423,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
/*
|
||||
* atl1c_sw_init - Initialize general software structures (struct atl1c_adapter)
|
||||
* @adapter: board private structure to initialize
|
||||
@@ -728,9 +773,8 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
|
||||
@@ -729,9 +774,8 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
|
||||
device_set_wakeup_enable(&pdev->dev, false);
|
||||
adapter->link_speed = SPEED_0;
|
||||
adapter->link_duplex = FULL_DUPLEX;
|
||||
|
@ -2434,7 +2434,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
hw->vendor_id = pdev->vendor;
|
||||
hw->device_id = pdev->device;
|
||||
@@ -745,26 +789,18 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
|
||||
@@ -746,26 +790,18 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
|
||||
dev_err(&pdev->dev, "set mac function pointers failed\n");
|
||||
return -1;
|
||||
}
|
||||
|
@ -2463,7 +2463,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
hw->rx_imt = 200;
|
||||
hw->tx_imt = 1000;
|
||||
|
||||
@@ -772,9 +808,6 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
|
||||
@@ -773,9 +809,6 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter *adapter)
|
||||
hw->rfd_burst = 8;
|
||||
hw->dma_order = atl1c_dma_ord_out;
|
||||
hw->dmar_block = atl1c_dma_req_1024;
|
||||
|
@ -2473,7 +2473,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
if (atl1c_alloc_queues(adapter)) {
|
||||
dev_err(&pdev->dev, "Unable to allocate memory for queues\n");
|
||||
@@ -850,24 +883,22 @@ static void atl1c_clean_tx_ring(struct atl1c_adapter *adapter,
|
||||
@@ -851,24 +884,22 @@ static void atl1c_clean_tx_ring(struct atl1c_adapter *adapter,
|
||||
*/
|
||||
static void atl1c_clean_rx_ring(struct atl1c_adapter *adapter)
|
||||
{
|
||||
|
@ -2510,7 +2510,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -876,8 +907,8 @@ static void atl1c_clean_rx_ring(struct atl1c_adapter *adapter)
|
||||
@@ -877,8 +908,8 @@ static void atl1c_clean_rx_ring(struct atl1c_adapter *adapter)
|
||||
static void atl1c_init_ring_ptrs(struct atl1c_adapter *adapter)
|
||||
{
|
||||
struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring;
|
||||
|
@ -2521,7 +2521,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
struct atl1c_buffer *buffer_info;
|
||||
int i, j;
|
||||
|
||||
@@ -889,15 +920,13 @@ static void atl1c_init_ring_ptrs(struct atl1c_adapter *adapter)
|
||||
@@ -890,15 +921,13 @@ static void atl1c_init_ring_ptrs(struct atl1c_adapter *adapter)
|
||||
ATL1C_SET_BUFFER_STATE(&buffer_info[i],
|
||||
ATL1C_BUFFER_FREE);
|
||||
}
|
||||
|
@ -2544,7 +2544,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
}
|
||||
|
||||
@@ -934,27 +963,23 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
@@ -935,27 +964,23 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
{
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
struct atl1c_tpd_ring *tpd_ring = adapter->tpd_ring;
|
||||
|
@ -2576,7 +2576,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
tpd_ring->buffer_info = kzalloc(size, GFP_KERNEL);
|
||||
if (unlikely(!tpd_ring->buffer_info)) {
|
||||
dev_err(&pdev->dev, "kzalloc failed, size = %d\n",
|
||||
@@ -967,12 +992,11 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
@@ -968,12 +993,11 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
count += tpd_ring[i].count;
|
||||
}
|
||||
|
||||
|
@ -2594,7 +2594,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
/*
|
||||
* real ring DMA buffer
|
||||
* each ring/block may need up to 8 bytes for alignment, hence the
|
||||
@@ -982,8 +1006,7 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
@@ -983,8 +1007,7 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
sizeof(struct atl1c_tpd_desc) * tpd_ring->count * 2 +
|
||||
sizeof(struct atl1c_rx_free_desc) * rx_desc_count +
|
||||
sizeof(struct atl1c_recv_ret_status) * rx_desc_count +
|
||||
|
@ -2604,7 +2604,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
ring_header->desc = pci_alloc_consistent(pdev, ring_header->size,
|
||||
&ring_header->dma);
|
||||
@@ -1004,25 +1027,18 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
@@ -1005,25 +1028,18 @@ static int atl1c_setup_ring_resources(struct atl1c_adapter *adapter)
|
||||
offset += roundup(tpd_ring[i].size, 8);
|
||||
}
|
||||
/* init RFD ring */
|
||||
|
@ -2639,7 +2639,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
return 0;
|
||||
|
||||
err_nomem:
|
||||
@@ -1033,26 +1049,20 @@ err_nomem:
|
||||
@@ -1034,26 +1050,20 @@ err_nomem:
|
||||
static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
{
|
||||
struct atl1c_hw *hw = &adapter->hw;
|
||||
|
@ -2670,7 +2670,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
(u32)(tpd_ring[atl1c_trans_high].dma &
|
||||
AT_DMA_LO_ADDR_MASK));
|
||||
AT_WRITE_REG(hw, REG_TPD_RING_SIZE,
|
||||
@@ -1061,31 +1071,21 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
@@ -1062,31 +1072,21 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
|
||||
/* RFD */
|
||||
AT_WRITE_REG(hw, REG_RX_BASE_ADDR_HI,
|
||||
|
@ -2709,7 +2709,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
if (hw->nic_type == athr_l2c_b) {
|
||||
AT_WRITE_REG(hw, REG_SRAM_RXF_LEN, 0x02a0L);
|
||||
AT_WRITE_REG(hw, REG_SRAM_TXF_LEN, 0x0100L);
|
||||
@@ -1096,13 +1096,6 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
@@ -1097,13 +1097,6 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
AT_WRITE_REG(hw, REG_TXF_WATER_MARK, 0); /* TX watermark, to enter l1 state.*/
|
||||
AT_WRITE_REG(hw, REG_RXD_DMA_CTRL, 0); /* RXD threshold.*/
|
||||
}
|
||||
|
@ -2723,7 +2723,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
/* Load all of base address above */
|
||||
AT_WRITE_REG(hw, REG_LOAD_PTR, 1);
|
||||
}
|
||||
@@ -1110,32 +1103,26 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
@@ -1111,32 +1104,26 @@ static void atl1c_configure_des_ring(struct atl1c_adapter *adapter)
|
||||
static void atl1c_configure_tx(struct atl1c_adapter *adapter)
|
||||
{
|
||||
struct atl1c_hw *hw = &adapter->hw;
|
||||
|
@ -2770,7 +2770,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
AT_WRITE_REG(hw, REG_TXQ_CTRL, txq_ctrl_data);
|
||||
}
|
||||
@@ -1150,34 +1137,13 @@ static void atl1c_configure_rx(struct atl1c_adapter *adapter)
|
||||
@@ -1151,34 +1138,13 @@ static void atl1c_configure_rx(struct atl1c_adapter *adapter)
|
||||
|
||||
if (hw->ctrl_flags & ATL1C_RX_IPV6_CHKSUM)
|
||||
rxq_ctrl_data |= IPV6_CHKSUM_CTRL_EN;
|
||||
|
@ -2810,7 +2810,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
static void atl1c_configure_dma(struct atl1c_adapter *adapter)
|
||||
@@ -1185,36 +1151,11 @@ static void atl1c_configure_dma(struct atl1c_adapter *adapter)
|
||||
@@ -1186,36 +1152,11 @@ static void atl1c_configure_dma(struct atl1c_adapter *adapter)
|
||||
struct atl1c_hw *hw = &adapter->hw;
|
||||
u32 dma_ctrl_data;
|
||||
|
||||
|
@ -2852,7 +2852,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
AT_WRITE_REG(hw, REG_DMA_CTRL, dma_ctrl_data);
|
||||
}
|
||||
@@ -1229,52 +1170,53 @@ static int atl1c_stop_mac(struct atl1c_hw *hw)
|
||||
@@ -1230,52 +1171,53 @@ static int atl1c_stop_mac(struct atl1c_hw *hw)
|
||||
u32 data;
|
||||
|
||||
AT_READ_REG(hw, REG_RXQ_CTRL, &data);
|
||||
|
@ -2874,13 +2874,10 @@ index 47a9bb2..f6f3fe3 100644
|
|||
AT_WRITE_REG(hw, REG_MAC_CTRL, data);
|
||||
|
||||
- return (int)atl1c_wait_until_idle(hw);
|
||||
+ return (int)atl1c_wait_until_idle(hw,
|
||||
+ IDLE_STATUS_TXMAC_BUSY | IDLE_STATUS_RXMAC_BUSY);
|
||||
}
|
||||
|
||||
-}
|
||||
-
|
||||
-static void atl1c_enable_rx_ctrl(struct atl1c_hw *hw)
|
||||
+static void atl1c_start_mac(struct atl1c_adapter *adapter)
|
||||
{
|
||||
-{
|
||||
- u32 data;
|
||||
-
|
||||
- AT_READ_REG(hw, REG_RXQ_CTRL, &data);
|
||||
|
@ -2899,10 +2896,13 @@ index 47a9bb2..f6f3fe3 100644
|
|||
- }
|
||||
- data |= RXQ_CTRL_EN;
|
||||
- AT_WRITE_REG(hw, REG_RXQ_CTRL, data);
|
||||
-}
|
||||
-
|
||||
+ return (int)atl1c_wait_until_idle(hw,
|
||||
+ IDLE_STATUS_TXMAC_BUSY | IDLE_STATUS_RXMAC_BUSY);
|
||||
}
|
||||
|
||||
-static void atl1c_enable_tx_ctrl(struct atl1c_hw *hw)
|
||||
-{
|
||||
+static void atl1c_start_mac(struct atl1c_adapter *adapter)
|
||||
{
|
||||
- u32 data;
|
||||
+ struct atl1c_hw *hw = &adapter->hw;
|
||||
+ u32 mac, txq, rxq;
|
||||
|
@ -2938,7 +2938,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -1286,10 +1228,7 @@ static int atl1c_reset_mac(struct atl1c_hw *hw)
|
||||
@@ -1287,10 +1229,7 @@ static int atl1c_reset_mac(struct atl1c_hw *hw)
|
||||
{
|
||||
struct atl1c_adapter *adapter = (struct atl1c_adapter *)hw->adapter;
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
|
@ -2950,7 +2950,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
atl1c_stop_mac(hw);
|
||||
/*
|
||||
@@ -1298,194 +1237,148 @@ static int atl1c_reset_mac(struct atl1c_hw *hw)
|
||||
@@ -1299,194 +1238,148 @@ static int atl1c_reset_mac(struct atl1c_hw *hw)
|
||||
* the current PCI configuration. The global reset bit is self-
|
||||
* clearing, and should clear within a microsecond.
|
||||
*/
|
||||
|
@ -3238,7 +3238,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
/* clear interrupt status */
|
||||
AT_WRITE_REG(hw, REG_ISR, 0xFFFFFFFF);
|
||||
/* Clear any WOL status */
|
||||
@@ -1524,30 +1417,39 @@ static int atl1c_configure(struct atl1c_adapter *adapter)
|
||||
@@ -1525,30 +1418,39 @@ static int atl1c_configure(struct atl1c_adapter *adapter)
|
||||
master_ctrl_data |= MASTER_CTRL_SA_TIMER_EN;
|
||||
AT_WRITE_REG(hw, REG_MASTER_CTRL, master_ctrl_data);
|
||||
|
||||
|
@ -3290,7 +3290,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
static void atl1c_update_hw_stats(struct atl1c_adapter *adapter)
|
||||
{
|
||||
u16 hw_reg_addr = 0;
|
||||
@@ -1634,16 +1536,11 @@ static bool atl1c_clean_tx_irq(struct atl1c_adapter *adapter,
|
||||
@@ -1635,16 +1537,11 @@ static bool atl1c_clean_tx_irq(struct atl1c_adapter *adapter,
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
u16 next_to_clean = atomic_read(&tpd_ring->next_to_clean);
|
||||
u16 hw_next_to_clean;
|
||||
|
@ -3310,7 +3310,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
while (next_to_clean != hw_next_to_clean) {
|
||||
buffer_info = &tpd_ring->buffer_info[next_to_clean];
|
||||
@@ -1745,9 +1642,9 @@ static inline void atl1c_rx_checksum(struct atl1c_adapter *adapter,
|
||||
@@ -1746,9 +1643,9 @@ static inline void atl1c_rx_checksum(struct atl1c_adapter *adapter,
|
||||
skb_checksum_none_assert(skb);
|
||||
}
|
||||
|
||||
|
@ -3322,7 +3322,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
struct pci_dev *pdev = adapter->pdev;
|
||||
struct atl1c_buffer *buffer_info, *next_info;
|
||||
struct sk_buff *skb;
|
||||
@@ -1799,7 +1696,7 @@ static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter, const int ringid
|
||||
@@ -1800,7 +1697,7 @@ static int atl1c_alloc_rx_buffer(struct atl1c_adapter *adapter, const int ringid
|
||||
/* TODO: update mailbox here */
|
||||
wmb();
|
||||
rfd_ring->next_to_use = rfd_next_to_use;
|
||||
|
@ -3331,7 +3331,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
rfd_ring->next_to_use & MB_RFDX_PROD_IDX_MASK);
|
||||
}
|
||||
|
||||
@@ -1838,7 +1735,7 @@ static void atl1c_clean_rfd(struct atl1c_rfd_ring *rfd_ring,
|
||||
@@ -1839,7 +1736,7 @@ static void atl1c_clean_rfd(struct atl1c_rfd_ring *rfd_ring,
|
||||
rfd_ring->next_to_clean = rfd_index;
|
||||
}
|
||||
|
||||
|
@ -3340,7 +3340,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
int *work_done, int work_to_do)
|
||||
{
|
||||
u16 rfd_num, rfd_index;
|
||||
@@ -1846,8 +1743,8 @@ static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter, u8 que,
|
||||
@@ -1847,8 +1744,8 @@ static void atl1c_clean_rx_irq(struct atl1c_adapter *adapter, u8 que,
|
||||
u16 length;
|
||||
struct pci_dev *pdev = adapter->pdev;
|
||||
struct net_device *netdev = adapter->netdev;
|
||||
|
@ -3351,7 +3351,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
struct sk_buff *skb;
|
||||
struct atl1c_recv_ret_status *rrs;
|
||||
struct atl1c_buffer *buffer_info;
|
||||
@@ -1913,7 +1810,7 @@ rrs_checked:
|
||||
@@ -1914,7 +1811,7 @@ rrs_checked:
|
||||
count++;
|
||||
}
|
||||
if (count)
|
||||
|
@ -3360,7 +3360,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -1930,7 +1827,7 @@ static int atl1c_clean(struct napi_struct *napi, int budget)
|
||||
@@ -1931,7 +1828,7 @@ static int atl1c_clean(struct napi_struct *napi, int budget)
|
||||
if (!netif_carrier_ok(adapter->netdev))
|
||||
goto quit_polling;
|
||||
/* just enable one RXQ */
|
||||
|
@ -3369,7 +3369,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
if (work_done < budget) {
|
||||
quit_polling:
|
||||
@@ -2205,23 +2102,10 @@ static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb,
|
||||
@@ -2206,23 +2103,10 @@ static void atl1c_tx_queue(struct atl1c_adapter *adapter, struct sk_buff *skb,
|
||||
struct atl1c_tpd_desc *tpd, enum atl1c_trans_queue type)
|
||||
{
|
||||
struct atl1c_tpd_ring *tpd_ring = &adapter->tpd_ring[type];
|
||||
|
@ -3396,7 +3396,17 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
static netdev_tx_t atl1c_xmit_frame(struct sk_buff *skb,
|
||||
@@ -2327,44 +2211,38 @@ static int atl1c_request_irq(struct atl1c_adapter *adapter)
|
||||
@@ -2307,8 +2191,7 @@ static int atl1c_request_irq(struct atl1c_adapter *adapter)
|
||||
"Unable to allocate MSI interrupt Error: %d\n",
|
||||
err);
|
||||
adapter->have_msi = false;
|
||||
- } else
|
||||
- netdev->irq = pdev->irq;
|
||||
+ }
|
||||
|
||||
if (!adapter->have_msi)
|
||||
flags |= IRQF_SHARED;
|
||||
@@ -2328,44 +2211,38 @@ static int atl1c_request_irq(struct atl1c_adapter *adapter)
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -3420,7 +3430,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
- atl1c_init_ring_ptrs(adapter);
|
||||
- atl1c_set_multi(netdev);
|
||||
- atl1c_restore_vlan(adapter);
|
||||
-
|
||||
|
||||
- for (i = 0; i < adapter->num_rx_queues; i++) {
|
||||
- num = atl1c_alloc_rx_buffer(adapter, i);
|
||||
- if (unlikely(num == 0)) {
|
||||
|
@ -3428,7 +3438,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
- goto err_alloc_rx;
|
||||
- }
|
||||
- }
|
||||
|
||||
-
|
||||
- if (atl1c_configure(adapter)) {
|
||||
- err = -EIO;
|
||||
+ err = atl1c_configure(adapter);
|
||||
|
@ -3453,7 +3463,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
atl1c_clean_rx_ring(adapter);
|
||||
return err;
|
||||
}
|
||||
@@ -2382,15 +2260,15 @@ static void atl1c_down(struct atl1c_adapter *adapter)
|
||||
@@ -2383,15 +2260,15 @@ static void atl1c_down(struct atl1c_adapter *adapter)
|
||||
napi_disable(&adapter->napi);
|
||||
atl1c_irq_disable(adapter);
|
||||
atl1c_free_irq(adapter);
|
||||
|
@ -3472,7 +3482,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
}
|
||||
|
||||
/*
|
||||
@@ -2423,13 +2301,6 @@ static int atl1c_open(struct net_device *netdev)
|
||||
@@ -2424,13 +2301,6 @@ static int atl1c_open(struct net_device *netdev)
|
||||
if (unlikely(err))
|
||||
goto err_up;
|
||||
|
||||
|
@ -3486,7 +3496,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
return 0;
|
||||
|
||||
err_up:
|
||||
@@ -2455,6 +2326,8 @@ static int atl1c_close(struct net_device *netdev)
|
||||
@@ -2456,6 +2326,8 @@ static int atl1c_close(struct net_device *netdev)
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
WARN_ON(test_bit(__AT_RESETTING, &adapter->flags));
|
||||
|
@ -3495,7 +3505,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
atl1c_down(adapter);
|
||||
atl1c_free_ring_resources(adapter);
|
||||
return 0;
|
||||
@@ -2466,10 +2339,6 @@ static int atl1c_suspend(struct device *dev)
|
||||
@@ -2467,10 +2339,6 @@ static int atl1c_suspend(struct device *dev)
|
||||
struct net_device *netdev = pci_get_drvdata(pdev);
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
struct atl1c_hw *hw = &adapter->hw;
|
||||
|
@ -3506,7 +3516,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
u32 wufc = adapter->wol;
|
||||
|
||||
atl1c_disable_l0s_l1(hw);
|
||||
@@ -2480,75 +2349,10 @@ static int atl1c_suspend(struct device *dev)
|
||||
@@ -2481,75 +2349,10 @@ static int atl1c_suspend(struct device *dev)
|
||||
netif_device_detach(netdev);
|
||||
|
||||
if (wufc)
|
||||
|
@ -3584,7 +3594,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -2561,8 +2365,7 @@ static int atl1c_resume(struct device *dev)
|
||||
@@ -2562,8 +2365,7 @@ static int atl1c_resume(struct device *dev)
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
AT_WRITE_REG(&adapter->hw, REG_WOL_CTRL, 0);
|
||||
|
@ -3594,7 +3604,22 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
atl1c_phy_reset(&adapter->hw);
|
||||
atl1c_reset_mac(&adapter->hw);
|
||||
@@ -2713,7 +2516,7 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
|
||||
@@ -2616,7 +2418,6 @@ static int atl1c_init_netdev(struct net_device *netdev, struct pci_dev *pdev)
|
||||
SET_NETDEV_DEV(netdev, &pdev->dev);
|
||||
pci_set_drvdata(pdev, netdev);
|
||||
|
||||
- netdev->irq = pdev->irq;
|
||||
netdev->netdev_ops = &atl1c_netdev_ops;
|
||||
netdev->watchdog_timeo = AT_TX_WATCHDOG;
|
||||
atl1c_set_ethtool_ops(netdev);
|
||||
@@ -2706,14 +2507,13 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
|
||||
dev_err(&pdev->dev, "cannot map device registers\n");
|
||||
goto err_ioremap;
|
||||
}
|
||||
- netdev->base_addr = (unsigned long)adapter->hw.hw_addr;
|
||||
|
||||
/* init mii data */
|
||||
adapter->mii.dev = netdev;
|
||||
adapter->mii.mdio_read = atl1c_mdio_read;
|
||||
adapter->mii.mdio_write = atl1c_mdio_write;
|
||||
adapter->mii.phy_id_mask = 0x1f;
|
||||
|
@ -3603,7 +3628,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
netif_napi_add(netdev, &adapter->napi, atl1c_clean, 64);
|
||||
setup_timer(&adapter->phy_config_timer, atl1c_phy_config,
|
||||
(unsigned long)adapter);
|
||||
@@ -2723,8 +2526,7 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
|
||||
@@ -2723,8 +2523,7 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
|
||||
dev_err(&pdev->dev, "net device private data init failed\n");
|
||||
goto err_sw_init;
|
||||
}
|
||||
|
@ -3613,7 +3638,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
|
||||
/* Init GPHY as early as possible due to power saving issue */
|
||||
atl1c_phy_reset(&adapter->hw);
|
||||
@@ -2753,7 +2555,7 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
|
||||
@@ -2752,7 +2551,7 @@ static int __devinit atl1c_probe(struct pci_dev *pdev,
|
||||
dev_dbg(&pdev->dev, "mac address : %pM\n",
|
||||
adapter->hw.mac_addr);
|
||||
|
||||
|
@ -3622,7 +3647,7 @@ index 47a9bb2..f6f3fe3 100644
|
|||
INIT_WORK(&adapter->common_task, atl1c_common_task);
|
||||
adapter->work_event = 0;
|
||||
err = register_netdev(netdev);
|
||||
@@ -2798,6 +2600,8 @@ static void __devexit atl1c_remove(struct pci_dev *pdev)
|
||||
@@ -2796,6 +2595,8 @@ static void __devexit atl1c_remove(struct pci_dev *pdev)
|
||||
struct atl1c_adapter *adapter = netdev_priv(netdev);
|
||||
|
||||
unregister_netdev(netdev);
|
|
@ -1,105 +0,0 @@
|
|||
From 2a5a5ec620a29d4ba07743c3151cdf0a417c8f8c Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Date: Thu, 2 Feb 2012 10:32:18 +0200
|
||||
Subject: [PATCH] Bluetooth: Use list _safe deleting from conn chan_list
|
||||
|
||||
Fixes possible bug when deleting element from the list in
|
||||
function hci_chan_list_flush. list_for_each_entry_rcu is used
|
||||
and after deleting element from the list we also free pointer
|
||||
and then list_entry_rcu is taken from freed pointer.
|
||||
|
||||
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Acked-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
---
|
||||
net/bluetooth/hci_conn.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
|
||||
index b074bd6..b4ecdde 100644
|
||||
--- a/net/bluetooth/hci_conn.c
|
||||
+++ b/net/bluetooth/hci_conn.c
|
||||
@@ -975,10 +975,10 @@ int hci_chan_del(struct hci_chan *chan)
|
||||
|
||||
void hci_chan_list_flush(struct hci_conn *conn)
|
||||
{
|
||||
- struct hci_chan *chan;
|
||||
+ struct hci_chan *chan, *n;
|
||||
|
||||
BT_DBG("conn %p", conn);
|
||||
|
||||
- list_for_each_entry_rcu(chan, &conn->chan_list, list)
|
||||
+ list_for_each_entry_safe(chan, n, &conn->chan_list, list)
|
||||
hci_chan_del(chan);
|
||||
}
|
||||
--
|
||||
1.7.6.5
|
||||
|
||||
From 3c4e0df028935618d052235ba85bc7079be13394 Mon Sep 17 00:00:00 2001
|
||||
From: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Date: Thu, 2 Feb 2012 10:32:17 +0200
|
||||
Subject: [PATCH] Bluetooth: Use list _safe deleting from conn_hash_list
|
||||
|
||||
Use list_for_each_entry_safe which is safe version against removal
|
||||
of list entry. Otherwise we remove hci_conn element and reference
|
||||
next element which result in accessing LIST_POISON.
|
||||
|
||||
[ 95.571834] Bluetooth: unknown link type 127
|
||||
[ 95.578349] BUG: unable to handle kernel paging request at 20002000
|
||||
[ 95.580236] IP: [<20002000>] 0x20001fff
|
||||
[ 95.580763] *pde = 00000000
|
||||
[ 95.581196] Oops: 0000 [#1] SMP
|
||||
...
|
||||
[ 95.582298] Pid: 3355, comm: hciconfig Tainted: G O 3.2.0-VirttualBox
|
||||
[ 95.582298] EIP: 0060:[<20002000>] EFLAGS: 00210206 CPU: 0
|
||||
[ 95.582298] EIP is at 0x20002000
|
||||
...
|
||||
[ 95.582298] Call Trace:
|
||||
[ 95.582298] [<f8231ab6>] ? hci_conn_hash_flush+0x76/0xf0 [bluetooth]
|
||||
[ 95.582298] [<f822bcb1>] hci_dev_do_close+0xc1/0x2e0 [bluetooth]
|
||||
[ 95.582298] [<f822d679>] ? hci_dev_get+0x69/0xb0 [bluetooth]
|
||||
[ 95.582298] [<f822e1da>] hci_dev_close+0x2a/0x50 [bluetooth]
|
||||
[ 95.582298] [<f824102f>] hci_sock_ioctl+0x1af/0x3f0 [bluetooth]
|
||||
[ 95.582298] [<c11153ea>] ? handle_pte_fault+0x8a/0x8f0
|
||||
[ 95.582298] [<c146becf>] sock_ioctl+0x5f/0x260
|
||||
[ 95.582298] [<c146be70>] ? sock_fasync+0x90/0x90
|
||||
[ 95.582298] [<c1152b33>] do_vfs_ioctl+0x83/0x5b0
|
||||
[ 95.582298] [<c1563f87>] ? do_page_fault+0x297/0x500
|
||||
[ 95.582298] [<c1563cf0>] ? spurious_fault+0xd0/0xd0
|
||||
[ 95.582298] [<c107165b>] ? up_read+0x1b/0x30
|
||||
[ 95.582298] [<c1563f87>] ? do_page_fault+0x297/0x500
|
||||
[ 95.582298] [<c100aa9f>] ? init_fpu+0xef/0x160
|
||||
[ 95.582298] [<c15617c0>] ? do_debug+0x180/0x180
|
||||
[ 95.582298] [<c100a958>] ? fpu_finit+0x28/0x80
|
||||
[ 95.582298] [<c11530e7>] sys_ioctl+0x87/0x90
|
||||
[ 95.582298] [<c156795f>] sysenter_do_call+0x12/0x38
|
||||
...
|
||||
|
||||
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
|
||||
Acked-by: Marcel Holtmann <marcel@holtmann.org>
|
||||
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
|
||||
---
|
||||
net/bluetooth/hci_conn.c | 4 ++--
|
||||
1 files changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c
|
||||
index aca71c0..b074bd6 100644
|
||||
--- a/net/bluetooth/hci_conn.c
|
||||
+++ b/net/bluetooth/hci_conn.c
|
||||
@@ -795,11 +795,11 @@ timer:
|
||||
void hci_conn_hash_flush(struct hci_dev *hdev)
|
||||
{
|
||||
struct hci_conn_hash *h = &hdev->conn_hash;
|
||||
- struct hci_conn *c;
|
||||
+ struct hci_conn *c, *n;
|
||||
|
||||
BT_DBG("hdev %s", hdev->name);
|
||||
|
||||
- list_for_each_entry_rcu(c, &h->list, list) {
|
||||
+ list_for_each_entry_safe(c, n, &h->list, list) {
|
||||
c->state = BT_CLOSED;
|
||||
|
||||
hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
|
||||
--
|
||||
1.7.6.5
|
||||
|
|
@ -1,15 +1,35 @@
|
|||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
# CONFIG_SMP is not set
|
||||
CONFIG_SMP=y
|
||||
CONFIG_SMP_ON_UP=y
|
||||
CONFIG_ARM_CPU_TOPOLOGY=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
|
||||
# CONFIG_CMDLINE_FORCE is not set
|
||||
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
|
||||
CONFIG_ARCH_VERSATILE=y
|
||||
CONFIG_ARCH_VERSATILE_PB=y
|
||||
CONFIG_MACH_VERSATILE_AB=y
|
||||
CONFIG_MACH_VERSATILE_DT=y
|
||||
CONFIG_ARCH_VEXPRESS=y
|
||||
CONFIG_ARCH_VEXPRESS_CA9X4=y
|
||||
CONFIG_ARCH_VEXPRESS_DT=y
|
||||
CONFIG_PLAT_VERSATILE_CLCD=y
|
||||
CONFIG_PLAT_VERSATILE_SCHED_CLOCK=y
|
||||
CONFIG_PLAT_VERSATILE=y
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
|
||||
CONFIG_CPU_V7=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_32v7=y
|
||||
CONFIG_CPU_ABRT_EV7=y
|
||||
CONFIG_CPU_PABRT_V7=y
|
||||
CONFIG_CPU_CACHE_V7=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_TLB_V7=y
|
||||
CONFIG_CPU_HAS_ASID=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
|
||||
CONFIG_HIGHMEM=y
|
||||
# CONFIG_HIGHPTE is not set
|
||||
|
@ -26,9 +46,18 @@ CONFIG_ZBOOT_ROM_BSS=0
|
|||
|
||||
CONFIG_ATAGS_PROC=y
|
||||
|
||||
CONFIG_CPU_IDLE=y
|
||||
# CONFIG_CPU_IDLE_GOV_LADDER is not set
|
||||
ONFIG_CPU_IDLE_GOV_MENU=y
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
# CONFIG_FPE_NWFPE is not set
|
||||
CONFIG_FPE_FASTFPE=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
|
||||
CONFIG_PM=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
|
@ -42,15 +71,12 @@ CONFIG_ARM_THUMB=y
|
|||
CONFIG_AEABI=y
|
||||
CONFIG_OABI_COMPAT=y
|
||||
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
|
||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
|
||||
|
||||
CONFIG_CMDLINE="console=ttyAM0,115200 root=/dev/sda1 rootdelay=20"
|
||||
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_CPU=y
|
||||
|
||||
|
@ -94,16 +120,20 @@ CONFIG_USB_TUSB6010=y
|
|||
|
||||
CONFIG_MMC_ARMMMCI=m
|
||||
CONFIG_MMC_DW=m
|
||||
CONFIG_MMC_DW_PLTFM=y
|
||||
# CONFIG_MMC_DW_PCI is not set
|
||||
# CONFIG_MMC_DW_IDMAC is not set
|
||||
|
||||
CONFIG_RTC_DRV_PL030=m
|
||||
CONFIG_RTC_DRV_PL031=m
|
||||
CONFIG_RTC_DRV_PL030=y
|
||||
CONFIG_RTC_DRV_PL031=y
|
||||
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_ERRORS is not set
|
||||
# CONFIG_DEBUG_LL is not set
|
||||
# CONFIG_DEBUG_PER_CPU_MAPS is not set
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
|
||||
CONFIG_ARM_UNWIND=y
|
||||
|
||||
|
@ -164,6 +194,36 @@ CONFIG_PL330_DMA=y
|
|||
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_LSM_MMAP_MIN_ADDR=32768
|
||||
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_ARM_THUMBEE is not set
|
||||
CONFIG_SWP_EMULATE=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_CACHE_L2X0=y
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
# CONFIG_ARM_ERRATA_458693 is not set
|
||||
# CONFIG_ARM_ERRATA_460075 is not set
|
||||
# CONFIG_ARM_ERRATA_742230 is not set
|
||||
# CONFIG_ARM_ERRATA_742231 is not set
|
||||
# CONFIG_PL310_ERRATA_588369 is not set
|
||||
# CONFIG_PL310_ERRATA_727915 is not set
|
||||
# CONFIG_ARM_ERRATA_743622 is not set
|
||||
# CONFIG_ARM_ERRATA_754322 is not set
|
||||
# CONFIG_ARM_ERRATA_754327 is not set
|
||||
# CONFIG_ARM_ERRATA_764369 is not set
|
||||
# CONFIG_PL310_ERRATA_769419 is not set
|
||||
CONFIG_SCHED_MC=y
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_LOCAL_TIMERS=y
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
# CONFIG_PATA_PLATFORM is not set
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_BROADCOM=y
|
||||
# CONFIG_SERIAL_AMBA_PL010 is not set
|
||||
# CONFIG_MPCORE_WATCHDOG is not set
|
||||
|
||||
CONFIG_DVB_PLL=m
|
||||
CONFIG_DVB_TDA1004X=m
|
||||
|
||||
# disable TPM on arm at least on the trimslices it causes havoc
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_IMA is not set
|
||||
|
@ -179,6 +239,7 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768
|
|||
# CONFIG_DRM_RADEON is not set
|
||||
# CONFIG_ATM_HE is not set
|
||||
# CONFIG_SCSI_ACARD is not set
|
||||
# CONFIG_SFC is not set
|
||||
|
||||
# these all currently fail due to missing symbols __bad_udelay or
|
||||
# error: implicit declaration of function ‘iowrite32be’
|
||||
|
@ -186,24 +247,25 @@ CONFIG_LSM_MMAP_MIN_ADDR=32768
|
|||
# CONFIG_DRM_NOUVEAU is not set
|
||||
# CONFIG_MLX4_EN is not set
|
||||
|
||||
# drivers/input/touchscreen/eeti_ts.c:65:2: error: implicit declaration of function 'irq_to_gpio' [-Werror=implicit-function-declaration]
|
||||
# CONFIG_TOUCHSCREEN_EETI is not set
|
||||
# CONFIG_TOUCHSCREEN_EGALAX is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
#
|
||||
# FIXME: Guesses, need checking
|
||||
# CONFIG_MACH_EUKREA_CPUIMX35SD is not set
|
||||
CONFIG_ARM_ERRATA_720789=y
|
||||
CONFIG_ARM_ERRATA_751472=y
|
||||
<<<<<<< HEAD
|
||||
=======
|
||||
CONFIG_ARM_ERRATA_326103=y
|
||||
CONFIG_OMAP4_ERRATA_I688=y
|
||||
>>>>>>> 99667a9... Linux 3.3.5
|
||||
# CONFIG_OMAP4_ERRATA_I688 is not set
|
||||
# CONFIG_FB_MX3 is not set
|
||||
# CONFIG_MX3_IPU is not set
|
||||
# CONFIG_MX3_IPU_IRQS is not set
|
||||
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_NET_VENDOR_CIRRUS is not set
|
||||
# CONFIG_CS89x0 is not set
|
||||
|
||||
# CONFIG_OF_SELFTEST is not set
|
||||
# CONFIG_MACH_IMX51_DT is not set
|
||||
# CONFIG_MACH_IMX53_DT is not set
|
||||
# CONFIG_MACH_MX53_EVK is not set
|
||||
|
@ -211,3 +273,93 @@ CONFIG_OMAP4_ERRATA_I688=y
|
|||
# CONFIG_MACH_MX53_LOCO is not set
|
||||
# CONFIG_MACH_MX53_ARD is not set
|
||||
# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
|
||||
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_INPUT_GP2A=m
|
||||
CONFIG_INPUT_GPIO_TILT_POLLED=m
|
||||
|
||||
CONFIG_BPF_JIT=y
|
||||
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_AFS_PARTS=y
|
||||
CONFIG_MTD_CHAR=m
|
||||
CONFIG_MTD_BLKDEVS=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_BLOCK_RO is not set
|
||||
# CONFIG_MTD_AR7_PARTS is not set
|
||||
CONFIG_MTD_CFI=m
|
||||
CONFIG_MTD_CFI_AMDSTD=m
|
||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||
CONFIG_MTD_CFI_NOSWAP=y
|
||||
CONFIG_MTD_CFI_GEOMETRY=y
|
||||
CONFIG_MTD_CFI_I1=y
|
||||
CONFIG_MTD_CFI_I2=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_STAA=y
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
CONFIG_MTD_DOC2000=m
|
||||
CONFIG_MTD_DOC2001=m
|
||||
CONFIG_MTD_DOC2001PLUS=m
|
||||
# CONFIG_MTD_DOCPROBE_ADVANCED is not set
|
||||
CONFIG_MTD_ALAUDA=m
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
CONFIG_MTD_JEDECPROBE=m
|
||||
CONFIG_MTD_GEN_PROBE=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_4 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
CONFIG_MTD_PHYSMAP=m
|
||||
# CONFIG_MTD_PHYSMAP_COMPAT is not set
|
||||
CONFIG_MTD_M25P80=m
|
||||
CONFIG_M25PXX_USE_FAST_READ=y
|
||||
CONFIG_MTD_NAND=m
|
||||
CONFIG_MTD_NAND_ECC=m
|
||||
CONFIG_MTD_NAND_IDS=m
|
||||
# CONFIG_MTD_NAND_CAFE is not set
|
||||
# CONFIG_MTD_NAND_ECC_SMC is not set
|
||||
# CONFIG_MTD_NAND_DENALI is not set
|
||||
# CONFIG_MTD_NAND_DOCG4 is not set
|
||||
CONFIG_MTD_NAND_GPIO=m
|
||||
# CONFIG_MTD_INTEL_VR_NOR is not set
|
||||
# CONFIG_MTD_NAND_NANDSIM is not set
|
||||
CONFIG_MTD_NAND_ORION=m
|
||||
# CONFIG_MTD_NAND_RICOH is not set
|
||||
# CONFIG_MTD_NAND_PLATFORM is not set
|
||||
# CONFIG_MTD_OTP is not set
|
||||
# CONFIG_MTD_PMC551 is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_SLRAM is not set
|
||||
CONFIG_MTD_UBI=m
|
||||
CONFIG_MTD_UBI_WL_THRESHOLD=4096
|
||||
CONFIG_MTD_UBI_BEB_RESERVE=1
|
||||
# CONFIG_MTD_UBI_GLUEBI is not set
|
||||
# CONFIG_MTD_UBI_DEBUG is not set
|
||||
|
||||
# CONFIG_SM_FTL is not set
|
||||
|
||||
CONFIG_JFFS2_FS=m
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
# CONFIG_JFFS2_LZO is not set
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
# CONFIG_JFFS2_RUBIN is not set
|
||||
|
||||
CONFIG_UBIFS_FS=m
|
||||
CONFIG_UBIFS_FS_XATTR=y
|
||||
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
|
||||
CONFIG_UBIFS_FS_LZO=y
|
||||
CONFIG_UBIFS_FS_ZLIB=y
|
||||
# CONFIG_UBIFS_FS_DEBUG is not set
|
||||
|
|
|
@ -1,17 +1,31 @@
|
|||
ONFIG_ARCH_HIGHBANK=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_ARCH_HIGHBANK=y
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_ARM_THUMBEE is not set
|
||||
CONFIG_SWP_EMULATE=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
# CONFIG_ARM_ERRATA_430973 is not set
|
||||
# CONFIG_ARM_ERRATA_458693 is not set
|
||||
# CONFIG_ARM_ERRATA_460075 is not set
|
||||
# CONFIG_PL310_ERRATA_588369 is not set
|
||||
# CONFIG_PL310_ERRATA_727915 is not set
|
||||
# CONFIG_ARM_ERRATA_743622 is not set
|
||||
# CONFIG_PL310_ERRATA_753970 is not set
|
||||
# CONFIG_ARM_ERRATA_754322 is not set
|
||||
# CONFIG_PL310_ERRATA_769419 is not set
|
||||
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
|
||||
CONFIG_SATA_AHCI_PLATFORM=y
|
||||
CONFIG_ATA_SFF=y
|
||||
|
||||
CONFIG_ETHERNET=y
|
||||
CONFIG_NET_VENDOR_BROADCOM=y
|
||||
CONFIG_NET_CALXEDA_XGMAC=y
|
||||
|
||||
CONFIG_GPIO_PL061=y
|
||||
|
||||
CONFIG_SERIAL_AMBA_PL010=y
|
||||
CONFIG_SERIAL_AMBA_PL010_CONSOLE=y
|
||||
|
||||
|
|
|
@ -3,8 +3,6 @@ CONFIG_ARCH_MX51=y
|
|||
CONFIG_MACH_MX51_BABBAGE=y
|
||||
CONFIG_MACH_MX51_3DS=y
|
||||
CONFIG_MACH_EUKREA_CPUIMX51=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
|
||||
CONFIG_MACH_EUKREA_CPUIMX51SD=y
|
||||
CONFIG_MACH_MX51_EFIKAMX=y
|
||||
|
@ -13,6 +11,7 @@ CONFIG_MACH_MX51_EFIKASB=y
|
|||
# CONFIG_THUMB2_KERNEL is not set
|
||||
CONFIG_CPU_FREQ_IMX=y
|
||||
CONFIG_W1_MASTER_MXC=m
|
||||
CONFIG_IMX_DMA=m
|
||||
CONFIG_IMX_SDMA=y
|
||||
CONFIG_MACH_MX31ADS=y
|
||||
CONFIG_MACH_MX31LILLY=y
|
||||
|
@ -33,13 +32,12 @@ CONFIG_MXC_IRQ_PRIOR=y
|
|||
CONFIG_MXC_PWM=m
|
||||
CONFIG_MXC_DEBUG_BOARD=y
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
# CONFIG_CACHE_L2X0 is not set
|
||||
CONFIG_CACHE_L2X0=y
|
||||
CONFIG_ARM_DMA_MEM_BUFFERABLE=y
|
||||
CONFIG_ARM_ERRATA_411920=y
|
||||
CONFIG_PL310_ERRATA_588369=y
|
||||
CONFIG_PL310_ERRATA_727915=y
|
||||
CONFIG_ARM_ERRATA_364296=y
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
CONFIG_RFKILL_GPIO=m
|
||||
CONFIG_PATA_IMX=m
|
||||
CONFIG_ETHERNET=y
|
||||
|
@ -52,14 +50,13 @@ CONFIG_HW_RANDOM_MXC_RNGA=m
|
|||
CONFIG_I2C_IMX=m
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
CONFIG_GPIO_MCP23S08=m
|
||||
CONFIG_DVB_TDA1004X=m
|
||||
CONFIG_DVB_PLL=m
|
||||
# CONFIG_GPIO_MC9S08DZ60 is not set
|
||||
CONFIG_SND_IMX_SOC=m
|
||||
CONFIG_USB_EHCI_MXC=y
|
||||
CONFIG_USB_IMX21_HCD=m
|
||||
# CONFIG_USB_IMX21_HCD is not set
|
||||
CONFIG_MMC_SDHCI_ESDHC_IMX=m
|
||||
CONFIG_MMC_MXC=m
|
||||
CONFIG_RTC_MXC=m
|
||||
CONFIG_RTC_MXC=y
|
||||
|
||||
CONFIG_BACKLIGHT_PWM=m
|
||||
CONFIG_LEDS_PWM=m
|
||||
|
@ -81,18 +78,12 @@ CONFIG_IMX2_WDT=m
|
|||
CONFIG_SND_SOC_PHYCORE_AC97=m
|
||||
CONFIG_SND_SOC_EUKREA_TLV320=m
|
||||
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
|
||||
CONFIG_PL310_ERRATA_769419=y
|
||||
CONFIG_LEDS_RENESAS_TPU=y
|
||||
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
|
||||
CONFIG_MFD_ANATOP=y
|
||||
|
||||
|
|
|
@ -1,4 +1,7 @@
|
|||
CONFIG_ARCH_KIRKWOOD=y
|
||||
CONFIG_ARCH_KIRKWOOD_DT=y
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_VFP is not set
|
||||
CONFIG_MACH_DB88F6281_BP=y
|
||||
CONFIG_MACH_RD88F6192_NAS=y
|
||||
CONFIG_MACH_RD88F6281=y
|
||||
|
@ -6,6 +9,7 @@ CONFIG_MACH_MV88F6281GTW_GE=y
|
|||
CONFIG_MACH_SHEEVAPLUG=y
|
||||
CONFIG_MACH_ESATA_SHEEVAPLUG=y
|
||||
CONFIG_MACH_GURUPLUG=y
|
||||
CONFIG_MACH_DREAMPLUG_DT=y
|
||||
CONFIG_MACH_DOCKSTAR=y
|
||||
CONFIG_MACH_TS219=y
|
||||
CONFIG_MACH_TS41X=y
|
||||
|
@ -36,8 +40,15 @@ CONFIG_SND_KIRKWOOD_SOC_T5325=m
|
|||
CONFIG_MMC_MVSDIO=m
|
||||
CONFIG_LEDS_NS2=m
|
||||
CONFIG_LEDS_NETXBIG=m
|
||||
CONFIG_RTC_DRV_MV=m
|
||||
CONFIG_RTC_DRV_MV=y
|
||||
CONFIG_MV_XOR=y
|
||||
CONFIG_CRYPTO_DEV_MV_CESA=m
|
||||
|
||||
# CONFIG_TOUCHSCREEN_EETI is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
|
||||
|
||||
# CONFIG_VFP is not set
|
||||
# CONFIG_VFPv3 is not set
|
||||
# CONFIG_NEON is not set
|
||||
# CONFIG_SMP is not set
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# CONFIG_OMAP4_ERRATA_I688 is not set
|
||||
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
|
||||
CONFIG_GENERIC_LOCKBREAK=y
|
||||
|
@ -10,7 +12,6 @@ CONFIG_RCU_FANOUT=32
|
|||
# CONFIG_RCU_BOOST is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_BLK_CGROUP is not set
|
||||
# CONFIG_SCHED_AUTOGROUP is not set
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
|
@ -143,9 +144,7 @@ CONFIG_LOCAL_TIMERS=y
|
|||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=128
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_KSM is not set
|
||||
# CONFIG_CC_STACKPROTECTOR is not set
|
||||
|
@ -153,23 +152,6 @@ CONFIG_ZBOOT_ROM_TEXT=0x0
|
|||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE=""
|
||||
# CONFIG_AUTO_ZRELADDR is not set
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
CONFIG_VFPv3=y
|
||||
CONFIG_NEON=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
|
@ -242,6 +224,7 @@ CONFIG_MTD_NAND_ECC=y
|
|||
CONFIG_MTD_NAND=y
|
||||
# CONFIG_MTD_SM_COMMON is not set
|
||||
# CONFIG_MTD_NAND_GPIO is not set
|
||||
# CONFIG_MTD_NAND_DOCG4 is not set
|
||||
CONFIG_MTD_NAND_OMAP2=y
|
||||
CONFIG_MTD_NAND_OMAP_PREFETCH=y
|
||||
CONFIG_MTD_NAND_OMAP_PREFETCH_DMA=y
|
||||
|
@ -377,6 +360,7 @@ CONFIG_TOUCHSCREEN_AD7879_I2C=m
|
|||
CONFIG_TOUCHSCREEN_CY8CTMG110=m
|
||||
CONFIG_TOUCHSCREEN_HAMPSHIRE=m
|
||||
CONFIG_TOUCHSCREEN_QT602240=m
|
||||
CONFIG_TOUCHSCREEN_TI_TSCADC=m
|
||||
CONFIG_TOUCHSCREEN_TPS6507X=m
|
||||
# CONFIG_TOUCHSCREEN_TSC2005 is not set
|
||||
CONFIG_INPUT_AD714X=m
|
||||
|
@ -386,6 +370,7 @@ CONFIG_INPUT_AD714X_SPI=m
|
|||
CONFIG_INPUT_TWL4030_PWRBUTTON=y
|
||||
CONFIG_INPUT_TWL4030_VIBRA=y
|
||||
CONFIG_INPUT_TWL6040_VIBRA=y
|
||||
CONFIG_KEYBOARD_OMAP4=m
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
|
||||
CONFIG_INPUT_ADXL34X=m
|
||||
|
@ -577,14 +562,17 @@ CONFIG_TWL4030_CORE=y
|
|||
CONFIG_TWL4030_POWER=y
|
||||
CONFIG_TWL4030_CODEC=y
|
||||
# CONFIG_TWL6030_PWM is not set
|
||||
# CONFIG_TWL6040_CORE is not set
|
||||
# CONFIG_MFD_STMPE is not set
|
||||
# CONFIG_MFD_TC3589X is not set
|
||||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_MFD_TPS65090 is not set/
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_PMIC_ADP5520 is not set
|
||||
# CONFIG_MFD_MAX8925 is not set
|
||||
# CONFIG_MFD_MAX8997 is not set
|
||||
# CONFIG_MFD_MAX8998 is not set
|
||||
# CONFIG_MFD_RC5T583 is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM831X_I2C is not set
|
||||
# CONFIG_MFD_WM831X_SPI is not set
|
||||
|
@ -612,6 +600,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
|||
CONFIG_REGULATOR_TWL4030=y
|
||||
# CONFIG_REGULATOR_LP3971 is not set
|
||||
# CONFIG_REGULATOR_LP3972 is not set
|
||||
# CONFIG_REGULATOR_TPS62360 is not set
|
||||
# CONFIG_REGULATOR_TPS65023 is not set
|
||||
# CONFIG_REGULATOR_TPS6507X is not set
|
||||
# CONFIG_REGULATOR_ISL6271A is not set
|
||||
|
@ -679,9 +668,9 @@ CONFIG_RADIO_TEF6862=m
|
|||
# CONFIG_TTPCI_EEPROM is not set
|
||||
# CONFIG_SMS_SDIO_DRV is not set
|
||||
# CONFIG_DVB_DUMMY_FE is not set
|
||||
CONFIG_DVB_TDA1004X=m
|
||||
CONFIG_DVB_PLL=m
|
||||
# CONFIG_DRM is not set
|
||||
CONFIG_DRM=m
|
||||
CONFIG_DRM_OMAP=m
|
||||
CONFIG_DRM_OMAP_NUM_CRTCS=2
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
|
@ -712,9 +701,7 @@ CONFIG_OMAP4_DSS_HDMI=y
|
|||
CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=1
|
||||
CONFIG_OMAP2_DSS_SLEEP_BEFORE_RESET=y
|
||||
CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
|
||||
CONFIG_FB_OMAP2=y
|
||||
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
|
||||
CONFIG_FB_OMAP2_NUM_FBS=3
|
||||
# CONFIG_FB_OMAP2 is not set
|
||||
|
||||
#
|
||||
# OMAP2/3 Display Device Drivers
|
||||
|
@ -732,6 +719,7 @@ CONFIG_PANEL_TPO_TD043MTEA1=y
|
|||
# CONFIG_LCD_S6E63M0 is not set
|
||||
# CONFIG_LCD_AMS369FG06 is not set
|
||||
CONFIG_BACKLIGHT_GENERIC=m
|
||||
# CONFIG_BACKLIGHT_PANDORA is not set
|
||||
CONFIG_DISPLAY_SUPPORT=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
|
||||
CONFIG_LOGO_LINUX_MONO=y
|
||||
|
@ -1050,7 +1038,6 @@ CONFIG_LIBCRC32C=y
|
|||
# CONFIG_LCD_LD9040 is not set
|
||||
# CONFIG_RTC_DRV_M41T93 is not set
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_CGROUP_PERF is not set
|
||||
# CONFIG_OPROFILE is not set
|
||||
# CONFIG_OPROFILE is not set
|
||||
# CONFIG_PATA_ARASAN_CF is not set
|
||||
|
@ -1058,8 +1045,6 @@ CONFIG_LIBCRC32C=y
|
|||
# CONFIG_BT_WILINK is not set
|
||||
# CONFIG_USB_HSO is not set
|
||||
|
||||
CONFIG_CRYSTALHD=m
|
||||
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
|
||||
CONFIG_MACH_OMAP_GENERIC=y
|
||||
|
@ -1083,14 +1068,19 @@ CONFIG_LEDS_RENESAS_TPU=y
|
|||
# CONFIG_OMAP_IOMMU is not set
|
||||
CONFIG_USB_RENESAS_USBHS_HCD=m
|
||||
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_SOC_OMAPTI81XX is not set
|
||||
# CONFIG_SOC_OMAPAM33XX is not set
|
||||
# CONFIG_MACH_TI8148EVM is not set
|
||||
# CONFIG_OMAP4_ERRATA_I688 is not set
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
# CONFIG_ARM_EXYNOS4210_CPUFREQ is not set
|
||||
# CONFIG_MICREL_KS8995MA is not set
|
||||
# CONFIG_CHARGER_MANAGER is not set
|
||||
# CONFIG_MFD_DA9052_SPI is not set
|
||||
# CONFIG_MFD_DA9052_I2C is not set
|
||||
# CONFIG_MFD_S5M_CORE is not set
|
||||
# CONFIG_VIDEO_AS3645A is not set
|
||||
# CONFIG_ARM_OMAP2PLUS_CPUFREQ is not set
|
||||
#
|
||||
|
||||
|
|
|
@ -1,15 +1,22 @@
|
|||
CONFIG_ARCH_TEGRA=y
|
||||
|
||||
CONFIG_ARCH_TEGRA_2x_SOC=y
|
||||
# CONFIG_ARCH_TEGRA_3x_SOC is not set
|
||||
# CONFIG_ARM_LPAE is not set
|
||||
CONFIG_TEGRA_PCI=y
|
||||
|
||||
CONFIG_MACH_HARMONY=y
|
||||
CONFIG_MACH_KAEN=y
|
||||
CONFIG_MACH_PAZ00=y
|
||||
CONFIG_MACH_SEABOARD=y
|
||||
CONFIG_MACH_TEGRA_DT=y
|
||||
CONFIG_MACH_TRIMSLICE=y
|
||||
CONFIG_MACH_WARIO=y
|
||||
CONFIG_MACH_TEGRA_DT=y
|
||||
CONFIG_MACH_VENTANA=y
|
||||
|
||||
CONFIG_TEGRA_DEBUG_UARTD=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
|
||||
|
@ -46,17 +53,17 @@ CONFIG_ARM_ERRATA_720789=y
|
|||
CONFIG_SMP_ON_UP=y
|
||||
CONFIG_LOCAL_TIMERS=y
|
||||
# CONFIG_THUMB2_KERNEL is not set
|
||||
CONFIG_HW_PERF_EVENTS=y
|
||||
# CONFIG_NEON is not set
|
||||
# CONFIG_RFKILL_GPIO is not set
|
||||
CONFIG_GPIO_GENERIC_PLATFORM=y
|
||||
# CONFIG_GPIO_MCP23S08 is not set
|
||||
CONFIG_KEYBOARD_TEGRA=y
|
||||
# CONFIG_KEYBOARD_TEGRA is not set
|
||||
# CONFIG_MPCORE_WATCHDOG is not set
|
||||
CONFIG_USB_EHCI_TEGRA=y
|
||||
CONFIG_RTC_DRV_TEGRA=m
|
||||
CONFIG_RTC_DRV_TEGRA=y
|
||||
|
||||
CONFIG_SND_SOC_TEGRA=m
|
||||
CONFIG_SND_SOC_TEGRA_ALC5632=m
|
||||
CONFIG_SND_SOC_TEGRA_WM8903=m
|
||||
CONFIG_SND_SOC_TEGRA_TRIMSLICE=m
|
||||
|
||||
|
@ -64,38 +71,29 @@ CONFIG_MFD_NVEC=y
|
|||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
# CONFIG_RCU_CPU_STALL_VERBOSE is not set
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
# CONFIG_DEBUG_PINCTRL is not set
|
||||
CONFIG_KEYBOARD_NVEC=y
|
||||
CONFIG_SERIO_NVEC_PS2=y
|
||||
CONFIG_NVEC_POWER=y
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_NVEC_LEDS=y
|
||||
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEBUG=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=m
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
CONFIG_CPU_FREQ_STAT_DETAILS=y
|
||||
CONFIG_CPU_PM=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
|
||||
CONFIG_CRYSTALHD=m
|
||||
CONFIG_CRYPTO_DEV_TEGRA_AES=m
|
||||
|
||||
CONFIG_MACH_VENTANA=y
|
||||
CONFIG_PL310_ERRATA_753970=y
|
||||
CONFIG_ARM_CPU_TOPOLOGY=y
|
||||
CONFIG_SCHED_MC=y
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_LEDS_RENESAS_TPU=y
|
||||
|
||||
# CONFIG_ARCH_TEGRA_2x_SOC is not set
|
||||
# CONFIG_ARCH_TEGRA_3x_SOC is not set
|
||||
# CONFIG_ETHERNET is not set
|
||||
# CONFIG_NET_VENDOR_BROADCOM is not set
|
||||
# CONFIG_DVB_TDA1004X is not set
|
||||
# CONFIG_DVB_PLL is not set
|
||||
# CONFIG_SND_SOC_TEGRA_ALC5632 is not set
|
||||
CONFIG_OF_GPIO=y
|
||||
CONFIG_OF_PCI=y
|
||||
CONFIG_OF_PCI_IRQ=y
|
||||
CONFIG_OF=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
|
||||
CONFIG_TEGRA_IOMMU_GART=y
|
||||
CONFIG_TEGRA_IOMMU_SMMU=y
|
||||
|
|
|
@ -94,6 +94,7 @@ CONFIG_PCI_PRI=y
|
|||
CONFIG_PCI_PASID=y
|
||||
CONFIG_HT_IRQ=y
|
||||
CONFIG_PCI_MSI=y
|
||||
# CONFIG_PCI_REALLOC_ENABLE_AUTO is not set
|
||||
CONFIG_PCIEPORTBUS=y
|
||||
CONFIG_PCIEAER=y
|
||||
CONFIG_PCIEASPM=y
|
||||
|
@ -298,6 +299,7 @@ CONFIG_MTD_NAND_CS553X=m
|
|||
CONFIG_MTD_NAND_DENALI_SCRATCH_REG_ADDR=0xFF108018
|
||||
# CONFIG_MTD_NAND_GPIO is not set
|
||||
CONFIG_MTD_NAND_RICOH=m
|
||||
# CONFIG_MTD_NAND_DOCG4 is not set
|
||||
|
||||
CONFIG_MTD_REDBOOT_PARTS=m
|
||||
# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
|
||||
|
@ -439,6 +441,7 @@ CONFIG_BLK_DEV_VIA82CXXX=y
|
|||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
||||
CONFIG_SCSI_VIRTIO=m
|
||||
CONFIG_VIRTIO_BLK=m
|
||||
CONFIG_VIRTIO_PCI=y
|
||||
CONFIG_VIRTIO_BALLOON=m
|
||||
|
@ -539,6 +542,8 @@ CONFIG_SCSI_MPT2SAS=m
|
|||
CONFIG_SCSI_MPT2SAS_MAX_SGE=128
|
||||
CONFIG_SCSI_MPT2SAS_LOGGING=y
|
||||
|
||||
CONFIG_SCSI_UFSHCD=m
|
||||
|
||||
CONFIG_SCSI_MVUMI=m
|
||||
|
||||
CONFIG_SCSI_OSD_INITIATOR=m
|
||||
|
@ -721,6 +726,7 @@ CONFIG_DM_MULTIPATH_QL=m
|
|||
CONFIG_DM_MULTIPATH_ST=m
|
||||
CONFIG_DM_RAID=m
|
||||
CONFIG_DM_FLAKEY=m
|
||||
CONFIG_DM_VERITY=m
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
|
@ -910,6 +916,7 @@ CONFIG_NETFILTER_XT_TARGET_CT=m
|
|||
CONFIG_NETFILTER_XT_TARGET_DSCP=m
|
||||
CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LED=m
|
||||
CONFIG_NETFILTER_XT_TARGET_LOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_MARK=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
|
||||
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
|
||||
|
@ -988,6 +995,7 @@ CONFIG_NF_CONNTRACK_SIP=m
|
|||
CONFIG_NF_CONNTRACK_TFTP=m
|
||||
CONFIG_NF_CONNTRACK_IPV4=y
|
||||
CONFIG_NF_CONNTRACK_IPV6=y
|
||||
# CONFIG_NF_CONNTRACK_TIMEOUT is not set
|
||||
CONFIG_NF_CONNTRACK_TIMESTAMP=y
|
||||
CONFIG_NF_CONNTRACK_SNMP=m
|
||||
CONFIG_NF_NAT=m
|
||||
|
@ -995,6 +1003,7 @@ CONFIG_NF_NAT_SNMP_BASIC=m
|
|||
CONFIG_NF_CT_PROTO_DCCP=m
|
||||
CONFIG_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_NF_CT_NETLINK=m
|
||||
# CONFIG_NF_CT_NETLINK_TIMEOUT is not set
|
||||
CONFIG_NF_CT_PROTO_UDPLITE=m
|
||||
|
||||
CONFIG_IP_NF_MATCH_AH=m
|
||||
|
@ -1159,6 +1168,7 @@ CONFIG_NET_SCH_MQPRIO=m
|
|||
CONFIG_NET_SCH_MULTIQ=m
|
||||
CONFIG_NET_SCH_CHOKE=m
|
||||
CONFIG_NET_SCH_QFQ=m
|
||||
CONFIG_NET_SCH_PLUG=m
|
||||
CONFIG_NET_CLS=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
CONFIG_NET_CLS_BASIC=m
|
||||
|
@ -1401,6 +1411,7 @@ CONFIG_FORCEDETH=m
|
|||
|
||||
CONFIG_NET_VENDOR_OKI=y
|
||||
# CONFIG_PCH_GBE is not set
|
||||
# CONFIG_PCH_PTP is not set
|
||||
|
||||
CONFIG_NET_PACKET_ENGINE=y
|
||||
CONFIG_HAMACHI=m
|
||||
|
@ -1470,6 +1481,7 @@ CONFIG_NET_VENDOR_XIRCOM=y
|
|||
CONFIG_PCMCIA_XIRC2PS=m
|
||||
|
||||
CONFIG_PHYLIB=y
|
||||
CONFIG_AMD_PHY=m
|
||||
CONFIG_BROADCOM_PHY=m
|
||||
CONFIG_CICADA_PHY=m
|
||||
CONFIG_DAVICOM_PHY=m
|
||||
|
@ -1519,6 +1531,8 @@ CONFIG_IP1000=m
|
|||
CONFIG_MLX4_EN=m
|
||||
# CONFIG_MLX4_DEBUG is not set
|
||||
CONFIG_SFC=m
|
||||
CONFIG_SFC_MCDI_MON=y
|
||||
CONFIG_SFC_SRIOV=y
|
||||
CONFIG_SFC_MTD=y
|
||||
|
||||
# CONFIG_FDDI is not set
|
||||
|
@ -1591,10 +1605,13 @@ CONFIG_ATH5K_DEBUG=y
|
|||
# CONFIG_ATH5K_TRACER is not set
|
||||
CONFIG_ATH6KL=m
|
||||
CONFIG_ATH6KL_DEBUG=y
|
||||
CONFIG_ATH6KL_SDIO=m
|
||||
CONFIG_ATH6KL_USB=m
|
||||
CONFIG_ATH9K=m
|
||||
CONFIG_ATH9K_PCI=y
|
||||
CONFIG_ATH9K_AHB=y
|
||||
# CONFIG_ATH9K_DEBUG is not set
|
||||
# CONFIG_ATH9K_MAC_DEBUG is not set
|
||||
CONFIG_ATH9K_DEBUGFS=y
|
||||
CONFIG_ATH9K_HTC=m
|
||||
CONFIG_ATH9K_BTCOEX_SUPPORT=y
|
||||
|
@ -1628,6 +1645,7 @@ CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
|||
CONFIG_BRCMSMAC=m
|
||||
CONFIG_BRCMFMAC=m
|
||||
CONFIG_BRCMFMAC_SDIO=y
|
||||
CONFIG_BRCMFMAC_USB=y
|
||||
# CONFIG_BRCMDBG is not set
|
||||
CONFIG_HERMES=m
|
||||
CONFIG_HERMES_CACHE_FW_ON_INIT=y
|
||||
|
@ -1661,6 +1679,7 @@ CONFIG_IWLWIFI=m
|
|||
CONFIG_IWLWIFI_DEBUG=y
|
||||
CONFIG_IWLWIFI_DEBUGFS=y
|
||||
CONFIG_IWLWIFI_DEVICE_SVTOOL=y
|
||||
# CONFIG_IWLWIFI_EXPERIMENTAL_MFP is not set
|
||||
# CONFIG_IWLWIFI_P2P is not set
|
||||
CONFIG_IWLEGACY=m
|
||||
CONFIG_IWLEGACY_DEBUG=y
|
||||
|
@ -1701,10 +1720,12 @@ CONFIG_RT2800PCI_RT53XX=y
|
|||
CONFIG_RT73USB=m
|
||||
CONFIG_RTL8180=m
|
||||
CONFIG_RTL8187=m
|
||||
# CONFIG_RTLWIFI_DEBUG is not set
|
||||
CONFIG_TMD_HERMES=m
|
||||
CONFIG_USB_ZD1201=m
|
||||
CONFIG_USB_NET_RNDIS_WLAN=m
|
||||
CONFIG_USB_NET_KALMIA=m
|
||||
CONFIG_USB_NET_QMI_WWAN=m
|
||||
CONFIG_USB_NET_SMSC75XX=m
|
||||
CONFIG_ZD1211RW=m
|
||||
# CONFIG_ZD1211RW_DEBUG is not set
|
||||
|
@ -2052,6 +2073,7 @@ CONFIG_KEYBOARD_ATKBD=y
|
|||
# CONFIG_KEYBOARD_QT2160 is not set
|
||||
# CONFIG_KEYBOARD_TCA6416 is not set
|
||||
# CONFIG_KEYBOARD_TCA8418 is not set
|
||||
# CONFIG_KEYBOARD_OMAP4 is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
|
||||
|
@ -2062,6 +2084,7 @@ CONFIG_MOUSE_VSXXXAA=m
|
|||
CONFIG_MOUSE_APPLETOUCH=m
|
||||
CONFIG_MOUSE_BCM5974=m
|
||||
CONFIG_MOUSE_SYNAPTICS_I2C=m
|
||||
CONFIG_MOUSE_SYNAPTICS_USB=m
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_JOYSTICK_ANALOG=m
|
||||
CONFIG_JOYSTICK_A3D=m
|
||||
|
@ -2098,6 +2121,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
CONFIG_TOUCHSCREEN_AD7879_I2C=m
|
||||
# CONFIG_TOUCHSCREEN_CY8CTMG110 is not set
|
||||
# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not set
|
||||
CONFIG_TOUCHSCREEN_DYNAPRO=m
|
||||
CONFIG_TOUCHSCREEN_EETI=m
|
||||
CONFIG_TOUCHSCREEN_EGALAX=m
|
||||
|
@ -2107,6 +2131,7 @@ CONFIG_TOUCHSCREEN_GUNZE=m
|
|||
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
|
||||
CONFIG_TOUCHSCREEN_HTCPEN=m
|
||||
CONFIG_TOUCHSCREEN_INEXIO=m
|
||||
CONFIG_TOUCHSCREEN_ILI210X=m
|
||||
CONFIG_TOUCHSCREEN_MTOUCH=m
|
||||
CONFIG_TOUCHSCREEN_MCS5000=m
|
||||
CONFIG_TOUCHSCREEN_MK712=m
|
||||
|
@ -2337,12 +2362,14 @@ CONFIG_SENSORS_LM93=m
|
|||
CONFIG_SENSORS_LTC4245=m
|
||||
CONFIG_SENSORS_MAX1619=m
|
||||
CONFIG_SENSORS_MAX6650=m
|
||||
CONFIG_SENSORS_MCP3021=m
|
||||
CONFIG_SENSORS_NTC_THERMISTOR=m
|
||||
CONFIG_SENSORS_PC87360=m
|
||||
CONFIG_SENSORS_PC87427=m
|
||||
CONFIG_SENSORS_PCF8591=m
|
||||
CONFIG_SENSORS_SHT15=m
|
||||
CONFIG_SENSORS_SIS5595=m
|
||||
CONFIG_CHARGER_SMB347=m
|
||||
CONFIG_SENSORS_SMSC47M1=m
|
||||
CONFIG_SENSORS_SMSC47M192=m
|
||||
CONFIG_SENSORS_SMSC47B397=m
|
||||
|
@ -2553,6 +2580,7 @@ CONFIG_VGA_ARB_MAX_GPUS=16
|
|||
CONFIG_STUB_POULSBO=m
|
||||
# CONFIG_DRM_PSB is not set
|
||||
CONFIG_DRM=m
|
||||
# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set
|
||||
CONFIG_DRM_TDFX=m
|
||||
CONFIG_DRM_R128=m
|
||||
CONFIG_DRM_RADEON=m
|
||||
|
@ -2569,6 +2597,7 @@ CONFIG_DRM_NOUVEAU_BACKLIGHT=y
|
|||
CONFIG_DRM_NOUVEAU_DEBUG=y
|
||||
CONFIG_DRM_I2C_CH7006=m
|
||||
CONFIG_DRM_I2C_SIL164=m
|
||||
CONFIG_DRM_UDL=m
|
||||
CONFIG_DRM_VMWGFX=m
|
||||
|
||||
#
|
||||
|
@ -2675,6 +2704,7 @@ CONFIG_USB_KEENE=n
|
|||
|
||||
# CONFIG_VIDEO_TIMBERDALE is not set
|
||||
# CONFIG_VIDEO_M5MOLS is not set
|
||||
# CONFIG_EXYNOS_VIDEO is not set
|
||||
|
||||
CONFIG_USB_VIDEO_CLASS=m
|
||||
CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
|
||||
|
@ -2842,6 +2872,7 @@ CONFIG_FB=y
|
|||
# CONFIG_FB_GEODE is not set
|
||||
# CONFIG_FB_HECUBA is not set
|
||||
# CONFIG_FB_HGA is not set
|
||||
# CONFIG_FB_I740 is not set
|
||||
CONFIG_FB_I810=m
|
||||
CONFIG_FB_I810_GTF=y
|
||||
CONFIG_FB_I810_I2C=y
|
||||
|
@ -3109,8 +3140,10 @@ CONFIG_USB_EHCI_HCD=y
|
|||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||
CONFIG_USB_EHCI_TT_NEWSCHED=y
|
||||
# CONFIG_USB_EHCI_MV is not set
|
||||
# CONFIG_USB_EHCI_HCD_PLATFORM is not set
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
# CONFIG_USB_OHCI_HCD_SSB is not set
|
||||
# CONFIG_USB_OHCI_HCD_PLATFORM is not set
|
||||
CONFIG_USB_UHCI_HCD=y
|
||||
CONFIG_USB_SL811_HCD=m
|
||||
CONFIG_USB_SL811_HCD_ISO=y
|
||||
|
@ -3221,6 +3254,9 @@ CONFIG_HOLTEK_FF=y
|
|||
CONFIG_HID_SPEEDLINK=m
|
||||
CONFIG_HID_WIIMOTE=m
|
||||
CONFIG_HID_WIIMOTE_EXT=y
|
||||
CONFIG_HID_KYE=m
|
||||
CONFIG_HID_SAITEK=m
|
||||
CONFIG_HID_TIVO=m
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
|
@ -3356,6 +3392,7 @@ CONFIG_USB_SERIAL_SYMBOL=m
|
|||
CONFIG_USB_SERIAL_EDGEPORT=m
|
||||
CONFIG_USB_SERIAL_EDGEPORT_TI=m
|
||||
CONFIG_USB_SERIAL_EMPEG=m
|
||||
# CONFIG_USB_SERIAL_F81232 is not set
|
||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||
CONFIG_USB_SERIAL_FUNSOFT=m
|
||||
CONFIG_USB_SERIAL_GARMIN=m
|
||||
|
@ -3381,6 +3418,7 @@ CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
|
|||
CONFIG_USB_SERIAL_KLSI=m
|
||||
CONFIG_USB_SERIAL_KOBIL_SCT=m
|
||||
CONFIG_USB_SERIAL_MCT_U232=m
|
||||
# CONFIG_USB_SERIAL_METRO is not set
|
||||
CONFIG_USB_SERIAL_MOS7720=m
|
||||
CONFIG_USB_SERIAL_MOS7715_PARPORT=y
|
||||
# CONFIG_USB_SERIAL_ZIO is not set
|
||||
|
@ -3520,6 +3558,7 @@ CONFIG_MFD_WM8400=m
|
|||
# CONFIG_MFD_TPS6586X is not set
|
||||
# CONFIG_MFD_TC3589X is not set
|
||||
# CONFIG_MFD_WL1273_CORE is not set
|
||||
# CONFIG_MFD_TPS65217 is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
|
@ -3639,6 +3678,7 @@ CONFIG_SQUASHFS_ZLIB=y
|
|||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_QNX6FS_FS is not set
|
||||
CONFIG_SYSV_FS=m
|
||||
CONFIG_UFS_FS=m
|
||||
# CONFIG_UFS_FS_WRITE is not set
|
||||
|
@ -3659,6 +3699,7 @@ CONFIG_NFS_V3=y
|
|||
CONFIG_NFS_V3_ACL=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_NFS_V4_1=y
|
||||
CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
CONFIG_NFSD_V3_ACL=y
|
||||
|
@ -3675,6 +3716,7 @@ CONFIG_EXPORTFS=y
|
|||
CONFIG_SUNRPC=m
|
||||
CONFIG_SUNRPC_GSS=m
|
||||
CONFIG_SUNRPC_XPRT_RDMA=m
|
||||
CONFIG_SUNRPC_DEBUG=y
|
||||
CONFIG_RPCSEC_GSS_KRB5=m
|
||||
CONFIG_CIFS=m
|
||||
CONFIG_CIFS_STATS=y
|
||||
|
@ -3883,6 +3925,7 @@ CONFIG_SECURITY_SELINUX_AVC_STATS=y
|
|||
# CONFIG_SECURITY_SMACK is not set
|
||||
# CONFIG_SECURITY_TOMOYO is not set
|
||||
# CONFIG_SECURITY_APPARMOR is not set
|
||||
# CONFIG_SECURITY_YAMA is not set
|
||||
CONFIG_AUDIT=y
|
||||
CONFIG_AUDITSYSCALL=y
|
||||
# CONFIG_AUDIT_LOGINUID_IMMUTABLE is not set
|
||||
|
@ -3966,6 +4009,7 @@ CONFIG_CRYPTO_USER=m
|
|||
#
|
||||
CONFIG_CRC16=y
|
||||
CONFIG_CRC32=m
|
||||
# CONFIG_CRC32_SELFTEST is not set
|
||||
CONFIG_CRC_CCITT=m
|
||||
CONFIG_CRC_ITU_T=m
|
||||
CONFIG_CRC_T10DIF=m
|
||||
|
@ -4000,6 +4044,7 @@ CONFIG_FB_ATY128_BACKLIGHT=y
|
|||
CONFIG_FB_ATY_BACKLIGHT=y
|
||||
# CONFIG_BACKLIGHT_SAHARA is not set
|
||||
CONFIG_BACKLIGHT_WM831X=m
|
||||
CONFIG_BACKLIGHT_LP855X=m
|
||||
|
||||
CONFIG_LCD_CLASS_DEVICE=m
|
||||
CONFIG_LCD_PLATFORM=m
|
||||
|
@ -4195,6 +4240,7 @@ CONFIG_LEDS_CLASS=y
|
|||
# CONFIG_LEDS_PCA955X is not set
|
||||
# CONFIG_LEDS_BD2802 is not set
|
||||
# CONFIG_LEDS_S3C24XX is not set
|
||||
# CONFIG_LEDS_PCA9633 is not set
|
||||
CONFIG_LEDS_DELL_NETBOOKS=m
|
||||
# CONFIG_LEDS_TCA6507 is not set
|
||||
# CONFIG_LEDS_OT200 is not set
|
||||
|
@ -4271,6 +4317,7 @@ CONFIG_APM_POWER=m
|
|||
# CONFIG_WM831X_POWER is not set
|
||||
|
||||
# CONFIG_BATTERY_DS2760 is not set
|
||||
# CONFIG_BATTERY_DS2781 is not set
|
||||
# CONFIG_BATTERY_DS2782 is not set
|
||||
# CONFIG_BATTERY_SBS is not set
|
||||
# CONFIG_BATTERY_BQ20Z75 is not set
|
||||
|
@ -4443,6 +4490,9 @@ CONFIG_ALTERA_STAPL=m
|
|||
# CONFIG_RTS5139 is not set
|
||||
# CONFIG_NVEC_LEDS is not set
|
||||
# CONFIG_VT6655 is not set
|
||||
# CONFIG_ZSMALLOC is not set
|
||||
# CONFIG_RAMSTER is not set
|
||||
# CONFIG_USB_WPAN_HCD is not set
|
||||
#
|
||||
# END OF STAGING
|
||||
|
||||
|
@ -4469,6 +4519,7 @@ CONFIG_STRIP_ASM_SYMS=y
|
|||
CONFIG_RCU_CPU_STALL_TIMEOUT=60
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
# CONFIG_RCU_CPU_STALL_INFO is not set
|
||||
CONFIG_SPARSE_RCU_POINTER=y
|
||||
|
||||
CONFIG_KSM=y
|
||||
|
@ -4493,6 +4544,7 @@ CONFIG_PPS_CLIENT_GPIO=m
|
|||
CONFIG_NTP_PPS=y
|
||||
|
||||
CONFIG_PTP_1588_CLOCK=m
|
||||
CONFIG_PTP_1588_CLOCK_PCH=m
|
||||
|
||||
CONFIG_CLEANCACHE=y
|
||||
|
||||
|
@ -4560,4 +4612,6 @@ CONFIG_BCMA_HOST_PCI=y
|
|||
# CONFIG_GOOGLE_FIRMWARE is not set
|
||||
CONFIG_IOMMU_SUPPORT=y
|
||||
|
||||
# CONFIG_HSI is not set
|
||||
|
||||
# CONFIG_PM_DEVFREQ is not set
|
||||
|
|
|
@ -360,3 +360,6 @@ CONFIG_RFKILL_GPIO=m
|
|||
# CONFIG_CPU_IDLE is not set
|
||||
CONFIG_STRICT_DEVMEM=y
|
||||
# CONFIG_V4L_RADIO_ISA_DRIVERS is not set
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
# CONFIG_MPIC_MSGR is not set
|
||||
# CONFIG_FA_DUMP is not set
|
||||
|
|
|
@ -197,6 +197,7 @@ CONFIG_QETH_L3=m
|
|||
CONFIG_CRYPTO_SHA512_S390=m
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=m
|
||||
# CONFIG_KVM_S390_UCONTROL is not set
|
||||
CONFIG_S390_GUEST=y
|
||||
|
||||
|
||||
|
|
|
@ -154,6 +154,8 @@ CONFIG_OLPC_XO1_SCI=y
|
|||
# staging
|
||||
# CONFIG_FB_OLPC_DCON is not set
|
||||
|
||||
# CONFIG_IRQ_DOMAIN_DEBUG is not set
|
||||
|
||||
# CONFIG_SPARSE_IRQ is not set
|
||||
|
||||
CONFIG_RCU_FANOUT=32
|
||||
|
@ -207,3 +209,7 @@ CONFIG_I2O_BUS=m
|
|||
# CONFIG_TOUCHSCREEN_AUO_PIXCIR is not set
|
||||
# CONFIG_INPUT_GP2A is not set
|
||||
# CONFIG_INPUT_GPIO_TILT_POLLED is not set
|
||||
# CONFIG_GEOS is not set
|
||||
# CONFIG_NET5501 is not set
|
||||
# CONFIG_GPIO_SODAVILLE is not set
|
||||
# CONFIG_BACKLIGHT_OT200 is not set
|
||||
|
|
|
@ -86,6 +86,7 @@ CONFIG_ACPI_APEI_MEMORY_FAILURE=y
|
|||
# CONFIG_ACPI_APEI_EINJ is not set
|
||||
CONFIG_ACPI_IPMI=m
|
||||
CONFIG_ACPI_CUSTOM_METHOD=m
|
||||
CONFIG_ACPI_BGRT=m
|
||||
|
||||
CONFIG_X86_ACPI_CPUFREQ=y
|
||||
CONFIG_X86_PCC_CPUFREQ=y
|
||||
|
@ -247,6 +248,7 @@ CONFIG_XEN_BALLOON=y
|
|||
CONFIG_XEN_SCRUB_PAGES=y
|
||||
CONFIG_XEN_SAVE_RESTORE=y
|
||||
CONFIG_HVC_XEN=y
|
||||
CONFIG_HVC_XEN_FRONTEND=y
|
||||
CONFIG_XEN_FBDEV_FRONTEND=y
|
||||
CONFIG_XEN_BLKDEV_FRONTEND=m
|
||||
CONFIG_XEN_NETDEV_FRONTEND=m
|
||||
|
@ -264,6 +266,7 @@ CONFIG_XEN_GNTDEV=m
|
|||
CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
|
||||
CONFIG_XEN_SELFBALLOONING=y
|
||||
CONFIG_XEN_PCIDEV_BACKEND=m
|
||||
CONFIG_XEN_ACPI_PROCESSOR=m
|
||||
|
||||
CONFIG_MTD_ESB2ROM=m
|
||||
CONFIG_MTD_CK804XROM=m
|
||||
|
@ -389,7 +392,11 @@ CONFIG_SCHED_SMT=y
|
|||
CONFIG_CC_STACKPROTECTOR=y
|
||||
CONFIG_RELOCATABLE=y
|
||||
|
||||
# CONFIG_HYPERV is not set
|
||||
CONFIG_HYPERV=m
|
||||
CONFIG_HYPERV_UTILS=m
|
||||
CONFIG_HID_HYPERV_MOUSE=m
|
||||
CONFIG_HYPERV_NET=m
|
||||
CONFIG_HYPERV_STORAGE=m
|
||||
|
||||
# Depends on PCI
|
||||
CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
|
||||
|
@ -400,3 +407,5 @@ CONFIG_DRM_GMA500=m
|
|||
|
||||
# Maybe enable in debug kernels?
|
||||
# CONFIG_DEBUG_NMI_SELFTEST is not set
|
||||
|
||||
CONFIG_APPLE_GMUX=m
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
CONFIG_64BIT=y
|
||||
|
||||
# CONFIG_X86_X32 is not set
|
||||
# CONFIG_MK8 is not set
|
||||
# CONFIG_MPSC is not set
|
||||
CONFIG_GENERIC_CPU=y
|
||||
|
@ -50,6 +51,7 @@ CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
|
|||
CONFIG_CRYPTO_SHA1_SSSE3=m
|
||||
CONFIG_CRYPTO_BLOWFISH_X86_64=m
|
||||
CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m
|
||||
CONFIG_CRYPTO_CAMELLIA_X86_64=m
|
||||
|
||||
# CONFIG_I2C_ALI1535 is not set
|
||||
# CONFIG_I2C_ALI1563 is not set
|
||||
|
|
|
@ -1,11 +0,0 @@
|
|||
--- linux-2.6.43.noarch.orig/drivers/hid/Kconfig
|
||||
+++ linux-2.6.43.noarch/drivers/hid/Kconfig
|
||||
@@ -34,7 +34,7 @@ config HID
|
||||
config HID_BATTERY_STRENGTH
|
||||
bool
|
||||
depends on HID && POWER_SUPPLY && HID = POWER_SUPPLY
|
||||
- default y
|
||||
+ default n
|
||||
|
||||
config HIDRAW
|
||||
bool "/dev/hidraw raw HID device support"
|
File diff suppressed because it is too large
Load Diff
|
@ -1,21 +1,8 @@
|
|||
From 04a43e2598db35b3d0ec25925bb8475b5c0a3809 Mon Sep 17 00:00:00 2001
|
||||
From: Adam Jackson <ajax@redhat.com>
|
||||
Date: Fri, 16 Mar 2012 16:39:11 -0400
|
||||
Subject: [PATCH] drm/i915/dp: Use DRM_ERROR not WARN for sanity checks
|
||||
|
||||
These are noisy as shit and creating a ton of abrt reports. I don't
|
||||
need more, thanks. Proper fix upstream eventually.
|
||||
|
||||
Signed-off-by: Adam Jackson <ajax@redhat.com>
|
||||
---
|
||||
drivers/gpu/drm/i915/intel_dp.c | 14 ++++++++------
|
||||
1 files changed, 8 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
|
||||
index 94f860c..6bf27c9 100644
|
||||
index 296cfc2..516e1e2 100644
|
||||
--- a/drivers/gpu/drm/i915/intel_dp.c
|
||||
+++ b/drivers/gpu/drm/i915/intel_dp.c
|
||||
@@ -331,7 +331,7 @@ intel_dp_check_edp(struct intel_dp *intel_dp)
|
||||
@@ -350,7 +350,7 @@ intel_dp_check_edp(struct intel_dp *intel_dp)
|
||||
if (!is_edp(intel_dp))
|
||||
return;
|
||||
if (!ironlake_edp_have_panel_power(intel_dp) && !ironlake_edp_have_panel_vdd(intel_dp)) {
|
||||
|
@ -24,7 +11,7 @@ index 94f860c..6bf27c9 100644
|
|||
DRM_DEBUG_KMS("Status 0x%08x Control 0x%08x\n",
|
||||
I915_READ(PCH_PP_STATUS),
|
||||
I915_READ(PCH_PP_CONTROL));
|
||||
@@ -386,7 +386,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
|
||||
@@ -400,7 +400,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
|
||||
}
|
||||
|
||||
if (try == 3) {
|
||||
|
@ -33,7 +20,7 @@ index 94f860c..6bf27c9 100644
|
|||
I915_READ(ch_ctl));
|
||||
return -EBUSY;
|
||||
}
|
||||
@@ -992,8 +992,8 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
|
||||
@@ -1024,8 +1024,8 @@ static void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
|
||||
return;
|
||||
DRM_DEBUG_KMS("Turn eDP VDD on\n");
|
||||
|
||||
|
@ -44,7 +31,7 @@ index 94f860c..6bf27c9 100644
|
|||
|
||||
intel_dp->want_panel_vdd = true;
|
||||
|
||||
@@ -1058,7 +1058,8 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
|
||||
@@ -1090,7 +1090,8 @@ static void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
|
||||
return;
|
||||
|
||||
DRM_DEBUG_KMS("Turn eDP VDD off %d\n", intel_dp->want_panel_vdd);
|
||||
|
@ -54,16 +41,13 @@ index 94f860c..6bf27c9 100644
|
|||
|
||||
intel_dp->want_panel_vdd = false;
|
||||
|
||||
@@ -1128,7 +1129,8 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
|
||||
@@ -1160,7 +1161,8 @@ static void ironlake_edp_panel_off(struct intel_dp *intel_dp)
|
||||
|
||||
DRM_DEBUG_KMS("Turn eDP power off\n");
|
||||
|
||||
- WARN(intel_dp->want_panel_vdd, "Cannot turn power off while VDD is on\n");
|
||||
+ if (intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("Cannot turn power off while VDD is on\n");
|
||||
- WARN(!intel_dp->want_panel_vdd, "Need VDD to turn off panel\n");
|
||||
+ if (!intel_dp->want_panel_vdd)
|
||||
+ DRM_ERROR("Need VDD to turn off panel\n");
|
||||
|
||||
pp = ironlake_get_pp_control(dev_priv);
|
||||
pp &= ~(POWER_TARGET_ON | EDP_FORCE_VDD | PANEL_POWER_RESET | EDP_BLC_ENABLE);
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
pp &= ~(POWER_TARGET_ON | PANEL_POWER_RESET | EDP_BLC_ENABLE);
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
From ea75f7357e3a881bd1bd0db5e483fc6a8681567b Mon Sep 17 00:00:00 2001
|
||||
From: Josh Boyer <jwboyer@redhat.com>
|
||||
Date: Tue, 10 Jan 2012 09:39:02 -0500
|
||||
Subject: [PATCH] ext4: Support "check=none" "nocheck" mount options
|
||||
|
||||
The ext2/ext3 filesystems supported "check=none" and "nocheck" as mount options
|
||||
even though that was already the default behavior and it essentially did
|
||||
nothing. When using ext4 to mount ext2/ext3 filesystems, that mount option
|
||||
causes the mount to fail. That isn't as backward compatible as it could be,
|
||||
so add support to ext4 to accept the option.
|
||||
|
||||
Signed-off-by: Josh Boyer <jwboyer@redhat.com>
|
||||
---
|
||||
fs/ext4/super.c | 7 ++++++-
|
||||
1 files changed, 6 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
|
||||
index 3e1329e..5ff09e7 100644
|
||||
--- a/fs/ext4/super.c
|
||||
+++ b/fs/ext4/super.c
|
||||
@@ -1333,7 +1333,7 @@ enum {
|
||||
Opt_nomblk_io_submit, Opt_block_validity, Opt_noblock_validity,
|
||||
Opt_inode_readahead_blks, Opt_journal_ioprio,
|
||||
Opt_dioread_nolock, Opt_dioread_lock,
|
||||
- Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable,
|
||||
+ Opt_discard, Opt_nodiscard, Opt_init_itable, Opt_noinit_itable, Opt_nocheck,
|
||||
};
|
||||
|
||||
static const match_table_t tokens = {
|
||||
@@ -1409,6 +1409,8 @@ static const match_table_t tokens = {
|
||||
{Opt_init_itable, "init_itable=%u"},
|
||||
{Opt_init_itable, "init_itable"},
|
||||
{Opt_noinit_itable, "noinit_itable"},
|
||||
+ {Opt_nocheck, "check=none"},
|
||||
+ {Opt_nocheck, "nocheck"},
|
||||
{Opt_err, NULL},
|
||||
};
|
||||
|
||||
@@ -1905,6 +1907,9 @@ set_qf_format:
|
||||
case Opt_noinit_itable:
|
||||
clear_opt(sb, INIT_INODE_TABLE);
|
||||
break;
|
||||
+ case Opt_nocheck:
|
||||
+ /* ext2/ext3 used to "support" this option. Silently eat it */
|
||||
+ break;
|
||||
default:
|
||||
ext4_msg(sb, KERN_ERR,
|
||||
"Unrecognized mount option \"%s\" "
|
||||
--
|
||||
1.7.7.5
|
||||
|
|
@ -1,13 +0,0 @@
|
|||
diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c
|
||||
index 9955a53..aef66d1 100644
|
||||
--- a/drivers/block/floppy.c
|
||||
+++ b/drivers/block/floppy.c
|
||||
@@ -1038,7 +1038,7 @@ static void floppy_disable_hlt(void)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
- WARN_ONCE(1, "floppy_disable_hlt() scheduled for removal in 2012");
|
||||
+ printk(KERN_INFO "floppy_disable_hlt() scheduled for removal in 2012");
|
||||
spin_lock_irqsave(&floppy_hlt_lock, flags);
|
||||
if (!hlt_disabled) {
|
||||
hlt_disabled = 1;
|
|
@ -1,176 +0,0 @@
|
|||
From c50ac050811d6485616a193eb0f37bfbd191cc89 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Hansen <dave@linux.vnet.ibm.com>
|
||||
Date: Tue, 29 May 2012 15:06:46 -0700
|
||||
Subject: [PATCH] hugetlb: fix resv_map leak in error path
|
||||
|
||||
When called for anonymous (non-shared) mappings, hugetlb_reserve_pages()
|
||||
does a resv_map_alloc(). It depends on code in hugetlbfs's
|
||||
vm_ops->close() to release that allocation.
|
||||
|
||||
However, in the mmap() failure path, we do a plain unmap_region() without
|
||||
the remove_vma() which actually calls vm_ops->close().
|
||||
|
||||
This is a decent fix. This leak could get reintroduced if new code (say,
|
||||
after hugetlb_reserve_pages() in hugetlbfs_file_mmap()) decides to return
|
||||
an error. But, I think it would have to unroll the reservation anyway.
|
||||
|
||||
Christoph's test case:
|
||||
|
||||
http://marc.info/?l=linux-mm&m=133728900729735
|
||||
|
||||
This patch applies to 3.4 and later. A version for earlier kernels is at
|
||||
https://lkml.org/lkml/2012/5/22/418.
|
||||
|
||||
Signed-off-by: Dave Hansen <dave@linux.vnet.ibm.com>
|
||||
Acked-by: Mel Gorman <mel@csn.ul.ie>
|
||||
Acked-by: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
|
||||
Reported-by: Christoph Lameter <cl@linux.com>
|
||||
Tested-by: Christoph Lameter <cl@linux.com>
|
||||
Cc: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Cc: <stable@vger.kernel.org> [2.6.32+]
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/hugetlb.c | 28 ++++++++++++++++++++++------
|
||||
1 files changed, 22 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
|
||||
index 41a647d..285a81e 100644
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -2157,6 +2157,15 @@ static void hugetlb_vm_op_open(struct vm_area_struct *vma)
|
||||
kref_get(&reservations->refs);
|
||||
}
|
||||
|
||||
+static void resv_map_put(struct vm_area_struct *vma)
|
||||
+{
|
||||
+ struct resv_map *reservations = vma_resv_map(vma);
|
||||
+
|
||||
+ if (!reservations)
|
||||
+ return;
|
||||
+ kref_put(&reservations->refs, resv_map_release);
|
||||
+}
|
||||
+
|
||||
static void hugetlb_vm_op_close(struct vm_area_struct *vma)
|
||||
{
|
||||
struct hstate *h = hstate_vma(vma);
|
||||
@@ -2173,7 +2182,7 @@ static void hugetlb_vm_op_close(struct vm_area_struct *vma)
|
||||
reserve = (end - start) -
|
||||
region_count(&reservations->regions, start, end);
|
||||
|
||||
- kref_put(&reservations->refs, resv_map_release);
|
||||
+ resv_map_put(vma);
|
||||
|
||||
if (reserve) {
|
||||
hugetlb_acct_memory(h, -reserve);
|
||||
@@ -2991,12 +3000,16 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
set_vma_resv_flags(vma, HPAGE_RESV_OWNER);
|
||||
}
|
||||
|
||||
- if (chg < 0)
|
||||
- return chg;
|
||||
+ if (chg < 0) {
|
||||
+ ret = chg;
|
||||
+ goto out_err;
|
||||
+ }
|
||||
|
||||
/* There must be enough pages in the subpool for the mapping */
|
||||
- if (hugepage_subpool_get_pages(spool, chg))
|
||||
- return -ENOSPC;
|
||||
+ if (hugepage_subpool_get_pages(spool, chg)) {
|
||||
+ ret = -ENOSPC;
|
||||
+ goto out_err;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Check enough hugepages are available for the reservation.
|
||||
@@ -3005,7 +3018,7 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
ret = hugetlb_acct_memory(h, chg);
|
||||
if (ret < 0) {
|
||||
hugepage_subpool_put_pages(spool, chg);
|
||||
- return ret;
|
||||
+ goto out_err;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -3022,6 +3035,9 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
if (!vma || vma->vm_flags & VM_MAYSHARE)
|
||||
region_add(&inode->i_mapping->private_list, from, to);
|
||||
return 0;
|
||||
+out_err:
|
||||
+ resv_map_put(vma);
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
void hugetlb_unreserve_pages(struct inode *inode, long offset, long freed)
|
||||
--
|
||||
1.7.7.6
|
||||
|
||||
From 4523e1458566a0e8ecfaff90f380dd23acc44d27 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Hansen <dave@linux.vnet.ibm.com>
|
||||
Date: Wed, 30 May 2012 07:51:07 -0700
|
||||
Subject: [PATCH] mm: fix vma_resv_map() NULL pointer
|
||||
|
||||
hugetlb_reserve_pages() can be used for either normal file-backed
|
||||
hugetlbfs mappings, or MAP_HUGETLB. In the MAP_HUGETLB, semi-anonymous
|
||||
mode, there is not a VMA around. The new call to resv_map_put() assumed
|
||||
that there was, and resulted in a NULL pointer dereference:
|
||||
|
||||
BUG: unable to handle kernel NULL pointer dereference at 0000000000000030
|
||||
IP: vma_resv_map+0x9/0x30
|
||||
PGD 141453067 PUD 1421e1067 PMD 0
|
||||
Oops: 0000 [#1] PREEMPT SMP
|
||||
...
|
||||
Pid: 14006, comm: trinity-child6 Not tainted 3.4.0+ #36
|
||||
RIP: vma_resv_map+0x9/0x30
|
||||
...
|
||||
Process trinity-child6 (pid: 14006, threadinfo ffff8801414e0000, task ffff8801414f26b0)
|
||||
Call Trace:
|
||||
resv_map_put+0xe/0x40
|
||||
hugetlb_reserve_pages+0xa6/0x1d0
|
||||
hugetlb_file_setup+0x102/0x2c0
|
||||
newseg+0x115/0x360
|
||||
ipcget+0x1ce/0x310
|
||||
sys_shmget+0x5a/0x60
|
||||
system_call_fastpath+0x16/0x1b
|
||||
|
||||
This was reported by Dave Jones, but was reproducible with the
|
||||
libhugetlbfs test cases, so shame on me for not running them in the
|
||||
first place.
|
||||
|
||||
With this, the oops is gone, and the output of libhugetlbfs's
|
||||
run_tests.py is identical to plain 3.4 again.
|
||||
|
||||
[ Marked for stable, since this was introduced by commit c50ac050811d
|
||||
("hugetlb: fix resv_map leak in error path") which was also marked for
|
||||
stable ]
|
||||
|
||||
Reported-by: Dave Jones <davej@redhat.com>
|
||||
Cc: Mel Gorman <mel@csn.ul.ie>
|
||||
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
|
||||
Cc: Christoph Lameter <cl@linux.com>
|
||||
Cc: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Cc: Andrew Morton <akpm@linux-foundation.org>
|
||||
Cc: <stable@vger.kernel.org> [2.6.32+]
|
||||
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
|
||||
---
|
||||
mm/hugetlb.c | 3 ++-
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
|
||||
index 285a81e..e198831 100644
|
||||
--- a/mm/hugetlb.c
|
||||
+++ b/mm/hugetlb.c
|
||||
@@ -3036,7 +3036,8 @@ int hugetlb_reserve_pages(struct inode *inode,
|
||||
region_add(&inode->i_mapping->private_list, from, to);
|
||||
return 0;
|
||||
out_err:
|
||||
- resv_map_put(vma);
|
||||
+ if (vma)
|
||||
+ resv_map_put(vma);
|
||||
return ret;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,48 @@
|
|||
From d012d04e4d6312ea157b6cf19e9689af934f5aa7 Mon Sep 17 00:00:00 2001
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Date: Wed, 6 Jun 2012 13:55:02 +0200
|
||||
Subject: [PATCH] iwlwifi: disable the buggy chain extension feature in HW
|
||||
|
||||
This feature has been reported to be buggy and enabled by
|
||||
default. We therefore need to disable it manually.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/iwl-prph.h | 1 +
|
||||
drivers/net/wireless/iwlwifi/iwl-trans-pcie.c | 5 +++++
|
||||
2 files changed, 6 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-prph.h b/drivers/net/wireless/iwlwifi/iwl-prph.h
|
||||
index 3b10692..dfd5466 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-prph.h
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-prph.h
|
||||
@@ -224,6 +224,7 @@
|
||||
#define SCD_TXFACT (SCD_BASE + 0x10)
|
||||
#define SCD_ACTIVE (SCD_BASE + 0x14)
|
||||
#define SCD_QUEUECHAIN_SEL (SCD_BASE + 0xe8)
|
||||
+#define SCD_CHAINEXT_EN (SCD_BASE + 0x244)
|
||||
#define SCD_AGGR_SEL (SCD_BASE + 0x248)
|
||||
#define SCD_INTERRUPT_MASK (SCD_BASE + 0x108)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
|
||||
index ec6fb39..79c6b91 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
|
||||
@@ -1058,6 +1058,11 @@ static void iwl_tx_start(struct iwl_trans *trans)
|
||||
iwl_write_prph(trans, SCD_DRAM_BASE_ADDR,
|
||||
trans_pcie->scd_bc_tbls.dma >> 10);
|
||||
|
||||
+ /* The chain extension of the SCD doesn't work well. This feature is
|
||||
+ * enabled by default by the HW, so we need to disable it manually.
|
||||
+ */
|
||||
+ iwl_write_prph(trans, SCD_CHAINEXT_EN, 0);
|
||||
+
|
||||
/* Enable DMA channel */
|
||||
for (chan = 0; chan < FH_TCSR_CHNL_NUM ; chan++)
|
||||
iwl_write_direct32(trans, FH_TCSR_CHNL_TX_CONFIG_REG(chan),
|
||||
--
|
||||
1.7.7.6
|
||||
|
|
@ -0,0 +1,45 @@
|
|||
From d6ee27eb13beab94056e0de52d81220058ca2297 Mon Sep 17 00:00:00 2001
|
||||
From: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Date: Wed, 6 Jun 2012 09:13:36 +0200
|
||||
Subject: [PATCH] iwlwifi: don't mess up the SCD when removing a key
|
||||
|
||||
When we remove a key, we put a key index which was supposed
|
||||
to tell the fw that we are actually removing the key. But
|
||||
instead the fw took that index as a valid index and messed
|
||||
up the SRAM of the device.
|
||||
|
||||
This memory corruption on the device mangled the data of
|
||||
the SCD. The impact on the user is that SCD queue 2 got
|
||||
stuck after having removed keys.
|
||||
The message is the log that was printed is:
|
||||
|
||||
Queue 2 stuck for 10000ms
|
||||
|
||||
This doesn't seem to fix the higher queues that get stuck
|
||||
from time to time.
|
||||
|
||||
Cc: stable@vger.kernel.org [2.6.27+]
|
||||
Reviewed-by: Meenakshi Venkataraman <meenakshi.venkataraman@intel.com>
|
||||
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
|
||||
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||
Signed-off-by: John W. Linville <linville@tuxdriver.com>
|
||||
---
|
||||
drivers/net/wireless/iwlwifi/iwl-agn-sta.c | 2 +-
|
||||
1 files changed, 1 insertions(+), 1 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
|
||||
index aea07aa..eb6a8ea 100644
|
||||
--- a/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
|
||||
+++ b/drivers/net/wireless/iwlwifi/iwl-agn-sta.c
|
||||
@@ -1267,7 +1267,7 @@ int iwl_remove_dynamic_key(struct iwl_priv *priv,
|
||||
key_flags |= STA_KEY_MULTICAST_MSK;
|
||||
|
||||
sta_cmd.key.key_flags = key_flags;
|
||||
- sta_cmd.key.key_offset = WEP_INVALID_OFFSET;
|
||||
+ sta_cmd.key.key_offset = keyconf->hw_key_idx;
|
||||
sta_cmd.sta.modify_mask = STA_MODIFY_KEY_MASK;
|
||||
sta_cmd.mode = STA_CONTROL_MODIFY_MSK;
|
||||
|
||||
--
|
||||
1.7.6.5
|
||||
|
114
kernel.spec
114
kernel.spec
|
@ -60,13 +60,13 @@ Summary: The Linux kernel
|
|||
# base_sublevel is the kernel version we're starting with and patching
|
||||
# on top of -- for example, 2.6.22-rc7-git1 starts with a 2.6.21 base,
|
||||
# which yields a base_sublevel of 21.
|
||||
%define base_sublevel 3
|
||||
%define base_sublevel 4
|
||||
|
||||
## If this is a released kernel ##
|
||||
%if 0%{?released_kernel}
|
||||
|
||||
# Do we have a -stable update to apply?
|
||||
%define stable_update 8
|
||||
%define stable_update 2
|
||||
# Is it a -stable RC?
|
||||
%define stable_rc 0
|
||||
# Set rpm version accordingly
|
||||
|
@ -409,12 +409,13 @@ Summary: The Linux kernel
|
|||
# we build a up kernel on armv5tel. its used for qemu.
|
||||
%ifnarch armv5tel
|
||||
%define with_up 0
|
||||
%define with_perf 0
|
||||
%endif
|
||||
# we only build headers on the base arm arches
|
||||
# just like we used to only build them on i386 for x86
|
||||
%ifnarch armv5tel armv7hl
|
||||
%define with_headers 0
|
||||
%define with_perf 0
|
||||
%define with_tools 0
|
||||
%endif
|
||||
%endif
|
||||
|
||||
|
@ -661,8 +662,6 @@ Patch160: linux-2.6-32bit-mmap-exec-randomization.patch
|
|||
Patch161: linux-2.6-i386-nx-emulation.patch
|
||||
Patch162: nx-emu-remove-cpuinitdata-for-disable_nx-on-x86_32.patch
|
||||
|
||||
Patch383: linux-2.6-defaults-aspm.patch
|
||||
|
||||
Patch390: linux-2.6-defaults-acpi-video.patch
|
||||
Patch391: linux-2.6-acpi-video-dos.patch
|
||||
Patch394: linux-2.6-acpi-debug-infinite-loop.patch
|
||||
|
@ -674,10 +673,8 @@ Patch452: linux-2.6.30-no-pcspkr-modalias.patch
|
|||
Patch460: linux-2.6-serial-460800.patch
|
||||
|
||||
Patch470: die-floppy-die.patch
|
||||
Patch471: floppy-drop-disable_hlt-warning.patch
|
||||
|
||||
Patch510: linux-2.6-silence-noise.patch
|
||||
Patch511: silence-timekeeping-spew.patch
|
||||
Patch520: quite-apm.patch
|
||||
Patch530: linux-2.6-silence-fbcon-logo.patch
|
||||
|
||||
|
@ -707,8 +704,6 @@ Patch1900: linux-2.6-intel-iommu-igfx.patch
|
|||
Patch2802: linux-2.6-silence-acpi-blacklist.patch
|
||||
|
||||
# media patches
|
||||
# add-poll-requested-events.patch was added for 3.4
|
||||
Patch2900: add-poll-requested-events.patch
|
||||
Patch2901: drivers-media-update.patch
|
||||
|
||||
# fs fixes
|
||||
|
@ -717,14 +712,6 @@ Patch2901: drivers-media-update.patch
|
|||
Patch3500: jbd-jbd2-validate-sb-s_first-in-journal_get_superblo.patch
|
||||
|
||||
# NFSv4
|
||||
Patch4000: NFSv4-Reduce-the-footprint-of-the-idmapper.patch
|
||||
Patch4001: NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch
|
||||
Patch4107: NFSv4-Minor-cleanups-for-nfs4_handle_exception-and-n.patch
|
||||
|
||||
# NFS Client Patch set from Upstream
|
||||
Patch4113: NFS-optimise-away-unnecessary-setattrs-for-open-O_TRUNC.patch
|
||||
Patch4114: NFSv4-fix-open-O_TRUNC-and-ftruncate-error-handling.patch
|
||||
Patch4115: NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch
|
||||
|
||||
# patches headed upstream
|
||||
|
||||
|
@ -736,48 +723,25 @@ Patch13003: efi-dont-map-boot-services-on-32bit.patch
|
|||
|
||||
Patch14010: lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
Patch15000: bluetooth-use-after-free.patch
|
||||
|
||||
Patch19000: ips-noirq.patch
|
||||
|
||||
Patch20000: utrace.patch
|
||||
|
||||
# Flattened devicetree support
|
||||
Patch21000: arm-omap-dt-compat.patch
|
||||
Patch21001: arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
|
||||
Patch21070: ext4-Support-check-none-nocheck-mount-options.patch
|
||||
|
||||
#rhbz 769766
|
||||
Patch21072: mac80211-fix-rx-key-NULL-ptr-deref-in-promiscuous-mode.patch
|
||||
|
||||
Patch21226: pci-crs-blacklist.patch
|
||||
|
||||
#rhbz 772772
|
||||
Patch21232: rt2x00_fix_MCU_request_failures.patch
|
||||
|
||||
#rhbz 754518
|
||||
#Patch21235: scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
#rhbz 789644
|
||||
Patch21237: mcelog-rcu-splat.patch
|
||||
|
||||
Patch21300: unhandled-irqs-switch-to-polling.patch
|
||||
|
||||
#rhbz 804957 CVE-2012-1568
|
||||
Patch21306: shlib_base_randomize.patch
|
||||
|
||||
#rhbz 804347
|
||||
Patch21351: x86-add-io_apic_ops-to-allow-interception.patch
|
||||
Patch21352: x86-apic_ops-Replace-apic_ops-with-x86_apic_ops.patch
|
||||
Patch21353: xen-x86-Implement-x86_apic_ops.patch
|
||||
|
||||
#rhbz 808559
|
||||
Patch21530: ALSA-hda-realtek-Add-quirk-for-Mac-Pro-5-1-machines.patch
|
||||
|
||||
#rhbz 806295
|
||||
Patch21710: disable-hid-battery.patch
|
||||
|
||||
# Debug patches
|
||||
Patch30000: weird-root-dentry-name-debug.patch
|
||||
Patch30010: debug-808990.patch
|
||||
|
@ -789,7 +753,7 @@ Patch22007: macvtap-zerocopy-validate-vector-length.patch
|
|||
Patch22013: ipw2x00-add-supported-cipher-suites-to-wiphy-initialization.patch
|
||||
|
||||
#rhbz 749276
|
||||
Patch22018: atl1c_net_next_update-3.3.patch
|
||||
Patch22018: atl1c_net_next_update-3.4.patch
|
||||
|
||||
#rhbz 795176
|
||||
Patch22019: rtl818x-fix-sleeping-function-called-from-invalid-context.patch
|
||||
|
@ -797,8 +761,16 @@ Patch22019: rtl818x-fix-sleeping-function-called-from-invalid-context.patch
|
|||
#rhbz 822825 822821 CVE-2012-2372
|
||||
Patch22021: mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_populate-SMP-race-condition.patch
|
||||
|
||||
#rhbz 824352 824345 CVE-2012-2390
|
||||
Patch22022: hugetlb-fix-resv_map-leak-in-error-path.patch
|
||||
#rhbz 829016
|
||||
Patch22022: thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-PAE.patch
|
||||
|
||||
#rhbz 825491
|
||||
Patch22023: iwlwifi-disable-the-buggy-chain-extension-feature-in-HW.patch
|
||||
Patch22024: iwlwifi-dont-mess-up-the-SCD-when-removing-a-key.patch
|
||||
|
||||
#rhbz 830862
|
||||
Patch22030: SUNRPC-new-svc_bind-routine-introduced.patch
|
||||
Patch22031: SUNRPC-move-per-net-operations-from-svc_destroy.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
|
@ -1304,7 +1276,7 @@ ApplyOptionalPatch linux-2.6-upstream-reverts.patch -R
|
|||
# ARM
|
||||
#
|
||||
# ApplyPatch arm-omap-dt-compat.patch
|
||||
ApplyPatch arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
# ApplyPatch arm-smsc-support-reading-mac-address-from-device-tree.patch
|
||||
|
||||
ApplyPatch taint-vbox.patch
|
||||
#
|
||||
|
@ -1333,14 +1305,6 @@ ApplyPatch jbd-jbd2-validate-sb-s_first-in-journal_get_superblo.patch
|
|||
# eCryptfs
|
||||
|
||||
# NFSv4
|
||||
ApplyPatch NFSv4-Reduce-the-footprint-of-the-idmapper.patch
|
||||
ApplyPatch NFSv4-Further-reduce-the-footprint-of-the-idmapper.patch
|
||||
ApplyPatch NFSv4-Minor-cleanups-for-nfs4_handle_exception-and-n.patch
|
||||
|
||||
# NFS Client Patch set from Upstream
|
||||
ApplyPatch NFS-optimise-away-unnecessary-setattrs-for-open-O_TRUNC.patch
|
||||
ApplyPatch NFSv4-fix-open-O_TRUNC-and-ftruncate-error-handling.patch
|
||||
ApplyPatch NFSv4-Rate-limit-the-state-manager-for-lock-reclaim-.patch
|
||||
|
||||
# USB
|
||||
|
||||
|
@ -1355,8 +1319,6 @@ ApplyPatch acpi-sony-nonvs-blacklist.patch
|
|||
#
|
||||
# PCI
|
||||
#
|
||||
# enable ASPM by default on hardware we expect to work
|
||||
ApplyPatch linux-2.6-defaults-aspm.patch
|
||||
|
||||
#
|
||||
# SCSI Bits.
|
||||
|
@ -1366,9 +1328,6 @@ ApplyPatch linux-2.6-defaults-aspm.patch
|
|||
|
||||
# ALSA
|
||||
|
||||
#rhbz 808559
|
||||
ApplyPatch ALSA-hda-realtek-Add-quirk-for-Mac-Pro-5-1-machines.patch
|
||||
|
||||
# Networking
|
||||
|
||||
|
||||
|
@ -1378,7 +1337,6 @@ ApplyPatch linux-2.6-input-kill-stupid-messages.patch
|
|||
|
||||
# stop floppy.ko from autoloading during udev...
|
||||
ApplyPatch die-floppy-die.patch
|
||||
ApplyPatch floppy-drop-disable_hlt-warning.patch
|
||||
|
||||
ApplyPatch linux-2.6.30-no-pcspkr-modalias.patch
|
||||
|
||||
|
@ -1388,8 +1346,6 @@ ApplyPatch linux-2.6-serial-460800.patch
|
|||
# Silence some useless messages that still get printed with 'quiet'
|
||||
ApplyPatch linux-2.6-silence-noise.patch
|
||||
|
||||
ApplyPatch silence-timekeeping-spew.patch
|
||||
|
||||
# Make fbcon not show the penguins with 'quiet'
|
||||
ApplyPatch linux-2.6-silence-fbcon-logo.patch
|
||||
|
||||
|
@ -1423,7 +1379,6 @@ ApplyPatch quite-apm.patch
|
|||
|
||||
# Media (V4L/DVB/IR) updates/fixes/experimental drivers
|
||||
# apply if non-empty
|
||||
ApplyPatch add-poll-requested-events.patch
|
||||
ApplyOptionalPatch drivers-media-update.patch
|
||||
|
||||
# Patches headed upstream
|
||||
|
@ -1437,40 +1392,19 @@ ApplyPatch efi-dont-map-boot-services-on-32bit.patch
|
|||
|
||||
ApplyPatch lis3-improve-handling-of-null-rate.patch
|
||||
|
||||
ApplyPatch bluetooth-use-after-free.patch
|
||||
|
||||
ApplyPatch ips-noirq.patch
|
||||
|
||||
# utrace.
|
||||
ApplyPatch utrace.patch
|
||||
|
||||
#ApplyPatch pci-crs-blacklist.patch
|
||||
|
||||
ApplyPatch ext4-Support-check-none-nocheck-mount-options.patch
|
||||
|
||||
#rhbz 772772
|
||||
ApplyPatch rt2x00_fix_MCU_request_failures.patch
|
||||
|
||||
#rhbz 754518
|
||||
#ApplyPatch scsi-sd_revalidate_disk-prevent-NULL-ptr-deref.patch
|
||||
|
||||
#rhbz 789644
|
||||
ApplyPatch mcelog-rcu-splat.patch
|
||||
|
||||
ApplyPatch unhandled-irqs-switch-to-polling.patch
|
||||
|
||||
# debug patches
|
||||
ApplyPatch weird-root-dentry-name-debug.patch
|
||||
ApplyPatch debug-808990.patch
|
||||
|
||||
#rhbz 804347
|
||||
ApplyPatch x86-add-io_apic_ops-to-allow-interception.patch
|
||||
ApplyPatch x86-apic_ops-Replace-apic_ops-with-x86_apic_ops.patch
|
||||
ApplyPatch xen-x86-Implement-x86_apic_ops.patch
|
||||
|
||||
#rhbz 806295
|
||||
ApplyPatch disable-hid-battery.patch
|
||||
|
||||
#rhbz 814278 814289 CVE-2012-2119
|
||||
ApplyPatch macvtap-zerocopy-validate-vector-length.patch
|
||||
|
||||
|
@ -1478,7 +1412,7 @@ ApplyPatch macvtap-zerocopy-validate-vector-length.patch
|
|||
ApplyPatch ipw2x00-add-supported-cipher-suites-to-wiphy-initialization.patch
|
||||
|
||||
#rhbz 749276
|
||||
ApplyPatch atl1c_net_next_update-3.3.patch
|
||||
ApplyPatch atl1c_net_next_update-3.4.patch
|
||||
|
||||
#rhbz 795176
|
||||
ApplyPatch rtl818x-fix-sleeping-function-called-from-invalid-context.patch
|
||||
|
@ -1486,8 +1420,15 @@ ApplyPatch rtl818x-fix-sleeping-function-called-from-invalid-context.patch
|
|||
#rhbz 822825 822821 CVE-2012-2372
|
||||
ApplyPatch mm-pmd_read_atomic-fix-32bit-PAE-pmd-walk-vs-pmd_populate-SMP-race-condition.patch
|
||||
|
||||
#rhbz 824352 824345 CVE-2012-2390
|
||||
ApplyPatch hugetlb-fix-resv_map-leak-in-error-path.patch
|
||||
ApplyPatch thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-PAE.patch
|
||||
|
||||
#rhbz 825491
|
||||
ApplyPatch iwlwifi-disable-the-buggy-chain-extension-feature-in-HW.patch
|
||||
ApplyPatch iwlwifi-dont-mess-up-the-SCD-when-removing-a-key.patch
|
||||
|
||||
#rhbz 830862
|
||||
ApplyPatch SUNRPC-new-svc_bind-routine-introduced.patch
|
||||
ApplyPatch SUNRPC-move-per-net-operations-from-svc_destroy.patch
|
||||
|
||||
# END OF PATCH APPLICATIONS
|
||||
|
||||
|
@ -2227,6 +2168,9 @@ fi
|
|||
# and build.
|
||||
|
||||
%changelog
|
||||
* Thu Jun 14 2012 Justin M. Forbes <jforbes@redhat.com> 3.4.2-1
|
||||
- Linux 3.4.2
|
||||
|
||||
* Mon Jun 04 2012 Josh Boyer <jwboyer@redhat.com> 3.3.8-1
|
||||
- Linux v3.3.8
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
--- linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h~ 2010-07-01 14:49:03.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/drivers/acpi/acpica/acconfig.h 2010-07-01 14:49:17.000000000 -0400
|
||||
--- linux-2.6.34.noarch/include/acpi/acconfig.h~ 2010-07-01 14:49:03.000000000 -0400
|
||||
+++ linux-2.6.34.noarch/include/acpi/acconfig.h 2010-07-01 14:49:17.000000000 -0400
|
||||
@@ -117,7 +117,7 @@
|
||||
|
||||
/* Maximum number of While() loop iterations before forced abort */
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
diff -up linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg linux-2.6.30.noarch/drivers/pci/pcie/aspm.c
|
||||
--- linux-2.6.30.noarch/drivers/pci/pcie/aspm.c.mjg 2009-07-16 22:01:11.000000000 +0100
|
||||
+++ linux-2.6.30.noarch/drivers/pci/pcie/aspm.c 2009-07-16 22:01:30.000000000 +0100
|
||||
@@ -65,7 +65,7 @@ static LIST_HEAD(link_list);
|
||||
#define POLICY_DEFAULT 0 /* BIOS default setting */
|
||||
#define POLICY_PERFORMANCE 1 /* high performance */
|
||||
#define POLICY_POWERSAVE 2 /* high power saving */
|
||||
-static int aspm_policy;
|
||||
+static int aspm_policy = POLICY_POWERSAVE;
|
||||
static const char *policy_str[] = {
|
||||
[POLICY_DEFAULT] = "default",
|
||||
[POLICY_PERFORMANCE] = "performance",
|
|
@ -1,15 +0,0 @@
|
|||
diff --git a/arch/x86/kernel/cpu/mcheck/mce.c b/arch/x86/kernel/cpu/mcheck/mce.c
|
||||
index f22a9f7..f525f99 100644
|
||||
--- a/arch/x86/kernel/cpu/mcheck/mce.c
|
||||
+++ b/arch/x86/kernel/cpu/mcheck/mce.c
|
||||
@@ -191,7 +191,7 @@ static void drain_mcelog_buffer(void)
|
||||
{
|
||||
unsigned int next, i, prev = 0;
|
||||
|
||||
- next = rcu_dereference_check_mce(mcelog.next);
|
||||
+ next = ACCESS_ONCE(mcelog.next);
|
||||
|
||||
do {
|
||||
struct mce *m;
|
||||
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
diff --git a/drivers/net/wireless/rt2x00/rt2800.h b/drivers/net/wireless/rt2x00/rt2800.h
|
||||
index 2571a2f..822f9e5 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800.h
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800.h
|
||||
@@ -1627,6 +1627,7 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* H2M_MAILBOX_CSR: Host-to-MCU Mailbox.
|
||||
+ * CMD_TOKEN: Command id, 0xff disable status reporting
|
||||
*/
|
||||
#define H2M_MAILBOX_CSR 0x7010
|
||||
#define H2M_MAILBOX_CSR_ARG0 FIELD32(0x000000ff)
|
||||
@@ -1636,6 +1637,8 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* H2M_MAILBOX_CID:
|
||||
+ * Free slots contain 0xff. MCU will store command's token to lowest free slot.
|
||||
+ * If all slots are occupied status will be dropped.
|
||||
*/
|
||||
#define H2M_MAILBOX_CID 0x7014
|
||||
#define H2M_MAILBOX_CID_CMD0 FIELD32(0x000000ff)
|
||||
@@ -1645,6 +1648,7 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* H2M_MAILBOX_STATUS:
|
||||
+ * Command status will be saved to same slot as command id.
|
||||
*/
|
||||
#define H2M_MAILBOX_STATUS 0x701c
|
||||
|
||||
@@ -2259,6 +2263,12 @@ struct mac_iveiv_entry {
|
||||
|
||||
/*
|
||||
* MCU mailbox commands.
|
||||
+ * MCU_SLEEP - go to power-save mode.
|
||||
+ * arg1: 1: save as much power as possible, 0: save less power
|
||||
+ * status: 1: success, 2: already asleep,
|
||||
+ * 3: maybe MAC is busy so can't finish this task
|
||||
+ * MCU_RADIO_OFF
|
||||
+ * arg0: 0: do power-saving, NOT turn off radio
|
||||
*/
|
||||
#define MCU_SLEEP 0x30
|
||||
#define MCU_WAKEUP 0x31
|
||||
@@ -2279,7 +2289,9 @@ struct mac_iveiv_entry {
|
||||
/*
|
||||
* MCU mailbox tokens
|
||||
*/
|
||||
-#define TOKEN_WAKUP 3
|
||||
+#define TOKEN_SLEEP 1
|
||||
+#define TOKEN_RADIO_OFF 2
|
||||
+#define TOKEN_WAKEUP 3
|
||||
|
||||
/*
|
||||
* DMA descriptor defines.
|
||||
diff --git a/drivers/net/wireless/rt2x00/rt2800pci.c b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
index dc88bae..9ac3017 100644
|
||||
--- a/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
+++ b/drivers/net/wireless/rt2x00/rt2800pci.c
|
||||
@@ -517,23 +517,6 @@ static void rt2800pci_disable_radio(struct rt2x00_dev *rt2x00dev)
|
||||
}
|
||||
}
|
||||
|
||||
-static int rt2800pci_set_state(struct rt2x00_dev *rt2x00dev,
|
||||
- enum dev_state state)
|
||||
-{
|
||||
- if (state == STATE_AWAKE) {
|
||||
- rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKUP, 0, 0x02);
|
||||
- rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKUP);
|
||||
- } else if (state == STATE_SLEEP) {
|
||||
- rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS,
|
||||
- 0xffffffff);
|
||||
- rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID,
|
||||
- 0xffffffff);
|
||||
- rt2800_mcu_request(rt2x00dev, MCU_SLEEP, 0x01, 0xff, 0x01);
|
||||
- }
|
||||
-
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
enum dev_state state)
|
||||
{
|
||||
@@ -541,14 +524,20 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
|
||||
switch (state) {
|
||||
case STATE_RADIO_ON:
|
||||
- /*
|
||||
- * Before the radio can be enabled, the device first has
|
||||
- * to be woken up. After that it needs a bit of time
|
||||
- * to be fully awake and then the radio can be enabled.
|
||||
- */
|
||||
- rt2800pci_set_state(rt2x00dev, STATE_AWAKE);
|
||||
- msleep(1);
|
||||
+ /* Initialise all registers and send MCU_BOOT_SIGNAL. */
|
||||
retval = rt2800pci_enable_radio(rt2x00dev);
|
||||
+
|
||||
+ /* After resume MCU_BOOT_SIGNAL will trash those. */
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
|
||||
+
|
||||
+ /* Finish initialization procedure. */
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_RADIO_OFF,
|
||||
+ 0xff, 0x02);
|
||||
+ rt2800pci_mcu_status(rt2x00dev, TOKEN_RADIO_OFF);
|
||||
+
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP, 0, 0);
|
||||
+ rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP);
|
||||
break;
|
||||
case STATE_RADIO_OFF:
|
||||
/*
|
||||
@@ -556,7 +545,7 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
* be put to sleep for powersaving.
|
||||
*/
|
||||
rt2800pci_disable_radio(rt2x00dev);
|
||||
- rt2800pci_set_state(rt2x00dev, STATE_SLEEP);
|
||||
+ rt2800pci_set_device_state(rt2x00dev, STATE_SLEEP);
|
||||
break;
|
||||
case STATE_RADIO_IRQ_ON:
|
||||
case STATE_RADIO_IRQ_OFF:
|
||||
@@ -565,8 +554,16 @@ static int rt2800pci_set_device_state(struct rt2x00_dev *rt2x00dev,
|
||||
case STATE_DEEP_SLEEP:
|
||||
case STATE_SLEEP:
|
||||
case STATE_STANDBY:
|
||||
+ /* PCIe devices won't report status after SLEEP request. */
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_STATUS, ~0);
|
||||
+ rt2x00pci_register_write(rt2x00dev, H2M_MAILBOX_CID, ~0);
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_SLEEP, TOKEN_SLEEP,
|
||||
+ 0xff, 0x01);
|
||||
+ break;
|
||||
case STATE_AWAKE:
|
||||
- retval = rt2800pci_set_state(rt2x00dev, state);
|
||||
+ rt2800_mcu_request(rt2x00dev, MCU_WAKEUP, TOKEN_WAKEUP,
|
||||
+ 0, 0x02);
|
||||
+ rt2800pci_mcu_status(rt2x00dev, TOKEN_WAKEUP);
|
||||
break;
|
||||
default:
|
||||
retval = -ENOTSUPP;
|
|
@ -1,16 +0,0 @@
|
|||
--- linux-3.3.0-4.fc17.noarch/kernel/time/timekeeping.c~ 2012-03-30 14:18:15.591162207 -0400
|
||||
+++ linux-3.3.0-4.fc17.noarch/kernel/time/timekeeping.c 2012-03-30 14:18:38.959121171 -0400
|
||||
@@ -854,13 +854,6 @@ static void timekeeping_adjust(s64 offse
|
||||
} else /* No adjustment needed */
|
||||
return;
|
||||
|
||||
- WARN_ONCE(timekeeper.clock->maxadj &&
|
||||
- (timekeeper.mult + adj > timekeeper.clock->mult +
|
||||
- timekeeper.clock->maxadj),
|
||||
- "Adjusting %s more then 11%% (%ld vs %ld)\n",
|
||||
- timekeeper.clock->name, (long)timekeeper.mult + adj,
|
||||
- (long)timekeeper.clock->mult +
|
||||
- timekeeper.clock->maxadj);
|
||||
/*
|
||||
* So the following can be confusing.
|
||||
*
|
4
sources
4
sources
|
@ -1,2 +1,2 @@
|
|||
7133f5a2086a7d7ef97abac610c094f5 linux-3.3.tar.xz
|
||||
e1714b5136a7f4dab1b5d2d7f98e2891 patch-3.3.8.xz
|
||||
967f72983655e2479f951195953e8480 linux-3.4.tar.xz
|
||||
ac52d3d82c20c7e80740fc5fb00b6ed4 patch-3.4.2.xz
|
||||
|
|
|
@ -0,0 +1,228 @@
|
|||
|
||||
Delivered-To: jwboyer@gmail.com
|
||||
Received: by 10.229.175.203 with SMTP id bb11csp66243qcb;
|
||||
Fri, 8 Jun 2012 15:08:27 -0700 (PDT)
|
||||
Received: by 10.68.222.133 with SMTP id qm5mr23412736pbc.113.1339193307132;
|
||||
Fri, 08 Jun 2012 15:08:27 -0700 (PDT)
|
||||
Return-Path: <stable-owner@vger.kernel.org>
|
||||
Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67])
|
||||
by mx.google.com with ESMTP id ku9si12482578pbc.355.2012.06.08.15.08.24;
|
||||
Fri, 08 Jun 2012 15:08:25 -0700 (PDT)
|
||||
Received-SPF: pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67;
|
||||
Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of stable-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mail=stable-owner@vger.kernel.org
|
||||
Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand
|
||||
id S964992Ab2FHWIW (ORCPT <rfc822;bigsmallbd@gmail.com> + 21 others);
|
||||
Fri, 8 Jun 2012 18:08:22 -0400
|
||||
Received: from mail-bk0-f74.google.com ([209.85.214.74]:41783 "EHLO
|
||||
mail-bk0-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org
|
||||
with ESMTP id S964922Ab2FHWIV (ORCPT
|
||||
<rfc822;stable@vger.kernel.org>); Fri, 8 Jun 2012 18:08:21 -0400
|
||||
Received: by bkty5 with SMTP id y5so128736bkt.1
|
||||
for <stable@vger.kernel.org>; Fri, 08 Jun 2012 15:08:20 -0700 (PDT)
|
||||
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
|
||||
d=google.com; s=20120113;
|
||||
h=subject:to:cc:from:date:message-id:x-gm-message-state;
|
||||
bh=RSdNZSZcXg/enKaYIM+JR4+Bd890ieO+blY9bsk9giI=;
|
||||
b=NwTZEmRSdqDAiTV/EW91GXpM/yrRd7CNzfPif0JcF0iFgxGAo4lB7W1I05vmrnPcCQ
|
||||
Va+P6xXLWle2rAVQLsPooKdtb3u2wnNRDEGvBPZl2alje+qzhKGlQcVgnI5+KCM6GaS+
|
||||
YWoE+2gv5UFmF6JlelThyecGTyZ0D93K5aVYewSxg0H7KZ6BgvMnB/qJKFdScatv1uDH
|
||||
g39MFwJzmD+DmNMn149jeUWYOLLTeMZJkymtJCLgxS8eJzQxXA0nes2Wz/pXCBdxXF2z
|
||||
mft6LyzKtoEUDeTtalgm9zxkT4XJ+6bsAMEXBFgkcyNq0Ic8P79AP0ynlET2L/Ql3ARP
|
||||
C5Sg==
|
||||
Received: by 10.14.101.2 with SMTP id a2mr2823176eeg.6.1339193299969;
|
||||
Fri, 08 Jun 2012 15:08:19 -0700 (PDT)
|
||||
Received: from hpza10.eem.corp.google.com ([74.125.121.33])
|
||||
by gmr-mx.google.com with ESMTPS id d52si7345113eei.1.2012.06.08.15.08.19
|
||||
(version=TLSv1/SSLv3 cipher=AES128-SHA);
|
||||
Fri, 08 Jun 2012 15:08:19 -0700 (PDT)
|
||||
Received: from akpm.mtv.corp.google.com (akpm.mtv.corp.google.com [172.18.96.75])
|
||||
by hpza10.eem.corp.google.com (Postfix) with ESMTP id 9D09620004E;
|
||||
Fri, 8 Jun 2012 15:08:19 -0700 (PDT)
|
||||
Received: from localhost.localdomain (localhost [127.0.0.1])
|
||||
by akpm.mtv.corp.google.com (Postfix) with ESMTP id D5FACA0329;
|
||||
Fri, 8 Jun 2012 15:08:18 -0700 (PDT)
|
||||
Subject: + thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae.patch added to -mm tree
|
||||
To: mm-commits@vger.kernel.org
|
||||
Cc: aarcange@redhat.com, hughd@google.com, jbeulich@suse.com,
|
||||
jrnieder@gmail.com, kosaki.motohiro@gmail.com, lwoodman@redhat.com,
|
||||
mgorman@suse.de, pmatouse@redhat.com, riel@redhat.com,
|
||||
stable@vger.kernel.org, uobergfe@redhat.com
|
||||
From: akpm@linux-foundation.org
|
||||
Date: Fri, 08 Jun 2012 15:08:18 -0700
|
||||
Message-Id: <20120608220818.D5FACA0329@akpm.mtv.corp.google.com>
|
||||
X-Gm-Message-State: ALoCoQnqC0C+2OVVfC5Yi43jUu5vH03b/RBncPoI4SpE4HFSgaRrM+gM2J8rR6MMoba3nM/OmDAU
|
||||
Sender: stable-owner@vger.kernel.org
|
||||
Precedence: bulk
|
||||
List-ID: <stable.vger.kernel.org>
|
||||
X-Mailing-List: stable@vger.kernel.org
|
||||
|
||||
|
||||
The patch titled
|
||||
Subject: thp: avoid atomic64_read in pmd_read_atomic for 32bit PAE
|
||||
has been added to the -mm tree. Its filename is
|
||||
thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae.patch
|
||||
|
||||
Before you just go and hit "reply", please:
|
||||
a) Consider who else should be cc'ed
|
||||
b) Prefer to cc a suitable mailing list as well
|
||||
c) Ideally: find the original patch on the mailing list and do a
|
||||
reply-to-all to that, adding suitable additional cc's
|
||||
|
||||
*** Remember to use Documentation/SubmitChecklist when testing your code ***
|
||||
|
||||
The -mm tree is included into linux-next and is updated
|
||||
there every 3-4 working days
|
||||
|
||||
------------------------------------------------------
|
||||
From: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Subject: thp: avoid atomic64_read in pmd_read_atomic for 32bit PAE
|
||||
|
||||
In the x86 32bit PAE CONFIG_TRANSPARENT_HUGEPAGE=y case while holding the
|
||||
mmap_sem for reading, cmpxchg8b cannot be used to read pmd contents under
|
||||
Xen.
|
||||
|
||||
So instead of dealing only with "consistent" pmdvals in
|
||||
pmd_none_or_trans_huge_or_clear_bad() (which would be conceptually
|
||||
simpler) we let pmd_none_or_trans_huge_or_clear_bad() deal with pmdvals
|
||||
where the low 32bit and high 32bit could be inconsistent (to avoid having
|
||||
to use cmpxchg8b).
|
||||
|
||||
The only guarantee we get from pmd_read_atomic is that if the low part of
|
||||
the pmd was found null, the high part will be null too (so the pmd will be
|
||||
considered unstable). And if the low part of the pmd is found "stable"
|
||||
later, then it means the whole pmd was read atomically (because after a
|
||||
pmd is stable, neither MADV_DONTNEED nor page faults can alter it anymore,
|
||||
and we read the high part after the low part).
|
||||
|
||||
In the 32bit PAE x86 case, it is enough to read the low part of the pmdval
|
||||
atomically to declare the pmd as "stable" and that's true for THP and no
|
||||
THP, furthermore in the THP case we also have a barrier() that will
|
||||
prevent any inconsistent pmdvals to be cached by a later re-read of the
|
||||
*pmd.
|
||||
|
||||
Signed-off-by: Andrea Arcangeli <aarcange@redhat.com>
|
||||
Cc: Jonathan Nieder <jrnieder@gmail.com>
|
||||
Cc: Ulrich Obergfell <uobergfe@redhat.com>
|
||||
Cc: Mel Gorman <mgorman@suse.de>
|
||||
Cc: Hugh Dickins <hughd@google.com>
|
||||
Cc: Larry Woodman <lwoodman@redhat.com>
|
||||
Cc: Petr Matousek <pmatouse@redhat.com>
|
||||
Cc: Rik van Riel <riel@redhat.com>
|
||||
Cc: Jan Beulich <jbeulich@suse.com>
|
||||
Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
|
||||
Cc: <stable@vger.kernel.org>
|
||||
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
|
||||
---
|
||||
|
||||
arch/x86/include/asm/pgtable-3level.h | 30 +++++++++++++-----------
|
||||
include/asm-generic/pgtable.h | 10 ++++++++
|
||||
2 files changed, 27 insertions(+), 13 deletions(-)
|
||||
|
||||
diff -puN arch/x86/include/asm/pgtable-3level.h~thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae arch/x86/include/asm/pgtable-3level.h
|
||||
--- a/arch/x86/include/asm/pgtable-3level.h~thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae
|
||||
+++ a/arch/x86/include/asm/pgtable-3level.h
|
||||
@@ -47,16 +47,26 @@ static inline void native_set_pte(pte_t
|
||||
* they can run pmd_offset_map_lock or pmd_trans_huge or other pmd
|
||||
* operations.
|
||||
*
|
||||
- * Without THP if the mmap_sem is hold for reading, the
|
||||
- * pmd can only transition from null to not null while pmd_read_atomic runs.
|
||||
- * So there's no need of literally reading it atomically.
|
||||
+ * Without THP if the mmap_sem is hold for reading, the pmd can only
|
||||
+ * transition from null to not null while pmd_read_atomic runs. So
|
||||
+ * we can always return atomic pmd values with this function.
|
||||
*
|
||||
* With THP if the mmap_sem is hold for reading, the pmd can become
|
||||
- * THP or null or point to a pte (and in turn become "stable") at any
|
||||
- * time under pmd_read_atomic, so it's mandatory to read it atomically
|
||||
- * with cmpxchg8b.
|
||||
+ * trans_huge or none or point to a pte (and in turn become "stable")
|
||||
+ * at any time under pmd_read_atomic. We could read it really
|
||||
+ * atomically here with a atomic64_read for the THP enabled case (and
|
||||
+ * it would be a whole lot simpler), but to avoid using cmpxchg8b we
|
||||
+ * only return an atomic pmdval if the low part of the pmdval is later
|
||||
+ * found stable (i.e. pointing to a pte). And we're returning a none
|
||||
+ * pmdval if the low part of the pmd is none. In some cases the high
|
||||
+ * and low part of the pmdval returned may not be consistent if THP is
|
||||
+ * enabled (the low part may point to previously mapped hugepage,
|
||||
+ * while the high part may point to a more recently mapped hugepage),
|
||||
+ * but pmd_none_or_trans_huge_or_clear_bad() only needs the low part
|
||||
+ * of the pmd to be read atomically to decide if the pmd is unstable
|
||||
+ * or not, with the only exception of when the low part of the pmd is
|
||||
+ * zero in which case we return a none pmd.
|
||||
*/
|
||||
-#ifndef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
|
||||
{
|
||||
pmdval_t ret;
|
||||
@@ -74,12 +84,6 @@ static inline pmd_t pmd_read_atomic(pmd_
|
||||
|
||||
return (pmd_t) { ret };
|
||||
}
|
||||
-#else /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
-static inline pmd_t pmd_read_atomic(pmd_t *pmdp)
|
||||
-{
|
||||
- return (pmd_t) { atomic64_read((atomic64_t *)pmdp) };
|
||||
-}
|
||||
-#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
|
||||
|
||||
static inline void native_set_pte_atomic(pte_t *ptep, pte_t pte)
|
||||
{
|
||||
diff -puN include/asm-generic/pgtable.h~thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae include/asm-generic/pgtable.h
|
||||
--- a/include/asm-generic/pgtable.h~thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae
|
||||
+++ a/include/asm-generic/pgtable.h
|
||||
@@ -484,6 +484,16 @@ static inline int pmd_none_or_trans_huge
|
||||
/*
|
||||
* The barrier will stabilize the pmdval in a register or on
|
||||
* the stack so that it will stop changing under the code.
|
||||
+ *
|
||||
+ * When CONFIG_TRANSPARENT_HUGEPAGE=y on x86 32bit PAE,
|
||||
+ * pmd_read_atomic is allowed to return a not atomic pmdval
|
||||
+ * (for example pointing to an hugepage that has never been
|
||||
+ * mapped in the pmd). The below checks will only care about
|
||||
+ * the low part of the pmd with 32bit PAE x86 anyway, with the
|
||||
+ * exception of pmd_none(). So the important thing is that if
|
||||
+ * the low part of the pmd is found null, the high part will
|
||||
+ * be also null or the pmd_none() check below would be
|
||||
+ * confused.
|
||||
*/
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
barrier();
|
||||
_
|
||||
Subject: Subject: thp: avoid atomic64_read in pmd_read_atomic for 32bit PAE
|
||||
|
||||
Patches currently in -mm which might be from aarcange@redhat.com are
|
||||
|
||||
origin.patch
|
||||
linux-next.patch
|
||||
mm-fix-slab-page-_count-corruption-when-using-slub.patch
|
||||
thp-avoid-atomic64_read-in-pmd_read_atomic-for-32bit-pae.patch
|
||||
hugetlb-rename-max_hstate-to-hugetlb_max_hstate.patch
|
||||
hugetlbfs-dont-use-err_ptr-with-vm_fault-values.patch
|
||||
hugetlbfs-add-an-inline-helper-for-finding-hstate-index.patch
|
||||
hugetlbfs-add-an-inline-helper-for-finding-hstate-index-fix.patch
|
||||
hugetlb-use-mmu_gather-instead-of-a-temporary-linked-list-for-accumulating-pages.patch
|
||||
hugetlb-use-mmu_gather-instead-of-a-temporary-linked-list-for-accumulating-pages-fix.patch
|
||||
hugetlb-use-mmu_gather-instead-of-a-temporary-linked-list-for-accumulating-pages-fix-fix.patch
|
||||
hugetlb-avoid-taking-i_mmap_mutex-in-unmap_single_vma-for-hugetlb.patch
|
||||
hugetlb-simplify-migrate_huge_page.patch
|
||||
hugetlb-simplify-migrate_huge_page-fix.patch
|
||||
memcg-add-hugetlb-extension.patch
|
||||
memcg-add-hugetlb-extension-fix.patch
|
||||
memcg-add-hugetlb-extension-fix-fix.patch
|
||||
hugetlb-add-charge-uncharge-calls-for-hugetlb-alloc-free.patch
|
||||
memcg-track-resource-index-in-cftype-private.patch
|
||||
hugetlbfs-add-memcg-control-files-for-hugetlbfs.patch
|
||||
hugetlbfs-add-memcg-control-files-for-hugetlbfs-use-scnprintf-instead-of-sprintf.patch
|
||||
hugetlbfs-add-memcg-control-files-for-hugetlbfs-use-scnprintf-instead-of-sprintf-fix.patch
|
||||
hugetlbfs-add-a-list-for-tracking-in-use-hugetlb-pages.patch
|
||||
memcg-move-hugetlb-resource-count-to-parent-cgroup-on-memcg-removal.patch
|
||||
memcg-move-hugetlb-resource-count-to-parent-cgroup-on-memcg-removal-fix.patch
|
||||
memcg-move-hugetlb-resource-count-to-parent-cgroup-on-memcg-removal-fix-fix.patch
|
||||
hugetlb-migrate-memcg-info-from-oldpage-to-new-page-during-migration.patch
|
||||
memcg-add-memory-controller-documentation-for-hugetlb-management.patch
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe stable" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
4696
utrace.patch
4696
utrace.patch
File diff suppressed because it is too large
Load Diff
|
@ -1,135 +0,0 @@
|
|||
From: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
|
||||
Xen dom0 needs to paravirtualize IO operations to the IO APIC, so add
|
||||
a io_apic_ops for it to intercept. Do this as ops structure because
|
||||
there's at least some chance that another paravirtualized environment
|
||||
may want to intercept these.
|
||||
|
||||
[ Impact: indirect IO APIC access via io_apic_ops ]
|
||||
|
||||
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
---
|
||||
arch/x86/include/asm/io_apic.h | 9 +++++++
|
||||
arch/x86/kernel/apic/io_apic.c | 50 +++++++++++++++++++++++++++++++++++++--
|
||||
2 files changed, 56 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
|
||||
index 690d1cc..190d8c2 100644
|
||||
--- a/arch/x86/include/asm/io_apic.h
|
||||
+++ b/arch/x86/include/asm/io_apic.h
|
||||
@@ -21,6 +21,15 @@
|
||||
#define IO_APIC_REDIR_LEVEL_TRIGGER (1 << 15)
|
||||
#define IO_APIC_REDIR_MASKED (1 << 16)
|
||||
|
||||
+struct io_apic_ops {
|
||||
+ void (*init)(void);
|
||||
+ unsigned int (*read)(unsigned int apic, unsigned int reg);
|
||||
+ void (*write)(unsigned int apic, unsigned int reg, unsigned int value);
|
||||
+ void (*modify)(unsigned int apic, unsigned int reg, unsigned int value);
|
||||
+};
|
||||
+
|
||||
+void __init set_io_apic_ops(const struct io_apic_ops *);
|
||||
+
|
||||
/*
|
||||
* The structure of the IO-APIC:
|
||||
*/
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index fb07275..bf120234 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -67,6 +67,25 @@
|
||||
#define for_each_irq_pin(entry, head) \
|
||||
for (entry = head; entry; entry = entry->next)
|
||||
|
||||
+static void __init __ioapic_init_mappings(void);
|
||||
+static unsigned int __io_apic_read(unsigned int apic, unsigned int reg);
|
||||
+static void __io_apic_write(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int val);
|
||||
+static void __io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int val);
|
||||
+
|
||||
+static struct io_apic_ops io_apic_ops = {
|
||||
+ .init = __ioapic_init_mappings,
|
||||
+ .read = __io_apic_read,
|
||||
+ .write = __io_apic_write,
|
||||
+ .modify = __io_apic_modify,
|
||||
+};
|
||||
+
|
||||
+void __init set_io_apic_ops(const struct io_apic_ops *ops)
|
||||
+{
|
||||
+ io_apic_ops = *ops;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Is the SiS APIC rmw bug present ?
|
||||
* -1 = don't know, 0 = no, 1 = yes
|
||||
@@ -294,6 +313,24 @@ static void free_irq_at(unsigned int at, struct irq_cfg *cfg)
|
||||
irq_free_desc(at);
|
||||
}
|
||||
|
||||
+static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg)
|
||||
+{
|
||||
+ return io_apic_ops.read(apic, reg);
|
||||
+}
|
||||
+
|
||||
+static inline void io_apic_write(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
+{
|
||||
+ io_apic_ops.write(apic, reg, value);
|
||||
+}
|
||||
+
|
||||
+static inline void io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
+{
|
||||
+ io_apic_ops.modify(apic, reg, value);
|
||||
+}
|
||||
+
|
||||
+
|
||||
struct io_apic {
|
||||
unsigned int index;
|
||||
unsigned int unused[3];
|
||||
@@ -314,14 +351,15 @@ static inline void io_apic_eoi(unsigned int apic, unsigned int vector)
|
||||
writel(vector, &io_apic->eoi);
|
||||
}
|
||||
|
||||
-static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg)
|
||||
+static unsigned int __io_apic_read(unsigned int apic, unsigned int reg)
|
||||
{
|
||||
struct io_apic __iomem *io_apic = io_apic_base(apic);
|
||||
writel(reg, &io_apic->index);
|
||||
return readl(&io_apic->data);
|
||||
}
|
||||
|
||||
-static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned int value)
|
||||
+static void __io_apic_write(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
{
|
||||
struct io_apic __iomem *io_apic = io_apic_base(apic);
|
||||
writel(reg, &io_apic->index);
|
||||
@@ -334,7 +372,8 @@ static inline void io_apic_write(unsigned int apic, unsigned int reg, unsigned i
|
||||
*
|
||||
* Older SiS APIC requires we rewrite the index register
|
||||
*/
|
||||
-static inline void io_apic_modify(unsigned int apic, unsigned int reg, unsigned int value)
|
||||
+static void __io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
{
|
||||
struct io_apic __iomem *io_apic = io_apic_base(apic);
|
||||
|
||||
@@ -3873,6 +3912,11 @@ static struct resource * __init ioapic_setup_resources(int nr_ioapics)
|
||||
|
||||
void __init ioapic_and_gsi_init(void)
|
||||
{
|
||||
+ io_apic_ops.init();
|
||||
+}
|
||||
+
|
||||
+static void __init __ioapic_init_mappings(void)
|
||||
+{
|
||||
unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0;
|
||||
struct resource *ioapic_res;
|
||||
int i;
|
||||
--
|
||||
1.7.7.5
|
||||
|
|
@ -1,258 +0,0 @@
|
|||
. which makes the code fit within the rest of the x86_ops functions.
|
||||
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
[v1: Changed x86_apic -> x86_ioapic per Yinghai Lu <yinghai@kernel.org> suggestion]
|
||||
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
---
|
||||
arch/x86/include/asm/io_apic.h | 40 +++++++++++++++++++++--------
|
||||
arch/x86/include/asm/x86_init.h | 8 ++++++
|
||||
arch/x86/kernel/apic/io_apic.c | 54 ++++----------------------------------
|
||||
arch/x86/kernel/setup.c | 2 +-
|
||||
arch/x86/kernel/x86_init.c | 8 ++++++
|
||||
5 files changed, 52 insertions(+), 60 deletions(-)
|
||||
|
||||
diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h
|
||||
index 190d8c2..ba1b11a 100644
|
||||
--- a/arch/x86/include/asm/io_apic.h
|
||||
+++ b/arch/x86/include/asm/io_apic.h
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <asm/mpspec.h>
|
||||
#include <asm/apicdef.h>
|
||||
#include <asm/irq_vectors.h>
|
||||
+#include <asm/x86_init.h>
|
||||
|
||||
/*
|
||||
* Intel IO-APIC support for SMP and UP systems.
|
||||
@@ -21,15 +22,6 @@
|
||||
#define IO_APIC_REDIR_LEVEL_TRIGGER (1 << 15)
|
||||
#define IO_APIC_REDIR_MASKED (1 << 16)
|
||||
|
||||
-struct io_apic_ops {
|
||||
- void (*init)(void);
|
||||
- unsigned int (*read)(unsigned int apic, unsigned int reg);
|
||||
- void (*write)(unsigned int apic, unsigned int reg, unsigned int value);
|
||||
- void (*modify)(unsigned int apic, unsigned int reg, unsigned int value);
|
||||
-};
|
||||
-
|
||||
-void __init set_io_apic_ops(const struct io_apic_ops *);
|
||||
-
|
||||
/*
|
||||
* The structure of the IO-APIC:
|
||||
*/
|
||||
@@ -156,7 +148,6 @@ struct io_apic_irq_attr;
|
||||
extern int io_apic_set_pci_routing(struct device *dev, int irq,
|
||||
struct io_apic_irq_attr *irq_attr);
|
||||
void setup_IO_APIC_irq_extra(u32 gsi);
|
||||
-extern void ioapic_and_gsi_init(void);
|
||||
extern void ioapic_insert_resources(void);
|
||||
|
||||
int io_apic_setup_irq_pin_once(unsigned int irq, int node, struct io_apic_irq_attr *attr);
|
||||
@@ -185,12 +176,35 @@ extern void mp_save_irq(struct mpc_intsrc *m);
|
||||
|
||||
extern void disable_ioapic_support(void);
|
||||
|
||||
+
|
||||
+void __init native_ioapic_init_mappings(void);
|
||||
+unsigned int native_ioapic_read(unsigned int apic, unsigned int reg);
|
||||
+void native_ioapic_write(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int val);
|
||||
+void native_ioapic_modify(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int val);
|
||||
+
|
||||
+static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg)
|
||||
+{
|
||||
+ return x86_ioapic.read(apic, reg);
|
||||
+}
|
||||
+
|
||||
+static inline void io_apic_write(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
+{
|
||||
+ x86_ioapic.write(apic, reg, value);
|
||||
+}
|
||||
+
|
||||
+static inline void io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
+{
|
||||
+ x86_ioapic.modify(apic, reg, value);
|
||||
+}
|
||||
#else /* !CONFIG_X86_IO_APIC */
|
||||
|
||||
#define io_apic_assign_pci_irqs 0
|
||||
#define setup_ioapic_ids_from_mpc x86_init_noop
|
||||
static const int timer_through_8259 = 0;
|
||||
-static inline void ioapic_and_gsi_init(void) { }
|
||||
static inline void ioapic_insert_resources(void) { }
|
||||
#define gsi_top (NR_IRQS_LEGACY)
|
||||
static inline int mp_find_ioapic(u32 gsi) { return 0; }
|
||||
@@ -212,6 +226,10 @@ static inline int restore_ioapic_entries(void)
|
||||
|
||||
static inline void mp_save_irq(struct mpc_intsrc *m) { };
|
||||
static inline void disable_ioapic_support(void) { }
|
||||
+#define native_ioapic_init_mappings NULL
|
||||
+#define native_ioapic_read NULL
|
||||
+#define native_ioapic_write NULL
|
||||
+#define native_ioapic_modify NULL
|
||||
#endif
|
||||
|
||||
#endif /* _ASM_X86_IO_APIC_H */
|
||||
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
|
||||
index 517d476..a3730cc 100644
|
||||
--- a/arch/x86/include/asm/x86_init.h
|
||||
+++ b/arch/x86/include/asm/x86_init.h
|
||||
@@ -182,10 +182,18 @@ struct x86_msi_ops {
|
||||
void (*restore_msi_irqs)(struct pci_dev *dev, int irq);
|
||||
};
|
||||
|
||||
+struct x86_ioapic_ops {
|
||||
+ void (*init)(void);
|
||||
+ unsigned int (*read)(unsigned int apic, unsigned int reg);
|
||||
+ void (*write)(unsigned int apic, unsigned int reg, unsigned int value);
|
||||
+ void (*modify)(unsigned int apic, unsigned int reg, unsigned int value);
|
||||
+};
|
||||
+
|
||||
extern struct x86_init_ops x86_init;
|
||||
extern struct x86_cpuinit_ops x86_cpuinit;
|
||||
extern struct x86_platform_ops x86_platform;
|
||||
extern struct x86_msi_ops x86_msi;
|
||||
+extern struct x86_ioapic_ops x86_ioapic;
|
||||
|
||||
extern void x86_init_noop(void);
|
||||
extern void x86_init_uint_noop(unsigned int unused);
|
||||
diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
|
||||
index bf120234..9a15d4b 100644
|
||||
--- a/arch/x86/kernel/apic/io_apic.c
|
||||
+++ b/arch/x86/kernel/apic/io_apic.c
|
||||
@@ -67,25 +67,6 @@
|
||||
#define for_each_irq_pin(entry, head) \
|
||||
for (entry = head; entry; entry = entry->next)
|
||||
|
||||
-static void __init __ioapic_init_mappings(void);
|
||||
-static unsigned int __io_apic_read(unsigned int apic, unsigned int reg);
|
||||
-static void __io_apic_write(unsigned int apic, unsigned int reg,
|
||||
- unsigned int val);
|
||||
-static void __io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
- unsigned int val);
|
||||
-
|
||||
-static struct io_apic_ops io_apic_ops = {
|
||||
- .init = __ioapic_init_mappings,
|
||||
- .read = __io_apic_read,
|
||||
- .write = __io_apic_write,
|
||||
- .modify = __io_apic_modify,
|
||||
-};
|
||||
-
|
||||
-void __init set_io_apic_ops(const struct io_apic_ops *ops)
|
||||
-{
|
||||
- io_apic_ops = *ops;
|
||||
-}
|
||||
-
|
||||
/*
|
||||
* Is the SiS APIC rmw bug present ?
|
||||
* -1 = don't know, 0 = no, 1 = yes
|
||||
@@ -313,24 +294,6 @@ static void free_irq_at(unsigned int at, struct irq_cfg *cfg)
|
||||
irq_free_desc(at);
|
||||
}
|
||||
|
||||
-static inline unsigned int io_apic_read(unsigned int apic, unsigned int reg)
|
||||
-{
|
||||
- return io_apic_ops.read(apic, reg);
|
||||
-}
|
||||
-
|
||||
-static inline void io_apic_write(unsigned int apic, unsigned int reg,
|
||||
- unsigned int value)
|
||||
-{
|
||||
- io_apic_ops.write(apic, reg, value);
|
||||
-}
|
||||
-
|
||||
-static inline void io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
- unsigned int value)
|
||||
-{
|
||||
- io_apic_ops.modify(apic, reg, value);
|
||||
-}
|
||||
-
|
||||
-
|
||||
struct io_apic {
|
||||
unsigned int index;
|
||||
unsigned int unused[3];
|
||||
@@ -351,15 +314,15 @@ static inline void io_apic_eoi(unsigned int apic, unsigned int vector)
|
||||
writel(vector, &io_apic->eoi);
|
||||
}
|
||||
|
||||
-static unsigned int __io_apic_read(unsigned int apic, unsigned int reg)
|
||||
+unsigned int native_ioapic_read(unsigned int apic, unsigned int reg)
|
||||
{
|
||||
struct io_apic __iomem *io_apic = io_apic_base(apic);
|
||||
writel(reg, &io_apic->index);
|
||||
return readl(&io_apic->data);
|
||||
}
|
||||
|
||||
-static void __io_apic_write(unsigned int apic, unsigned int reg,
|
||||
- unsigned int value)
|
||||
+void native_ioapic_write(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
{
|
||||
struct io_apic __iomem *io_apic = io_apic_base(apic);
|
||||
writel(reg, &io_apic->index);
|
||||
@@ -372,8 +335,8 @@ static void __io_apic_write(unsigned int apic, unsigned int reg,
|
||||
*
|
||||
* Older SiS APIC requires we rewrite the index register
|
||||
*/
|
||||
-static void __io_apic_modify(unsigned int apic, unsigned int reg,
|
||||
- unsigned int value)
|
||||
+void native_ioapic_modify(unsigned int apic, unsigned int reg,
|
||||
+ unsigned int value)
|
||||
{
|
||||
struct io_apic __iomem *io_apic = io_apic_base(apic);
|
||||
|
||||
@@ -3910,12 +3873,7 @@ static struct resource * __init ioapic_setup_resources(int nr_ioapics)
|
||||
return res;
|
||||
}
|
||||
|
||||
-void __init ioapic_and_gsi_init(void)
|
||||
-{
|
||||
- io_apic_ops.init();
|
||||
-}
|
||||
-
|
||||
-static void __init __ioapic_init_mappings(void)
|
||||
+void __init native_ioapic_init_mappings(void)
|
||||
{
|
||||
unsigned long ioapic_phys, idx = FIX_IO_APIC_BASE_0;
|
||||
struct resource *ioapic_res;
|
||||
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
|
||||
index d7d5099..7eaef1a 100644
|
||||
--- a/arch/x86/kernel/setup.c
|
||||
+++ b/arch/x86/kernel/setup.c
|
||||
@@ -1016,7 +1016,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
init_cpu_to_node();
|
||||
|
||||
init_apic_mappings();
|
||||
- ioapic_and_gsi_init();
|
||||
+ x86_ioapic.init();
|
||||
|
||||
kvm_guest_init();
|
||||
|
||||
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
|
||||
index 947a06c..df870d3 100644
|
||||
--- a/arch/x86/kernel/x86_init.c
|
||||
+++ b/arch/x86/kernel/x86_init.c
|
||||
@@ -18,6 +18,7 @@
|
||||
#include <asm/e820.h>
|
||||
#include <asm/time.h>
|
||||
#include <asm/irq.h>
|
||||
+#include <asm/io_apic.h>
|
||||
#include <asm/pat.h>
|
||||
#include <asm/tsc.h>
|
||||
#include <asm/iommu.h>
|
||||
@@ -117,3 +118,10 @@ struct x86_msi_ops x86_msi = {
|
||||
.teardown_msi_irqs = default_teardown_msi_irqs,
|
||||
.restore_msi_irqs = default_restore_msi_irqs,
|
||||
};
|
||||
+
|
||||
+struct x86_ioapic_ops x86_ioapic = {
|
||||
+ .init = native_ioapic_init_mappings,
|
||||
+ .read = native_ioapic_read,
|
||||
+ .write = native_ioapic_write,
|
||||
+ .modify = native_ioapic_modify,
|
||||
+};
|
||||
--
|
||||
1.7.7.5
|
||||
|
|
@ -1,85 +0,0 @@
|
|||
Or rather just implement one different function as opposed
|
||||
to the native one : the read function.
|
||||
|
||||
We synthesize the values.
|
||||
|
||||
Acked-by: Suresh Siddha <suresh.b.siddha@intel.com>
|
||||
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||
---
|
||||
arch/x86/xen/Makefile | 2 +-
|
||||
arch/x86/xen/apic.c | 17 +++++++++++++++++
|
||||
arch/x86/xen/enlighten.c | 2 ++
|
||||
arch/x86/xen/xen-ops.h | 4 ++++
|
||||
4 files changed, 24 insertions(+), 1 deletions(-)
|
||||
create mode 100644 arch/x86/xen/apic.c
|
||||
|
||||
diff --git a/arch/x86/xen/Makefile b/arch/x86/xen/Makefile
|
||||
index add2c2d..96ab2c0 100644
|
||||
--- a/arch/x86/xen/Makefile
|
||||
+++ b/arch/x86/xen/Makefile
|
||||
@@ -20,5 +20,5 @@ obj-$(CONFIG_EVENT_TRACING) += trace.o
|
||||
obj-$(CONFIG_SMP) += smp.o
|
||||
obj-$(CONFIG_PARAVIRT_SPINLOCKS)+= spinlock.o
|
||||
obj-$(CONFIG_XEN_DEBUG_FS) += debugfs.o
|
||||
-obj-$(CONFIG_XEN_DOM0) += vga.o
|
||||
+obj-$(CONFIG_XEN_DOM0) += apic.o vga.o
|
||||
obj-$(CONFIG_SWIOTLB_XEN) += pci-swiotlb-xen.o
|
||||
diff --git a/arch/x86/xen/apic.c b/arch/x86/xen/apic.c
|
||||
new file mode 100644
|
||||
index 0000000..71ed91c
|
||||
--- /dev/null
|
||||
+++ b/arch/x86/xen/apic.c
|
||||
@@ -0,0 +1,17 @@
|
||||
+#include <linux/init.h>
|
||||
+#include <asm/x86_init.h>
|
||||
+
|
||||
+unsigned int xen_io_apic_read(unsigned apic, unsigned reg)
|
||||
+{
|
||||
+ if (reg == 0x1)
|
||||
+ return 0x00170020;
|
||||
+ else if (reg == 0x0)
|
||||
+ return apic << 24;
|
||||
+
|
||||
+ return 0xff;
|
||||
+}
|
||||
+
|
||||
+void __init xen_init_apic(void)
|
||||
+{
|
||||
+ x86_ioapic.read = xen_io_apic_read;
|
||||
+}
|
||||
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
|
||||
index 0732326..93a03195 100644
|
||||
--- a/arch/x86/xen/enlighten.c
|
||||
+++ b/arch/x86/xen/enlighten.c
|
||||
@@ -1377,6 +1377,8 @@ asmlinkage void __init xen_start_kernel(void)
|
||||
xen_start_info->console.domU.mfn = 0;
|
||||
xen_start_info->console.domU.evtchn = 0;
|
||||
|
||||
+ xen_init_apic();
|
||||
+
|
||||
/* Make sure ACS will be enabled */
|
||||
pci_request_acs();
|
||||
|
||||
diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
|
||||
index b095739..45c0c06 100644
|
||||
--- a/arch/x86/xen/xen-ops.h
|
||||
+++ b/arch/x86/xen/xen-ops.h
|
||||
@@ -92,11 +92,15 @@ struct dom0_vga_console_info;
|
||||
|
||||
#ifdef CONFIG_XEN_DOM0
|
||||
void __init xen_init_vga(const struct dom0_vga_console_info *, size_t size);
|
||||
+void __init xen_init_apic(void);
|
||||
#else
|
||||
static inline void __init xen_init_vga(const struct dom0_vga_console_info *info,
|
||||
size_t size)
|
||||
{
|
||||
}
|
||||
+static inline void __init xen_init_apic(void)
|
||||
+{
|
||||
+}
|
||||
#endif
|
||||
|
||||
/* Declare an asm function, along with symbols needed to make it
|
||||
--
|
||||
1.7.7.5
|
||||
|
Loading…
Reference in New Issue