* [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:39 ` malc
2009-07-29 9:47 ` Avi Kivity
2009-07-28 22:04 ` [Qemu-devel] [PATCH 02/25] net: Fix do_set_link() return type Luiz Capitulino
` (23 subsequent siblings)
24 siblings, 2 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
A dictionary is a high-level data type used to store a collection of
values, where a unique key is associated with one value. Usually, the
notation 'key:value' is used to denote this relationship.
This commit adds the qemu-dict module, which implements a dictionary
for QEMU and exports the following functions:
- qemu_dict_create() Create a new dictionary
- qemu_dict_add() Add a new 'key:value' pair
- qemu_dict_get() Get the 'value' of a given 'key'
- qemu_dict_exists() Check if a given 'key' exists
- qemu_dict_del() Delete a 'key:value' pair
- qemu_dict_destroy() Destroy the dictionary
- qemu_dict_walk() Walk through the dictionary values
- qemu_dict_size() Return the size of the dictionary
qemu-dict module uses a chained hash table, whose hash function comes from
module-init-tools program.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
Makefile | 1 +
qemu-dict.c | 215 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
qemu-dict.h | 36 ++++++++++
3 files changed, 252 insertions(+), 0 deletions(-)
create mode 100644 qemu-dict.c
create mode 100644 qemu-dict.h
diff --git a/Makefile b/Makefile
index c510ff3..b36786d 100644
--- a/Makefile
+++ b/Makefile
@@ -97,6 +97,7 @@ obj-y += buffered_file.o migration.o migration-tcp.o net.o qemu-sockets.o
obj-y += qemu-char.o aio.o net-checksum.o savevm.o
obj-y += msmouse.o ps2.o
obj-y += qdev.o qdev-properties.o ssi.o
+obj-y += qemu-dict.o
obj-$(CONFIG_BRLAPI) += baum.o
diff --git a/qemu-dict.c b/qemu-dict.c
new file mode 100644
index 0000000..ad2d6d9
--- /dev/null
+++ b/qemu-dict.c
@@ -0,0 +1,215 @@
+/*
+ * QEMU dictionary data type.
+ *
+ * Copyright (C) 2009 Red Hat Inc.
+ *
+ * Authors:
+ * Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * This work is licensed under the terms of the GNU GPL, version 2. See
+ * the COPYING file in the top-level directory.
+ */
+
+#include "qemu-dict.h"
+#include "qemu-common.h"
+
+/**
+ * qemu_dict_create(): Create a new dictionary data-type
+ */
+struct qemu_dict *qemu_dict_create(void)
+{
+ return qemu_mallocz(sizeof(struct qemu_dict));
+}
+
+/**
+ * tdb_hash(): based on the hash agorithm from gdbm, via tdb
+ * (from module-init-tools)
+ */
+static unsigned int tdb_hash(const char *name)
+{
+ unsigned value; /* Used to compute the hash value. */
+ unsigned i; /* Used to cycle through random values. */
+
+ /* Set the initial value from the key size. */
+ for (value = 0x238F13AF * strlen(name), i=0; name[i]; i++)
+ value = (value + (((const unsigned char *)name)[i] << (i*5 % 24)));
+
+ return (1103515243 * value + 12345);
+}
+
+/**
+ * __qemu_dict_get(): Low-level lookup function
+ */
+static void *__qemu_dict_get(const struct qemu_dict *qdict,
+ const char *key, unsigned int hash)
+{
+ struct qemu_dict_entry *e;
+
+ for (e = qdict->table[hash]; e; e = e->next)
+ if (!strcmp(e->key, key))
+ return e->value;
+ return NULL;
+}
+
+/**
+ * qemu_dict_get(): Lookup for a given 'key'
+ *
+ * return corresponding 'value' or NULL if 'key' doesn't exist.
+ */
+void *qemu_dict_get(const struct qemu_dict *qdict, const char *key)
+{
+ assert(qdict != NULL);
+ assert(key != NULL);
+ return __qemu_dict_get(qdict, key, tdb_hash(key) % QEMU_DICT_HASH_SIZE);
+}
+
+/**
+ * qemu_dict_exists(): Check if 'key' exists
+ *
+ * return 1 if 'key' exists in the dict, 0 otherwise
+ */
+int qemu_dict_exists(const struct qemu_dict *qdict, const char *key)
+{
+ struct qemu_dict_entry *e;
+
+ assert(qdict != NULL);
+ assert(key != NULL);
+
+ for (e = qdict->table[tdb_hash(key) % QEMU_DICT_HASH_SIZE]; e; e = e->next)
+ if (!strcmp(e->key, key))
+ return 1;
+ return 0;
+}
+
+/**
+ * alloc_entry(): allocate a new qemu_dict_entry
+ */
+static struct qemu_dict_entry *alloc_entry(const char *key, void *value)
+{
+ struct qemu_dict_entry *entry;
+
+ entry = qemu_malloc(sizeof(*entry));
+ entry->key = qemu_strdup(key);
+ entry->value = value;
+ entry->next = NULL;
+
+ return entry;
+}
+
+/**
+ * qemu_dict_add(): Add a new value into the dictionary
+ *
+ * Add the pair 'key:value' into qdict. Does nothing if 'key' already
+ * exist.
+ */
+void qemu_dict_add(struct qemu_dict *qdict, const char *key, void *value)
+{
+ unsigned int hash;
+ struct qemu_dict_entry *entry;
+
+ assert(qdict != NULL);
+ assert(key != NULL);
+
+ hash = tdb_hash(key) % QEMU_DICT_HASH_SIZE;
+ if (__qemu_dict_get(qdict, key, hash)) {
+ /* Don't add again if it's already there */
+ return;
+ }
+
+ entry = alloc_entry(key, value);
+ entry->next = qdict->table[hash];
+ qdict->table[hash] = entry;
+ qdict->size++;
+}
+
+/**
+ * qemu_dict_del(): Delete a given 'key' from the dictionary
+ *
+ * This will destroy all data allocated by 'key', except 'value'
+ * which is returned.
+ */
+void *qemu_dict_del(struct qemu_dict *qdict, const char *key)
+{
+ unsigned int hash;
+ struct qemu_dict_entry *e, *prev;
+
+ assert(qdict != NULL);
+ assert(key != NULL);
+
+ prev = NULL;
+ hash = tdb_hash(key) % QEMU_DICT_HASH_SIZE;
+ for (e = qdict->table[hash]; e; e = e->next) {
+ if (!strcmp(e->key, key)) {
+ void *value = e->value;
+ if (!prev)
+ qdict->table[hash] = e->next;
+ else
+ prev->next = e->next;
+ qemu_free(e->key);
+ qemu_free(e);
+ qdict->size--;
+ return value;
+ }
+
+ prev = e;
+ }
+
+ return NULL;
+}
+
+/**
+ * qemu_dict_destroy(): Destroy given 'qdict'
+ *
+ * This will destroy all data allocated by 'qdict', but added
+ * values must be freed by the caller.
+ */
+void qemu_dict_destroy(struct qemu_dict *qdict)
+{
+ int i;
+
+ assert(qdict != NULL);
+
+ for (i = 0; i < QEMU_DICT_HASH_SIZE; i++) {
+ struct qemu_dict_entry *e = qdict->table[i];
+ while (e) {
+ struct qemu_dict_entry *tmp = e->next;
+ qemu_free(e->key);
+ qemu_free(e);
+ e = tmp;
+ }
+ }
+
+ qemu_free(qdict);
+}
+
+/**
+ * qemu_dict_walk(): Walk through dictionary contents
+ *
+ * This function can be used by users to "walk through"
+ * the data stored in the dictionary.
+ *
+ * In order to use this the caller has pass a pointer
+ * to a function with the following signature:
+ *
+ * void walkf(const char *key, void *value);
+ *
+ * Then, when qemu_dict_walk() is called, it will
+ * "walk through" all the dictionary data, passing
+ * each stored value to walkf().
+ */
+void qemu_dict_walk(const struct qemu_dict *qdict,
+ void (*walkf)(const char *key, void *value))
+{
+ int i;
+
+ assert(qdict != NULL);
+ assert(walkf != NULL);
+
+ for (i = 0; i < QEMU_DICT_HASH_SIZE; i++) {
+ struct qemu_dict_entry *e = qdict->table[i];
+ while (e) {
+ walkf(e->key, e->value);
+ e = e->next;
+ }
+ }
+}
diff --git a/qemu-dict.h b/qemu-dict.h
new file mode 100644
index 0000000..89324db
--- /dev/null
+++ b/qemu-dict.h
@@ -0,0 +1,36 @@
+#ifndef __QEMU_DICT_H__
+#define __QEMU_DICT_H__
+
+#include <stddef.h>
+
+#define QEMU_DICT_HASH_SIZE 512
+
+struct qemu_dict_entry {
+ struct qemu_dict_entry *next;
+ char *key;
+ void *value;
+};
+
+struct qemu_dict {
+ size_t size;
+ struct qemu_dict_entry *table[QEMU_DICT_HASH_SIZE];
+};
+
+/**
+ * qemu_dict_size(): return the size of the dictionary
+ */
+static inline size_t qemu_dict_size(const struct qemu_dict *qdict)
+{
+ return qdict->size;
+}
+
+struct qemu_dict *qemu_dict_create(void);
+void qemu_dict_add(struct qemu_dict *qdict, const char *key, void *value);
+void *qemu_dict_get(const struct qemu_dict *qdict, const char *key);
+int qemu_dict_exists(const struct qemu_dict *qdict, const char *key);
+void *qemu_dict_del(struct qemu_dict *qdict, const char *key);
+void qemu_dict_destroy(struct qemu_dict *qdict);
+void qemu_dict_walk(const struct qemu_dict *qdict,
+ void (*walkf)(const char *key, void *value));
+
+#endif /* __QEMU_DICT_H__ */
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-28 22:04 ` [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type Luiz Capitulino
@ 2009-07-28 22:39 ` malc
2009-07-29 13:28 ` Luiz Capitulino
2009-07-29 9:47 ` Avi Kivity
1 sibling, 1 reply; 55+ messages in thread
From: malc @ 2009-07-28 22:39 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel, avi
On Tue, 28 Jul 2009, Luiz Capitulino wrote:
> A dictionary is a high-level data type used to store a collection of
> values, where a unique key is associated with one value. Usually, the
> notation 'key:value' is used to denote this relationship.
> +
> +/**
> + * __qemu_dict_get(): Low-level lookup function
> + */
> +static void *__qemu_dict_get(const struct qemu_dict *qdict,
> + const char *key, unsigned int hash)
Do not violate the standard please.
[..snip..]
> @@ -0,0 +1,36 @@
> +#ifndef __QEMU_DICT_H__
> +#define __QEMU_DICT_H__
Ditto.
[..snip..]
--
mailto:av1474@comtv.ru
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-28 22:39 ` malc
@ 2009-07-29 13:28 ` Luiz Capitulino
2009-07-29 13:38 ` malc
2009-07-29 13:38 ` Avi Kivity
0 siblings, 2 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-29 13:28 UTC (permalink / raw)
To: malc; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel, avi
On Wed, 29 Jul 2009 02:39:03 +0400 (MSD)
malc <av1474@comtv.ru> wrote:
> On Tue, 28 Jul 2009, Luiz Capitulino wrote:
>
> > A dictionary is a high-level data type used to store a collection of
> > values, where a unique key is associated with one value. Usually, the
> > notation 'key:value' is used to denote this relationship.
> > +
> > +/**
> > + * __qemu_dict_get(): Low-level lookup function
> > + */
> > +static void *__qemu_dict_get(const struct qemu_dict *qdict,
> > + const char *key, unsigned int hash)
>
> Do not violate the standard please.
What's the problem, the '__' or the indentation?
> [..snip..]
>
> > @@ -0,0 +1,36 @@
> > +#ifndef __QEMU_DICT_H__
> > +#define __QEMU_DICT_H__
>
> Ditto.
Will fix.
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:28 ` Luiz Capitulino
@ 2009-07-29 13:38 ` malc
2009-07-29 13:38 ` Avi Kivity
1 sibling, 0 replies; 55+ messages in thread
From: malc @ 2009-07-29 13:38 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel, avi
On Wed, 29 Jul 2009, Luiz Capitulino wrote:
> On Wed, 29 Jul 2009 02:39:03 +0400 (MSD)
> malc <av1474@comtv.ru> wrote:
>
> > On Tue, 28 Jul 2009, Luiz Capitulino wrote:
> >
> > > A dictionary is a high-level data type used to store a collection of
> > > values, where a unique key is associated with one value. Usually, the
> > > notation 'key:value' is used to denote this relationship.
> > > +
> > > +/**
> > > + * __qemu_dict_get(): Low-level lookup function
> > > + */
> > > +static void *__qemu_dict_get(const struct qemu_dict *qdict,
> > > + const char *key, unsigned int hash)
> >
> > Do not violate the standard please.
>
> What's the problem, the '__' or the indentation?
Double underscore.
>
> > [..snip..]
> >
> > > @@ -0,0 +1,36 @@
> > > +#ifndef __QEMU_DICT_H__
> > > +#define __QEMU_DICT_H__
> >
> > Ditto.
>
> Will fix.
>
--
mailto:av1474@comtv.ru
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:28 ` Luiz Capitulino
2009-07-29 13:38 ` malc
@ 2009-07-29 13:38 ` Avi Kivity
2009-07-29 15:23 ` [Qemu-devel] " Paolo Bonzini
2009-07-29 15:24 ` Paolo Bonzini
1 sibling, 2 replies; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 13:38 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 04:28 PM, Luiz Capitulino wrote:
>
>>> +static void *__qemu_dict_get(const struct qemu_dict *qdict,
>>> + const char *key, unsigned int hash)
>>>
>> Do not violate the standard please.
>>
>
> What's the problem, the '__' or the indentation?
>
The __ prefix is reserved for system identifiers.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:38 ` Avi Kivity
@ 2009-07-29 15:23 ` Paolo Bonzini
2009-07-29 15:24 ` Paolo Bonzini
1 sibling, 0 replies; 55+ messages in thread
From: Paolo Bonzini @ 2009-07-29 15:23 UTC (permalink / raw)
To: Avi Kivity; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel, Luiz Capitulino
On 07/29/2009 03:38 PM, Avi Kivity wrote:
> On 07/29/2009 04:28 PM, Luiz Capitulino wrote:
>>
>>>> +static void *__qemu_dict_get(const struct qemu_dict *qdict,
>>>> + const char *key, unsigned int hash)
>>> Do not violate the standard please.
>>
>> What's the problem, the '__' or the indentation?
>
> The __ prefix is reserved for system identifiers.
Single _ + uppercase is also reserved (I've seen many _FILENAME_H header
guards).
Paolo
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:38 ` Avi Kivity
2009-07-29 15:23 ` [Qemu-devel] " Paolo Bonzini
@ 2009-07-29 15:24 ` Paolo Bonzini
1 sibling, 0 replies; 55+ messages in thread
From: Paolo Bonzini @ 2009-07-29 15:24 UTC (permalink / raw)
To: Avi Kivity, Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 03:38 PM, Avi Kivity wrote:
> On 07/29/2009 04:28 PM, Luiz Capitulino wrote:
>>
>>>> +static void *__qemu_dict_get(const struct qemu_dict *qdict,
>>>> + const char *key, unsigned int hash)
>>> Do not violate the standard please.
>>
>> What's the problem, the '__' or the indentation?
>
> The __ prefix is reserved for system identifiers.
Single _ + uppercase is also reserved (I've seen many _FILENAME_H header
guards).
Paolo
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-28 22:04 ` [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type Luiz Capitulino
2009-07-28 22:39 ` malc
@ 2009-07-29 9:47 ` Avi Kivity
2009-07-29 9:49 ` Avi Kivity
` (2 more replies)
1 sibling, 3 replies; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 9:47 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 01:04 AM, Luiz Capitulino wrote:
> +struct qemu_dict {
> + size_t size;
> + struct qemu_dict_entry *table[QEMU_DICT_HASH_SIZE];
> +};
>
We don't need to prefix everything with qemu, I think QDict or even Dict
is sufficient. Ditto for the function names. Also please provide a
typedef as is common qemu practice.
> +
> +struct qemu_dict *qemu_dict_create(void);
> +void qemu_dict_add(struct qemu_dict *qdict, const char *key, void *value);
> +void *qemu_dict_get(const struct qemu_dict *qdict, const char *key);
> +int qemu_dict_exists(const struct qemu_dict *qdict, const char *key);
> +void *qemu_dict_del(struct qemu_dict *qdict, const char *key);
> +void qemu_dict_destroy(struct qemu_dict *qdict);
> +void qemu_dict_walk(const struct qemu_dict *qdict,
> + void (*walkf)(const char *key, void *value));
> +
>
I'm worried about all those void *s as they move responsibility for type
safety and lifecycle management to the user. I'd much rather see a
QObject (or Object) with the following methods:
clone() - deep copy an object; dicts will store copies so we'll avoid
those leaks or a dictionary member modified after it was stored
destroy()
type() - return the type
as_dict(), as_string(), as_int() - convert to a subclass so its
methods can be used
Consider an operation such as printing out the dictionary, you have to
know the types of the values.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 9:47 ` Avi Kivity
@ 2009-07-29 9:49 ` Avi Kivity
2009-07-29 10:42 ` François Revol
2009-07-29 13:28 ` Anthony Liguori
2009-07-29 13:46 ` Luiz Capitulino
2 siblings, 1 reply; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 9:49 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 12:47 PM, Avi Kivity wrote:
>
>> +
>> +struct qemu_dict *qemu_dict_create(void);
>> +void qemu_dict_add(struct qemu_dict *qdict, const char *key, void
>> *value);
>> +void *qemu_dict_get(const struct qemu_dict *qdict, const char *key);
>> +int qemu_dict_exists(const struct qemu_dict *qdict, const char *key);
>> +void *qemu_dict_del(struct qemu_dict *qdict, const char *key);
>> +void qemu_dict_destroy(struct qemu_dict *qdict);
>> +void qemu_dict_walk(const struct qemu_dict *qdict,
>> + void (*walkf)(const char *key, void *value));
>> +
>
> I'm worried about all those void *s as they move responsibility for
> type safety and lifecycle management to the user. I'd much rather see
> a QObject (or Object) with the following methods:
>
> clone() - deep copy an object; dicts will store copies so we'll
> avoid those leaks or a dictionary member modified after it was stored
> destroy()
> type() - return the type
> as_dict(), as_string(), as_int() - convert to a subclass so its
> methods can be used
>
> Consider an operation such as printing out the dictionary, you have to
> know the types of the values.
>
Note, if we decide we want this it could be introduced later to avoid
excessive churn on this patchset.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 9:49 ` Avi Kivity
@ 2009-07-29 10:42 ` François Revol
0 siblings, 0 replies; 55+ messages in thread
From: François Revol @ 2009-07-29 10:42 UTC (permalink / raw)
To: qemu-devel
> > I'm worried about all those void *s as they move responsibility for
> > type safety and lifecycle management to the user. I'd much rather
> > see
> > a QObject (or Object) with the following methods:
> >
> > clone() - deep copy an object; dicts will store copies so we'll
> > avoid those leaks or a dictionary member modified after it was
> > stored
> > destroy()
> > type() - return the type
> > as_dict(), as_string(), as_int() - convert to a subclass so its
> > methods can be used
> >
> > Consider an operation such as printing out the dictionary, you have
> > to
> > know the types of the values.
> >
>
> Note, if we decide we want this it could be introduced later to avoid
> excessive churn on this patchset.
Might as well just use C++ then :^)
François.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 9:47 ` Avi Kivity
2009-07-29 9:49 ` Avi Kivity
@ 2009-07-29 13:28 ` Anthony Liguori
2009-07-29 14:05 ` Avi Kivity
2009-07-29 13:46 ` Luiz Capitulino
2 siblings, 1 reply; 55+ messages in thread
From: Anthony Liguori @ 2009-07-29 13:28 UTC (permalink / raw)
To: Avi Kivity; +Cc: jan.kiszka, dlaor, qemu-devel, Luiz Capitulino
Avi Kivity wrote:
> On 07/29/2009 01:04 AM, Luiz Capitulino wrote:
>> +struct qemu_dict {
>> + size_t size;
>> + struct qemu_dict_entry *table[QEMU_DICT_HASH_SIZE];
>> +};
>>
>
> We don't need to prefix everything with qemu, I think QDict or even
> Dict is sufficient. Ditto for the function names. Also please
> provide a typedef as is common qemu practice.
>
>
>> +
>> +struct qemu_dict *qemu_dict_create(void);
>> +void qemu_dict_add(struct qemu_dict *qdict, const char *key, void
>> *value);
>> +void *qemu_dict_get(const struct qemu_dict *qdict, const char *key);
>> +int qemu_dict_exists(const struct qemu_dict *qdict, const char *key);
>> +void *qemu_dict_del(struct qemu_dict *qdict, const char *key);
>> +void qemu_dict_destroy(struct qemu_dict *qdict);
>> +void qemu_dict_walk(const struct qemu_dict *qdict,
>> + void (*walkf)(const char *key, void *value));
>> +
>>
>
> I'm worried about all those void *s as they move responsibility for
> type safety and lifecycle management to the user. I'd much rather see
> a QObject (or Object) with the following methods:
>
> clone() - deep copy an object; dicts will store copies so we'll
> avoid those leaks or a dictionary member modified after it was stored
> destroy()
It probably would be just as easy to do a ref()/unref() such that the
deep copying was avoided.
--
Regards,
Anthony Liguori
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:28 ` Anthony Liguori
@ 2009-07-29 14:05 ` Avi Kivity
0 siblings, 0 replies; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 14:05 UTC (permalink / raw)
To: Anthony Liguori; +Cc: jan.kiszka, dlaor, qemu-devel, Luiz Capitulino
On 07/29/2009 04:28 PM, Anthony Liguori wrote:
>> I'm worried about all those void *s as they move responsibility for
>> type safety and lifecycle management to the user. I'd much rather
>> see a QObject (or Object) with the following methods:
>>
>> clone() - deep copy an object; dicts will store copies so we'll
>> avoid those leaks or a dictionary member modified after it was stored
>> destroy()
>
>
> It probably would be just as easy to do a ref()/unref() such that the
> deep copying was avoided.
>
Shallow copies have their own pitfalls, you put something in a dict and
then modify it later. I keep getting bitten by this in Python. I guess
we could live with it though. The important thing is to have proper
lifecycle management, which refcounting solves as well.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 9:47 ` Avi Kivity
2009-07-29 9:49 ` Avi Kivity
2009-07-29 13:28 ` Anthony Liguori
@ 2009-07-29 13:46 ` Luiz Capitulino
2009-07-29 13:57 ` Avi Kivity
2 siblings, 1 reply; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-29 13:46 UTC (permalink / raw)
To: Avi Kivity; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On Wed, 29 Jul 2009 12:47:15 +0300
Avi Kivity <avi@redhat.com> wrote:
> On 07/29/2009 01:04 AM, Luiz Capitulino wrote:
> > +struct qemu_dict {
> > + size_t size;
> > + struct qemu_dict_entry *table[QEMU_DICT_HASH_SIZE];
> > +};
> >
>
> We don't need to prefix everything with qemu, I think QDict or even Dict
> is sufficient. Ditto for the function names. Also please provide a
> typedef as is common qemu practice.
Will change.
> > +struct qemu_dict *qemu_dict_create(void);
> > +void qemu_dict_add(struct qemu_dict *qdict, const char *key, void *value);
> > +void *qemu_dict_get(const struct qemu_dict *qdict, const char *key);
> > +int qemu_dict_exists(const struct qemu_dict *qdict, const char *key);
> > +void *qemu_dict_del(struct qemu_dict *qdict, const char *key);
> > +void qemu_dict_destroy(struct qemu_dict *qdict);
> > +void qemu_dict_walk(const struct qemu_dict *qdict,
> > + void (*walkf)(const char *key, void *value));
> > +
> >
>
> I'm worried about all those void *s as they move responsibility for type
> safety and lifecycle management to the user. I'd much rather see a
> QObject (or Object) with the following methods:
>
> clone() - deep copy an object; dicts will store copies so we'll avoid
> those leaks or a dictionary member modified after it was stored
> destroy()
> type() - return the type
> as_dict(), as_string(), as_int() - convert to a subclass so its
> methods can be used
>
> Consider an operation such as printing out the dictionary, you have to
> know the types of the values.
I was thinking in doing a little bit different.
My next patchset (phase 2) will introduce the QType (or QObject)
data type, as you have suggested in the QMP thread. This one will
have all those methods to convert from int, string, dict etc.
Then the dictionary can store it and the user can provide
a iterator to print the objects.
So, the point here is where to have the high-level data type
conversion: in the dict itself or in a higher layer (QObject).
I slightly prefer to have them in the QObject, this way the
dict is more flexible and simpler, capable of storing anything.
But I don't known where the clone() method should be, maybe in
both?
PS: I've called the iterator walk(), weird.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:46 ` Luiz Capitulino
@ 2009-07-29 13:57 ` Avi Kivity
2009-07-29 14:22 ` Luiz Capitulino
0 siblings, 1 reply; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 13:57 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 04:46 PM, Luiz Capitulino wrote:
>>
>> I'm worried about all those void *s as they move responsibility for type
>> safety and lifecycle management to the user. I'd much rather see a
>> QObject (or Object) with the following methods:
>>
>> clone() - deep copy an object; dicts will store copies so we'll avoid
>> those leaks or a dictionary member modified after it was stored
>> destroy()
>> type() - return the type
>> as_dict(), as_string(), as_int() - convert to a subclass so its
>> methods can be used
>>
>> Consider an operation such as printing out the dictionary, you have to
>> know the types of the values.
>>
>
> I was thinking in doing a little bit different.
>
> My next patchset (phase 2) will introduce the QType (or QObject)
> data type, as you have suggested in the QMP thread. This one will
> have all those methods to convert from int, string, dict etc.
>
> Then the dictionary can store it and the user can provide
> a iterator to print the objects.
>
> So, the point here is where to have the high-level data type
> conversion: in the dict itself or in a higher layer (QObject).
>
> I slightly prefer to have them in the QObject, this way the
> dict is more flexible and simpler, capable of storing anything.
>
> But I don't known where the clone() method should be, maybe in
> both?
>
I meant QObject as a base type, so it is a lower layer than QDict; QDict
implements the QObject methods, as do QString, QNumber, etc.
The problem with void *, beyond requiring the user to know what the
object type is, is that it is impossible to control object lifecycle.
When you destroy a QDict containing void *, you cannot destroy the
contained objects. On the other hand if QDict values are all QObjects,
then qdict_destroy() can call qobject_destroy() on all of them
(qobject_destroy might end up calling qdict_destroy() is a value
happened to be a QDict).
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 13:57 ` Avi Kivity
@ 2009-07-29 14:22 ` Luiz Capitulino
2009-07-29 14:37 ` Avi Kivity
0 siblings, 1 reply; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-29 14:22 UTC (permalink / raw)
To: Avi Kivity; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On Wed, 29 Jul 2009 16:57:10 +0300
Avi Kivity <avi@redhat.com> wrote:
> On 07/29/2009 04:46 PM, Luiz Capitulino wrote:
> >>
> >> I'm worried about all those void *s as they move responsibility for type
> >> safety and lifecycle management to the user. I'd much rather see a
> >> QObject (or Object) with the following methods:
> >>
> >> clone() - deep copy an object; dicts will store copies so we'll avoid
> >> those leaks or a dictionary member modified after it was stored
> >> destroy()
> >> type() - return the type
> >> as_dict(), as_string(), as_int() - convert to a subclass so its
> >> methods can be used
> >>
> >> Consider an operation such as printing out the dictionary, you have to
> >> know the types of the values.
> >>
> >
> > I was thinking in doing a little bit different.
> >
> > My next patchset (phase 2) will introduce the QType (or QObject)
> > data type, as you have suggested in the QMP thread. This one will
> > have all those methods to convert from int, string, dict etc.
> >
> > Then the dictionary can store it and the user can provide
> > a iterator to print the objects.
> >
> > So, the point here is where to have the high-level data type
> > conversion: in the dict itself or in a higher layer (QObject).
> >
> > I slightly prefer to have them in the QObject, this way the
> > dict is more flexible and simpler, capable of storing anything.
> >
> > But I don't known where the clone() method should be, maybe in
> > both?
> >
>
> I meant QObject as a base type, so it is a lower layer than QDict; QDict
> implements the QObject methods, as do QString, QNumber, etc.
Ok, I'm failing at imagining "QDict implements the QObject methods"
in C, can you elaborate more and/or sketch something?
> The problem with void *, beyond requiring the user to know what the
> object type is, is that it is impossible to control object lifecycle.
> When you destroy a QDict containing void *, you cannot destroy the
> contained objects. On the other hand if QDict values are all QObjects,
> then qdict_destroy() can call qobject_destroy() on all of them
> (qobject_destroy might end up calling qdict_destroy() is a value
> happened to be a QDict).
Right, but as you said in other email, can we get this merged first
and then improve or should I do the change for this series?
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 14:22 ` Luiz Capitulino
@ 2009-07-29 14:37 ` Avi Kivity
2009-07-29 16:11 ` Luiz Capitulino
0 siblings, 1 reply; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 14:37 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 05:22 PM, Luiz Capitulino wrote:
>
>
>> I meant QObject as a base type, so it is a lower layer than QDict; QDict
>> implements the QObject methods, as do QString, QNumber, etc.
>>
>
> Ok, I'm failing at imagining "QDict implements the QObject methods"
> in C, can you elaborate more and/or sketch something?
>
It's really no different than in other languages, except that you have
to write a ton of boilerplate. The kernel is riddled with object
hierarchies:
typedef struct QType {
const char *name;
void (*destroy)(QObject *);
QObject *(*clone)(QObject *)
} QType;
typedef struct QObject {
QType *type;
} QObject;
typedef struct QDict {
QObject base;
// hash stuff
} QDict;
static QType qdict_type = {
.destroy = qdict_destroy,
.clone = qdict_clone,
};
QObject *qobject_clone(QObject *obj) { return obj->type->clone(obj); }
QObject *qdict_clone(QObject *obj)
{
...
}
>> The problem with void *, beyond requiring the user to know what the
>> object type is, is that it is impossible to control object lifecycle.
>> When you destroy a QDict containing void *, you cannot destroy the
>> contained objects. On the other hand if QDict values are all QObjects,
>> then qdict_destroy() can call qobject_destroy() on all of them
>> (qobject_destroy might end up calling qdict_destroy() is a value
>> happened to be a QDict).
>>
>
> Right, but as you said in other email, can we get this merged first
> and then improve or should I do the change for this series?
>
I think we should merge first, doing this sort of change on a 25-patch
series is no fun.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 14:37 ` Avi Kivity
@ 2009-07-29 16:11 ` Luiz Capitulino
2009-07-29 16:19 ` Avi Kivity
0 siblings, 1 reply; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-29 16:11 UTC (permalink / raw)
To: Avi Kivity; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On Wed, 29 Jul 2009 17:37:31 +0300
Avi Kivity <avi@redhat.com> wrote:
> On 07/29/2009 05:22 PM, Luiz Capitulino wrote:
> >
> >
> >> I meant QObject as a base type, so it is a lower layer than QDict; QDict
> >> implements the QObject methods, as do QString, QNumber, etc.
> >>
> >
> > Ok, I'm failing at imagining "QDict implements the QObject methods"
> > in C, can you elaborate more and/or sketch something?
> >
>
> It's really no different than in other languages, except that you have
> to write a ton of boilerplate. The kernel is riddled with object
> hierarchies:
>
> typedef struct QType {
> const char *name;
> void (*destroy)(QObject *);
> QObject *(*clone)(QObject *)
> } QType;
>
> typedef struct QObject {
> QType *type;
> } QObject;
>
> typedef struct QDict {
> QObject base;
> // hash stuff
> } QDict;
>
> static QType qdict_type = {
> .destroy = qdict_destroy,
> .clone = qdict_clone,
> };
>
> QObject *qobject_clone(QObject *obj) { return obj->type->clone(obj); }
>
> QObject *qdict_clone(QObject *obj)
> {
> ...
> }
Okay, this is really far away from what I had in my mind, will
start working on this then.
Thanks a lot for the explanation.
> >> The problem with void *, beyond requiring the user to know what the
> >> object type is, is that it is impossible to control object lifecycle.
> >> When you destroy a QDict containing void *, you cannot destroy the
> >> contained objects. On the other hand if QDict values are all QObjects,
> >> then qdict_destroy() can call qobject_destroy() on all of them
> >> (qobject_destroy might end up calling qdict_destroy() is a value
> >> happened to be a QDict).
> >>
> >
> > Right, but as you said in other email, can we get this merged first
> > and then improve or should I do the change for this series?
> >
>
> I think we should merge first, doing this sort of change on a 25-patch
> series is no fun.
Thanks a lot again. :)
Btw, the patches that ports command handlers have some void * to
long type conversions (eg. patch 14) can someone please review
them?
I'm not 100% confident about them.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 16:11 ` Luiz Capitulino
@ 2009-07-29 16:19 ` Avi Kivity
2009-07-30 14:50 ` Luiz Capitulino
0 siblings, 1 reply; 55+ messages in thread
From: Avi Kivity @ 2009-07-29 16:19 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel
On 07/29/2009 07:11 PM, Luiz Capitulino wrote:
> Btw, the patches that ports command handlers have some void * to
> long type conversions (eg. patch 14) can someone please review
> them?
>
> I'm not 100% confident about them.
>
Casting long to void * may lose precision on some hosts (Windows x64).
Much better off casting the void * to a long * and dereferencing (and
deallocating later).
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-29 16:19 ` Avi Kivity
@ 2009-07-30 14:50 ` Luiz Capitulino
2009-07-30 15:03 ` Avi Kivity
2009-07-30 15:04 ` Filip Navara
0 siblings, 2 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-30 14:50 UTC (permalink / raw)
To: Avi Kivity; +Cc: aliguori, jan.kiszka, dlaor, qemu-devel, filip.navara
On Wed, 29 Jul 2009 19:19:38 +0300
Avi Kivity <avi@redhat.com> wrote:
> On 07/29/2009 07:11 PM, Luiz Capitulino wrote:
> > Btw, the patches that ports command handlers have some void * to
> > long type conversions (eg. patch 14) can someone please review
> > them?
> >
> > I'm not 100% confident about them.
> >
>
> Casting long to void * may lose precision on some hosts (Windows x64).
> Much better off casting the void * to a long * and dereferencing (and
> deallocating later).
I was going to work on this when I remembered I have copied
current's code behavior in this regard, and I _guess_ it may
be correct.
The monitor accepts four argument types which have integer
representation: '/' (the fmt one), '-' (optional), 'i' (integer)
and 'l' (long).
The optional '-' is a bool, so it won't cause problems.
The format one '/' actually expands for three arguments: 'count',
'format' and 'size'. 'format' and 'size' are small integers, won't
cause problems. Now 'count' is used to tell 'how much to print',
this could cause problems in theory, although I think it won't
happen in practice.
The integer type 'i' has this cast (monitor.c:2786):
args[nb_args++] = (void *)(long)val;
'val' is int64_t.
The bad news: if we use a > 32 integer here, there will be
problems on Windows x64. The good news: as far as I could
understand the handlers, this won't happen in practice.
Most handlers use the 'i' type for small integers, the only
exception are the handlers using it to represent addresses. This
seems to be the case of do_ioport_{read,write} (which
seems safe) and do_sum(), which is the only true problem
(although doesn't seem serious to me).
We could define that 'i' is 32bits and put an assertion
there, that will check if more than 32bits are being used.
Now the cool part. The 'l' (long) type is the one that should
be used to store 64bits values, I think it handles it
correctly (monitor.c:2790):
#if TARGET_PHYS_ADDR_BITS > 32
args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff);
#else
args[nb_args++] = (void *)0;
#endif
args[nb_args++] = (void *)(long)(val & 0xffffffff);
'val' is the same int64_t.
In the dictionary patchset, this type will push the 'high' and
'low' values.
Considering all this explanation, I think the patchset is safe,
in the worst case it's does the same thing as current code does.
Do you agree?
A last comment. My patches introduce explicit casting, as in:
int index = (long) qemu_dict_get(qdict, "index");
Although the current code doesn't do that, it passes the
'arg[]' contents to handlers, I *guess* the compiler will
do the same kind of casting will apply.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-30 14:50 ` Luiz Capitulino
@ 2009-07-30 15:03 ` Avi Kivity
2009-07-30 15:05 ` Luiz Capitulino
2009-07-30 15:04 ` Filip Navara
1 sibling, 1 reply; 55+ messages in thread
From: Avi Kivity @ 2009-07-30 15:03 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: aliguori, jan.kiszka, dlaor, qemu-devel, filip.navara
On 07/30/2009 05:50 PM, Luiz Capitulino wrote:
> On Wed, 29 Jul 2009 19:19:38 +0300
> Avi Kivity<avi@redhat.com> wrote:
>
>
>> On 07/29/2009 07:11 PM, Luiz Capitulino wrote:
>>
>>> Btw, the patches that ports command handlers have some void * to
>>> long type conversions (eg. patch 14) can someone please review
>>> them?
>>>
>>> I'm not 100% confident about them.
>>>
>>>
>> Casting long to void * may lose precision on some hosts (Windows x64).
>> Much better off casting the void * to a long * and dereferencing (and
>> deallocating later).
>>
>
> I was going to work on this when I remembered I have copied
> current's code behavior in this regard, and I _guess_ it may
> be correct.
>
> The monitor accepts four argument types which have integer
> representation: '/' (the fmt one), '-' (optional), 'i' (integer)
> and 'l' (long).
>
> The optional '-' is a bool, so it won't cause problems.
>
> The format one '/' actually expands for three arguments: 'count',
> 'format' and 'size'. 'format' and 'size' are small integers, won't
> cause problems. Now 'count' is used to tell 'how much to print',
> this could cause problems in theory, although I think it won't
> happen in practice.
>
> The integer type 'i' has this cast (monitor.c:2786):
>
> args[nb_args++] = (void *)(long)val;
>
> 'val' is int64_t.
>
> The bad news: if we use a> 32 integer here, there will be
> problems on Windows x64. The good news: as far as I could
> understand the handlers, this won't happen in practice.
>
> Most handlers use the 'i' type for small integers, the only
> exception are the handlers using it to represent addresses. This
> seems to be the case of do_ioport_{read,write} (which
> seems safe) and do_sum(), which is the only true problem
> (although doesn't seem serious to me).
>
> We could define that 'i' is 32bits and put an assertion
> there, that will check if more than 32bits are being used.
>
> Now the cool part. The 'l' (long) type is the one that should
> be used to store 64bits values, I think it handles it
> correctly (monitor.c:2790):
>
> #if TARGET_PHYS_ADDR_BITS> 32
> args[nb_args++] = (void *)(long)((val>> 32)& 0xffffffff);
> #else
> args[nb_args++] = (void *)0;
> #endif
> args[nb_args++] = (void *)(long)(val& 0xffffffff);
>
> 'val' is the same int64_t.
>
> In the dictionary patchset, this type will push the 'high' and
> 'low' values.
>
> Considering all this explanation, I think the patchset is safe,
> in the worst case it's does the same thing as current code does.
>
> Do you agree?
>
I think so.
> A last comment. My patches introduce explicit casting, as in:
>
> int index = (long) qemu_dict_get(qdict, "index");
>
> Although the current code doesn't do that, it passes the
> 'arg[]' contents to handlers, I *guess* the compiler will
> do the same kind of casting will apply.
>
So the existing code splits 64-bit types into two 32-bit values. As
long as you do the same (for now), we should be safe.
Later of course we can replace it with a QNumber or QInteger.
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-30 15:03 ` Avi Kivity
@ 2009-07-30 15:05 ` Luiz Capitulino
0 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-30 15:05 UTC (permalink / raw)
To: Avi Kivity; +Cc: aliguori, jan.kiszka, dlaor, qemu-devel, filip.navara
On Thu, 30 Jul 2009 18:03:55 +0300
Avi Kivity <avi@redhat.com> wrote:
> On 07/30/2009 05:50 PM, Luiz Capitulino wrote:
>
> > A last comment. My patches introduce explicit casting, as in:
> >
> > int index = (long) qemu_dict_get(qdict, "index");
> >
> > Although the current code doesn't do that, it passes the
> > 'arg[]' contents to handlers, I *guess* the compiler will
> > do the same kind of casting will apply.
> >
s/will apply// :)
> So the existing code splits 64-bit types into two 32-bit values. As
> long as you do the same (for now), we should be safe.
Yes, I already do the same. I have changed some 'int's to 'long's
for no reason though, will fix that (but should not be a problem,
anyway).
> Later of course we can replace it with a QNumber or QInteger.
Exactly.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-30 14:50 ` Luiz Capitulino
2009-07-30 15:03 ` Avi Kivity
@ 2009-07-30 15:04 ` Filip Navara
2009-07-30 15:13 ` Avi Kivity
1 sibling, 1 reply; 55+ messages in thread
From: Filip Navara @ 2009-07-30 15:04 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: aliguori, jan.kiszka, dlaor, qemu-devel, Avi Kivity
On Thu, Jul 30, 2009 at 4:50 PM, Luiz Capitulino<lcapitulino@redhat.com> wrote:
> On Wed, 29 Jul 2009 19:19:38 +0300
> Avi Kivity <avi@redhat.com> wrote:
>
>> On 07/29/2009 07:11 PM, Luiz Capitulino wrote:
>> > Btw, the patches that ports command handlers have some void * to
>> > long type conversions (eg. patch 14) can someone please review
>> > them?
>> >
>> > I'm not 100% confident about them.
>> >
>>
>> Casting long to void * may lose precision on some hosts (Windows x64).
>> Much better off casting the void * to a long * and dereferencing (and
>> deallocating later).
>
> I was going to work on this when I remembered I have copied
> current's code behavior in this regard, and I _guess_ it may
> be correct.
>
> The monitor accepts four argument types which have integer
> representation: '/' (the fmt one), '-' (optional), 'i' (integer)
> and 'l' (long).
>
> The optional '-' is a bool, so it won't cause problems.
>
> The format one '/' actually expands for three arguments: 'count',
> 'format' and 'size'. 'format' and 'size' are small integers, won't
> cause problems. Now 'count' is used to tell 'how much to print',
> this could cause problems in theory, although I think it won't
> happen in practice.
>
> The integer type 'i' has this cast (monitor.c:2786):
>
> args[nb_args++] = (void *)(long)val;
>
> 'val' is int64_t.
>
Even if 32-bit values are used this will cause warning on MinGW64, it
is better to use intptr_t for these conversions. I have some
preliminary patches to fix this for the code that is currently in GIT,
but I won't mind if long is used for now and everything is fixed later
at once.
> The bad news: if we use a > 32 integer here, there will be
> problems on Windows x64. The good news: as far as I could
> understand the handlers, this won't happen in practice.
It should be limited to 32-bits because of 32-bit hosts.
> Most handlers use the 'i' type for small integers, the only
> exception are the handlers using it to represent addresses. This
> seems to be the case of do_ioport_{read,write} (which
> seems safe) and do_sum(), which is the only true problem
> (although doesn't seem serious to me).
>
> We could define that 'i' is 32bits and put an assertion
> there, that will check if more than 32bits are being used.
...or just do (void*)(intptr_t)(int)val and watch when it breaks ;-)
> Now the cool part. The 'l' (long) type is the one that should
> be used to store 64bits values, I think it handles it
> correctly (monitor.c:2790):
>
> #if TARGET_PHYS_ADDR_BITS > 32
> args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff);
> #else
> args[nb_args++] = (void *)0;
> #endif
> args[nb_args++] = (void *)(long)(val & 0xffffffff);
>
> 'val' is the same int64_t.
Again, intptr_t should be used here in long term. long is probably
fine for now before I post the Win64 patches.
> In the dictionary patchset, this type will push the 'high' and
> 'low' values.
>
> Considering all this explanation, I think the patchset is safe,
> in the worst case it's does the same thing as current code does.
>
> Do you agree?
Agreed.
> A last comment. My patches introduce explicit casting, as in:
>
> int index = (long) qemu_dict_get(qdict, "index");
>
> Although the current code doesn't do that, it passes the
> 'arg[]' contents to handlers, I *guess* the compiler will
> do the same kind of casting will apply.
>
Best regards,
Filip Navara
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-30 15:04 ` Filip Navara
@ 2009-07-30 15:13 ` Avi Kivity
2009-07-30 15:15 ` Filip Navara
2009-07-30 15:19 ` Paul Brook
0 siblings, 2 replies; 55+ messages in thread
From: Avi Kivity @ 2009-07-30 15:13 UTC (permalink / raw)
To: Filip Navara; +Cc: aliguori, jan.kiszka, dlaor, qemu-devel, Luiz Capitulino
On 07/30/2009 06:04 PM, Filip Navara wrote:
> Again, intptr_t should be used here in long term. long is probably
> fine for now before I post the Win64 patches.
>
No, for the long term we shouldn't be putting pointers into integers or
vice versa unless there's a really good reason to do so.
The existing code should have been written with a union or something
(which would have prevented the need for splitting words).
--
error compiling committee.c: too many arguments to function
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-30 15:13 ` Avi Kivity
@ 2009-07-30 15:15 ` Filip Navara
2009-07-30 15:19 ` Paul Brook
1 sibling, 0 replies; 55+ messages in thread
From: Filip Navara @ 2009-07-30 15:15 UTC (permalink / raw)
To: Avi Kivity; +Cc: aliguori, jan.kiszka, dlaor, qemu-devel, Luiz Capitulino
On Thu, Jul 30, 2009 at 5:13 PM, Avi Kivity<avi@redhat.com> wrote:
> On 07/30/2009 06:04 PM, Filip Navara wrote:
>>
>> Again, intptr_t should be used here in long term. long is probably
>> fine for now before I post the Win64 patches.
>>
>
> No, for the long term we shouldn't be putting pointers into integers or vice
> versa unless there's a really good reason to do so.
Obviously that's even better. I just meant that "(unsigned) long"
shouldn't be used for pointer casts _where necessary_ and
"(u)intptr_t" should be used instead.
Best regards,
Filip Navara
^ permalink raw reply [flat|nested] 55+ messages in thread
* Re: [Qemu-devel] Re: [PATCH 01/25] Introduce QEMU dictionary data type
2009-07-30 15:13 ` Avi Kivity
2009-07-30 15:15 ` Filip Navara
@ 2009-07-30 15:19 ` Paul Brook
1 sibling, 0 replies; 55+ messages in thread
From: Paul Brook @ 2009-07-30 15:19 UTC (permalink / raw)
To: qemu-devel
Cc: aliguori, jan.kiszka, dlaor, Luiz Capitulino, Filip Navara,
Avi Kivity
On Thursday 30 July 2009, Avi Kivity wrote:
> On 07/30/2009 06:04 PM, Filip Navara wrote:
> > Again, intptr_t should be used here in long term. long is probably
> > fine for now before I post the Win64 patches.
>
> No, for the long term we shouldn't be putting pointers into integers or
> vice versa unless there's a really good reason to do so.
I'd go further than that. Don't put integers into pointers *at all*. It's
really not worth it. Use a proper union/struct/opaque-pointer-to-value.
Paul
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 02/25] net: Fix do_set_link() return type
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 03/25] Add wrappers to functions used by the Monitor Luiz Capitulino
` (22 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
do_set_link() returns int, but Monitor handler functions should
always return void.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
net.c | 6 ++----
net.h | 2 +-
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/net.c b/net.c
index b5e8c9f..1b531e7 100644
--- a/net.c
+++ b/net.c
@@ -2905,7 +2905,7 @@ void do_info_network(Monitor *mon)
}
}
-int do_set_link(Monitor *mon, const char *name, const char *up_or_down)
+void do_set_link(Monitor *mon, const char *name, const char *up_or_down)
{
VLANState *vlan;
VLANClientState *vc = NULL;
@@ -2918,7 +2918,7 @@ done:
if (!vc) {
monitor_printf(mon, "could not find network device '%s'", name);
- return 0;
+ return;
}
if (strcmp(up_or_down, "up") == 0)
@@ -2931,8 +2931,6 @@ done:
if (vc->link_status_changed)
vc->link_status_changed(vc);
-
- return 1;
}
void net_cleanup(void)
diff --git a/net.h b/net.h
index 188fa39..3ac9e8c 100644
--- a/net.h
+++ b/net.h
@@ -79,7 +79,7 @@ void qemu_check_nic_model_list(NICInfo *nd, const char * const *models,
void qemu_handler_true(void *opaque);
void do_info_network(Monitor *mon);
-int do_set_link(Monitor *mon, const char *name, const char *up_or_down);
+void do_set_link(Monitor *mon, const char *name, const char *up_or_down);
void do_info_usernet(Monitor *mon);
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 03/25] Add wrappers to functions used by the Monitor
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 01/25] Introduce QEMU dictionary data type Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 02/25] net: Fix do_set_link() return type Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 04/25] monitor: Document missing supported argument types Luiz Capitulino
` (21 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Some functions exported to be used by the Monitor as command
handlers are also called in other places as regular functions.
When those functions got ported to use the Monitor dictionary
to pass argments, the callers will have to setup a dictionary
to be able to call them.
To avoid this problem, this commit add wrappers to those functions,
so that we change the wrapper to accept the dictionary, letting
the current functions as is.
The following wrappers are being added:
- do_help_cmd()
- do_pci_device_hot_remove()
- qemu_loadvm()
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
hw/pci-hotplug.c | 5 +++++
monitor.c | 5 +++++
qemu-monitor.hx | 4 ++--
savevm.c | 7 ++++++-
sysemu.h | 2 ++
vl.c | 2 +-
6 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 43675e2..335681d 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -199,6 +199,11 @@ void pci_device_hot_remove(Monitor *mon, const char *pci_addr)
qemu_system_device_hot_add(bus, slot, 0);
}
+void do_pci_device_hot_remove(Monitor *mon, const char *pci_addr)
+{
+ pci_device_hot_remove(mon, pci_addr);
+}
+
static int pci_match_fn(void *dev_private, void *arg)
{
PCIDevice *dev = dev_private;
diff --git a/monitor.c b/monitor.c
index 99c174c..d049dd3 100644
--- a/monitor.c
+++ b/monitor.c
@@ -251,6 +251,11 @@ static void help_cmd(Monitor *mon, const char *name)
}
}
+static void do_help_cmd(Monitor *mon, const char *name)
+{
+ help_cmd(mon, name);
+}
+
static void do_commit(Monitor *mon, const char *device)
{
int all_devices;
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 11bdb2c..8936e93 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -9,7 +9,7 @@ STEXI
@table @option
ETEXI
- { "help|?", "s?", help_cmd, "[cmd]", "show the help" },
+ { "help|?", "s?", do_help_cmd, "[cmd]", "show the help" },
STEXI
@item help or ? [@var{cmd}]
Show the help for all commands or just for command @var{cmd}.
@@ -519,7 +519,7 @@ Hot-add PCI device.
ETEXI
#if defined(TARGET_I386)
- { "pci_del", "s", pci_device_hot_remove, "[[<domain>:]<bus>:]<slot>", "hot remove PCI device" },
+ { "pci_del", "s", do_pci_device_hot_remove, "[[<domain>:]<bus>:]<slot>", "hot remove PCI device" },
#endif
STEXI
@item pci_del
diff --git a/savevm.c b/savevm.c
index 570377f..9f988e6 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1145,7 +1145,7 @@ void do_savevm(Monitor *mon, const char *name)
vm_start();
}
-void do_loadvm(Monitor *mon, const char *name)
+void qemu_loadvm(Monitor *mon, const char *name)
{
DriveInfo *dinfo;
BlockDriverState *bs, *bs1;
@@ -1217,6 +1217,11 @@ void do_loadvm(Monitor *mon, const char *name)
vm_start();
}
+void do_loadvm(Monitor *mon, const char *name)
+{
+ qemu_loadvm(mon, name);
+}
+
void do_delvm(Monitor *mon, const char *name)
{
DriveInfo *dinfo;
diff --git a/sysemu.h b/sysemu.h
index 96928dc..ebc42ed 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -59,6 +59,7 @@ void qemu_system_reset(void);
void do_savevm(Monitor *mon, const char *name);
void do_loadvm(Monitor *mon, const char *name);
+void qemu_loadvm(Monitor *mon, const char *name);
void do_delvm(Monitor *mon, const char *name);
void do_info_snapshots(Monitor *mon);
@@ -210,6 +211,7 @@ void destroy_bdrvs(dev_match_fn *match_fn, void *arg);
void pci_device_hot_add(Monitor *mon, const char *pci_addr, const char *type,
const char *opts);
void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts);
+void do_pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void pci_device_hot_remove_success(int pcibus, int slot);
diff --git a/vl.c b/vl.c
index bb56644..337be63 100644
--- a/vl.c
+++ b/vl.c
@@ -6084,7 +6084,7 @@ int main(int argc, char **argv, char **envp)
}
if (loadvm)
- do_loadvm(cur_mon, loadvm);
+ qemu_loadvm(cur_mon, loadvm);
if (incoming) {
autostart = 0;
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 04/25] monitor: Document missing supported argument types
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (2 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 03/25] Add wrappers to functions used by the Monitor Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 05/25] monitor: New format for handlers " Luiz Capitulino
` (20 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/monitor.c b/monitor.c
index d049dd3..2396a9a 100644
--- a/monitor.c
+++ b/monitor.c
@@ -59,6 +59,8 @@
* '/' optional gdb-like print format (like "/10x")
*
* '?' optional type (for 'F', 's' and 'i')
+ * '.' other form of optional type (for 'i' and 'l')
+ * '-' optional parameter (eg. '-f')
*
*/
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 05/25] monitor: New format for handlers argument types
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (3 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 04/25] monitor: Document missing supported argument types Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 06/25] monitor: Setup a dictionary with handler arguments Luiz Capitulino
` (19 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Current handlers argument types, as defined in qemu-monitor.hx file,
are a sequence of chars where each one represents one argument type
of the command handler. The number of chars is also used to know how
many arguments a given handler accepts.
This commit defines a new format, which makes mandatory the use of
a name for each argument.
For example, do_eject() command handler is currently defined as:
{ "eject", "-fB", do_eject, ... }
With the new format it becomes:
{ "eject", "force:-f,filename:B", do_eject, ... }
This way the Monitor will be capable of setting up a dictionary, using
each argument's name as the key and the argument itself as the value.
This commit also adds two new functions: key_get_info() and
next_arg_type(), both are used to parse the new format.
Currently key_get_info() consumes the 'key' part of the new format and
discards it, this way the current parsing code is not affected by this
change.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 48 ++++++++++++++++++++++---
qemu-monitor.hx | 109 ++++++++++++++++++++++++++++---------------------------
2 files changed, 98 insertions(+), 59 deletions(-)
diff --git a/monitor.c b/monitor.c
index 2396a9a..082ee94 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2555,6 +2555,33 @@ static const char *get_command_name(const char *cmdline,
return p;
}
+/**
+ * Read key of 'type' into 'key' and return the current
+ * 'type' pointer.
+ */
+static char *key_get_info(const char *type, char **key)
+{
+ size_t len;
+ char *p, *str;
+
+ if (*type == ',')
+ type++;
+
+ p = strchr(type, ':');
+ if (!p) {
+ *key = NULL;
+ return NULL;
+ }
+ len = p - type;
+
+ str = qemu_malloc(len + 1);
+ memcpy(str, type, len);
+ str[len] = '\0';
+
+ *key = str;
+ return ++p;
+}
+
static int default_fmt_format = 'x';
static int default_fmt_size = 4;
@@ -2567,6 +2594,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
const mon_cmd_t *cmd;
char cmdname[256];
char buf[1024];
+ char *key;
void *str_allocated[MAX_ARGS];
void *args[MAX_ARGS];
void (*handler_0)(Monitor *mon);
@@ -2618,9 +2646,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
typestr = cmd->args_type;
nb_args = 0;
for(;;) {
- c = *typestr;
- if (c == '\0')
+ typestr = key_get_info(typestr, &key);
+ if (!typestr)
break;
+ c = *typestr;
typestr++;
switch(c) {
case 'F':
@@ -2834,6 +2863,8 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
monitor_printf(mon, "%s: unknown type '%c'\n", cmdname, c);
goto fail;
}
+ qemu_free(key);
+ key = NULL;
}
/* check that all arguments were parsed */
while (qemu_isspace(*p))
@@ -2898,6 +2929,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
goto fail;
}
fail:
+ qemu_free(key);
for(i = 0; i < MAX_ARGS; i++)
qemu_free(str_allocated[i]);
}
@@ -3016,6 +3048,12 @@ static void parse_cmdline(const char *cmdline,
*pnb_args = nb_args;
}
+static const char *next_arg_type(const char *typestr)
+{
+ const char *p = strchr(typestr, ':');
+ return (p != NULL ? ++p : typestr);
+}
+
static void monitor_find_completion(const char *cmdline)
{
const char *cmdname;
@@ -3058,12 +3096,12 @@ static void monitor_find_completion(const char *cmdline)
}
return;
found:
- ptype = cmd->args_type;
+ ptype = next_arg_type(cmd->args_type);
for(i = 0; i < nb_args - 2; i++) {
if (*ptype != '\0') {
- ptype++;
+ ptype = next_arg_type(ptype);
while (*ptype == '?')
- ptype++;
+ ptype = next_arg_type(ptype);
}
}
str = args[nb_args - 1];
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 8936e93..5c0159c 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -9,20 +9,20 @@ STEXI
@table @option
ETEXI
- { "help|?", "s?", do_help_cmd, "[cmd]", "show the help" },
+ { "help|?", "name:s?", do_help_cmd, "[cmd]", "show the help" },
STEXI
@item help or ? [@var{cmd}]
Show the help for all commands or just for command @var{cmd}.
ETEXI
- { "commit", "s", do_commit,
+ { "commit", "device:s", do_commit,
"device|all", "commit changes to the disk images (if -snapshot is used) or backing files" },
STEXI
@item commit
Commit changes to the disk images (if -snapshot is used) or backing files.
ETEXI
- { "info", "s?", do_info,
+ { "info", "item:s?", do_info,
"[subcommand]", "show various information about the system state" },
STEXI
@item info @var{subcommand}
@@ -103,14 +103,14 @@ STEXI
Quit the emulator.
ETEXI
- { "eject", "-fB", do_eject,
+ { "eject", "force:-f,filename:B", do_eject,
"[-f] device", "eject a removable medium (use -f to force it)" },
STEXI
@item eject [-f] @var{device}
Eject a removable medium (use -f to force it).
ETEXI
- { "change", "BFs?", do_change,
+ { "change", "device:B,target:F,arg:s?", do_change,
"device filename [format]", "change a removable medium, optional format" },
STEXI
@item change @var{device} @var{setting}
@@ -149,28 +149,28 @@ Password: ********
@end table
ETEXI
- { "screendump", "F", do_screen_dump,
+ { "screendump", "filename:F", do_screen_dump,
"filename", "save screen into PPM image 'filename'" },
STEXI
@item screendump @var{filename}
Save screen into PPM image @var{filename}.
ETEXI
- { "logfile", "F", do_logfile,
+ { "logfile", "filename:F", do_logfile,
"filename", "output logs to 'filename'" },
STEXI
@item logfile @var{filename}
Output logs to @var{filename}.
ETEXI
- { "log", "s", do_log,
+ { "log", "items:s", do_log,
"item1[,...]", "activate logging of the specified items to '/tmp/qemu.log'" },
STEXI
@item log @var{item1}[,...]
Activate logging of the specified items to @file{/tmp/qemu.log}.
ETEXI
- { "savevm", "s?", do_savevm,
+ { "savevm", "name:s?", do_savevm,
"[tag|id]", "save a VM snapshot. If no tag or id are provided, a new snapshot is created" },
STEXI
@item savevm [@var{tag}|@var{id}]
@@ -180,7 +180,7 @@ a snapshot with the same tag or ID, it is replaced. More info at
@ref{vm_snapshots}.
ETEXI
- { "loadvm", "s", do_loadvm,
+ { "loadvm", "name:s", do_loadvm,
"tag|id", "restore a VM snapshot from its tag or id" },
STEXI
@item loadvm @var{tag}|@var{id}
@@ -188,14 +188,14 @@ Set the whole virtual machine to the snapshot identified by the tag
@var{tag} or the unique snapshot ID @var{id}.
ETEXI
- { "delvm", "s", do_delvm,
+ { "delvm", "name:s", do_delvm,
"tag|id", "delete a VM snapshot from its tag or id" },
STEXI
@item delvm @var{tag}|@var{id}
Delete the snapshot identified by @var{tag} or @var{id}.
ETEXI
- { "singlestep", "s?", do_singlestep,
+ { "singlestep", "option:s?", do_singlestep,
"[on|off]", "run emulation in singlestep mode or switch to normal mode", },
STEXI
@item singlestep [off]
@@ -217,21 +217,21 @@ STEXI
Resume emulation.
ETEXI
- { "gdbserver", "s?", do_gdbserver,
+ { "gdbserver", "device:s?", do_gdbserver,
"[device]", "start gdbserver on given device (default 'tcp::1234'), stop with 'none'", },
STEXI
@item gdbserver [@var{port}]
Start gdbserver session (default @var{port}=1234)
ETEXI
- { "x", "/l", do_memory_dump,
+ { "x", "fmt:/,addr:l", do_memory_dump,
"/fmt addr", "virtual memory dump starting at 'addr'", },
STEXI
@item x/fmt @var{addr}
Virtual memory dump starting at @var{addr}.
ETEXI
- { "xp", "/l", do_physical_memory_dump,
+ { "xp", "fmt:/,addr:l", do_physical_memory_dump,
"/fmt addr", "physical memory dump starting at 'addr'", },
STEXI
@item xp /@var{fmt} @var{addr}
@@ -291,7 +291,7 @@ Dump 80 16 bit values at the start of the video memory.
@end itemize
ETEXI
- { "p|print", "/l", do_print,
+ { "p|print", "fmt:/,val:l", do_print,
"/fmt expr", "print expression value (use $reg for CPU register access)", },
STEXI
@item p or print/@var{fmt} @var{expr}
@@ -300,19 +300,19 @@ Print expression value. Only the @var{format} part of @var{fmt} is
used.
ETEXI
- { "i", "/ii.", do_ioport_read,
+ { "i", "fmt:/,addr:i,index:i.", do_ioport_read,
"/fmt addr", "I/O port read" },
STEXI
Read I/O port.
ETEXI
- { "o", "/ii", do_ioport_write,
+ { "o", "fmt:/,addr:i,val:i", do_ioport_write,
"/fmt addr value", "I/O port write" },
STEXI
Write to I/O port.
ETEXI
- { "sendkey", "si?", do_sendkey,
+ { "sendkey", "string:s,hold_time:i?", do_sendkey,
"keys [hold_ms]", "send keys to the VM (e.g. 'sendkey ctrl-alt-f1', default hold time=100 ms)" },
STEXI
@item sendkey @var{keys}
@@ -344,7 +344,7 @@ STEXI
Power down the system (if supported).
ETEXI
- { "sum", "ii", do_sum,
+ { "sum", "start:i,size:i", do_sum,
"addr size", "compute the checksum of a memory region" },
STEXI
@item sum @var{addr} @var{size}
@@ -352,7 +352,7 @@ STEXI
Compute the checksum of a memory region.
ETEXI
- { "usb_add", "s", do_usb_add,
+ { "usb_add", "devname:s", do_usb_add,
"device", "add USB device (e.g. 'host:bus.addr' or 'host:vendor_id:product_id')" },
STEXI
@item usb_add @var{devname}
@@ -361,7 +361,7 @@ Add the USB device @var{devname}. For details of available devices see
@ref{usb_devices}
ETEXI
- { "usb_del", "s", do_usb_del,
+ { "usb_del", "devname:s", do_usb_del,
"device", "remove USB device 'bus.addr'" },
STEXI
@item usb_del @var{devname}
@@ -371,13 +371,13 @@ hub. @var{devname} has the syntax @code{bus.addr}. Use the monitor
command @code{info usb} to see the devices you can remove.
ETEXI
- { "cpu", "i", do_cpu_set,
+ { "cpu", "index:i", do_cpu_set,
"index", "set the default CPU" },
STEXI
Set the default CPU.
ETEXI
- { "mouse_move", "sss?", do_mouse_move,
+ { "mouse_move", "dx_str:s,dy_str:s,dz_str:s?", do_mouse_move,
"dx dy [dz]", "send mouse move events" },
STEXI
@item mouse_move @var{dx} @var{dy} [@var{dz}]
@@ -385,14 +385,14 @@ Move the active mouse to the specified coordinates @var{dx} @var{dy}
with optional scroll axis @var{dz}.
ETEXI
- { "mouse_button", "i", do_mouse_button,
+ { "mouse_button", "button_state:i", do_mouse_button,
"state", "change mouse button state (1=L, 2=M, 4=R)" },
STEXI
@item mouse_button @var{val}
Change the active mouse button state @var{val} (1=L, 2=M, 4=R).
ETEXI
- { "mouse_set", "i", do_mouse_set,
+ { "mouse_set", "index:i", do_mouse_set,
"index", "set which mouse device receives events" },
STEXI
@item mouse_set @var{index}
@@ -404,7 +404,7 @@ info mice
ETEXI
#ifdef HAS_AUDIO
- { "wavcapture", "si?i?i?", do_wav_capture,
+ { "wavcapture", "path:s,freq:i?,bits:i?,nchannels:i?", do_wav_capture,
"path [frequency [bits [channels]]]",
"capture audio to a wave file (default frequency=44100 bits=16 channels=2)" },
#endif
@@ -422,7 +422,7 @@ Defaults:
ETEXI
#ifdef HAS_AUDIO
- { "stopcapture", "i", do_stop_capture,
+ { "stopcapture", "n:i", do_stop_capture,
"capture index", "stop capture" },
#endif
STEXI
@@ -433,21 +433,21 @@ info capture
@end example
ETEXI
- { "memsave", "lis", do_memory_save,
+ { "memsave", "val:l,size:i,filename:s", do_memory_save,
"addr size file", "save to disk virtual memory dump starting at 'addr' of size 'size'", },
STEXI
@item memsave @var{addr} @var{size} @var{file}
save to disk virtual memory dump starting at @var{addr} of size @var{size}.
ETEXI
- { "pmemsave", "lis", do_physical_memory_save,
+ { "pmemsave", "val:l,size:i,filename:s", do_physical_memory_save,
"addr size file", "save to disk physical memory dump starting at 'addr' of size 'size'", },
STEXI
@item pmemsave @var{addr} @var{size} @var{file}
save to disk physical memory dump starting at @var{addr} of size @var{size}.
ETEXI
- { "boot_set", "s", do_boot_set,
+ { "boot_set", "bootdevice:s", do_boot_set,
"bootdevice", "define new values for the boot device list" },
STEXI
@item boot_set @var{bootdevicelist}
@@ -460,7 +460,7 @@ the same that can be specified in the @code{-boot} command line option.
ETEXI
#if defined(TARGET_I386)
- { "nmi", "i", do_inject_nmi,
+ { "nmi", "cpu_index:i", do_inject_nmi,
"cpu", "inject an NMI on the given CPU", },
#endif
STEXI
@@ -468,7 +468,7 @@ STEXI
Inject an NMI on the given CPU (x86 only).
ETEXI
- { "migrate", "-ds", do_migrate,
+ { "migrate", "detach:-d,uri:s", do_migrate,
"[-d] uri", "migrate to URI (using -d to not wait for completion)" },
STEXI
@item migrate [-d] @var{uri}
@@ -482,14 +482,14 @@ STEXI
Cancel the current VM migration.
ETEXI
- { "migrate_set_speed", "s", do_migrate_set_speed,
+ { "migrate_set_speed", "value:s", do_migrate_set_speed,
"value", "set maximum speed (in bytes) for migrations" },
STEXI
@item migrate_set_speed @var{value}
Set maximum speed to @var{value} (in bytes) for migrations.
ETEXI
- { "migrate_set_downtime", "s", do_migrate_set_downtime,
+ { "migrate_set_downtime", "value:s", do_migrate_set_downtime,
"value", "set maximum tolerated downtime (in seconds) for migrations" },
STEXI
@@ -498,8 +498,9 @@ Set maximum tolerated downtime (in seconds) for migration.
ETEXI
#if defined(TARGET_I386)
- { "drive_add", "ss", drive_hot_add, "[[<domain>:]<bus>:]<slot>\n"
- "[file=file][,if=type][,bus=n]\n"
+ { "drive_add", "pci_addr:s,opts:s", drive_hot_add,
+ "[[<domain>:]<bus>:]<slot>\n"
+ "[file=file][,if=type][,bus=n]\n"
"[,unit=m][,media=d][index=i]\n"
"[,cyls=c,heads=h,secs=s[,trans=t]]\n"
"[snapshot=on|off][,cache=on|off]",
@@ -511,7 +512,7 @@ Add drive to PCI storage controller.
ETEXI
#if defined(TARGET_I386)
- { "pci_add", "sss?", pci_device_hot_add, "auto|[[<domain>:]<bus>:]<slot> nic|storage [[vlan=n][,macaddr=addr][,model=type]] [file=file][,if=type][,bus=nr]...", "hot-add PCI device" },
+ { "pci_add", "pci_addr:s,type:s,opts:s?", pci_device_hot_add, "auto|[[<domain>:]<bus>:]<slot> nic|storage [[vlan=n][,macaddr=addr][,model=type]] [file=file][,if=type][,bus=nr]...", "hot-add PCI device" },
#endif
STEXI
@item pci_add
@@ -519,21 +520,21 @@ Hot-add PCI device.
ETEXI
#if defined(TARGET_I386)
- { "pci_del", "s", do_pci_device_hot_remove, "[[<domain>:]<bus>:]<slot>", "hot remove PCI device" },
+ { "pci_del", "pci_addr:s", do_pci_device_hot_remove, "[[<domain>:]<bus>:]<slot>", "hot remove PCI device" },
#endif
STEXI
@item pci_del
Hot remove PCI device.
ETEXI
- { "host_net_add", "ss?", net_host_device_add,
+ { "host_net_add", "device:s,opts:s?", net_host_device_add,
"tap|user|socket|vde|dump [options]", "add host VLAN client" },
STEXI
@item host_net_add
Add host VLAN client.
ETEXI
- { "host_net_remove", "is", net_host_device_remove,
+ { "host_net_remove", "vlan_id:i,device:s", net_host_device_remove,
"vlan_id name", "remove host VLAN client" },
STEXI
@item host_net_remove
@@ -541,10 +542,10 @@ Remove host VLAN client.
ETEXI
#ifdef CONFIG_SLIRP
- { "hostfwd_add", "ss?s?", net_slirp_hostfwd_add,
+ { "hostfwd_add", "arg1:s,arg2:s?,arg3:s?", net_slirp_hostfwd_add,
"[vlan_id name] [tcp|udp]:[hostaddr]:hostport-[guestaddr]:guestport",
"redirect TCP or UDP connections from host to guest (requires -net user)" },
- { "hostfwd_remove", "ss?s?", net_slirp_hostfwd_remove,
+ { "hostfwd_remove", "arg1:s,arg2:s?,arg3:s?", net_slirp_hostfwd_remove,
"[vlan_id name] [tcp|udp]:[hostaddr]:hostport",
"remove host-to-guest TCP or UDP redirection" },
#endif
@@ -553,28 +554,28 @@ STEXI
Redirect TCP or UDP connections from host to guest (requires -net user).
ETEXI
- { "balloon", "i", do_balloon,
+ { "balloon", "value:i", do_balloon,
"target", "request VM to change it's memory allocation (in MB)" },
STEXI
@item balloon @var{value}
Request VM to change its memory allocation to @var{value} (in MB).
ETEXI
- { "set_link", "ss", do_set_link,
+ { "set_link", "name:s,up_or_down:s", do_set_link,
"name up|down", "change the link status of a network adapter" },
STEXI
@item set_link @var{name} [up|down]
Set link @var{name} up or down.
ETEXI
- { "watchdog_action", "s", do_watchdog_action,
+ { "watchdog_action", "action:s", do_watchdog_action,
"[reset|shutdown|poweroff|pause|debug|none]", "change watchdog action" },
STEXI
@item watchdog_action
Change watchdog action.
ETEXI
- { "acl_show", "s", do_acl_show, "aclname",
+ { "acl_show", "aclname:s", do_acl_show, "aclname",
"list rules in the access control list" },
STEXI
@item acl_show @var{aclname}
@@ -584,7 +585,7 @@ policy. There are currently two named access control lists,
certificate distinguished name, and SASL username respectively.
ETEXI
- { "acl_policy", "ss", do_acl_policy, "aclname allow|deny",
+ { "acl_policy", "aclname:s,policy:s", do_acl_policy, "aclname allow|deny",
"set default access control list policy" },
STEXI
@item acl_policy @var{aclname} @code{allow|deny}
@@ -593,7 +594,7 @@ none of the explicit rules match. The default policy at startup is
always @code{deny}.
ETEXI
- { "acl_add", "sssi?", do_acl_add, "aclname match allow|deny [index]",
+ { "acl_add", "aclname:s,match:s,policy:s,index:i?", do_acl_add, "aclname match allow|deny [index]",
"add a match rule to the access control list" },
STEXI
@item acl_allow @var{aclname} @var{match} @code{allow|deny} [@var{index}]
@@ -605,14 +606,14 @@ normally be appended to the end of the ACL, but can be inserted
earlier in the list if the optional @var{index} parameter is supplied.
ETEXI
- { "acl_remove", "ss", do_acl_remove, "aclname match",
+ { "acl_remove", "aclname:s,match:s", do_acl_remove, "aclname match",
"remove a match rule from the access control list" },
STEXI
@item acl_remove @var{aclname} @var{match}
Remove the specified match rule from the access control list.
ETEXI
- { "acl_reset", "s", do_acl_reset, "aclname",
+ { "acl_reset", "aclname:s", do_acl_reset, "aclname",
"reset the access control list" },
STEXI
@item acl_remove @var{aclname} @var{match}
@@ -621,14 +622,14 @@ policy back to @code{deny}.
ETEXI
#if defined(TARGET_I386)
- { "mce", "iillll", do_inject_mce, "cpu bank status mcgstatus addr misc", "inject a MCE on the given CPU"},
+ { "mce", "cpu_index:i,bank:i,status:l,mcg_status:l,addr:l,misc:l", do_inject_mce, "cpu bank status mcgstatus addr misc", "inject a MCE on the given CPU"},
#endif
STEXI
@item mce @var{cpu} @var{bank} @var{status} @var{mcgstatus} @var{addr} @var{misc}
Inject an MCE on the given CPU (x86 only).
ETEXI
- { "getfd", "s", do_getfd, "getfd name",
+ { "getfd", "fdname:s", do_getfd, "getfd name",
"receive a file descriptor via SCM rights and assign it a name" },
STEXI
@item getfd @var{fdname}
@@ -637,7 +638,7 @@ mechanism on unix sockets, it is stored using the name @var{fdname} for
later use by other monitor commands.
ETEXI
- { "closefd", "s", do_closefd, "closefd name",
+ { "closefd", "fdname:s", do_closefd, "closefd name",
"close a file descriptor previously passed via SCM rights" },
STEXI
@item closefd @var{fdname}
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 06/25] monitor: Setup a dictionary with handler arguments
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (4 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 05/25] monitor: New format for handlers " Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 07/25] monitor: Export qemu-dict.h header Luiz Capitulino
` (18 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
With this commit monitor_handle_command() will be able to setup a
QEMU dictionary with arguments to command handlers.
However, the current 'args' method is still being used, next changes
will port commands to use the new dictionary.
There are three changes introduced by the dictionary that are worth
noting:
1. The '/' argument type always adds the following standard keys in the
dictionary: 'count', 'format' and 'size'. This way, the argument
name used in the 'args_type' string doesn't matter
2. The 'l' argument type always adds a 'high' order value and a 'low'
order value. To do this the Monitor will append '_h' and '_l' to the
argument name used in the 'args_type' (this is the job of
key_append_str() & friends)
3. The optional argument type '?' doesn't need to pass the additional
'has_arg' argument, instead hanlders can do the same check with
qemu_dict_exists()
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 56 insertions(+), 0 deletions(-)
diff --git a/monitor.c b/monitor.c
index 082ee94..802edb7 100644
--- a/monitor.c
+++ b/monitor.c
@@ -41,6 +41,7 @@
#include "disas.h"
#include "balloon.h"
#include "qemu-timer.h"
+#include "qemu-dict.h"
#include "migration.h"
#include "kvm.h"
#include "acl.h"
@@ -2582,6 +2583,37 @@ static char *key_get_info(const char *type, char **key)
return ++p;
}
+/**
+ * Append '_' plus the character from 'c' to 'key' and returns
+ * the new string.
+ */
+static char *key_append_chr(const char *key, int c)
+{
+ char *p;
+ size_t len;
+
+ len = strlen(key);
+ p = qemu_malloc(len + 3);
+ memcpy(p, key, len);
+ p[len++] = '_';
+ p[len++] = c;
+ p[len] = '\0';
+
+ return p;
+}
+
+/* Append "_l" to 'key' */
+static char *key_append_low(const char *key)
+{
+ return key_append_chr(key, 'l');
+}
+
+/* Append "_h" to 'key' */
+static char *key_append_high(const char *key)
+{
+ return key_append_chr(key, 'h');
+}
+
static int default_fmt_format = 'x';
static int default_fmt_size = 4;
@@ -2597,6 +2629,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
char *key;
void *str_allocated[MAX_ARGS];
void *args[MAX_ARGS];
+ struct qemu_dict *qdict;
void (*handler_0)(Monitor *mon);
void (*handler_1)(Monitor *mon, void *arg0);
void (*handler_2)(Monitor *mon, void *arg0, void *arg1);
@@ -2639,6 +2672,8 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
return;
}
+ qdict = qemu_dict_create();
+
for(i = 0; i < MAX_ARGS; i++)
str_allocated[i] = NULL;
@@ -2696,6 +2731,8 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
goto fail;
}
args[nb_args++] = str;
+ if (str)
+ qemu_dict_add(qdict, key, str);
}
break;
case '/':
@@ -2777,12 +2814,16 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
args[nb_args++] = (void*)(long)count;
args[nb_args++] = (void*)(long)format;
args[nb_args++] = (void*)(long)size;
+ qemu_dict_add(qdict, "count", (void*)(long)count);
+ qemu_dict_add(qdict, "format", (void*)(long)format);
+ qemu_dict_add(qdict, "size", (void*)(long)size);
}
break;
case 'i':
case 'l':
{
int64_t val;
+ int qdict_add = 1;
while (qemu_isspace(*p))
p++;
@@ -2805,6 +2846,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
typestr++;
if (nb_args >= MAX_ARGS)
goto error_args;
+ qdict_add = has_arg;
args[nb_args++] = (void *)(long)has_arg;
if (!has_arg) {
if (nb_args >= MAX_ARGS)
@@ -2820,15 +2862,27 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
if (nb_args >= MAX_ARGS)
goto error_args;
args[nb_args++] = (void *)(long)val;
+ if (qdict_add)
+ qemu_dict_add(qdict, key, (void *)(long) val);
} else {
+ char *lkey;
if ((nb_args + 1) >= MAX_ARGS)
goto error_args;
+ lkey = key_append_high(key);
#if TARGET_PHYS_ADDR_BITS > 32
args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff);
+ qemu_dict_add(qdict, lkey,
+ (void *)(long)((val >> 32) & 0xffffffff));
+ qemu_free(lkey);
#else
args[nb_args++] = (void *)0;
+ qemu_dict_add(qdict, lkey, (void *)0);
+ qemu_free(lkey);
#endif
args[nb_args++] = (void *)(long)(val & 0xffffffff);
+ lkey = key_append_low(key);
+ qemu_dict_add(qdict, lkey,(void *)(long)(val & 0xffffffff));
+ qemu_free(lkey);
}
}
break;
@@ -2856,6 +2910,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
if (nb_args >= MAX_ARGS)
goto error_args;
args[nb_args++] = (void *)(long)has_option;
+ qemu_dict_add(qdict, key, (void *)(long)has_option);
}
break;
default:
@@ -2930,6 +2985,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
}
fail:
qemu_free(key);
+ qemu_dict_destroy(qdict);
for(i = 0; i < MAX_ARGS; i++)
qemu_free(str_allocated[i]);
}
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 07/25] monitor: Export qemu-dict.h header
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (5 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 06/25] monitor: Setup a dictionary with handler arguments Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 08/25] monitor: New GET_TLONG and GET_TPHYSADDR macros Luiz Capitulino
` (17 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Command handlers will have to use qemu-dict functions, so export
qemu-dict.h through monitor.h.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.h | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/monitor.h b/monitor.h
index f6a43c0..166afce 100644
--- a/monitor.h
+++ b/monitor.h
@@ -3,6 +3,7 @@
#include "qemu-common.h"
#include "qemu-char.h"
+#include "qemu-dict.h"
#include "block.h"
extern Monitor *cur_mon;
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 08/25] monitor: New GET_TLONG and GET_TPHYSADDR macros
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (6 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 07/25] monitor: Export qemu-dict.h header Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 09/25] monitor: Port handler_0 to use the dictionary Luiz Capitulino
` (16 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
When we start porting handlers to use the Monitor's dictionary
to pass argments, we will turn function parameters into automatic
variables.
This will make the build brake when the 32 bits versions of
GET_TLONG and GET_TPHYSADDR are used, because the 'h' argument
will not be used.
The best solution I could think for this problem was changing
both macros to reassign the 'h' parameter when compiled for
32 bits.
I'm open for better solutions, though.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/monitor.c b/monitor.c
index 802edb7..b46df28 100644
--- a/monitor.c
+++ b/monitor.c
@@ -778,7 +778,11 @@ static void memory_dump(Monitor *mon, int count, int format, int wsize,
#if TARGET_LONG_BITS == 64
#define GET_TLONG(h, l) (((uint64_t)(h) << 32) | (l))
#else
-#define GET_TLONG(h, l) (l)
+static inline uint32_t GET_TLONG(uint32_t h, uint32_t l)
+{
+ h = h; /* avoid build error */
+ return l;
+}
#endif
static void do_memory_dump(Monitor *mon, int count, int format, int size,
@@ -791,7 +795,11 @@ static void do_memory_dump(Monitor *mon, int count, int format, int size,
#if TARGET_PHYS_ADDR_BITS > 32
#define GET_TPHYSADDR(h, l) (((uint64_t)(h) << 32) | (l))
#else
-#define GET_TPHYSADDR(h, l) (l)
+static inline uint32_t GET_TPHYSADDR(uint32_t h, uint32_t l)
+{
+ h = h; /* avoid build error */
+ return l;
+}
#endif
static void do_physical_memory_dump(Monitor *mon, int count, int format,
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 09/25] monitor: Port handler_0 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (7 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 08/25] monitor: New GET_TLONG and GET_TPHYSADDR macros Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 10/25] monitor: Port handler_1 " Luiz Capitulino
` (15 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive no arguments to use
the new monitor's dictionary.
It might seem no sense to do this, as the handlers have no arguments,
but at the end of this porting work all handlers will have the same
structure.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
migration.c | 2 +-
migration.h | 3 ++-
monitor.c | 18 +++++++++---------
3 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/migration.c b/migration.c
index ee64d41..024793f 100644
--- a/migration.c
+++ b/migration.c
@@ -72,7 +72,7 @@ void do_migrate(Monitor *mon, int detach, const char *uri)
}
}
-void do_migrate_cancel(Monitor *mon)
+void do_migrate_cancel(Monitor *mon, const struct qemu_dict *qdict)
{
MigrationState *s = current_migration;
diff --git a/migration.h b/migration.h
index 37c7f8e..97c0044 100644
--- a/migration.h
+++ b/migration.h
@@ -15,6 +15,7 @@
#define QEMU_MIGRATION_H
#include "qemu-common.h"
+#include "qemu-dict.h"
#define MIG_STATE_ERROR -1
#define MIG_STATE_COMPLETED 0
@@ -51,7 +52,7 @@ void qemu_start_incoming_migration(const char *uri);
void do_migrate(Monitor *mon, int detach, const char *uri);
-void do_migrate_cancel(Monitor *mon);
+void do_migrate_cancel(Monitor *mon, const struct qemu_dict *qdict);
void do_migrate_set_speed(Monitor *mon, const char *value);
diff --git a/monitor.c b/monitor.c
index b46df28..46b3e0c 100644
--- a/monitor.c
+++ b/monitor.c
@@ -426,7 +426,7 @@ static void do_info_cpu_stats(Monitor *mon)
}
#endif
-static void do_quit(Monitor *mon)
+static void do_quit(Monitor *mon, const struct qemu_dict *qdict)
{
exit(0);
}
@@ -559,7 +559,7 @@ static void do_singlestep(Monitor *mon, const char *option)
}
}
-static void do_stop(Monitor *mon)
+static void do_stop(Monitor *mon, const struct qemu_dict *qdict)
{
vm_stop(EXCP_INTERRUPT);
}
@@ -571,7 +571,7 @@ struct bdrv_iterate_context {
int err;
};
-static void do_cont(Monitor *mon)
+static void do_cont(Monitor *mon, const struct qemu_dict *qdict)
{
struct bdrv_iterate_context context = { mon, 0 };
@@ -587,7 +587,7 @@ static void bdrv_key_cb(void *opaque, int err)
/* another key was set successfully, retry to continue */
if (!err)
- do_cont(mon);
+ do_cont(mon, NULL);
}
static void encrypted_bdrv_it(void *opaque, BlockDriverState *bs)
@@ -1246,12 +1246,12 @@ static void do_boot_set(Monitor *mon, const char *bootdevice)
}
}
-static void do_system_reset(Monitor *mon)
+static void do_system_reset(Monitor *mon, const struct qemu_dict *qdict)
{
qemu_system_reset_request();
}
-static void do_system_powerdown(Monitor *mon)
+static void do_system_powerdown(Monitor *mon, const struct qemu_dict *qdict)
{
qemu_system_powerdown_request();
}
@@ -2638,7 +2638,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *str_allocated[MAX_ARGS];
void *args[MAX_ARGS];
struct qemu_dict *qdict;
- void (*handler_0)(Monitor *mon);
+ void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
void (*handler_1)(Monitor *mon, void *arg0);
void (*handler_2)(Monitor *mon, void *arg0, void *arg1);
void (*handler_3)(Monitor *mon, void *arg0, void *arg1, void *arg2);
@@ -2940,8 +2940,8 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
switch(nb_args) {
case 0:
- handler_0 = cmd->handler;
- handler_0(mon);
+ handler_d = cmd->handler;
+ handler_d(mon, qdict);
break;
case 1:
handler_1 = cmd->handler;
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 10/25] monitor: Port handler_1 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (8 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 09/25] monitor: Port handler_0 to use the dictionary Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:04 ` [Qemu-devel] [PATCH 11/25] monitor: Port handler_2 " Luiz Capitulino
` (14 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive one argument to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
console.h | 3 +-
hw/pci-hotplug.c | 4 +-
migration.c | 6 +++-
migration.h | 4 +-
monitor.c | 66 +++++++++++++++++++++++++++++++----------------------
savevm.c | 10 +++++---
sysemu.h | 13 +++++-----
vl.c | 11 +++++----
8 files changed, 68 insertions(+), 49 deletions(-)
diff --git a/console.h b/console.h
index 3518339..ea9994f 100644
--- a/console.h
+++ b/console.h
@@ -2,6 +2,7 @@
#define CONSOLE_H
#include "qemu-char.h"
+#include "qemu-dict.h"
/* keyboard/mouse support */
@@ -44,7 +45,7 @@ struct MouseTransformInfo {
};
void do_info_mice(Monitor *mon);
-void do_mouse_set(Monitor *mon, int index);
+void do_mouse_set(Monitor *mon, const struct qemu_dict *qdict);
/* keysym is a unicode code except for special keys (see QEMU_KEY_xxx
constants) */
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 335681d..db80fb1 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -199,9 +199,9 @@ void pci_device_hot_remove(Monitor *mon, const char *pci_addr)
qemu_system_device_hot_add(bus, slot, 0);
}
-void do_pci_device_hot_remove(Monitor *mon, const char *pci_addr)
+void do_pci_device_hot_remove(Monitor *mon, const struct qemu_dict *qdict)
{
- pci_device_hot_remove(mon, pci_addr);
+ pci_device_hot_remove(mon, qemu_dict_get(qdict, "pci_addr"));
}
static int pci_match_fn(void *dev_private, void *arg)
diff --git a/migration.c b/migration.c
index 024793f..664ad00 100644
--- a/migration.c
+++ b/migration.c
@@ -80,11 +80,12 @@ void do_migrate_cancel(Monitor *mon, const struct qemu_dict *qdict)
s->cancel(s);
}
-void do_migrate_set_speed(Monitor *mon, const char *value)
+void do_migrate_set_speed(Monitor *mon, const struct qemu_dict *qdict)
{
double d;
char *ptr;
FdMigrationState *s;
+ const char *value = qemu_dict_get(qdict, "value");
d = strtod(value, &ptr);
switch (*ptr) {
@@ -118,10 +119,11 @@ uint64_t migrate_max_downtime(void)
return max_downtime;
}
-void do_migrate_set_downtime(Monitor *mon, const char *value)
+void do_migrate_set_downtime(Monitor *mon, const struct qemu_dict *qdict)
{
char *ptr;
double d;
+ const char *value = qemu_dict_get(qdict, "value");
d = strtod(value, &ptr);
if (!strcmp(ptr,"ms")) {
diff --git a/migration.h b/migration.h
index 97c0044..671e31b 100644
--- a/migration.h
+++ b/migration.h
@@ -54,11 +54,11 @@ void do_migrate(Monitor *mon, int detach, const char *uri);
void do_migrate_cancel(Monitor *mon, const struct qemu_dict *qdict);
-void do_migrate_set_speed(Monitor *mon, const char *value);
+void do_migrate_set_speed(Monitor *mon, const struct qemu_dict *qdict);
uint64_t migrate_max_downtime(void);
-void do_migrate_set_downtime(Monitor *mon, const char *value);
+void do_migrate_set_downtime(Monitor *mon, const struct qemu_dict *qdict);
void do_info_migrate(Monitor *mon);
diff --git a/monitor.c b/monitor.c
index 46b3e0c..4b2a7b5 100644
--- a/monitor.c
+++ b/monitor.c
@@ -254,15 +254,16 @@ static void help_cmd(Monitor *mon, const char *name)
}
}
-static void do_help_cmd(Monitor *mon, const char *name)
+static void do_help_cmd(Monitor *mon, const struct qemu_dict *qdict)
{
- help_cmd(mon, name);
+ help_cmd(mon, qemu_dict_get(qdict, "name"));
}
-static void do_commit(Monitor *mon, const char *device)
+static void do_commit(Monitor *mon, const struct qemu_dict *qdict)
{
int all_devices;
DriveInfo *dinfo;
+ const char *device = qemu_dict_get(qdict, "device");
all_devices = !strcmp(device, "all");
TAILQ_FOREACH(dinfo, &drives, next) {
@@ -273,9 +274,10 @@ static void do_commit(Monitor *mon, const char *device)
}
}
-static void do_info(Monitor *mon, const char *item)
+static void do_info(Monitor *mon, const struct qemu_dict *qdict)
{
const mon_cmd_t *cmd;
+ const char *item = qemu_dict_get(qdict, "item");
void (*handler)(Monitor *);
if (!item)
@@ -387,8 +389,9 @@ static void do_info_cpus(Monitor *mon)
}
}
-static void do_cpu_set(Monitor *mon, int index)
+static void do_cpu_set(Monitor *mon, const struct qemu_dict *qdict)
{
+ long index = (long) qemu_dict_get(qdict, "index");
if (mon_set_cpu(index) < 0)
monitor_printf(mon, "Invalid CPU index\n");
}
@@ -522,19 +525,20 @@ static void do_change(Monitor *mon, const char *device, const char *target,
}
}
-static void do_screen_dump(Monitor *mon, const char *filename)
+static void do_screen_dump(Monitor *mon, const struct qemu_dict *qdict)
{
- vga_hw_screen_dump(filename);
+ vga_hw_screen_dump(qemu_dict_get(qdict, "filename"));
}
-static void do_logfile(Monitor *mon, const char *filename)
+static void do_logfile(Monitor *mon, const struct qemu_dict *qdict)
{
- cpu_set_log_filename(filename);
+ cpu_set_log_filename(qemu_dict_get(qdict, "filename"));
}
-static void do_log(Monitor *mon, const char *items)
+static void do_log(Monitor *mon, const struct qemu_dict *qdict)
{
int mask;
+ const char *items = qemu_dict_get(qdict, "items");
if (!strcmp(items, "none")) {
mask = 0;
@@ -548,8 +552,9 @@ static void do_log(Monitor *mon, const char *items)
cpu_set_log(mask);
}
-static void do_singlestep(Monitor *mon, const char *option)
+static void do_singlestep(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *option = qemu_dict_get(qdict, "option");
if (!option || !strcmp(option, "on")) {
singlestep = 1;
} else if (!strcmp(option, "off")) {
@@ -601,8 +606,9 @@ static void encrypted_bdrv_it(void *opaque, BlockDriverState *bs)
}
}
-static void do_gdbserver(Monitor *mon, const char *device)
+static void do_gdbserver(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *device = qemu_dict_get(qdict, "device");
if (!device)
device = "tcp::" DEFAULT_GDBSTUB_PORT;
if (gdbserver_start(device) < 0) {
@@ -616,8 +622,9 @@ static void do_gdbserver(Monitor *mon, const char *device)
}
}
-static void do_watchdog_action(Monitor *mon, const char *action)
+static void do_watchdog_action(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *action = qemu_dict_get(qdict, "action");
if (select_watchdog_action(action) == -1) {
monitor_printf(mon, "Unknown watchdog action '%s'\n", action);
}
@@ -1175,8 +1182,9 @@ static void do_mouse_move(Monitor *mon, const char *dx_str, const char *dy_str,
kbd_mouse_event(dx, dy, dz, mouse_button_state);
}
-static void do_mouse_button(Monitor *mon, int button_state)
+static void do_mouse_button(Monitor *mon, const struct qemu_dict *qdict)
{
+ long button_state = (long) qemu_dict_get(qdict, "button_state");
mouse_button_state = button_state;
kbd_mouse_event(0, 0, 0, mouse_button_state);
}
@@ -1231,9 +1239,10 @@ static void do_ioport_write(Monitor *mon, int count, int format, int size,
}
}
-static void do_boot_set(Monitor *mon, const char *bootdevice)
+static void do_boot_set(Monitor *mon, const struct qemu_dict *qdict)
{
int res;
+ const char *bootdevice = qemu_dict_get(qdict, "bootdevice");
res = qemu_boot_set(bootdevice);
if (res == 0) {
@@ -1530,9 +1539,10 @@ static void do_info_capture(Monitor *mon)
}
#ifdef HAS_AUDIO
-static void do_stop_capture(Monitor *mon, int n)
+static void do_stop_capture(Monitor *mon, const struct qemu_dict *qdict)
{
int i;
+ long n = (long) qemu_dict_get(qdict, "n");
CaptureState *s;
for (s = capture_head.lh_first, i = 0; s; s = s->entries.le_next, ++i) {
@@ -1567,9 +1577,10 @@ static void do_wav_capture(Monitor *mon, const char *path,
#endif
#if defined(TARGET_I386)
-static void do_inject_nmi(Monitor *mon, int cpu_index)
+static void do_inject_nmi(Monitor *mon, const struct qemu_dict *qdict)
{
CPUState *env;
+ long cpu_index = (long) qemu_dict_get(qdict, "cpu_index");
for (env = first_cpu; env != NULL; env = env->next_cpu)
if (env->cpu_index == cpu_index) {
@@ -1592,8 +1603,9 @@ static void do_info_status(Monitor *mon)
}
-static void do_balloon(Monitor *mon, int value)
+static void do_balloon(Monitor *mon, const struct qemu_dict *qdict)
{
+ long value = (long) qemu_dict_get(qdict, "value");
ram_addr_t target = value;
qemu_balloon(target << 20);
}
@@ -1622,8 +1634,9 @@ static qemu_acl *find_acl(Monitor *mon, const char *name)
return acl;
}
-static void do_acl_show(Monitor *mon, const char *aclname)
+static void do_acl_show(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *aclname = qemu_dict_get(qdict, "aclname");
qemu_acl *acl = find_acl(mon, aclname);
qemu_acl_entry *entry;
int i = 0;
@@ -1639,8 +1652,9 @@ static void do_acl_show(Monitor *mon, const char *aclname)
}
}
-static void do_acl_reset(Monitor *mon, const char *aclname)
+static void do_acl_reset(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *aclname = qemu_dict_get(qdict, "aclname");
qemu_acl *acl = find_acl(mon, aclname);
if (acl) {
@@ -1732,8 +1746,9 @@ static void do_inject_mce(Monitor *mon,
}
#endif
-static void do_getfd(Monitor *mon, const char *fdname)
+static void do_getfd(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *fdname = qemu_dict_get(qdict, "fdname");
mon_fd_t *monfd;
int fd;
@@ -1772,8 +1787,9 @@ static void do_getfd(Monitor *mon, const char *fdname)
LIST_INSERT_HEAD(&mon->fds, monfd, next);
}
-static void do_closefd(Monitor *mon, const char *fdname)
+static void do_closefd(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *fdname = qemu_dict_get(qdict, "fdname");
mon_fd_t *monfd;
LIST_FOREACH(monfd, &mon->fds, next) {
@@ -2639,7 +2655,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_1)(Monitor *mon, void *arg0);
void (*handler_2)(Monitor *mon, void *arg0, void *arg1);
void (*handler_3)(Monitor *mon, void *arg0, void *arg1, void *arg2);
void (*handler_4)(Monitor *mon, void *arg0, void *arg1, void *arg2,
@@ -2940,13 +2955,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
switch(nb_args) {
case 0:
+ case 1:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 1:
- handler_1 = cmd->handler;
- handler_1(mon, args[0]);
- break;
case 2:
handler_2 = cmd->handler;
handler_2(mon, args[0], args[1]);
diff --git a/savevm.c b/savevm.c
index 9f988e6..01f29b8 100644
--- a/savevm.c
+++ b/savevm.c
@@ -1048,7 +1048,7 @@ static int bdrv_snapshot_find(BlockDriverState *bs, QEMUSnapshotInfo *sn_info,
return ret;
}
-void do_savevm(Monitor *mon, const char *name)
+void do_savevm(Monitor *mon, const struct qemu_dict *qdict)
{
DriveInfo *dinfo;
BlockDriverState *bs, *bs1;
@@ -1062,6 +1062,7 @@ void do_savevm(Monitor *mon, const char *name)
#else
struct timeval tv;
#endif
+ const char *name = qemu_dict_get(qdict, "name");
bs = get_bs_snapshots();
if (!bs) {
@@ -1217,16 +1218,17 @@ void qemu_loadvm(Monitor *mon, const char *name)
vm_start();
}
-void do_loadvm(Monitor *mon, const char *name)
+void do_loadvm(Monitor *mon, const struct qemu_dict *qdict)
{
- qemu_loadvm(mon, name);
+ qemu_loadvm(mon, qemu_dict_get(qdict, "name"));
}
-void do_delvm(Monitor *mon, const char *name)
+void do_delvm(Monitor *mon, const struct qemu_dict *qdict)
{
DriveInfo *dinfo;
BlockDriverState *bs, *bs1;
int ret;
+ const char *name = qemu_dict_get(qdict, "name");
bs = get_bs_snapshots();
if (!bs) {
diff --git a/sysemu.h b/sysemu.h
index ebc42ed..6e0c4f9 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -5,6 +5,7 @@
#include "qemu-common.h"
#include "qemu-option.h"
#include "sys-queue.h"
+#include "qemu-dict.h"
#ifdef _WIN32
#include <windows.h>
@@ -57,10 +58,10 @@ void qemu_system_powerdown(void);
#endif
void qemu_system_reset(void);
-void do_savevm(Monitor *mon, const char *name);
-void do_loadvm(Monitor *mon, const char *name);
+void do_savevm(Monitor *mon, const struct qemu_dict *qdict);
+void do_loadvm(Monitor *mon, const struct qemu_dict *qdict);
void qemu_loadvm(Monitor *mon, const char *name);
-void do_delvm(Monitor *mon, const char *name);
+void do_delvm(Monitor *mon, const struct qemu_dict *qdict);
void do_info_snapshots(Monitor *mon);
void qemu_announce_self(void);
@@ -211,8 +212,8 @@ void destroy_bdrvs(dev_match_fn *match_fn, void *arg);
void pci_device_hot_add(Monitor *mon, const char *pci_addr, const char *type,
const char *opts);
void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts);
-void do_pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
+void do_pci_device_hot_remove(Monitor *mon, const struct qemu_dict *qdict);
void pci_device_hot_remove_success(int pcibus, int slot);
/* serial ports */
@@ -268,8 +269,8 @@ struct soundhw {
extern struct soundhw soundhw[];
#endif
-void do_usb_add(Monitor *mon, const char *devname);
-void do_usb_del(Monitor *mon, const char *devname);
+void do_usb_add(Monitor *mon, const struct qemu_dict *qdict);
+void do_usb_del(Monitor *mon, const struct qemu_dict *qdict);
void usb_info(Monitor *mon);
void register_devices(void);
diff --git a/vl.c b/vl.c
index 337be63..624c79f 100644
--- a/vl.c
+++ b/vl.c
@@ -478,10 +478,11 @@ void do_info_mice(Monitor *mon)
}
}
-void do_mouse_set(Monitor *mon, int index)
+void do_mouse_set(Monitor *mon, const struct qemu_dict *qdict)
{
QEMUPutMouseEntry *cursor;
int i = 0;
+ long index = (long) qemu_dict_get(qdict, "index");
if (!qemu_put_mouse_event_head) {
monitor_printf(mon, "No mouse devices connected\n");
@@ -2587,14 +2588,14 @@ static int usb_parse(const char *cmdline)
return usb_device_add(cmdline, 0);
}
-void do_usb_add(Monitor *mon, const char *devname)
+void do_usb_add(Monitor *mon, const struct qemu_dict *qdict)
{
- usb_device_add(devname, 1);
+ usb_device_add(qemu_dict_get(qdict, "devname"), 1);
}
-void do_usb_del(Monitor *mon, const char *devname)
+void do_usb_del(Monitor *mon, const struct qemu_dict *qdict)
{
- usb_device_del(devname);
+ usb_device_del(qemu_dict_get(qdict, "devname"));
}
void usb_info(Monitor *mon)
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 11/25] monitor: Port handler_2 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (9 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 10/25] monitor: Port handler_1 " Luiz Capitulino
@ 2009-07-28 22:04 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 12/25] monitor: Port handler_3 " Luiz Capitulino
` (13 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:04 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive two arguments to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
hw/pci-hotplug.c | 4 +++-
migration.c | 4 +++-
migration.h | 2 +-
monitor.c | 23 +++++++++++++----------
net.c | 13 ++++++++++---
net.h | 7 ++++---
sysemu.h | 2 +-
7 files changed, 35 insertions(+), 20 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index db80fb1..07d240f 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -48,7 +48,7 @@ static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon,
return pci_nic_init(&nd_table[ret], "rtl8139", devaddr);
}
-void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
+void drive_hot_add(Monitor *mon, const struct qemu_dict *qdict)
{
int dom, pci_bus;
unsigned slot;
@@ -56,6 +56,8 @@ void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts)
int success = 0;
PCIDevice *dev;
DriveInfo *dinfo;
+ const char *pci_addr = qemu_dict_get(qdict, "pci_addr");
+ const char *opts = qemu_dict_get(qdict, "opts");
if (pci_read_devaddr(mon, pci_addr, &dom, &pci_bus, &slot)) {
return;
diff --git a/migration.c b/migration.c
index 664ad00..9e51b27 100644
--- a/migration.c
+++ b/migration.c
@@ -48,10 +48,12 @@ void qemu_start_incoming_migration(const char *uri)
fprintf(stderr, "unknown migration protocol: %s\n", uri);
}
-void do_migrate(Monitor *mon, int detach, const char *uri)
+void do_migrate(Monitor *mon, const struct qemu_dict *qdict)
{
MigrationState *s = NULL;
const char *p;
+ long detach = (long) qemu_dict_get(qdict, "detach");
+ const char *uri = qemu_dict_get(qdict, "uri");
if (strstart(uri, "tcp:", &p))
s = tcp_start_outgoing_migration(p, max_throttle, detach);
diff --git a/migration.h b/migration.h
index 671e31b..111627e 100644
--- a/migration.h
+++ b/migration.h
@@ -50,7 +50,7 @@ struct FdMigrationState
void qemu_start_incoming_migration(const char *uri);
-void do_migrate(Monitor *mon, int detach, const char *uri);
+void do_migrate(Monitor *mon, const struct qemu_dict *qdict);
void do_migrate_cancel(Monitor *mon, const struct qemu_dict *qdict);
diff --git a/monitor.c b/monitor.c
index 4b2a7b5..1937837 100644
--- a/monitor.c
+++ b/monitor.c
@@ -452,9 +452,11 @@ static int eject_device(Monitor *mon, BlockDriverState *bs, int force)
return 0;
}
-static void do_eject(Monitor *mon, int force, const char *filename)
+static void do_eject(Monitor *mon, const struct qemu_dict *qdict)
{
BlockDriverState *bs;
+ long force = (long) qemu_dict_get(qdict, "force");
+ const char *filename = qemu_dict_get(qdict, "filename");
bs = bdrv_find(filename);
if (!bs) {
@@ -920,11 +922,13 @@ static void do_physical_memory_save(Monitor *mon, unsigned int valh,
fclose(f);
}
-static void do_sum(Monitor *mon, uint32_t start, uint32_t size)
+static void do_sum(Monitor *mon, const struct qemu_dict *qdict)
{
uint32_t addr;
uint8_t buf[1];
uint16_t sum;
+ uint32_t start = (long) qemu_dict_get(qdict, "start");
+ uint32_t size = (long) qemu_dict_get(qdict, "size");
sum = 0;
for(addr = start; addr < (start + size); addr++) {
@@ -1663,9 +1667,10 @@ static void do_acl_reset(Monitor *mon, const struct qemu_dict *qdict)
}
}
-static void do_acl_policy(Monitor *mon, const char *aclname,
- const char *policy)
+static void do_acl_policy(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *aclname = qemu_dict_get(qdict, "aclname");
+ const char *policy = qemu_dict_get(qdict, "policy");
qemu_acl *acl = find_acl(mon, aclname);
if (acl) {
@@ -1710,8 +1715,10 @@ static void do_acl_add(Monitor *mon, const char *aclname,
}
}
-static void do_acl_remove(Monitor *mon, const char *aclname, const char *match)
+static void do_acl_remove(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *aclname = qemu_dict_get(qdict, "aclname");
+ const char *match = qemu_dict_get(qdict, "match");
qemu_acl *acl = find_acl(mon, aclname);
int ret;
@@ -2655,7 +2662,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_2)(Monitor *mon, void *arg0, void *arg1);
void (*handler_3)(Monitor *mon, void *arg0, void *arg1, void *arg2);
void (*handler_4)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3);
@@ -2956,13 +2962,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
switch(nb_args) {
case 0:
case 1:
+ case 2:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 2:
- handler_2 = cmd->handler;
- handler_2(mon, args[0], args[1]);
- break;
case 3:
handler_3 = cmd->handler;
handler_3(mon, args[0], args[1], args[2]);
diff --git a/net.c b/net.c
index 1b531e7..2fedd13 100644
--- a/net.c
+++ b/net.c
@@ -2827,8 +2827,11 @@ static int net_host_check_device(const char *device)
return 0;
}
-void net_host_device_add(Monitor *mon, const char *device, const char *opts)
+void net_host_device_add(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *device = qemu_dict_get(qdict, "device");
+ const char *opts = qemu_dict_get(qdict, "opts");
+
if (!net_host_check_device(device)) {
monitor_printf(mon, "invalid host network device %s\n", device);
return;
@@ -2838,9 +2841,11 @@ void net_host_device_add(Monitor *mon, const char *device, const char *opts)
}
}
-void net_host_device_remove(Monitor *mon, int vlan_id, const char *device)
+void net_host_device_remove(Monitor *mon, const struct qemu_dict *qdict)
{
VLANClientState *vc;
+ long vlan_id = (long) qemu_dict_get(qdict, "vlan_id");
+ const char *device = qemu_dict_get(qdict, "device");
vc = qemu_find_vlan_client_by_name(mon, vlan_id, device);
if (!vc) {
@@ -2905,10 +2910,12 @@ void do_info_network(Monitor *mon)
}
}
-void do_set_link(Monitor *mon, const char *name, const char *up_or_down)
+void do_set_link(Monitor *mon, const struct qemu_dict *qdict)
{
VLANState *vlan;
VLANClientState *vc = NULL;
+ const char *name = qemu_dict_get(qdict, "name");
+ const char *up_or_down = qemu_dict_get(qdict, "up_or_down");
for (vlan = first_vlan; vlan != NULL; vlan = vlan->next)
for (vc = vlan->first_client; vc != NULL; vc = vc->next)
diff --git a/net.h b/net.h
index 3ac9e8c..e982868 100644
--- a/net.h
+++ b/net.h
@@ -2,6 +2,7 @@
#define QEMU_NET_H
#include "qemu-common.h"
+#include "qemu-dict.h"
/* VLANs support */
@@ -79,7 +80,7 @@ void qemu_check_nic_model_list(NICInfo *nd, const char * const *models,
void qemu_handler_true(void *opaque);
void do_info_network(Monitor *mon);
-void do_set_link(Monitor *mon, const char *name, const char *up_or_down);
+void do_set_link(Monitor *mon, const struct qemu_dict *qdict);
void do_info_usernet(Monitor *mon);
@@ -144,8 +145,8 @@ void net_slirp_redir(const char *redir_str);
void net_cleanup(void);
void net_client_check(void);
void net_set_boot_mask(int boot_mask);
-void net_host_device_add(Monitor *mon, const char *device, const char *opts);
-void net_host_device_remove(Monitor *mon, int vlan_id, const char *device);
+void net_host_device_add(Monitor *mon, const struct qemu_dict *qdict);
+void net_host_device_remove(Monitor *mon, const struct qemu_dict *qdict);
#define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
#define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
diff --git a/sysemu.h b/sysemu.h
index 6e0c4f9..730cc1e 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -211,7 +211,7 @@ void destroy_bdrvs(dev_match_fn *match_fn, void *arg);
/* pci-hotplug */
void pci_device_hot_add(Monitor *mon, const char *pci_addr, const char *type,
const char *opts);
-void drive_hot_add(Monitor *mon, const char *pci_addr, const char *opts);
+void drive_hot_add(Monitor *mon, const struct qemu_dict *qdict);
void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void do_pci_device_hot_remove(Monitor *mon, const struct qemu_dict *qdict);
void pci_device_hot_remove_success(int pcibus, int slot);
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 12/25] monitor: Port handler_3 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (10 preceding siblings ...)
2009-07-28 22:04 ` [Qemu-devel] [PATCH 11/25] monitor: Port handler_2 " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 13/25] monitor: Port handler_4 " Luiz Capitulino
` (12 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive three arguments to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
hw/pci-hotplug.c | 6 ++++--
monitor.c | 24 +++++++++++++-----------
net.c | 12 ++++++++----
net.h | 6 ++----
sysemu.h | 3 +--
5 files changed, 28 insertions(+), 23 deletions(-)
diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c
index 07d240f..d3fb232 100644
--- a/hw/pci-hotplug.c
+++ b/hw/pci-hotplug.c
@@ -147,10 +147,12 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon,
return dev;
}
-void pci_device_hot_add(Monitor *mon, const char *pci_addr, const char *type,
- const char *opts)
+void pci_device_hot_add(Monitor *mon, const struct qemu_dict *qdict)
{
PCIDevice *dev = NULL;
+ const char *pci_addr = qemu_dict_get(qdict, "pci_addr");
+ const char *type = qemu_dict_get(qdict, "type");
+ const char *opts = qemu_dict_get(qdict, "opts");
/* strip legacy tag */
if (!strncmp(pci_addr, "pci_addr=", 9)) {
diff --git a/monitor.c b/monitor.c
index 1937837..07fc14a 100644
--- a/monitor.c
+++ b/monitor.c
@@ -517,9 +517,11 @@ static void do_change_vnc(Monitor *mon, const char *target, const char *arg)
}
}
-static void do_change(Monitor *mon, const char *device, const char *target,
- const char *arg)
+static void do_change(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *device = qemu_dict_get(qdict, "device");
+ const char *target = qemu_dict_get(qdict, "target");
+ const char *arg = qemu_dict_get(qdict, "arg");
if (strcmp(device, "vnc") == 0) {
do_change_vnc(mon, target, arg);
} else {
@@ -1120,12 +1122,14 @@ static void release_keys(void *opaque)
}
}
-static void do_sendkey(Monitor *mon, const char *string, int has_hold_time,
- int hold_time)
+static void do_sendkey(Monitor *mon, const struct qemu_dict *qdict)
{
char keyname_buf[16];
char *separator;
int keyname_len, keycode, i;
+ const char *string = qemu_dict_get(qdict, "string");
+ int has_hold_time = qemu_dict_exists(qdict, "hold_time");
+ long hold_time = (long) qemu_dict_get(qdict, "hold_time");
if (nb_pending_keycodes > 0) {
qemu_del_timer(key_timer);
@@ -1174,10 +1178,12 @@ static void do_sendkey(Monitor *mon, const char *string, int has_hold_time,
static int mouse_button_state;
-static void do_mouse_move(Monitor *mon, const char *dx_str, const char *dy_str,
- const char *dz_str)
+static void do_mouse_move(Monitor *mon, const struct qemu_dict *qdict)
{
int dx, dy, dz;
+ const char *dx_str = qemu_dict_get(qdict, "dx_str");
+ const char *dy_str = qemu_dict_get(qdict, "dy_str");
+ const char *dz_str = qemu_dict_get(qdict, "dz_str");
dx = strtol(dx_str, NULL, 0);
dy = strtol(dy_str, NULL, 0);
dz = 0;
@@ -2662,7 +2668,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_3)(Monitor *mon, void *arg0, void *arg1, void *arg2);
void (*handler_4)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3);
void (*handler_5)(Monitor *mon, void *arg0, void *arg1, void *arg2,
@@ -2963,13 +2968,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
case 0:
case 1:
case 2:
+ case 3:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 3:
- handler_3 = cmd->handler;
- handler_3(mon, args[0], args[1], args[2]);
- break;
case 4:
handler_4 = cmd->handler;
handler_4(mon, args[0], args[1], args[2], args[3]);
diff --git a/net.c b/net.c
index 2fedd13..e260efa 100644
--- a/net.c
+++ b/net.c
@@ -903,8 +903,7 @@ static SlirpState *slirp_lookup(Monitor *mon, const char *vlan,
}
}
-void net_slirp_hostfwd_remove(Monitor *mon, const char *arg1,
- const char *arg2, const char *arg3)
+void net_slirp_hostfwd_remove(Monitor *mon, const struct qemu_dict *qdict)
{
struct in_addr host_addr = { .s_addr = INADDR_ANY };
int host_port;
@@ -913,6 +912,9 @@ void net_slirp_hostfwd_remove(Monitor *mon, const char *arg1,
SlirpState *s;
int is_udp = 0;
int err;
+ const char *arg1 = qemu_dict_get(qdict, "arg1");
+ const char *arg2 = qemu_dict_get(qdict, "arg2");
+ const char *arg3 = qemu_dict_get(qdict, "arg3");
if (arg2) {
s = slirp_lookup(mon, arg1, arg2);
@@ -1022,11 +1024,13 @@ static void slirp_hostfwd(SlirpState *s, Monitor *mon, const char *redir_str,
config_error(mon, "invalid host forwarding rule '%s'\n", redir_str);
}
-void net_slirp_hostfwd_add(Monitor *mon, const char *arg1,
- const char *arg2, const char *arg3)
+void net_slirp_hostfwd_add(Monitor *mon, const struct qemu_dict *qdict)
{
const char *redir_str;
SlirpState *s;
+ const char *arg1 = qemu_dict_get(qdict, "arg1");
+ const char *arg2 = qemu_dict_get(qdict, "arg2");
+ const char *arg3 = qemu_dict_get(qdict, "arg3");
if (arg2) {
s = slirp_lookup(mon, arg1, arg2);
diff --git a/net.h b/net.h
index e982868..8cc5e64 100644
--- a/net.h
+++ b/net.h
@@ -137,10 +137,8 @@ int net_client_init(Monitor *mon, const char *device, const char *p);
void net_client_uninit(NICInfo *nd);
int net_client_parse(const char *str);
void net_slirp_smb(const char *exported_dir);
-void net_slirp_hostfwd_add(Monitor *mon, const char *arg1,
- const char *arg2, const char *arg3);
-void net_slirp_hostfwd_remove(Monitor *mon, const char *arg1,
- const char *arg2, const char *arg3);
+void net_slirp_hostfwd_add(Monitor *mon, const struct qemu_dict *qdict);
+void net_slirp_hostfwd_remove(Monitor *mon, const struct qemu_dict *qdict);
void net_slirp_redir(const char *redir_str);
void net_cleanup(void);
void net_client_check(void);
diff --git a/sysemu.h b/sysemu.h
index 730cc1e..86dee65 100644
--- a/sysemu.h
+++ b/sysemu.h
@@ -209,8 +209,7 @@ void destroy_nic(dev_match_fn *match_fn, void *arg);
void destroy_bdrvs(dev_match_fn *match_fn, void *arg);
/* pci-hotplug */
-void pci_device_hot_add(Monitor *mon, const char *pci_addr, const char *type,
- const char *opts);
+void pci_device_hot_add(Monitor *mon, const struct qemu_dict *qdict);
void drive_hot_add(Monitor *mon, const struct qemu_dict *qdict);
void pci_device_hot_remove(Monitor *mon, const char *pci_addr);
void do_pci_device_hot_remove(Monitor *mon, const struct qemu_dict *qdict);
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 13/25] monitor: Port handler_4 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (11 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 12/25] monitor: Port handler_3 " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 14/25] monitor: Port handler_5 " Luiz Capitulino
` (11 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive four arguments to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 22 +++++++++++-----------
1 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/monitor.c b/monitor.c
index 07fc14a..f9ab788 100644
--- a/monitor.c
+++ b/monitor.c
@@ -867,10 +867,13 @@ static void do_print(Monitor *mon, int count, int format, int size,
monitor_printf(mon, "\n");
}
-static void do_memory_save(Monitor *mon, unsigned int valh, unsigned int vall,
- uint32_t size, const char *filename)
+static void do_memory_save(Monitor *mon, const struct qemu_dict *qdict)
{
FILE *f;
+ unsigned int valh = (long) qemu_dict_get(qdict, "val_h");
+ unsigned int vall = (long) qemu_dict_get(qdict, "val_l");
+ uint32_t size = (long) qemu_dict_get(qdict, "size");
+ const char *filename = qemu_dict_get(qdict, "filename");
target_long addr = GET_TLONG(valh, vall);
uint32_t l;
CPUState *env;
@@ -897,13 +900,15 @@ static void do_memory_save(Monitor *mon, unsigned int valh, unsigned int vall,
fclose(f);
}
-static void do_physical_memory_save(Monitor *mon, unsigned int valh,
- unsigned int vall, uint32_t size,
- const char *filename)
+static void do_physical_memory_save(Monitor *mon, const struct qemu_dict *qdict)
{
FILE *f;
uint32_t l;
uint8_t buf[1024];
+ unsigned int valh = (long) qemu_dict_get(qdict, "val_h");
+ unsigned int vall = (long) qemu_dict_get(qdict, "val_l");
+ uint32_t size = (long) qemu_dict_get(qdict, "size");
+ const char *filename = qemu_dict_get(qdict, "filename");
target_phys_addr_t addr = GET_TPHYSADDR(valh, vall);
f = fopen(filename, "wb");
@@ -2668,8 +2673,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_4)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3);
void (*handler_5)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3, void *arg4);
void (*handler_6)(Monitor *mon, void *arg0, void *arg1, void *arg2,
@@ -2969,13 +2972,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
case 1:
case 2:
case 3:
+ case 4:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 4:
- handler_4 = cmd->handler;
- handler_4(mon, args[0], args[1], args[2], args[3]);
- break;
case 5:
handler_5 = cmd->handler;
handler_5(mon, args[0], args[1], args[2], args[3], args[4]);
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 14/25] monitor: Port handler_5 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (12 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 13/25] monitor: Port handler_4 " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 15/25] monitor: Port handler_6 " Luiz Capitulino
` (10 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive five arguments to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 49 +++++++++++++++++++++++++++++++------------------
1 files changed, 31 insertions(+), 18 deletions(-)
diff --git a/monitor.c b/monitor.c
index f9ab788..3729ee1 100644
--- a/monitor.c
+++ b/monitor.c
@@ -796,9 +796,14 @@ static inline uint32_t GET_TLONG(uint32_t h, uint32_t l)
}
#endif
-static void do_memory_dump(Monitor *mon, int count, int format, int size,
- uint32_t addrh, uint32_t addrl)
+static void do_memory_dump(Monitor *mon, const struct qemu_dict *qdict)
{
+ long count = (long) qemu_dict_get(qdict, "count");
+ long format = (long) qemu_dict_get(qdict, "format");
+ long size = (long) qemu_dict_get(qdict, "size");
+
+ uint32_t addrh = (long) qemu_dict_get(qdict, "addr_h");
+ uint32_t addrl = (long) qemu_dict_get(qdict, "addr_l");
target_long addr = GET_TLONG(addrh, addrl);
memory_dump(mon, count, format, size, addr, 0);
}
@@ -813,17 +818,24 @@ static inline uint32_t GET_TPHYSADDR(uint32_t h, uint32_t l)
}
#endif
-static void do_physical_memory_dump(Monitor *mon, int count, int format,
- int size, uint32_t addrh, uint32_t addrl)
-
+static void do_physical_memory_dump(Monitor *mon, const struct qemu_dict *qdict)
{
+ long count = (long) qemu_dict_get(qdict, "count");
+ long format = (long) qemu_dict_get(qdict, "format");
+ long size = (long) qemu_dict_get(qdict, "size");
+ uint32_t addrh = (long) qemu_dict_get(qdict, "addr_h");
+ uint32_t addrl = (long) qemu_dict_get(qdict, "addr_l");
+
target_phys_addr_t addr = GET_TPHYSADDR(addrh, addrl);
memory_dump(mon, count, format, size, addr, 1);
}
-static void do_print(Monitor *mon, int count, int format, int size,
- unsigned int valh, unsigned int vall)
+static void do_print(Monitor *mon, const struct qemu_dict *qdict)
{
+ long format = (long) qemu_dict_get(qdict, "format");
+ unsigned int valh = (long) qemu_dict_get(qdict, "val_h");
+ unsigned int vall = (long) qemu_dict_get(qdict, "val_l");
+
target_phys_addr_t val = GET_TPHYSADDR(valh, vall);
#if TARGET_PHYS_ADDR_BITS == 32
switch(format) {
@@ -1235,9 +1247,12 @@ static void do_ioport_read(Monitor *mon, int count, int format, int size,
suffix, addr, size * 2, val);
}
-static void do_ioport_write(Monitor *mon, int count, int format, int size,
- int addr, int val)
+static void do_ioport_write(Monitor *mon, const struct qemu_dict *qdict)
{
+ long size = (long) qemu_dict_get(qdict, "size");
+ long addr = (long) qemu_dict_get(qdict, "addr");
+ long val = (long) qemu_dict_get(qdict, "val");
+
addr &= IOPORTS_MASK;
switch (size) {
@@ -1698,10 +1713,13 @@ static void do_acl_policy(Monitor *mon, const struct qemu_dict *qdict)
}
}
-static void do_acl_add(Monitor *mon, const char *aclname,
- const char *match, const char *policy,
- int has_index, int index)
+static void do_acl_add(Monitor *mon, const struct qemu_dict *qdict)
{
+ const char *aclname = qemu_dict_get(qdict, "aclname");
+ const char *match = qemu_dict_get(qdict, "match");
+ const char *policy = qemu_dict_get(qdict, "policy");
+ int has_index = qemu_dict_exists(qdict, "index");
+ long index = (long) qemu_dict_get(qdict, "index");
qemu_acl *acl = find_acl(mon, aclname);
int deny, ret;
@@ -2673,8 +2691,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_5)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3, void *arg4);
void (*handler_6)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3, void *arg4, void *arg5);
void (*handler_7)(Monitor *mon, void *arg0, void *arg1, void *arg2,
@@ -2973,13 +2989,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
case 2:
case 3:
case 4:
+ case 5:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 5:
- handler_5 = cmd->handler;
- handler_5(mon, args[0], args[1], args[2], args[3], args[4]);
- break;
case 6:
handler_6 = cmd->handler;
handler_6(mon, args[0], args[1], args[2], args[3], args[4], args[5]);
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 15/25] monitor: Port handler_6 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (13 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 14/25] monitor: Port handler_5 " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 16/25] monitor: Port handler_7 " Luiz Capitulino
` (9 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive six arguments to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 14 ++++++--------
1 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/monitor.c b/monitor.c
index 3729ee1..ed6b201 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1216,9 +1216,12 @@ static void do_mouse_button(Monitor *mon, const struct qemu_dict *qdict)
kbd_mouse_event(0, 0, 0, mouse_button_state);
}
-static void do_ioport_read(Monitor *mon, int count, int format, int size,
- int addr, int has_index, int index)
+static void do_ioport_read(Monitor *mon, const struct qemu_dict *qdict)
{
+ int size = (long) qemu_dict_get(qdict, "size");
+ int addr = (long) qemu_dict_get(qdict, "addr");
+ int has_index = qemu_dict_exists(qdict, "index");
+ long index = (long) qemu_dict_get(qdict, "index");
uint32_t val;
int suffix;
@@ -2691,8 +2694,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_6)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3, void *arg4, void *arg5);
void (*handler_7)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3, void *arg4, void *arg5, void *arg6);
void (*handler_8)(Monitor *mon, void *arg0, void *arg1, void *arg2,
@@ -2990,13 +2991,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
case 3:
case 4:
case 5:
+ case 6:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 6:
- handler_6 = cmd->handler;
- handler_6(mon, args[0], args[1], args[2], args[3], args[4], args[5]);
- break;
case 7:
handler_7 = cmd->handler;
handler_7(mon, args[0], args[1], args[2], args[3], args[4], args[5],
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 16/25] monitor: Port handler_7 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (14 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 15/25] monitor: Port handler_6 " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 17/25] monitor: Drop handler_8 and handler_9 handling Luiz Capitulino
` (8 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive seven arguments to
use the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 22 ++++++++++------------
1 files changed, 10 insertions(+), 12 deletions(-)
diff --git a/monitor.c b/monitor.c
index ed6b201..be5471e 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1588,11 +1588,15 @@ static void do_stop_capture(Monitor *mon, const struct qemu_dict *qdict)
}
}
-static void do_wav_capture(Monitor *mon, const char *path,
- int has_freq, int freq,
- int has_bits, int bits,
- int has_channels, int nchannels)
-{
+static void do_wav_capture(Monitor *mon, const struct qemu_dict *qdict)
+{
+ const char *path = qemu_dict_get(qdict, "path");
+ int has_freq = qemu_dict_exists(qdict, "freq");
+ long freq = (long) qemu_dict_get(qdict, "freq");
+ int has_bits = qemu_dict_exists(qdict, "bits");
+ long bits = (long) qemu_dict_get(qdict, "bits");
+ int has_channels = qemu_dict_exists(qdict, "nchannels");
+ long nchannels = (long) qemu_dict_get(qdict, "nchannels");
CaptureState *s;
s = qemu_mallocz (sizeof (*s));
@@ -2694,8 +2698,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_7)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3, void *arg4, void *arg5, void *arg6);
void (*handler_8)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3, void *arg4, void *arg5, void *arg6,
void *arg7);
@@ -2992,14 +2994,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
case 4:
case 5:
case 6:
+ case 7:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 7:
- handler_7 = cmd->handler;
- handler_7(mon, args[0], args[1], args[2], args[3], args[4], args[5],
- args[6]);
- break;
case 8:
handler_8 = cmd->handler;
handler_8(mon, args[0], args[1], args[2], args[3], args[4], args[5],
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 17/25] monitor: Drop handler_8 and handler_9 handling
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (15 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 16/25] monitor: Port handler_7 " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 18/25] monitor: Port handler_10 to use the dictionary Luiz Capitulino
` (7 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Commit 79c4f6b08009a1d23177c2be8bd003253cf3686a added handler_8 and
handler_9 handling, but there isn't any command handler with those
number of arguments.
Just drop them.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 16 ----------------
1 files changed, 0 insertions(+), 16 deletions(-)
diff --git a/monitor.c b/monitor.c
index be5471e..790d814 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2698,12 +2698,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_8)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3, void *arg4, void *arg5, void *arg6,
- void *arg7);
- void (*handler_9)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3, void *arg4, void *arg5, void *arg6,
- void *arg7, void *arg8);
void (*handler_10)(Monitor *mon, void *arg0, void *arg1, void *arg2,
void *arg3, void *arg4, void *arg5, void *arg6,
void *arg7, void *arg8, void *arg9);
@@ -2998,16 +2992,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 8:
- handler_8 = cmd->handler;
- handler_8(mon, args[0], args[1], args[2], args[3], args[4], args[5],
- args[6], args[7]);
- break;
- case 9:
- handler_9 = cmd->handler;
- handler_9(mon, args[0], args[1], args[2], args[3], args[4], args[5],
- args[6], args[7], args[8]);
- break;
case 10:
handler_10 = cmd->handler;
handler_10(mon, args[0], args[1], args[2], args[3], args[4], args[5],
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 18/25] monitor: Port handler_10 to use the dictionary
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (16 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 17/25] monitor: Drop handler_8 and handler_9 handling Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 19/25] monitor: Split monitor_handle_command() Luiz Capitulino
` (6 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit ports command handlers that receive ten arguments to use
the new monitor's dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 26 ++++++++++++--------------
1 files changed, 12 insertions(+), 14 deletions(-)
diff --git a/monitor.c b/monitor.c
index 790d814..93793b8 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1768,14 +1768,19 @@ static void do_acl_remove(Monitor *mon, const struct qemu_dict *qdict)
}
#if defined(TARGET_I386)
-static void do_inject_mce(Monitor *mon,
- int cpu_index, int bank,
- unsigned status_hi, unsigned status_lo,
- unsigned mcg_status_hi, unsigned mcg_status_lo,
- unsigned addr_hi, unsigned addr_lo,
- unsigned misc_hi, unsigned misc_lo)
+static void do_inject_mce(Monitor *mon, const struct qemu_dict *qdict)
{
CPUState *cenv;
+ long cpu_index = (long) qemu_dict_get(qdict, "cpu_index");
+ long bank = (long) qemu_dict_get(qdict, "bank");
+ unsigned status_hi = (long) qemu_dict_get(qdict, "status_h");
+ unsigned status_lo = (long) qemu_dict_get(qdict, "status_l");
+ unsigned mcg_status_hi = (long) qemu_dict_get(qdict, "mcg_status_h");
+ unsigned mcg_status_lo = (long) qemu_dict_get(qdict, "mcg_status_l");
+ unsigned addr_hi = (long) qemu_dict_get(qdict, "addr_h");
+ unsigned addr_lo = (long) qemu_dict_get(qdict, "addr_l");
+ unsigned misc_hi = (long) qemu_dict_get(qdict, "misc_h");
+ unsigned misc_lo = (long) qemu_dict_get(qdict, "misc_l");
uint64_t status = ((uint64_t)status_hi << 32) | status_lo;
uint64_t mcg_status = ((uint64_t)mcg_status_hi << 32) | mcg_status_lo;
uint64_t addr = ((uint64_t)addr_hi << 32) | addr_lo;
@@ -2698,9 +2703,6 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
void *args[MAX_ARGS];
struct qemu_dict *qdict;
void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
- void (*handler_10)(Monitor *mon, void *arg0, void *arg1, void *arg2,
- void *arg3, void *arg4, void *arg5, void *arg6,
- void *arg7, void *arg8, void *arg9);
#ifdef DEBUG
monitor_printf(mon, "command='%s'\n", cmdline);
@@ -2989,14 +2991,10 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
case 5:
case 6:
case 7:
+ case 10:
handler_d = cmd->handler;
handler_d(mon, qdict);
break;
- case 10:
- handler_10 = cmd->handler;
- handler_10(mon, args[0], args[1], args[2], args[3], args[4], args[5],
- args[6], args[7], args[8], args[9]);
- break;
default:
monitor_printf(mon, "unsupported number of arguments: %d\n", nb_args);
goto fail;
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 19/25] monitor: Split monitor_handle_command()
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (17 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 18/25] monitor: Port handler_10 to use the dictionary Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-29 15:31 ` [Qemu-devel] " Paolo Bonzini
2009-07-28 22:05 ` [Qemu-devel] [PATCH 20/25] monitor: Add a new index for str_allocated[] Luiz Capitulino
` (5 subsequent siblings)
24 siblings, 1 reply; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
In order to help the integration with unit-tests and having a better
design, this commit splits monitor_handle_command() into two parts.
The parsing code is moved to a function called monitor_parse_command(),
while allocating memory and calling the handler is still done by
monitor_handle_command().
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 64 +++++++++++++++++++++++++++++++-----------------------------
1 files changed, 33 insertions(+), 31 deletions(-)
diff --git a/monitor.c b/monitor.c
index 93793b8..123f42d 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2691,18 +2691,18 @@ static int default_fmt_size = 4;
#define MAX_ARGS 16
-static void monitor_handle_command(Monitor *mon, const char *cmdline)
+static const mon_cmd_t *monitor_parse_command(Monitor *mon,
+ const char *cmdline,
+ void *str_allocated[],
+ struct qemu_dict *qdict)
{
const char *p, *typestr;
- int c, nb_args, i, has_arg;
+ int c, nb_args, has_arg;
const mon_cmd_t *cmd;
char cmdname[256];
char buf[1024];
char *key;
- void *str_allocated[MAX_ARGS];
void *args[MAX_ARGS];
- struct qemu_dict *qdict;
- void (*handler_d)(Monitor *mon, const struct qemu_dict *qdict);
#ifdef DEBUG
monitor_printf(mon, "command='%s'\n", cmdline);
@@ -2711,7 +2711,7 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
/* extract the command name */
p = get_command_name(cmdline, cmdname, sizeof(cmdname));
if (!p)
- return;
+ return NULL;
/* find the command */
for(cmd = mon_cmds; cmd->name != NULL; cmd++) {
@@ -2721,14 +2721,9 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
if (cmd->name == NULL) {
monitor_printf(mon, "unknown command: '%s'\n", cmdname);
- return;
+ return NULL;
}
- qdict = qemu_dict_create();
-
- for(i = 0; i < MAX_ARGS; i++)
- str_allocated[i] = NULL;
-
/* parse the parameters */
typestr = cmd->args_type;
nb_args = 0;
@@ -2982,27 +2977,34 @@ static void monitor_handle_command(Monitor *mon, const char *cmdline)
goto fail;
}
- switch(nb_args) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
- case 10:
- handler_d = cmd->handler;
- handler_d(mon, qdict);
- break;
- default:
- monitor_printf(mon, "unsupported number of arguments: %d\n", nb_args);
- goto fail;
- }
- fail:
+ return cmd;
+
+fail:
qemu_free(key);
+ return NULL;
+}
+
+static void monitor_handle_command(Monitor *mon, const char *cmdline)
+{
+ int i;
+ const mon_cmd_t *cmd;
+ struct qemu_dict *qdict;
+ void *str_allocated[MAX_ARGS];
+
+ qdict = qemu_dict_create();
+
+ for (i = 0; i < MAX_ARGS; i++)
+ str_allocated[i] = NULL;
+
+ cmd = monitor_parse_command(mon, cmdline, str_allocated, qdict);
+ if (cmd) {
+ void (*handler)(Monitor *mon, const struct qemu_dict *qdict);
+ handler = cmd->handler;
+ handler(mon, qdict);
+ }
+
qemu_dict_destroy(qdict);
- for(i = 0; i < MAX_ARGS; i++)
+ for (i = 0; i < MAX_ARGS; i++)
qemu_free(str_allocated[i]);
}
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 19/25] monitor: Split monitor_handle_command()
2009-07-28 22:05 ` [Qemu-devel] [PATCH 19/25] monitor: Split monitor_handle_command() Luiz Capitulino
@ 2009-07-29 15:31 ` Paolo Bonzini
2009-07-29 15:44 ` Luiz Capitulino
0 siblings, 1 reply; 55+ messages in thread
From: Paolo Bonzini @ 2009-07-29 15:31 UTC (permalink / raw)
To: Luiz Capitulino; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel, avi
> + if (cmd) {
> + void (*handler)(Monitor *mon, const struct qemu_dict *qdict);
> + handler = cmd->handler;
> + handler(mon, qdict);
> + }
I'd prefer cmd->handler(mon, qdict). One less place to change if you
change the arguments later.
Paolo
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] Re: [PATCH 19/25] monitor: Split monitor_handle_command()
2009-07-29 15:31 ` [Qemu-devel] " Paolo Bonzini
@ 2009-07-29 15:44 ` Luiz Capitulino
0 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-29 15:44 UTC (permalink / raw)
To: Paolo Bonzini; +Cc: jan.kiszka, aliguori, dlaor, qemu-devel, avi
On Wed, 29 Jul 2009 17:31:54 +0200
Paolo Bonzini <bonzini@gnu.org> wrote:
>
> > + if (cmd) {
> > + void (*handler)(Monitor *mon, const struct qemu_dict *qdict);
> > + handler = cmd->handler;
> > + handler(mon, qdict);
> > + }
>
> I'd prefer cmd->handler(mon, qdict). One less place to change if you
> change the arguments later.
Yes, but this will be improved later, because info() handlers also
use struct mon_cmd_t. This change is a bit beyond this patchset's
goal.
^ permalink raw reply [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 20/25] monitor: Add a new index for str_allocated[]
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (18 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 19/25] monitor: Split monitor_handle_command() Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 21/25] monitor: Drop args[] from monitor_parse_command() Luiz Capitulino
` (4 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This commit adds a new variable to serve as 'str_allocated[]'s index.
The reason for this is that next commits will drop 'args[]' and
'nb_args', but we will stay with 'str_allocated[]' as we have to
keep track of allocated strings.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/monitor.c b/monitor.c
index 123f42d..04cd94f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2697,7 +2697,7 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
struct qemu_dict *qdict)
{
const char *p, *typestr;
- int c, nb_args, has_arg;
+ int c, nb_args, has_arg, str_idx;
const mon_cmd_t *cmd;
char cmdname[256];
char buf[1024];
@@ -2726,7 +2726,7 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
/* parse the parameters */
typestr = cmd->args_type;
- nb_args = 0;
+ nb_args = str_idx = 0;
for(;;) {
typestr = key_get_info(typestr, &key);
if (!typestr)
@@ -2770,7 +2770,7 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
}
str = qemu_malloc(strlen(buf) + 1);
pstrcpy(str, sizeof(buf), buf);
- str_allocated[nb_args] = str;
+ str_allocated[str_idx++] = str;
add_str:
if (nb_args >= MAX_ARGS) {
error_args:
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 21/25] monitor: Drop args[] from monitor_parse_command()
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (19 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 20/25] monitor: Add a new index for str_allocated[] Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 22/25] monitor: Drop 'nb_args' " Luiz Capitulino
` (3 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Arguments are now passed through a dictionary.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 47 +++++++++++++++++------------------------------
1 files changed, 17 insertions(+), 30 deletions(-)
diff --git a/monitor.c b/monitor.c
index 04cd94f..2f5025c 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2697,12 +2697,11 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
struct qemu_dict *qdict)
{
const char *p, *typestr;
- int c, nb_args, has_arg, str_idx;
+ int c, nb_args, str_idx;
const mon_cmd_t *cmd;
char cmdname[256];
char buf[1024];
char *key;
- void *args[MAX_ARGS];
#ifdef DEBUG
monitor_printf(mon, "command='%s'\n", cmdline);
@@ -2777,9 +2776,10 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
monitor_printf(mon, "%s: too many arguments\n", cmdname);
goto fail;
}
- args[nb_args++] = str;
- if (str)
+ if (str) {
qemu_dict_add(qdict, key, str);
+ nb_args++;
+ }
}
break;
case '/':
@@ -2858,78 +2858,65 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
}
if (nb_args + 3 > MAX_ARGS)
goto error_args;
- args[nb_args++] = (void*)(long)count;
- args[nb_args++] = (void*)(long)format;
- args[nb_args++] = (void*)(long)size;
qemu_dict_add(qdict, "count", (void*)(long)count);
qemu_dict_add(qdict, "format", (void*)(long)format);
qemu_dict_add(qdict, "size", (void*)(long)size);
+ nb_args += 3;
}
break;
case 'i':
case 'l':
{
int64_t val;
- int qdict_add = 1;
while (qemu_isspace(*p))
p++;
if (*typestr == '?' || *typestr == '.') {
if (*typestr == '?') {
- if (*p == '\0')
- has_arg = 0;
- else
- has_arg = 1;
+ if (*p == '\0') {
+ typestr++;
+ break;
+ }
} else {
if (*p == '.') {
p++;
while (qemu_isspace(*p))
p++;
- has_arg = 1;
} else {
- has_arg = 0;
+ typestr++;
+ break;
}
}
typestr++;
if (nb_args >= MAX_ARGS)
goto error_args;
- qdict_add = has_arg;
- args[nb_args++] = (void *)(long)has_arg;
- if (!has_arg) {
- if (nb_args >= MAX_ARGS)
- goto error_args;
- val = -1;
- goto add_num;
- }
}
if (get_expr(mon, &val, &p))
goto fail;
- add_num:
if (c == 'i') {
if (nb_args >= MAX_ARGS)
goto error_args;
- args[nb_args++] = (void *)(long)val;
- if (qdict_add)
- qemu_dict_add(qdict, key, (void *)(long) val);
+ qemu_dict_add(qdict, key, (void *)(long) val);
+ nb_args++;
} else {
char *lkey;
if ((nb_args + 1) >= MAX_ARGS)
goto error_args;
lkey = key_append_high(key);
#if TARGET_PHYS_ADDR_BITS > 32
- args[nb_args++] = (void *)(long)((val >> 32) & 0xffffffff);
qemu_dict_add(qdict, lkey,
(void *)(long)((val >> 32) & 0xffffffff));
qemu_free(lkey);
+ nb_args++;
#else
- args[nb_args++] = (void *)0;
qemu_dict_add(qdict, lkey, (void *)0);
qemu_free(lkey);
+ nb_args++;
#endif
- args[nb_args++] = (void *)(long)(val & 0xffffffff);
lkey = key_append_low(key);
qemu_dict_add(qdict, lkey,(void *)(long)(val & 0xffffffff));
qemu_free(lkey);
+ nb_args++;
}
}
break;
@@ -2956,8 +2943,8 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
}
if (nb_args >= MAX_ARGS)
goto error_args;
- args[nb_args++] = (void *)(long)has_option;
qemu_dict_add(qdict, key, (void *)(long)has_option);
+ nb_args++;
}
break;
default:
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 22/25] monitor: Drop 'nb_args' from monitor_parse_command()
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (20 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 21/25] monitor: Drop args[] from monitor_parse_command() Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 23/25] Add check support Luiz Capitulino
` (2 subsequent siblings)
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
As far as I could understand nb_args is used to control additions
to the (already removed and fixed sized) args[] array.
As the qemu-dict is a dynamic data structure we don't need this.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
monitor.c | 30 ++++++------------------------
1 files changed, 6 insertions(+), 24 deletions(-)
diff --git a/monitor.c b/monitor.c
index 2f5025c..ecaffce 100644
--- a/monitor.c
+++ b/monitor.c
@@ -2697,7 +2697,7 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
struct qemu_dict *qdict)
{
const char *p, *typestr;
- int c, nb_args, str_idx;
+ int c, str_idx;
const mon_cmd_t *cmd;
char cmdname[256];
char buf[1024];
@@ -2725,7 +2725,7 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
/* parse the parameters */
typestr = cmd->args_type;
- nb_args = str_idx = 0;
+ str_idx = 0;
for(;;) {
typestr = key_get_info(typestr, &key);
if (!typestr)
@@ -2771,14 +2771,12 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
pstrcpy(str, sizeof(buf), buf);
str_allocated[str_idx++] = str;
add_str:
- if (nb_args >= MAX_ARGS) {
- error_args:
- monitor_printf(mon, "%s: too many arguments\n", cmdname);
- goto fail;
- }
if (str) {
+ if (str_idx >= MAX_ARGS) {
+ monitor_printf(mon, "%s: too many arguments\n",cmdname);
+ goto fail;
+ }
qemu_dict_add(qdict, key, str);
- nb_args++;
}
}
break;
@@ -2856,12 +2854,9 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
size = -1;
}
}
- if (nb_args + 3 > MAX_ARGS)
- goto error_args;
qemu_dict_add(qdict, "count", (void*)(long)count);
qemu_dict_add(qdict, "format", (void*)(long)format);
qemu_dict_add(qdict, "size", (void*)(long)size);
- nb_args += 3;
}
break;
case 'i':
@@ -2888,35 +2883,25 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
}
}
typestr++;
- if (nb_args >= MAX_ARGS)
- goto error_args;
}
if (get_expr(mon, &val, &p))
goto fail;
if (c == 'i') {
- if (nb_args >= MAX_ARGS)
- goto error_args;
qemu_dict_add(qdict, key, (void *)(long) val);
- nb_args++;
} else {
char *lkey;
- if ((nb_args + 1) >= MAX_ARGS)
- goto error_args;
lkey = key_append_high(key);
#if TARGET_PHYS_ADDR_BITS > 32
qemu_dict_add(qdict, lkey,
(void *)(long)((val >> 32) & 0xffffffff));
qemu_free(lkey);
- nb_args++;
#else
qemu_dict_add(qdict, lkey, (void *)0);
qemu_free(lkey);
- nb_args++;
#endif
lkey = key_append_low(key);
qemu_dict_add(qdict, lkey,(void *)(long)(val & 0xffffffff));
qemu_free(lkey);
- nb_args++;
}
}
break;
@@ -2941,10 +2926,7 @@ static const mon_cmd_t *monitor_parse_command(Monitor *mon,
p++;
has_option = 1;
}
- if (nb_args >= MAX_ARGS)
- goto error_args;
qemu_dict_add(qdict, key, (void *)(long)has_option);
- nb_args++;
}
break;
default:
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 23/25] Add check support
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (21 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 22/25] monitor: Drop 'nb_args' " Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 24/25] Introduce dictionary test data file Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 25/25] Introduce qemu-dict unit-tests Luiz Capitulino
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
Check is a unit testing framework for C.
New monitor code and qemu-dict have unit-tests written with it,
so we have to link against it.
More info can be found at:
http://check.sourceforge.net/
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
Makefile | 4 ++++
configure | 32 ++++++++++++++++++++++++++++++++
2 files changed, 36 insertions(+), 0 deletions(-)
diff --git a/Makefile b/Makefile
index b36786d..e63f09d 100644
--- a/Makefile
+++ b/Makefile
@@ -214,6 +214,10 @@ qemu-img$(EXESUF) qemu-nbd$(EXESUF) qemu-io$(EXESUF): LIBS += -lz
qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
$(call quiet-command,sh $(SRC_PATH)/hxtool -h < $< > $@," GEN $@")
+ifdef CONFIG_CHECK
+LIBS += $(CHECK_LIBS)
+endif
+
clean:
# avoid old build problems by removing potentially incorrect old files
rm -f config.mak config.h op-i386.h opc-i386.h gen-op-i386.h op-arm.h opc-arm.h gen-op-arm.h
diff --git a/configure b/configure
index 8160bed..dc2cdd2 100755
--- a/configure
+++ b/configure
@@ -190,6 +190,7 @@ build_docs="yes"
uname_release=""
curses="yes"
curl="yes"
+check="no"
pthread="yes"
aio="yes"
io_thread="no"
@@ -503,6 +504,8 @@ for opt do
;;
--disable-curl) curl="no"
;;
+ --enable-check) check="yes"
+ ;;
--disable-nptl) nptl="no"
;;
--enable-mixemu) mixemu="yes"
@@ -651,6 +654,7 @@ echo " --disable-vnc-tls disable TLS encryption for VNC server"
echo " --disable-vnc-sasl disable SASL encryption for VNC server"
echo " --disable-curses disable curses output"
echo " --disable-curl disable curl connectivity"
+echo " --enable-check enable check unit-tests"
echo " --disable-bluez disable bluez stack connectivity"
echo " --disable-kvm disable KVM acceleration support"
echo " --disable-nptl disable usermode NPTL support"
@@ -1132,6 +1136,25 @@ EOF
fi # test "$curl"
##########################################
+# check probe
+
+if test "$check" = "yes" ; then
+ `pkg-config --libs check > /dev/null 2> /dev/null` || check="no"
+fi
+
+if test "$check" = "yes" ; then
+ check="no"
+ cat > $TMPC << EOF
+#include <check.h>
+int main(void) { suite_create("yeah"); return 0; }
+EOF
+ check_libs=`pkg-config --libs check`
+ if $cc ${ARCH_CFLAGS} $check_libs -o $TMPE $TMPC > /dev/null 2> /dev/null ; then
+ check="yes"
+ fi
+fi # test "$check"
+
+##########################################
# bluez support probe
if test "$bluez" = "yes" ; then
`pkg-config bluez 2> /dev/null` || bluez="no"
@@ -1438,6 +1461,7 @@ fi
echo "SDL support $sdl"
echo "curses support $curses"
echo "curl support $curl"
+echo "check support $check"
echo "mingw32 support $mingw32"
echo "Audio drivers $audio_drv_list"
echo "Extra audio cards $audio_card_list"
@@ -1646,6 +1670,11 @@ if test "$curl" = "yes" ; then
echo "CONFIG_CURL=y" >> $config_host_mak
echo "CURL_LIBS=$curl_libs" >> $config_host_mak
fi
+if test "$check" = "yes" ; then
+ echo "CONFIG_CHECK=y" >> $config_host_mak
+ echo "CHECK_LIBS=$check_libs" >> $config_host_mak
+ echo "#define CONFIG_CHECK 1" >> $config_host_h
+fi
if test "$brlapi" = "yes" ; then
echo "CONFIG_BRLAPI=y" >> $config_host_mak
echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
@@ -1735,6 +1764,9 @@ if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then
tools="qemu-img\$(EXESUF) $tools"
if [ "$linux" = "yes" ] ; then
tools="qemu-nbd\$(EXESUF) qemu-io\$(EXESUF) $tools"
+ if [ "$check" = "yes" ]; then
+ tools="$tools"
+ fi
fi
fi
echo "TOOLS=$tools" >> $config_host_mak
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 24/25] Introduce dictionary test data file
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (22 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 23/25] Add check support Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
2009-07-28 22:05 ` [Qemu-devel] [PATCH 25/25] Introduce qemu-dict unit-tests Luiz Capitulino
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This file is used by the dictionary stress test, it adds 5k nodes
on the dictionary and performs all the possible operations.
My original file had 21k entries and almost 400k of size. After
some discussion with Eduardo Habkost, I decided to reduce the
size.
There are ways to generate this kind of data dynamically, but
it has its problems too, like not generating good random keys.
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
qdict-test-data.txt | 4999 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 4999 insertions(+), 0 deletions(-)
create mode 100644 qdict-test-data.txt
diff --git a/qdict-test-data.txt b/qdict-test-data.txt
new file mode 100644
index 0000000..122fda4
--- /dev/null
+++ b/qdict-test-data.txt
@@ -0,0 +1,4999 @@
+00-INDEX: 333
+07: 4096
+1040.bin.ihex: 92633
+11d.c: 17874
+11d.h: 2386
+1200.bin.ihex: 14717
+12160.bin.ihex: 77829
+1232ea962bbaf0e909365f4964f6cceb2ba8ce: 298
+1280.bin.ihex: 88220
+15562512ca6cf14c1b8f08e09d5907118deaf0: 297
+17: 4096
+1d: 4096
+1.Intro: 14968
+21142.c: 8591
+21285.c: 11721
+2860_main_dev.c: 33854
+2860_rtmp_init.c: 26170
+2870_main_dev.c: 39352
+2870_rtmp_init.c: 51247
+2.Process: 22356
+300vtbl.h: 43771
+310vtbl.h: 59655
+3270.ChangeLog: 1889
+3270.txt: 10964
+3550.bin.ihex: 13916
+3780i.c: 21485
+3780i.h: 14180
+38C0800.bin.ihex: 14772
+38C1600.bin.ihex: 17504
+3C359.bin.ihex: 69044
+3c359.c: 60161
+3c359.h: 7264
+3c359.txt: 2463
+3c501.c: 23869
+3c501.h: 2623
+3c503.c: 22491
+3c503.h: 3880
+3c505.c: 48605
+3c505.h: 6535
+3c505.txt: 1831
+3c507.c: 28758
+3c509.c: 42879
+3c509.txt: 9006
+3c515.c: 49671
+3c523.c: 39251
+3c523.h: 11169
+3c527.c: 43065
+3c527.h: 1482
+3c574_cs.c: 35859
+3c589_cs.c: 30110
+3c59x.c: 103272
+3CCFEM556.cis.ihex: 469
+3com: 4096
+3CXEM556.cis.ihex: 463
+3.Early-stage: 9993
+3w-9xxx.c: 77318
+3w-9xxx.h: 26357
+3w-xxxx.c: 85227
+3w-xxxx.h: 16846
+40x: 4096
+40x_mmu.c: 4082
+42: 4096
+44x: 4096
+44x.c: 3615
+44x_emulate.c: 4512
+44x.h: 448
+44x_mmu.c: 2966
+44x_tlb.c: 13997
+44x_tlb.h: 2465
+4.Coding: 20212
+4level-fixup.h: 1028
+4xx: 4096
+4xx.c: 16297
+4xx.h: 1174
+512x: 4096
+5206: 4096
+5206e: 4096
+520x: 4096
+523x: 4096
+5249: 4096
+5272: 4096
+527x: 4096
+528x: 4096
+52xx: 4096
+5307: 4096
+532x: 4096
+53c700.c: 71188
+53c700_d.h_shipped: 28887
+53c700.h: 16652
+53c700.scr: 10894
+53c700.txt: 5042
+5407: 4096
+57xx_iscsi_constants.h: 7004
+57xx_iscsi_hsi.h: 36895
+5d: 4096
+5.Posting: 15211
+66b00c9dc3e1e071bde0ebfeadc40bbc1e8316: 298
+68328: 4096
+68328fb.c: 13570
+68328serial.c: 35841
+68328serial.h: 6237
+68360: 4096
+68360serial.c: 76262
+68EZ328: 4096
+68VZ328: 4096
+6c5e45fe4f1c83df9429b7c2668b41446baac2: 297
+6.Followthrough: 11745
+6pack.c: 24715
+6pack.txt: 7940
+6xx-suspend.S: 1086
+712_defconfig: 25531
+7206: 4096
+73: 4096
+7343: 4096
+770x: 4096
+7721: 4096
+7722: 4096
+7724: 4096
+7751: 4096
+7780: 4096
+7990.c: 22036
+7990.h: 10421
+7.AdvancedTopics: 9648
+7c: 4096
+7segled.c: 2698
+802: 4096
+80211core: 4096
+80211hdr.h: 12326
+80211mgr.c: 28179
+80211mgr.h: 23006
+8021q: 4096
+8139cp.c: 56138
+8139too.c: 71384
+8250_accent.c: 1071
+8250_acorn.c: 3194
+8250_boca.c: 1301
+8250.c: 83003
+8250_early.c: 6636
+8250_exar_st16c554.c: 1191
+8250_fourport.c: 1216
+8250_gsc.c: 3620
+8250.h: 2432
+8250_hp300.c: 7797
+8250_hub6.c: 1224
+8250_mca.c: 1375
+8250_pci.c: 93521
+8250_pci.h: 999
+8250-platform.c: 1091
+8250_pnp.c: 14783
+8253.h: 10999
+8253pit.h: 48
+8255.c: 10692
+8255.h: 1805
+82571.c: 48377
+82596.c: 41209
+82xx: 4096
+8390.c: 2094
+8390.h: 9629
+8390p.c: 2248
+83xx: 4096
+83xx-512x-pci.txt: 1323
+85xx: 4096
+86xx: 4096
+87: 4096
+8b: 4096
+8.Conclusion: 3137
+8xx: 4096
+8xx_immap.h: 14089
+8xxx_gpio.txt: 1343
+941a7798a5169ee0dd69a9e8d5c40ceb702023: 298
+9600.bin.ihex: 14715
+9p: 4096
+9p.h: 13443
+9p.txt: 5113
+a100u2w.c: 36919
+a100u2w.h: 16936
+a2065.c: 20730
+a2065.h: 5135
+a2091.c: 6445
+a2091.h: 1712
+a20.c: 3548
+a20r.c: 5261
+a3000.c: 6528
+a3000.h: 1807
+a3d.c: 11335
+a4000t.c: 3579
+a500_defconfig: 31440
+a800.c: 5950
+aachba.c: 84424
+aaci.c: 27297
+aaci.h: 7022
+aacraid: 4096
+aacraid.h: 53671
+aacraid.txt: 6849
+aaec2000.h: 8936
+aaed2000.c: 2298
+aaed2000.h: 1354
+aaed2000_kbd.c: 5059
+aarp.c: 25379
+ab3100-core.c: 22600
+ab3100.h: 3510
+abdac.c: 15469
+ABI: 4096
+abi.h: 782
+abituguru: 3731
+abituguru3: 2493
+abituguru3.c: 41974
+abituguru.c: 53440
+abituguru-datasheet: 12294
+abi.txt: 1413
+ABI.txt: 1413
+ablkcipher.c: 9484
+abort-ev4.S: 882
+abort-ev4t.S: 913
+abort-ev5tj.S: 987
+abort-ev5t.S: 912
+abort-ev6.S: 1320
+abort-ev7.S: 774
+abort-lv4t.S: 6546
+abort-macro.S: 1144
+abort-nommu.S: 462
+abs_addr.h: 1800
+abspath.c: 2808
+abs.S: 238
+abyss.c: 11197
+abyss.h: 1550
+ac3200.c: 11838
+ac97: 4096
+ac97_bus.c: 1681
+ac97.c: 4489
+ac97c.c: 26095
+ac97c.h: 2045
+ac97_codec.c: 36925
+ac97_codec.h: 15115
+ac97.h: 507
+ac97_id.h: 2422
+ac97_local.h: 1689
+ac97_patch.c: 128568
+ac97_patch.h: 4386
+ac97_pcm.c: 21244
+ac97_proc.c: 18243
+acadia_defconfig: 23272
+acadia.dts: 5188
+ac.c: 9202
+accel.c: 8625
+accel.h: 5627
+access.c: 10521
+accessibility: 4096
+access_ok.h: 1305
+accommon.h: 2825
+acconfig.h: 7688
+accounting: 4096
+acct.c: 17700
+acct.h: 5949
+acdebug.h: 6836
+acdispat.h: 10988
+acecad.c: 7982
+acenic: 4096
+acenic.c: 88166
+acenic.h: 16029
+acenv.h: 11821
+acerhdf.c: 14909
+acer-wmi.c: 30530
+acer-wmi.txt: 6480
+acevents.h: 6692
+acexcep.h: 12764
+acgcc.h: 2843
+acglobal.h: 14485
+achware.h: 4355
+acinterp.h: 16329
+ackvec.c: 12985
+ackvec.h: 3426
+acl7225b.c: 3794
+acl.c: 5321
+acl.h: 1548
+aclinux.h: 5049
+aclocal.h: 34614
+acmacros.h: 22966
+acm.txt: 4974
+acnames.h: 3482
+acnamesp.h: 10211
+acobject.h: 16573
+acopcode.h: 22365
+acorn.c: 12206
+acornfb.c: 35783
+acornfb.h: 4809
+acorn.h: 623
+acornscsi.c: 87770
+acornscsi.h: 9694
+acornscsi-io.S: 3320
+acoutput.h: 10925
+acparser.h: 7436
+acpi: 4096
+acpi_bus.h: 11195
+acpi.c: 6529
+acpica: 12288
+acpi-cpufreq.c: 21588
+acpi_drivers.h: 5322
+acpi-ext.c: 2774
+acpi-ext.h: 590
+acpi.h: 4768
+acpi_memhotplug.c: 14832
+acpi_numa.h: 471
+acpiosxf.h: 7880
+acpi_pcihp.c: 14898
+acpiphp_core.c: 10949
+acpiphp_glue.c: 44065
+acpiphp.h: 6325
+acpiphp_ibm.c: 14740
+acpi_pm.c: 6723
+acpi_pmtmr.h: 672
+acpi-processor.c: 1893
+acpixf.h: 12045
+acpredef.h: 18909
+acquirewdt.c: 8920
+acresrc.h: 11064
+acrestyp.h: 11267
+acs5k_defconfig: 28786
+acs5k_tiny_defconfig: 21413
+acstruct.h: 7738
+act2000: 4096
+act2000.h: 6271
+act2000_isa.c: 11978
+act2000_isa.h: 7615
+act200l-sir.c: 7142
+actables.h: 3945
+act_api.c: 23712
+act_api.h: 4195
+actbl1.h: 35761
+actbl.h: 15492
+act_gact.c: 5493
+action.c: 40
+action.h: 40
+act_ipt.c: 7564
+actisys-sir.c: 7692
+active_mm.txt: 3805
+act_mirred.c: 6285
+act_nat.c: 7265
+act_pedit.c: 6148
+act_police.c: 9833
+act_simple.c: 5238
+act_skbedit.c: 5510
+actypes.h: 34263
+acutils.h: 16898
+acx.c: 16590
+acx.h: 33552
+ad1816a: 4096
+ad1816a.c: 8825
+ad1816a.h: 5363
+ad1816a_lib.c: 30656
+ad1843.c: 16402
+ad1843.h: 1516
+ad1848: 4096
+ad1848.c: 75959
+ad1848.h: 982
+ad1848_mixer.h: 10957
+ad1889.c: 27048
+ad1889.h: 8073
+ad1980.c: 8427
+ad1980.h: 468
+ad73311.c: 2765
+ad73311.h: 2404
+ad7414.c: 7164
+ad7418.c: 8304
+ad7877.c: 20856
+ad7877.h: 796
+ad7879.c: 19019
+ad7879.h: 1004
+adaptec: 4096
+adapter.h: 400
+adb.c: 19706
+adb.h: 2770
+adbhid.c: 35627
+adb-iop.c: 6325
+adb_iop.h: 1081
+adc.c: 8573
+adc.h: 886
+ADC-LH7-Touchscreen: 2187
+adcxx.c: 8256
+adder875.c: 3142
+adder875_defconfig: 21956
+adder875-redboot.dts: 4102
+adder875-uboot.dts: 4072
+addi_amcc_S5920.c: 7563
+addi_amcc_S5920.h: 1016
+addi_amcc_s5933.h: 13296
+addi_apci_035.c: 128
+addi_apci_1032.c: 63
+addi_apci_1500.c: 63
+addi_apci_1516.c: 63
+addi_apci_1564.c: 63
+addi_apci_16xx.c: 63
+addi_apci_1710.c: 63
+addi_apci_2016.c: 63
+addi_apci_2032.c: 63
+addi_apci_2200.c: 63
+addi_apci_3001.c: 63
+addi_apci_3120.c: 63
+addi_apci_3200.c: 63
+addi_apci_3300.c: 63
+addi_apci_3501.c: 63
+addi_apci_3xxx.c: 63
+addi_apci_all.c: 468
+addi_common.c: 57084
+addi_common.h: 15536
+addi-data: 4096
+addi_eeprom.c: 35657
+addinitrd.c: 3837
+addnote.c: 5117
+addon_cpuid_features.c: 3269
+addRamDisk.c: 9120
+addr.c: 13176
+addrconf.c: 112491
+addrconf_core.c: 2484
+addrconf.h: 7261
+address.c: 10451
+addr.h: 615
+addrlabel.c: 14012
+addr-map.c: 3725
+addr-map.h: 1054
+addrs.h: 14810
+addrspace.h: 4233
+adfs: 4096
+adfs_fs.h: 1337
+adfs.h: 5064
+adfs.txt: 1816
+adi.c: 14310
+adlib.c: 3006
+adl_pci6208.c: 11803
+adl_pci7296.c: 4671
+adl_pci7432.c: 5617
+adl_pci8164.c: 9991
+adl_pci9111.c: 38266
+adl_pci9118.c: 69079
+adm1021: 4184
+adm1021.c: 14057
+adm1025: 2364
+adm1025.c: 19865
+adm1026: 4578
+adm1026.c: 60096
+adm1029.c: 13774
+adm1031: 1193
+adm1031.c: 31209
+adm8211.c: 56115
+adm8211.h: 18093
+adm9240: 6804
+adm9240.c: 24112
+adma.c: 5497
+adma.h: 13803
+adq12b.c: 12147
+ads7828: 1146
+ads7828.c: 8084
+ads7846.c: 31008
+ads7846.h: 1844
+ADSBitsy: 1396
+adssphere.c: 1810
+adt7462: 2515
+adt7462.c: 60645
+adt7470: 2759
+adt7470.c: 42397
+adt7473: 2757
+adt7473.c: 35779
+adt7475: 2578
+adt7475.c: 35318
+adummy.c: 3035
+adutux.c: 25427
+adv7170.c: 9645
+adv7175.c: 10457
+adv7343.c: 12608
+adv7343.h: 730
+adv7343_regs.h: 5764
+advansys: 4096
+advansys.c: 382572
+advansys.txt: 9492
+advantechwdt.c: 8222
+adv_pci1710.c: 46220
+adv_pci1723.c: 12975
+adv_pci_dio.c: 34130
+ae7400074d449189d41fceb6d6f871490d7842: 298
+aead.c: 12873
+aead.h: 2027
+aec62xx.c: 9392
+aedsp16.c: 36369
+ael1002.c: 41054
+aer: 4096
+aerdrv_acpi.c: 1347
+aerdrv.c: 8935
+aerdrv_core.c: 22958
+aerdrv_errprint.c: 5915
+aerdrv.h: 3468
+aer.h: 773
+aer_inject.c: 10715
+aes.c: 11973
+aes_ccm.c: 3589
+aes_ccm.h: 810
+aes_ccmp.c: 14024
+aes_ccmp.h: 1469
+aes_cmac.c: 2737
+aes_cmac.h: 587
+aes_generic.c: 63316
+aes_glue.c: 1691
+aes.h: 279
+aes-i586-asm_32.S: 10637
+aesni-intel_asm.S: 21991
+aesni-intel_glue.c: 19525
+aes_s390.c: 13814
+aes-x86_64-asm_64.S: 4820
+af802154.h: 1271
+af9005.c: 28215
+af9005-fe.c: 36514
+af9005.h: 120579
+af9005-remote.c: 4403
+af9005-script.h: 5193
+af9013.c: 38083
+af9013.h: 3095
+af9013_priv.h: 21508
+af9015.c: 43153
+af9015.h: 28439
+af_ax25.c: 45160
+af_bluetooth.c: 10089
+af_can.c: 23294
+af_can.h: 4053
+af_decnet.c: 54945
+afeb9260_defconfig: 29783
+af_econet.c: 25853
+affs: 4096
+affs.h: 10590
+affs_hardblocks.h: 1481
+affs.txt: 8188
+af_ieee802154.c: 8683
+af_ieee802154.h: 1620
+af_inet6.c: 29847
+af_inet.c: 40041
+af_ipx.c: 50967
+af_irda.c: 67827
+af_irda.h: 2964
+af_iucv.c: 41285
+af_iucv.h: 2495
+af_key.c: 102229
+af_llc.c: 29863
+af_netlink.c: 46590
+af_netrom.c: 33634
+af_packet.c: 55964
+af_phonet.c: 10845
+af_rds.c: 14309
+af_rose.c: 39337
+af_rxrpc.c: 20908
+af_rxrpc.h: 2017
+afs: 4096
+afs.c: 6434
+afs_cm.h: 1213
+afs_fs.h: 2342
+afs.h: 6110
+afs.txt: 7976
+afs_vl.h: 3680
+af_unix.c: 53673
+af_unix.h: 1891
+af_x25.c: 38538
+agent.c: 6214
+agent.h: 2106
+agg-rx.c: 10061
+agg-tx.c: 19983
+agnx: 4096
+agnx.h: 4414
+agp: 4096
+agp_backend.h: 909
+agpgart.h: 6567
+agp.h: 11594
+ah4.c: 7802
+ah6.c: 13438
+aha152x.c: 100462
+aha152x_core.c: 61
+aha152x.h: 10175
+aha152x_stub.c: 7843
+aha152x.txt: 6540
+aha1542.c: 50376
+aha1542.h: 4776
+aha1740.c: 19608
+aha1740.h: 4954
+ahash.c: 5607
+ahb.c: 4740
+ah.c: 3493
+ahci.c: 82058
+ah.h: 894
+aic7770.c: 9851
+aic7770_osm.c: 4437
+aic79xx_core.c: 299904
+aic79xx.h: 46803
+aic79xx_inline.h: 5997
+aic79xx_osm.c: 79947
+aic79xx_osm.h: 21300
+aic79xx_osm_pci.c: 10626
+aic79xx_pci.c: 27694
+aic79xx_pci.h: 3106
+aic79xx_proc.c: 10559
+aic79xx.reg: 73912
+aic79xx_reg.h_shipped: 71718
+aic79xx_reg_print.c_shipped: 19691
+aic79xx.seq: 72735
+aic79xx_seq.h_shipped: 29327
+aic79xx.txt: 24091
+aic7xxx: 4096
+aic7xxx_93cx6.c: 9761
+aic7xxx_93cx6.h: 3670
+aic7xxx_core.c: 216583
+aic7xxx.h: 42160
+aic7xxx_inline.h: 3774
+aic7xxx_old: 4096
+aic7xxx_old.c: 366880
+aic7xxx_old.txt: 24500
+aic7xxx_osm.c: 73118
+aic7xxx_osm.h: 21353
+aic7xxx_osm_pci.c: 12355
+aic7xxx_pci.c: 61842
+aic7xxx_pci.h: 5296
+aic7xxx_proc.c: 10950
+aic7xxx.reg: 38137
+aic7xxx_reg.h: 15305
+aic7xxx_reg.h_shipped: 23099
+aic7xxx_reg_print.c_shipped: 10818
+aic7xxx.seq: 70499
+aic7xxx_seq.c: 20747
+aic7xxx_seq.h_shipped: 32908
+aic7xxx.txt: 19701
+aic94xx: 4096
+aic94xx_dev.c: 11236
+aic94xx_dump.c: 36929
+aic94xx_dump.h: 1451
+aic94xx.h: 3007
+aic94xx_hwi.c: 38875
+aic94xx_hwi.h: 10646
+aic94xx_init.c: 28607
+aic94xx_reg.c: 10895
+aic94xx_reg_def.h: 74147
+aic94xx_reg.h: 10470
+aic94xx_sas.h: 22044
+aic94xx_scb.c: 27220
+aic94xx_sds.c: 37304
+aic94xx_sds.h: 4644
+aic94xx_seq.c: 47415
+aic94xx_seq.h: 2011
+aic94xx_task.c: 17414
+aic94xx_tmf.c: 20129
+aica.c: 18912
+aica.h: 2322
+aicasm: 4096
+aicasm.c: 20235
+aicasm_gram.y: 41937
+aicasm.h: 3213
+aicasm_insformat.h: 5394
+aicasm_macro_gram.y: 4072
+aicasm_macro_scan.l: 4166
+aicasm_scan.l: 15538
+aicasm_symbol.c: 16089
+aicasm_symbol.h: 4889
+aiclib.c: 1599
+aiclib.h: 6327
+aio_abi.h: 3060
+aio_aio12_8.c: 5597
+aio.c: 9345
+aio.h: 530
+aio_iiro_16.c: 4521
+aiptek.c: 63719
+aircable.c: 16905
+airo.c: 224549
+airo_cs.c: 16214
+airo.h: 272
+aironet.c: 38
+aironet.h: 31
+airport.c: 6741
+airq.c: 3567
+airq.h: 530
+ak4104.c: 8783
+ak4104.h: 143
+ak4114.c: 18943
+ak4114.h: 10191
+ak4117.c: 16871
+ak4117.h: 9193
+ak4396.h: 1065
+ak4531_codec.c: 17543
+ak4531_codec.h: 3161
+ak4535.c: 18361
+ak4535.h: 1042
+ak4xxx-adda.c: 25308
+ak4xxx-adda.h: 3333
+ak4xxx.c: 5039
+aki3068net: 4096
+alauda.c: 34485
+alaw_main.csp.ihex: 3714
+alchemy: 4096
+alchemy-flash.c: 4191
+algapi.c: 16668
+algapi.h: 8721
+algboss.c: 6296
+algos: 4096
+ali14xx.c: 6564
+ali5451: 4096
+ali5451.c: 59400
+ali-agp.c: 10369
+alias.c: 1447
+aliasing-test.c: 6103
+aliasing.txt: 8753
+alias.txt: 1181
+align.c: 24429
+alignment.c: 23757
+align.S: 11650
+ali-ircc.c: 57570
+ali-ircc.h: 7748
+alim1535_wdt.c: 10224
+alim15x3.c: 14978
+alim7101_wdt.c: 11048
+allocator.c: 10151
+alloc.c: 10261
+alloc.h: 9219
+allocpercpu.c: 4150
+alpaca.h: 1209
+alpha: 4096
+alpha-agp.c: 5476
+alpha_ksyms.c: 2696
+alphatrack.c: 23326
+alphatrack.h: 2005
+alps.c: 15813
+alps.h: 1047
+ALS: 3770
+als100.c: 9384
+als300.c: 23789
+als4000.c: 32136
+alsa: 4096
+alsa.c: 2430
+ALSA-Configuration.txt: 75006
+alsa-driver-api.tmpl: 3216
+alsa.h: 370
+alternative-asm.h: 289
+alternative.c: 14237
+alternative.h: 5895
+altpciechdma: 4096
+altpciechdma.c: 37598
+am200epd.c: 9652
+am200epdkit_defconfig: 26949
+am300epd.c: 6564
+am79c961a.c: 18502
+am79c961a.h: 3109
+am9513.h: 1940
+amba: 4096
+amba-clcd.c: 12494
+ambakmi.c: 4554
+amba-pl010.c: 19490
+amba-pl011.c: 21509
+amba-pl022.c: 53346
+ambassador.c: 68387
+ambassador.h: 16192
+amcc: 4096
+amcc_s5933_58.h: 14263
+amcc_s5933.h: 6603
+amd5536udc.c: 86854
+amd5536udc.h: 17276
+amd64-agp.c: 20128
+amd64_edac.c: 98492
+amd64_edac_dbg.c: 5401
+amd64_edac_err_types.c: 3628
+amd64_edac.h: 19221
+amd64_edac_inj.c: 4304
+amd74xx.c: 10198
+amd76x_edac.c: 9371
+amd76xrom.c: 9404
+amd7930.c: 31102
+amd7930_fn.c: 23626
+amd7930_fn.h: 1162
+amd8111e.c: 53690
+amd8111_edac.c: 16756
+amd8111_edac.h: 4244
+amd8111e.h: 21006
+amd8131_edac.c: 10985
+amd8131_edac.h: 3772
+amd_bus.c: 13843
+amd.c: 3180
+amd_iommu.c: 52618
+amd_iommu.h: 1421
+amd_iommu_init.c: 34814
+amd_iommu_types.h: 13377
+amd-k7-agp.c: 15673
+amd-powernow.txt: 1673
+amd-rng.c: 3458
+amifb.c: 103212
+amifd.h: 1995
+amifdreg.h: 2674
+amiflop.c: 46962
+amiga: 4096
+amiga.c: 3445
+amiga_defconfig: 28613
+amigaffs.c: 11549
+amigaffs.h: 2927
+amiga.h: 116
+amigahw.h: 11232
+amigaints.h: 3583
+amigaone: 4096
+amigaone_defconfig: 40433
+amigaone.dts: 4189
+amigayle.h: 3135
+amiints.c: 6489
+amijoy.c: 4591
+amijoy.txt: 7701
+amikbd.c: 6468
+amimouse.c: 3296
+amipcmcia.h: 2568
+amiserial.c: 54254
+amisound.c: 2828
+amix86.c: 23331
+amlcode.h: 18976
+aml_nfw.c: 5630
+amlresrc.h: 9975
+amon.h: 141
+amp.c: 2736
+amp.h: 1594
+amplc_dio200.c: 38731
+amplc_pc236.c: 16962
+amplc_pc263.c: 11680
+amplc_pci224.c: 44174
+amplc_pci230.c: 92910
+ams: 4096
+ams-core.c: 6046
+ams-delta.c: 5974
+ams_delta_defconfig: 28481
+amsdu.c: 5428
+ams.h: 1354
+ams-i2c.c: 6365
+ams-input.c: 3542
+amso1100: 4096
+ams-pmu.c: 4469
+analog.c: 20366
+anchor.h: 3882
+anchors.txt: 2625
+android: 4096
+ani.c: 23441
+ani.h: 4062
+anode.c: 14491
+anomaly.h: 11228
+anon_inodes.c: 5477
+anon_inodes.h: 312
+ansi_cprng.c: 10011
+ansidecl.h: 4393
+ans-lcd.c: 3847
+ans-lcd.h: 206
+anubis.c: 28484
+anubis-cpld.h: 652
+anubis-irq.h: 596
+anubis-map.h: 1219
+anycast.c: 11884
+anysee.c: 15434
+anysee.h: 14174
+aoa: 4096
+aoa-gpio.h: 2434
+aoa.h: 3816
+aoe: 4096
+aoeblk.c: 7321
+aoechr.c: 6092
+aoecmd.c: 23023
+aoedev.c: 5392
+aoe.h: 4748
+aoemain.c: 2032
+aoenet.c: 3237
+aoe.txt: 4600
+aops.c: 49318
+aops.h: 4017
+a.out-core.h: 2444
+a.out.h: 2438
+ap325rxa_defconfig: 31462
+apanel.c: 8043
+apb.h: 1043
+ap_bus.c: 45317
+ap_bus.h: 6091
+apc.c: 4412
+apc.h: 1682
+APCI1710_82x54.c: 55614
+APCI1710_82x54.h: 2408
+APCI1710_Chrono.c: 75530
+APCI1710_Chrono.h: 2397
+APCI1710_Dig_io.c: 35243
+APCI1710_Dig_io.h: 1437
+APCI1710_INCCPT.c: 206966
+APCI1710_INCCPT.h: 10615
+APCI1710_Inp_cpt.c: 32511
+APCI1710_Inp_cpt.h: 1414
+APCI1710_Pwm.c: 110859
+APCI1710_Pwm.h: 2722
+APCI1710_Ssi.c: 30348
+APCI1710_Ssi.h: 1343
+APCI1710_Tor.c: 70692
+APCI1710_Tor.h: 1684
+APCI1710_Ttl.c: 35072
+APCI1710_Ttl.h: 1338
+apdbg.c: 12729
+aperture_64.c: 13850
+ap.h: 26
+apic: 4096
+api.c: 4766
+apic.c: 56323
+apicdef.h: 10790
+apic_flat_64.c: 9680
+apic.h: 48
+apicnum.h: 229
+API.html: 738
+api-intro.txt: 6569
+apm_32.c: 71310
+apm-acpi.txt: 1541
+apm_bios.h: 5647
+apm.c: 1961
+apm_emu.c: 3225
+apm-emulation.c: 17959
+apm-emulation.h: 1575
+apm.h: 1722
+apm_power.c: 10334
+apm-power.c: 2659
+apne.c: 17115
+apollo: 4096
+apollo_defconfig: 25574
+apollodma.h: 9409
+apollohw.h: 2876
+appldata: 4096
+appldata_base.c: 16414
+appldata.h: 2269
+appldata_mem.c: 4196
+appldata_net_sum.c: 4240
+appldata_os.c: 6134
+appledisplay.c: 9793
+applesmc.c: 46139
+appletalk: 4096
+appletouch.c: 25051
+appletouch.txt: 3199
+applicom.c: 24465
+applicom.h: 2558
+applying-patches.txt: 19961
+applypatch-msg.sample: 452
+aq100x.c: 8974
+ar7: 4096
+ar7_defconfig: 29419
+ar7.h: 4432
+ar7part.c: 4186
+ar7_wdt.c: 8576
+ar9170: 4096
+ar9170.h: 7335
+ar-accept.c: 12406
+ar-ack.c: 33274
+arbiter.c: 11549
+arbiter.h: 607
+arc: 4096
+arc4.c: 2066
+ar-call.c: 21724
+arc_con.c: 973
+arcdevice.h: 12708
+arcfb.c: 16908
+arcfb.h: 150
+arch: 4096
+arch_checks.c: 3045
+arches_defconfig: 19397
+arches.dts: 7694
+arch.h: 1650
+arch-kev7a400.c: 2933
+arch-lpd7a40x.c: 10208
+archparam.h: 246
+archsetjmp.h: 363
+arch-v10: 4096
+arch-v32: 4096
+arcmsr: 4096
+arcmsr_attr.c: 12953
+arcmsr.h: 22540
+arcmsr_hba.c: 68471
+arcmsr_spec.txt: 22891
+arcnet: 4096
+arcnet.c: 30476
+arcnet-hardware.txt: 112635
+arcnet.txt: 23983
+arcofi.c: 3664
+arcofi.h: 721
+ar-connection.c: 23383
+ar-connevent.c: 9295
+arc-rawmode.c: 5274
+arc-rimi.c: 10949
+ar-error.c: 5949
+argv_split.c: 1893
+ariadne.c: 24224
+ariadne.h: 15566
+ar-input.c: 20380
+ar-internal.h: 28881
+ark3116.c: 12365
+ar-key.c: 8236
+arkfb.c: 31427
+arkfb.txt: 2024
+arlan.h: 16773
+arlan-main.c: 51969
+arlan-proc.c: 30009
+ar-local.c: 7670
+arm: 4096
+armadillo5x0.c: 7149
+ARM-gcc.h: 4503
+armksyms.c: 4758
+arm_timer.h: 576
+ar-output.c: 18343
+arp.c: 35296
+ar-peer.c: 7599
+arp.h: 1028
+ar-proc.c: 5159
+arptable_filter.c: 3496
+arp_tables.c: 47085
+arp_tables.h: 8551
+arpt_mangle.c: 2391
+arpt_mangle.h: 547
+array.c: 13244
+arrayRCU.txt: 4475
+ar-recvmsg.c: 11003
+ar-security.c: 5588
+ar-skbuff.c: 3506
+arthur.c: 2275
+artpec_3_defconfig: 13781
+ar-transport.c: 7196
+arv.c: 22235
+arxescsi.c: 9967
+asb100: 2093
+asb100.c: 29220
+asb2303_defconfig: 13559
+asciidoc.conf: 2238
+asequencer.h: 24733
+ashiftrt.S: 3468
+ashldi3.c: 1516
+__ashldi3.S: 1340
+ashldi3.S: 1594
+ashlsi3.S: 3814
+ashrdi3.c: 1578
+__ashrdi3.S: 1359
+ashrdi3.S: 1594
+ashrsi3.S: 3765
+ashxdi3.S: 5014
+asic3.c: 23429
+asic3.h: 11966
+asids-debugfs.c: 1875
+asi.h: 13855
+asiliantfb.c: 17057
+as-iosched.c: 39676
+as-iosched.txt: 8697
+asix.c: 39119
+as-layout.h: 1666
+asl.c: 9101
+asm: 4096
+asm-compat.h: 1951
+asm-generic: 4096
+asm.h: 9481
+asmmacro-32.h: 4815
+asmmacro-64.h: 3961
+asmmacro.h: 2767
+asm-offsets_32.c: 5194
+asm-offsets_64.c: 3637
+asm-offsets.c: 4611
+asmregs.h: 3115
+asn1.c: 15700
+asoundef.h: 14263
+asound_fm.h: 4313
+asound.h: 39901
+asp8347_defconfig: 35011
+asp834x.c: 2108
+asp834x-redboot.dts: 6941
+asp.c: 3631
+aspenite.c: 2671
+asp.h: 608
+aspm.c: 25790
+Assabet: 9201
+assabet.c: 11283
+assabet_defconfig: 17595
+assabet.h: 4477
+assembler.h: 2834
+assembly.h: 12972
+assoc.c: 36
+assoc.h: 408
+association.h: 4661
+associola.c: 43957
+ast.c: 3630
+ast.h: 878
+asus_acpi.c: 39676
+asus_atk0110.c: 24097
+asuscom.c: 11573
+asus-laptop.c: 36214
+asus_oled: 4096
+asus_oled.c: 18945
+async.c: 11128
+asyncdata.c: 15045
+async.h: 973
+async_memcpy.c: 3227
+async_memset.c: 2994
+async-thread.c: 13350
+async-thread.h: 3400
+async_tx: 4096
+async-tx-api.txt: 8950
+async_tx.c: 8062
+async_tx.h: 5062
+async_xor.c: 9790
+at1700.c: 25461
+at24.c: 17172
+at24.h: 1084
+at25.c: 10286
+at32ap700x.c: 54284
+at32ap700x.h: 9017
+at32ap700x_wdt.c: 10216
+at32psif.c: 8545
+at73c213.c: 28442
+at73c213.h: 3187
+at76c50x-usb.c: 69577
+at76c50x-usb.h: 11556
+at76_usb: 4096
+at76_usb.c: 159931
+at76_usb.h: 18785
+at91_adc.h: 2447
+at91_aic.h: 2578
+at91cap9adk_defconfig: 28118
+at91cap9.c: 9260
+at91cap9_ddrsdr.h: 4803
+at91cap9_devices.c: 32852
+at91cap9.h: 5120
+at91cap9_matrix.h: 8438
+at91_cf.c: 10319
+at91_dbgu.h: 2878
+at91_ether.c: 37656
+at91_ether.h: 3116
+at91_ide.c: 10538
+at91_mci.c: 31894
+at91_mci.h: 5220
+at91_pio.h: 2085
+at91_pit.h: 1189
+at91_pmc.h: 6822
+at91rm9200.c: 8544
+at91rm9200_devices.c: 32118
+at91rm9200dk_defconfig: 19334
+at91rm9200ek_defconfig: 19319
+at91rm9200_emac.h: 6334
+at91rm9200.h: 4634
+at91rm9200_mc.h: 7552
+at91rm9200_time.c: 6137
+at91rm9200_wdt.c: 6655
+at91_rstc.h: 1684
+at91_rtc.h: 3381
+at91_rtt.h: 1335
+at91sam9260.c: 9719
+at91sam9260_devices.c: 28830
+at91sam9260ek_defconfig: 23675
+at91sam9260.h: 5601
+at91sam9260_matrix.h: 4360
+at91sam9261.c: 7811
+at91sam9261_devices.c: 27547
+at91sam9261ek_defconfig: 27131
+at91sam9261.h: 3985
+at91sam9261_matrix.h: 3171
+at91sam9263.c: 8693
+at91sam9263_devices.c: 36564
+at91sam9263ek_defconfig: 27888
+at91sam9263.h: 5088
+at91sam9263_matrix.h: 7531
+at91sam926x_time.c: 4812
+at91sam9g20ek_defconfig: 26082
+at91sam9rl.c: 8144
+at91sam9rl_devices.c: 28643
+at91sam9rlek_defconfig: 21184
+at91sam9rl.h: 4332
+at91sam9rl_matrix.h: 5086
+at91sam9_sdramc.h: 3914
+at91sam9_smc.h: 3570
+at91sam9_wdt.c: 7764
+at91_shdwc.h: 1497
+at91_spi.h: 3738
+at91_ssc.h: 4846
+at91_st.h: 1983
+at91_tc.h: 6897
+at91_twi.h: 3075
+at91_udc.c: 48229
+at91_udc.h: 6283
+at91_wdt.h: 1464
+at91x40.c: 1914
+at91x40.h: 2025
+at91x40_time.c: 2547
+at93c.c: 2613
+at93c.h: 292
+ata: 12288
+ata.c: 4208
+ata_defs_asm.h: 8736
+ata_defs.h: 6434
+atafb.c: 91174
+atafb.h: 1708
+atafb_iplan2p2.c: 6818
+atafb_iplan2p4.c: 7301
+atafb_iplan2p8.c: 8377
+atafb_mfb.c: 2554
+atafb_utils.h: 11235
+atafd.h: 261
+atafdreg.h: 2704
+ataflop.c: 52286
+ata_generic.c: 6543
+atags.c: 1588
+atags.h: 132
+ata.h: 787
+ataints.c: 14727
+atakbd.c: 6402
+atakeyb.c: 15982
+atalk.h: 5240
+atalk_proc.c: 7290
+ata_piix.c: 45848
+ata_platform.h: 910
+atari: 4096
+atari.c: 3911
+atari_defconfig: 26788
+atari.h: 1077
+atarihw.h: 20620
+atariints.h: 5520
+atari_joystick.h: 418
+atarikbd.txt: 26109
+atarikb.h: 1514
+atarilance.c: 34168
+atarimouse.c: 3865
+atari_NCR5380.c: 92608
+atari_scsi.c: 35928
+atari_scsi.h: 5820
+atari_stdma.h: 458
+atari_stram.h: 429
+atasound.c: 2705
+ateb9200_defconfig: 26557
+aten2011.c: 65277
+aten.c: 3343
+ath: 4096
+ath5k: 4096
+ath5k.h: 45994
+ath9k: 4096
+ath9k.h: 20541
+ath9k_platform.h: 1116
+athr_common.h: 4056
+ati-agp.c: 14653
+ati_ids.h: 8172
+atiixp.c: 5592
+atiixp_modem.c: 36739
+ati_pcigart.c: 5516
+ati_remote2.c: 23391
+ati_remote.c: 27913
+atkbd.c: 40410
+atl1c: 4096
+atl1.c: 101403
+atl1c_ethtool.c: 9188
+atl1c.h: 20395
+atl1c_hw.c: 13975
+atl1c_hw.h: 31069
+atl1c_main.c: 77505
+atl1e: 4096
+atl1e_ethtool.c: 11679
+atl1e.h: 17562
+atl1e_hw.c: 16680
+atl1e_hw.h: 38581
+atl1e_main.c: 71172
+atl1e_param.c: 7245
+atl1.h: 24023
+atl2.c: 82456
+atl2.h: 16349
+atlas_btns.c: 4752
+atlx: 4096
+atlx.c: 7198
+atlx.h: 18176
+atm: 4096
+atmapi.h: 889
+atmarp.h: 1233
+atmbr2684.h: 3208
+atmclip.h: 513
+atmdev.h: 16681
+atmel: 4096
+atmel-abdac.h: 626
+atmel-ac97c.h: 1409
+atmel.c: 132756
+atmel_cs.c: 17914
+atmel.h: 1533
+atmel_lcdc.h: 7265
+atmel_lcdfb.c: 31305
+atmel-mci.c: 43139
+atmel-mci.h: 1269
+atmel-mci-regs.h: 6476
+atmel_nand.c: 15137
+atmel_nand_ecc.h: 1412
+atmel_pci.c: 2533
+atmel-pcm.c: 14083
+atmel-pcm.h: 2987
+atmel_pdc.h: 1410
+atmel-pwm-bl.c: 6152
+atmel-pwm-bl.h: 1550
+atmel_pwm.c: 9359
+atmel_pwm.h: 2724
+atmel_read_eeprom.c: 3671
+atmel_read_eeprom.h: 2413
+atmel_serial.c: 40894
+atmel_serial.h: 6087
+atmel_spi.c: 23923
+atmel_spi.h: 4446
+atmel-ssc.c: 3605
+atmel_ssc_dai.c: 20632
+atmel_ssc_dai.h: 3265
+atmel-ssc.h: 9369
+atmel_tc.h: 11075
+atmel_tclib.c: 3626
+atmel_tsadcc.c: 10816
+atmel_usba_udc.c: 50940
+atmel_usba_udc.h: 10031
+atmel-wm97xx.c: 11848
+atm_eni.h: 585
+atm.h: 7995
+atm_he.h: 343
+atm_idt77105.h: 892
+atmioc.h: 1583
+atmlec.h: 2561
+atm_misc.c: 2638
+atmmpc.h: 4163
+atm_nicstar.h: 1215
+atmppp.h: 576
+atmsap.h: 4907
+atmsar11.HEX: 19191
+atm_suni.h: 253
+atmsvc.h: 1790
+atm_sysfs.c: 3945
+atmtcp.c: 11650
+atm_tcp.h: 1768
+atm.txt: 426
+atm_zatm.h: 1606
+atngw100: 4096
+atngw100_defconfig: 28242
+atngw100_evklcd100_defconfig: 29353
+atngw100_evklcd101_defconfig: 29353
+atngw100_mrmt_defconfig: 33751
+atombios_crtc.c: 23254
+atombios.h: 221852
+atom-bits.h: 1882
+atom.c: 29689
+atom.h: 4494
+atomic32.c: 2859
+atomic_32.h: 11086
+atomic_32.S: 2663
+atomic64.c: 3863
+atomic_64.h: 10903
+atomic64.h: 1840
+atomic64-ops.S: 4827
+atomic_64.S: 2925
+atomic-grb.h: 4642
+atomic.h: 7333
+atomic-irq.h: 1375
+atomic-llsc.h: 2813
+atomic-long.h: 5244
+atomic_mm.h: 4061
+atomic_no.h: 3556
+atomic-ops.S: 5339
+atomic_ops.txt: 19503
+atomic-ops.txt: 4632
+atomic.S: 15917
+atom-names.h: 4758
+atom-types.h: 1430
+atp870u.c: 86512
+atp870u.h: 1487
+atp.c: 29816
+atp.h: 8737
+atstk1000: 4096
+atstk1000.h: 535
+atstk1002.c: 8012
+atstk1002_defconfig: 30107
+atstk1003.c: 3765
+atstk1003_defconfig: 25774
+atstk1004.c: 3756
+atstk1004_defconfig: 15379
+atstk1006_defconfig: 32583
+attach.c: 9647
+attr.c: 2666
+attrib.c: 91896
+attrib.h: 4321
+attribute_container.c: 12242
+attribute_container.h: 2530
+atxp1.c: 9417
+aty: 4096
+aty128fb.c: 67277
+aty128fb.txt: 2119
+aty128.h: 13554
+atyfb_base.c: 111634
+atyfb.h: 8973
+au0828: 4096
+au0828-cards.c: 9773
+au0828-cards.h: 1060
+au0828-core.c: 7629
+au0828-dvb.c: 11151
+au0828.h: 7385
+au0828-i2c.c: 9287
+au0828-reg.h: 2134
+au0828-video.c: 41940
+au1000_db1x00.c: 7294
+au1000_dma.h: 11212
+au1000_eth.c: 33708
+au1000_eth.h: 3012
+au1000_generic.c: 14674
+au1000_generic.h: 4280
+au1000.h: 53188
+au1000_ircc.h: 3758
+au1000_pb1x00.c: 9234
+au1000_xxs1500.c: 4378
+au1100fb.c: 20752
+au1100fb.h: 14620
+au1100_mmc.h: 5888
+au1200fb.c: 52491
+au1200fb.h: 18704
+au1550_ac97.c: 51655
+au1550nd.c: 14821
+au1550_spi.c: 26531
+au1550_spi.h: 433
+au1k_ir.c: 20249
+au1x: 4096
+au1x00.c: 19173
+au1xmmc.c: 28453
+au1xxx_dbdma.h: 13134
+au1xxx.h: 1723
+au1xxx-ide.c: 15369
+au1xxx_ide.h: 6491
+AU1xxx_IDE.README: 4039
+au1xxx_psc.h: 15895
+au6610.c: 6091
+au6610.h: 1286
+au8522_decoder.c: 27416
+au8522_dig.c: 21506
+au8522.h: 2387
+au8522_priv.h: 17128
+au8810.c: 379
+au8810.h: 7007
+au8820.c: 331
+au8820.h: 6479
+au8830.c: 404
+au8830.h: 8629
+au88x0: 4096
+au88x0_a3d.c: 25257
+au88x0_a3ddata.c: 2908
+au88x0_a3d.h: 4336
+au88x0.c: 10316
+au88x0_core.c: 78891
+au88x0_eq.c: 23045
+au88x0_eqdata.c: 3952
+au88x0_eq.h: 1287
+au88x0_game.c: 3655
+au88x0.h: 8929
+au88x0_mixer.c: 773
+au88x0_mpu401.c: 3619
+au88x0_pcm.c: 15858
+au88x0_synth.c: 11076
+au88x0_wt.h: 2347
+au88x0_xtalk.c: 23426
+au88x0_xtalk.h: 2304
+Audigy-mixer.txt: 13956
+audio.c: 7519
+AudioExcelDSP16: 3886
+audio.h: 525
+Audiophile-Usb.txt: 17915
+audit_64.c: 1870
+audit.c: 1888
+audit_change_attr.h: 320
+audit_dir_write.h: 238
+auditfilter.c: 34110
+audit.h: 394
+audit_read.h: 127
+auditsc.c: 67706
+audit_signal.h: 36
+audit_tree.c: 22256
+audit_watch.c: 14765
+audit_write.h: 255
+aureon.c: 64017
+aureon.h: 2419
+autcpu12.c: 5831
+autcpu12.h: 2590
+autcpu12-nvram.c: 3124
+auth.c: 35
+authenc.c: 13429
+authenc.h: 609
+auth_generic.c: 4800
+auth_gss: 4096
+auth_gss.c: 40950
+auth_gss.h: 2256
+auth.h: 540
+auth_null.c: 2607
+authorization.txt: 2640
+authors: 38
+AUTHORS: 38
+auth_rsp.c: 39
+auth_unix.c: 5607
+auto_dev-ioctl.h: 5186
+autofs: 4096
+autofs4: 4096
+auto_fs4.h: 4095
+autofs4-mount-control.txt: 17706
+auto_fs.h: 2467
+autofs_i.h: 7355
+autoload.c: 967
+autoload.sh: 339
+automount-support.txt: 4694
+autoprobe.c: 4772
+auxdisplay: 4096
+auxio_32.c: 3721
+auxio_32.h: 2622
+auxio_64.c: 3214
+auxio_64.h: 3266
+auxio.h: 176
+aux_reg.h: 646
+auxvec.h: 60
+av7110: 4096
+av7110_av.c: 40033
+av7110_av.h: 1214
+av7110.c: 82729
+av7110_ca.c: 9180
+av7110_ca.h: 441
+av7110.h: 7155
+av7110_hw.c: 31995
+av7110_hw.h: 12512
+av7110_ipack.c: 7991
+av7110_ipack.h: 402
+av7110_ir.c: 11196
+av7110_v4l.c: 27884
+avc.c: 24534
+avc.h: 3102
+avc_ss.h: 617
+avermedia.txt: 13922
+avila.h: 917
+avila-pci.c: 1817
+avila-setup.c: 4610
+av_inherit.h: 1693
+avm: 4096
+avm_a1.c: 8303
+avma1_cs.c: 9468
+avm_a1p.c: 7146
+avmcard.h: 13933
+avm_cs.c: 9107
+avm_pci.c: 23187
+av_permissions.h: 53693
+av_perm_to_string.h: 10893
+avr32: 4096
+__avr32_asr64.S: 560
+avr32_ksyms.c: 1843
+__avr32_lsl64.S: 559
+__avr32_lsr64.S: 559
+avtab.c: 12842
+avtab.h: 2874
+aw2: 4096
+aw2-alsa.c: 22536
+aw2-saa7146.c: 12816
+aw2-saa7146.h: 3650
+aw2-tsl.c: 4092
+awacs.c: 32895
+awacs.h: 8192
+ax25: 4096
+ax25_addr.c: 6217
+ax25_dev.c: 4867
+ax25_ds_in.c: 7261
+ax25_ds_subr.c: 5218
+ax25_ds_timer.c: 5960
+ax25.h: 2752
+ax25_iface.c: 5067
+ax25_in.c: 10789
+ax25_ip.c: 5405
+ax25_out.c: 8933
+ax25_route.c: 11432
+ax25_std_in.c: 11343
+ax25_std_subr.c: 2329
+ax25_std_timer.c: 4335
+ax25_subr.c: 7113
+ax25_timer.c: 5261
+ax25.txt: 610
+ax25_uid.c: 5032
+ax88796.c: 25354
+ax88796.h: 751
+axisflashmap.c: 11854
+axisflashmap.h: 1932
+axnet_cs.c: 55656
+axon_msi.c: 11768
+axonram.c: 9510
+azt2320.c: 9995
+azt3328.c: 74771
+azt3328.h: 16466
+b128ops.h: 2471
+b180_defconfig: 30806
+b1.c: 20917
+b1dma.c: 24682
+b1isa.c: 6013
+b1lli.h: 1654
+b1pci.c: 10903
+b1pcmcia.c: 5718
+b1pcmcia.h: 666
+b2: 4096
+b2c2: 4096
+b3dfg: 4096
+b3dfg.c: 29136
+b43: 4096
+b43.h: 34564
+b43legacy: 4096
+b43legacy.h: 26792
+b43_pci_bridge.c: 1563
+b44.c: 58926
+b44.h: 17577
+ba_action.c: 43
+baboon.c: 2869
+backchannel_rqst.c: 9002
+backend-api.txt: 23417
+backend.c: 8969
+background.c: 4246
+backing-dev.c: 7753
+backing-dev.h: 7625
+backing_ops.c: 11152
+backlight: 4096
+backlight.c: 8488
+backlight.h: 1076
+backoff.h: 514
+backtrace.c: 2048
+backtrace.S: 3769
+backtracetest.c: 2135
+badge4.c: 7278
+badge4_defconfig: 25237
+badge4.h: 2530
+bad_inode.c: 8103
+bad_memory.txt: 1113
+balance: 5103
+balloc.c: 28466
+balloon.c: 15823
+bamboo.c: 1219
+bamboo_defconfig: 23088
+bamboo.dts: 7833
+barrier.h: 751
+barrier.txt: 10841
+base: 4096
+baseband.c: 69836
+baseband.h: 5142
+base.c: 17017
+base.h: 5692
+base.S: 2976
+bas-gigaset.c: 70245
+basic: 4096
+basic-pm-debugging.txt: 10323
+basic_profiling.txt: 1707
+basler: 4096
+bast-cpld.h: 1556
+bast-ide.c: 2522
+bast-irq.c: 3575
+bast-irq.h: 842
+bast-map.h: 5001
+bast-pmu.h: 1140
+battery.c: 26147
+baycom_epp.c: 34930
+baycom.h: 820
+baycom_par.c: 16899
+baycom_ser_fdx.c: 21220
+baycom_ser_hdx.c: 21005
+baycom.txt: 7038
+bbc_envctrl.c: 15825
+bbc.h: 9957
+bbc_i2c.c: 9865
+bbc_i2c.h: 1987
+bbm.h: 4408
+bcache.h: 1450
+bcast.c: 21337
+bcast.h: 5594
+bcd.c: 257
+bcd.h: 195
+bcm1480: 4096
+bcm1480_int.h: 18356
+bcm1480_l2c.h: 8696
+bcm1480_mc.h: 51843
+bcm1480_regs.h: 42338
+bcm1480_scd.h: 15457
+bcm203x.c: 7066
+bcm3510.c: 21894
+bcm3510.h: 1667
+bcm3510_priv.h: 9194
+bcm47xx: 4096
+bcm47xx_defconfig: 44162
+bcm47xx.h: 914
+bcm47xx_wdt.c: 6278
+bcm5974.c: 22743
+bcm5974.txt: 2275
+bcm.c: 39855
+bcm.h: 2057
+bcom_ata_task.c: 1873
+bcom_fec_rx_task.c: 2688
+bcom_fec_tx_task.c: 3548
+bcom_gen_bd_rx_task.c: 1901
+bcom_gen_bd_tx_task.c: 2118
+bc_svc.c: 2387
+bcu.c: 5507
+bc_xprt.h: 1873
+bdx.bin.ihex: 117765
+beacon.c: 16577
+bearer.c: 17977
+bearer.h: 6277
+beat.c: 5680
+beat.h: 1477
+beat_htab.c: 12023
+beat_hvCall.S: 4654
+beat_interrupt.c: 7398
+beat_interrupt.h: 1147
+beat_iommu.c: 3142
+beat_smp.c: 2934
+beat_spu_priv1.c: 5295
+beat_syscall.h: 9338
+beat_udbg.c: 2419
+beat_wrapper.h: 7284
+be_byteshift.h: 1424
+be_cmds.c: 28134
+be_cmds.h: 21092
+beep.c: 7937
+be_ethtool.c: 10213
+befs: 4096
+befs_fs_types.h: 5040
+befs.h: 3265
+befs.txt: 3636
+be.h: 9794
+be_hw.h: 6736
+belkin_sa.c: 17581
+belkin_sa.h: 5114
+be_main.c: 53536
+be_memmove.h: 770
+Benchmark.h: 14912
+benet: 4096
+berry_charge.c: 5094
+bestcomm: 4096
+bestcomm.c: 13444
+bestcomm.h: 5696
+bestcomm_priv.h: 10178
+be_struct.h: 749
+BF518F-EZBRD_defconfig: 30487
+bf518.h: 3233
+BF526-EZBRD_defconfig: 37925
+BF527-EZKIT_defconfig: 39344
+bf527.h: 3368
+BF533-EZKIT_defconfig: 27699
+bf533.h: 3987
+BF533-STAMP_defconfig: 31991
+bf537.h: 3679
+BF537-STAMP_defconfig: 33322
+BF538-EZKIT_defconfig: 31824
+bf538.h: 3110
+BF548-EZKIT_defconfig: 41918
+bf548.h: 3408
+bf54x-keys.c: 10383
+bf54x_keys.h: 373
+bf54x-lq043fb.c: 19521
+bf54x-lq043.h: 486
+BF561-EZKIT_defconfig: 27483
+bf561.h: 5899
+bf5xx-ac97.c: 10719
+bf5xx-ac97.h: 1698
+bf5xx-ac97-pcm.c: 13449
+bf5xx-ac97-pcm.h: 595
+bf5xx-ad1980.c: 3043
+bf5xx-ad73311.c: 6491
+bf5xx-i2s.c: 8397
+bf5xx-i2s.h: 321
+bf5xx-i2s-pcm.c: 7810
+bf5xx-i2s-pcm.h: 591
+bf5xx_nand.c: 19911
+bf5xx-sport.c: 26015
+bf5xx-sport.h: 5191
+bf5xx-ssm2602.c: 4846
+bfin_5xx.c: 37574
+bfin5xx_spi.h: 3282
+bfin-async-flash.c: 5961
+bfin_cf_pcmcia.c: 8045
+bfind.c: 4484
+bfin_dma_5xx.c: 13838
+bfin-global.h: 3579
+bfin_gpio.c: 31670
+bfin-gpio-notes.txt: 2459
+bfin_jtag_comm.c: 9699
+bfin_ksyms.c: 3302
+bfin_mac.c: 29136
+bfin_mac.h: 1654
+bfin_oprofile.c: 303
+bfin-otp.c: 4874
+bfin_sdh.h: 273
+bfin_serial_5xx.h: 5124
+bfin_simple_timer.h: 446
+bfin_sir.c: 18943
+bfin_sir.h: 5300
+bfin_sport.h: 3839
+bfin_sport_uart.c: 16463
+bfin_sport_uart.h: 3726
+bfin-t350mcqb-fb.c: 16570
+bfin_wdt.c: 11813
+bfrom.h: 3443
+bfs: 4096
+bfs_fs.h: 1830
+bfs.h: 1424
+bfs.txt: 2118
+bfusb.c: 17036
+bif_core_defs_asm.h: 15240
+bif_core_defs.h: 9672
+bif_dma_defs_asm.h: 22539
+bif_dma_defs.h: 14998
+bif_slave_defs_asm.h: 11664
+bif_slave_defs.h: 8256
+big_endian.h: 3729
+big-endian.S: 304
+BIG.FAT.WARNING: 234
+bigsmp_32.c: 6414
+bigsur_defconfig: 32018
+bigsur.h: 1540
+bin2c.c: 702
+bin2hex.c: 755
+bin.c: 11164
+bind_addr.c: 13678
+bind.c: 7327
+bindec.S: 28113
+binder.c: 105864
+binder.h: 9073
+bind.h: 1305
+binding.txt: 3687
+binfmt_aout.c: 13156
+binfmt_elf32.c: 3565
+binfmt_elf.c: 55465
+binfmt_elf_fdpic.c: 48887
+binfmt_elfn32.c: 3368
+binfmt_elfo32.c: 4508
+binfmt_em86.c: 2848
+binfmt_flat.c: 27410
+binfmt_loader.c: 1116
+binfmt_misc.c: 15436
+binfmt_misc.txt: 6108
+binfmt_script.c: 2829
+binfmts.h: 4146
+binfmt_som.c: 7567
+binoffset.c: 4039
+binstr.S: 4302
+bio.c: 39950
+biodoc.txt: 55452
+bio.h: 20583
+bio-integrity.c: 21385
+bios32.c: 17673
+bios.c: 2953
+bioscall.S: 1566
+bioscalls.c: 13235
+bios_ebda.h: 794
+bios.h: 3282
+bios_uv.c: 4629
+bitblit.c: 10909
+bitext.c: 2979
+bitext.h: 613
+bitfield.h: 19835
+bitmap.c: 45202
+bitmap.h: 10515
+bit_operations.h: 5627
+bitops: 4096
+bitops_32.h: 2988
+bitops_64.h: 2428
+bitops.c: 1091
+bitops-grb.h: 6325
+bitops.h: 3153
+bitops-llsc.h: 2819
+bitops_mm.h: 11048
+bitops_no.h: 8097
+bitops-op32.h: 3832
+bitops.S: 2667
+bitrev.c: 2157
+bitrev.h: 270
+bits.h: 2634
+bitsperlong.h: 37
+bit_spinlock.h: 2210
+bitstream.bin.ihex: 33395
+bitstream.HEX: 192281
+bkm_a4t.c: 9149
+bkm_a8.c: 11765
+bkm_ax.h: 4575
+blackfin: 4096
+blackfin.c: 7552
+blackfin.h: 1089
+blackfin_sram.h: 1207
+blacklist.c: 8658
+blacklist.h: 108
+blackstamp.c: 9838
+BlackStamp_defconfig: 27434
+blinken.h: 617
+blizzard.c: 41338
+blizzard.h: 249
+blk-barrier.c: 9923
+blkcipher.c: 19013
+blk-core.c: 65533
+blkdev.h: 38233
+blk-exec.c: 2683
+blk.h: 4565
+blkif.h: 3398
+blk-integrity.c: 10137
+blk-ioc.c: 4083
+blk-map.c: 8314
+blk-merge.c: 9996
+blkpg.h: 1569
+blk-settings.c: 21842
+blk-softirq.c: 4192
+blk-sysfs.c: 12022
+blk-tag.c: 10090
+blk-timeout.c: 5850
+blktrace_api.h: 7347
+blktrace.c: 40749
+blktrans.h: 1935
+bloat-o-meter: 1711
+block: 4096
+block2mtd.c: 10757
+block.c: 15974
+blockcheck.c: 16817
+blockcheck.h: 3928
+blockdev: 4096
+block_dev.c: 37737
+blockgroup_lock.h: 1164
+block.h: 12870
+blockops.S: 2573
+block_validity.c: 6187
+blowfish.c: 17890
+bluecard_cs.c: 21854
+bluetooth: 4096
+bluetooth.h: 4823
+bmac.c: 42545
+bmac.h: 8220
+bmap.c: 17082
+bmap.h: 8896
+bmap_union.h: 1274
+bnep: 4096
+bnep.h: 4313
+bnode.c: 15448
+bnx2: 4096
+bnx2.c: 204472
+bnx2_fw.h: 2909
+bnx2.h: 328128
+bnx2i: 4096
+bnx2i.h: 23900
+bnx2i_hwi.c: 73780
+bnx2i_init.c: 11868
+bnx2i_iscsi.c: 56395
+bnx2i_sysfs.c: 3632
+bnx2-mips-06-4.6.16.fw.ihex: 255140
+bnx2-mips-09-4.6.17.fw.ihex: 255536
+bnx2-rv2p-06-4.6.16.fw.ihex: 19256
+bnx2-rv2p-09-4.6.15.fw.ihex: 21444
+bnx2x_dump.h: 28960
+bnx2x-e1-4.8.53.0.fw.ihex: 455912
+bnx2x-e1h-4.8.53.0.fw.ihex: 529144
+bnx2x_fw_defs.h: 15968
+bnx2x_fw_file_hdr.h: 1226
+bnx2x.h: 36495
+bnx2x_hsi.h: 87970
+bnx2x_init.h: 12172
+bnx2x_init_ops.h: 12435
+bnx2x_link.c: 162411
+bnx2x_link.h: 6119
+bnx2x_main.c: 321334
+bnx2x_reg.h: 308654
+board-1arm.c: 2699
+board-2430sdp.c: 5365
+board-3430sdp.c: 12788
+board-4430sdp.c: 2343
+board-a9m9750dev.c: 3624
+board-a9m9750dev.h: 478
+board-acs5k.c: 5495
+board-afeb-9260v1.c: 5234
+board-ams-delta.c: 6109
+board-ams-delta.h: 3023
+board-ap325rxa.c: 13583
+board-apollon.c: 8566
+board-armadillo5x0.h: 564
+board.c: 3934
+board-cam60.c: 4681
+board-cap9adk.c: 9718
+board-carmeva.c: 4435
+board-csb337.c: 6265
+board-csb637.c: 3642
+board-dk.c: 5862
+board-dm355-evm.c: 7541
+board-dm355-leopard.c: 7584
+board-dm644x-evm.c: 17303
+board-dm646x-evm.c: 5912
+board-dsm320.c: 2919
+board-eb01.c: 1385
+board-eb9200.c: 3461
+board-eb.h: 3843
+board-ecbat91.c: 4404
+board-edosk7760.c: 4611
+board-ek.c: 5054
+boardergo.c: 16200
+boardergo.h: 4069
+board-espt.c: 2426
+board-fsample.c: 8474
+board-generic.c: 1918
+board.h: 3611
+board-h2.c: 10497
+board-h2.h: 1585
+board-h2-mmc.c: 1862
+board-h3.c: 9698
+board-h3.h: 1550
+board-h3-mmc.c: 1668
+board-h4.c: 9524
+board-halibut.c: 2112
+board-innovator.c: 10872
+board-jscc9p9360.c: 457
+board-jscc9p9360.h: 390
+board-kafa.c: 2778
+board-kb9202.c: 3738
+board-ldp.c: 9161
+board-magicpanelr2.c: 11382
+board-micrel.c: 1450
+board-mx21ads.h: 1998
+board-mx27ads.h: 10858
+board-mx27lite.h: 544
+board-mx27pdk.h: 541
+board-mx31ads.h: 3850
+board-mx31lilly.h: 1430
+board-mx31lite.h: 508
+board-mx31moboard.h: 1408
+board-mx31pdk.h: 2120
+board-mx35pdk.h: 1062
+board-neocore926.c: 9196
+board-nokia770.c: 9780
+board-omap3beagle.c: 10647
+board-omap3evm.c: 7649
+board-omap3pandora.c: 10350
+board-osk.c: 15556
+board-overo.c: 11768
+board-palmte.c: 9495
+board-palmtt.c: 7148
+board-palmz71.c: 8139
+board-pb1176.h: 3534
+board-pb11mp.h: 3933
+board-pba8.h: 3279
+board-pbx.h: 4735
+board-pcm037.h: 1039
+board-pcm038.h: 1428
+board-pcm043.h: 1039
+board-perseus2.c: 7106
+board-picotux200.c: 4544
+board-polaris.c: 3273
+board-qil-a9260.c: 6417
+board-qong.h: 590
+board-rut1xx.c: 2111
+board-rx51.c: 2237
+board-rx51-peripherals.c: 9630
+boards: 4096
+board-sam9260ek.c: 8166
+board-sam9261ek.c: 14425
+board-sam9263ek.c: 10154
+board-sam9g20ek.c: 7036
+board-sam9-l9260.c: 5065
+board-sam9rlek.c: 5294
+boards.c: 9634
+board-se7619.c: 368
+board_setup.c: 991
+board-sffsdr.c: 5298
+boards.h: 874
+board-sh7785lcr.c: 8051
+board-shmin.c: 715
+board-sx1.c: 10319
+board-sx1.h: 1472
+board-sx1-mmc.c: 1614
+board.txt: 1400
+board-urquell.c: 4834
+board-usb-a9260.c: 5382
+board-usb-a9263.c: 5692
+board-voiceblue.c: 6718
+board-voiceblue.h: 552
+board-yl-9200.c: 19259
+board-zoom2.c: 2568
+board-zoom-debugboard.c: 3833
+bond_3ad.c: 81880
+bond_3ad.h: 9440
+bond_alb.c: 45790
+bond_alb.h: 4802
+bonding: 4096
+bonding.h: 10602
+bonding.txt: 98243
+bond_ipv6.c: 5432
+bond_main.c: 137243
+bond_sysfs.c: 42050
+bonito64.h: 16247
+bonito-irq.c: 2465
+booke.c: 16034
+booke_emulate.c: 6991
+booke.h: 2429
+booke_interrupts.S: 11644
+booke_wdt.c: 4745
+boot: 4096
+boot2.H16: 14566
+boot.c: 8143
+bootcode.bin.ihex: 604
+boot-elf: 4096
+bootflag.c: 1698
+bootgraph.pl: 5753
+boot.h: 1195
+boot.H16: 14980
+boot_head.S: 4023
+bootinfo.h: 3250
+Booting: 4704
+booting.txt: 5755
+booting-without-of.txt: 61721
+boot.ld: 812
+boot.lds.S: 927
+bootloader.c: 3823
+bootloader.lds: 501
+bootlogo.h: 236895
+bootlogo.pl: 165
+bootmem.c: 19242
+bootmem.h: 4841
+boot-options.txt: 12803
+bootp: 4096
+bootparam.h: 1530
+bootp.c: 5689
+bootp.lds: 695
+bootpz.c: 13415
+boot-redboot: 4096
+Boot.S: 2820
+bootstd.h: 4709
+bootstr_32.c: 1207
+bootstr_64.c: 1055
+bootstrap.asm: 2924
+bootstrap.bin.ihex: 1080
+bootstrap.S: 4829
+boot.txt: 35058
+bootwrapper.txt: 7768
+bootx.h: 5211
+bootx_init.c: 16762
+bottom_half.h: 224
+bounce.c: 6616
+bounds.c: 526
+bpa10x.c: 10967
+bpck6.c: 6457
+bpck.c: 9505
+bpqether.c: 14923
+bpqether.h: 952
+bq24022.c: 4006
+bq24022.h: 728
+bq27x00_battery.c: 8343
+br2684.c: 20774
+braille: 4096
+braille_console.c: 8194
+braille-console.txt: 1458
+branch.c: 5609
+branches: 4096
+branch.h: 794
+br.c: 2297
+brcmphy.h: 277
+brd.c: 13994
+br_device.c: 4305
+break.h: 1512
+break.S: 20777
+brec.c: 13153
+br_fdb.c: 10129
+br_forward.c: 3296
+brg.txt: 450
+bridge: 4096
+bridge.h: 29862
+bridge-regs.h: 1121
+bridge.txt: 382
+br_if.c: 9454
+br_input.c: 4146
+br_ioctl.c: 9353
+briq_panel.c: 5383
+brl_emu.c: 5592
+br_netfilter.c: 28764
+br_netlink.c: 4931
+br_notify.c: 2202
+broadcom.c: 17870
+broadsheetfb.c: 13698
+broadsheetfb.h: 1727
+br_private.h: 7906
+br_private_stp.h: 1654
+br_stp_bpdu.c: 5251
+br_stp.c: 11134
+br_stp_if.c: 7340
+br_stp_timer.c: 4651
+br_sysfs_br.c: 12447
+br_sysfs_if.c: 6540
+Brutus: 1927
+bsbe1.h: 3346
+bsd_comp.c: 29587
+bsg.c: 23964
+bsg.h: 3096
+bsr.c: 8971
+bsru6.h: 3855
+bssdb.c: 59681
+bssdb.h: 9978
+bt3c_cs.c: 16786
+bt431.h: 5854
+bt455.h: 2096
+bt819.c: 14549
+bt819.h: 1082
+bt848.h: 11788
+bt856.c: 7085
+bt866.c: 6222
+bt878.c: 16114
+bt878.h: 4113
+bt87x.c: 30530
+Bt87x.txt: 2597
+bt8xx: 4096
+bt8xxgpio.c: 8476
+bt8xxgpio.txt: 4402
+bt8xx.txt: 3940
+btaudio: 3104
+btcx-risc.c: 6470
+btcx-risc.h: 863
+bte.c: 12913
+bte_error.c: 7665
+bte.h: 7765
+btext.c: 38463
+btext.h: 858
+btfixup.c: 10268
+btfixup.h: 7304
+btfixupprep.c: 11589
+btnode.c: 8474
+btnode.h: 2067
+btree.c: 8032
+btree.h: 5488
+btrfs: 4096
+btrfs_inode.h: 4339
+btrfs.txt: 2918
+btsdio.c: 8446
+bttv: 4096
+bttv-audio-hook.c: 9617
+bttv-audio-hook.h: 1126
+bttv-cards.c: 151213
+bttv-driver.c: 121604
+bttv-gpio.c: 4858
+bttv.h: 14877
+bttv-i2c.c: 10677
+bttv-if.c: 2894
+bttv-input.c: 10597
+bttvp.h: 14108
+bttv-risc.c: 25965
+bttv-vbi.c: 12835
+btuart_cs.c: 15857
+btusb.c: 24625
+buddha.c: 5673
+budget-av.c: 45832
+budget.c: 23026
+budget-ci.c: 46442
+budget-core.c: 17319
+budget.h: 3030
+budget-patch.c: 20598
+buffer.c: 3308
+buffer-format.txt: 4606
+buffer_head.h: 11463
+buffer_head_io.c: 10961
+buffer_head_io.h: 2416
+buffer_icap.c: 10726
+buffer_icap.h: 2297
+buffer_sync.c: 13744
+buffer_sync.h: 432
+bug.c: 423
+bugfix.S: 14062
+bug.h: 400
+BUG-HUNTING: 8326
+BUGS: 235
+bugs_64.c: 778
+bugs.c: 1893
+bugs.h: 451
+BUGS-parport: 319
+build.c: 39439
+builddeb: 5872
+buildtar: 2659
+builtin-annotate.c: 29512
+builtin.h: 1035
+builtin-help.c: 11520
+builtin-list.c: 408
+builtin-record.c: 14786
+builtin-report.c: 35243
+builtin-stat.c: 13788
+builtin-top.c: 17061
+bunzip2.h: 258
+burgundy.c: 25045
+burgundy.h: 4105
+bus.c: 8958
+busctl-regs.h: 2071
+bus.h: 950
+BusLogic.c: 151498
+BusLogic.h: 40976
+BusLogic.txt: 26440
+bus-osm.c: 4125
+busses: 4096
+bust_spinlocks.c: 636
+bus.txt: 4536
+bus_watcher.c: 7864
+butterfly: 2990
+button.c: 12060
+buttons.c: 1516
+bvme6000: 4096
+bvme6000_defconfig: 24611
+bvme6000hw.h: 3490
+bvme6000_scsi.c: 3343
+bw2.c: 9440
+bw-qcam.c: 25715
+bw-qcam.h: 2049
+byteorder: 4096
+byteorder.h: 277
+bzero.S: 3581
+c101.c: 11218
+c16e9e8bb74f14f4504305957e4346e7fc46ea: 296
+c2_ae.c: 9166
+c2_ae.h: 3338
+c2_alloc.c: 4106
+c2.c: 33727
+c2_cm.c: 9984
+c2_cq.c: 10526
+c2.h: 13957
+c2_intr.c: 5630
+c2k.c: 3705
+c2k_defconfig: 48649
+c2k.dts: 8777
+c2_mm.c: 8862
+c2_mq.c: 4622
+c2_mq.h: 3238
+c2p_core.h: 2688
+c2_pd.c: 3012
+c2p.h: 631
+c2p_iplan2.c: 3576
+c2port: 4096
+c2port-duramar2150.c: 3241
+c2port.h: 1788
+c2port.txt: 2848
+c2p_planar.c: 3697
+c2_provider.c: 21747
+c2_provider.h: 4101
+c2_qp.c: 25022
+c2_rnic.c: 16782
+c2_status.h: 5103
+c2_user.h: 2415
+c2_vq.c: 7741
+c2_vq.h: 2530
+c2_wr.h: 35475
+c3000_defconfig: 37418
+c4.c: 33871
+c67x00: 4096
+c67x00-drv.c: 6069
+c67x00.h: 9392
+c67x00-hcd.c: 10012
+c67x00-hcd.h: 4298
+c67x00-ll-hpi.c: 12221
+c67x00-sched.c: 30459
+c6xdigio.c: 13668
+ca0106: 4096
+ca0106.h: 37992
+ca0106_main.c: 59396
+ca0106_mixer.c: 27767
+ca0106_proc.c: 14457
+cacheasm.h: 3274
+cache.c: 10301
+cache-c.c: 733
+cachectl.h: 752
+cache-debugfs.c: 3861
+cache-fa.S: 5726
+cachefeatures.txt: 1538
+cache-feroceon-l2.c: 8394
+cache-feroceon-l2.h: 358
+cachefiles: 4096
+cachefiles.txt: 17132
+cacheflush_32.h: 3544
+cacheflush_64.h: 2543
+cacheflush.h: 7154
+cacheflush_mm.h: 4194
+cache-flush-mn10300.S: 5528
+cacheflush_no.h: 2672
+cacheflush.S: 1897
+cache.h: 4660
+cacheinfo.c: 20221
+cacheinfo.h: 240
+cacheinit.c: 1960
+cache-l2x0.c: 3064
+cache-l2x0.h: 1931
+cache-lock.txt: 1222
+cache-mn10300.S: 6477
+cacheops.h: 2183
+cache-page.c: 1964
+cache.S: 2858
+cache-sh2a.c: 3241
+cache-sh2.c: 2044
+cache-sh3.c: 2486
+cache-sh4.c: 20825
+cache-sh5.c: 27270
+cache-sh7705.c: 5050
+cachetlb.txt: 16265
+cachetype.h: 1643
+cache-v3.S: 3174
+cache-v4.S: 3364
+cache-v4wb.S: 5731
+cache-v4wt.S: 4411
+cache-v6.S: 6450
+cache-v7.S: 7015
+cache-xsc3l2.c: 5806
+caching: 4096
+cafe_ccic: 2424
+cafe_ccic.c: 53700
+cafe_ccic-regs.h: 6845
+cafe_nand.c: 25500
+cagg.c: 110445
+cagg.h: 15067
+ca.h: 3022
+caiaq: 4096
+caleb.c: 3138
+caleb.h: 636
+calgary.h: 2452
+calib.c: 28905
+calib.h: 3835
+calibrate.c: 5121
+callback.c: 9965
+callback.h: 2994
+callback_proc.c: 6012
+callbacks.c: 7878
+callbacks.h: 1495
+callback_srm.S: 2840
+callbacks.txt: 4860
+callback_xdr.c: 18050
+callc.c: 48919
+callchain.c: 3746
+callchain.h: 711
+call_hpt.h: 3078
+calling.h: 5596
+call_o32.S: 2534
+call_pci.h: 7934
+call_sm.h: 1270
+calls.S: 10619
+cam60_defconfig: 28038
+camellia.c: 35950
+camera.h: 1504
+cam.h: 4590
+ca_midi.c: 8689
+ca_midi.h: 2024
+can: 4096
+can.h: 3326
+can.txt: 35254
+canyonlands_defconfig: 25711
+canyonlands.dts: 14369
+capability.c: 8203
+capability.h: 17864
+capability.txt: 618
+capcella_defconfig: 18424
+capcella.h: 1486
+capi: 4096
+capi20.h: 29357
+capi.c: 33038
+capicmd.h: 4663
+capidrv.c: 64650
+capidrv.h: 4862
+capidtmf.c: 26932
+capidtmf.h: 3726
+capifs.c: 5266
+capifs.h: 360
+capifunc.c: 31377
+capifunc.h: 903
+capi.h: 10360
+capilib.c: 4606
+capilli.h: 3567
+capimain.c: 3336
+capiutil.c: 30023
+capiutil.h: 14649
+capmode.c: 8041
+caps.c: 5160
+capture.c: 9562
+capture.h: 702
+card: 4096
+cardbus.c: 6323
+card.c: 10228
+card.h: 4366
+CARDLIST.au0828: 527
+CARDLIST.bttv: 9061
+CARDLIST.cx23885: 1693
+CARDLIST.cx88: 5876
+CARDLIST.em28xx: 4880
+CARDLIST.ivtv: 1163
+CARDLIST.saa7134: 9829
+CARDLIST.tuner: 2995
+CARDLIST.usbvision: 4940
+Cards: 26708
+cards.txt: 4752
+cardtype.h: 39894
+carmel.h: 1969
+carmeva_defconfig: 13180
+carminefb.c: 22690
+carminefb.h: 2251
+carminefb_regs.h: 6940
+carta_random.S: 1032
+casio-e55: 4096
+cassini.bin.ihex: 6246
+cassini.c: 145494
+cassini.h: 125724
+cast5.c: 34939
+cast6.c: 22021
+catalog.c: 10749
+catas.c: 4281
+catc.c: 24085
+cats-hw.c: 2052
+cats-pci.c: 1313
+cavium-octeon: 4096
+cavium-octeon_defconfig: 22786
+cayman_defconfig: 31979
+cb710: 4096
+cb710.h: 6584
+cb710-mmc.c: 22406
+cb710-mmc.h: 3337
+cbaf.c: 20405
+cbc.c: 7621
+cb_das16_cs.c: 25977
+cbe_cpufreq.c: 4980
+cbe_cpufreq.h: 578
+cbe_cpufreq_pervasive.c: 2924
+cbe_cpufreq_pmi.c: 3695
+cbe_powerbutton.c: 3019
+cbe_regs.c: 6692
+cbe_thermal.c: 10724
+cb_pcidas64.c: 122559
+cb_pcidas.c: 54058
+cb_pcidda.c: 24298
+cb_pcidio.c: 9309
+cb_pcimdas.c: 14161
+cb_pcimdda.c: 15282
+cchips: 4096
+ccid2.c: 21699
+ccid2.h: 2480
+ccid3.c: 29348
+ccid3.h: 6401
+ccid.c: 5450
+ccid.h: 7568
+ccids: 4096
+ccio-dma.c: 48900
+ccio-rm-dma.c: 5203
+cciss.c: 121676
+cciss_cmd.h: 8834
+cciss.h: 7343
+cciss_ioctl.h: 6805
+cciss_scsi.c: 49769
+cciss_scsi.h: 3184
+cciss.txt: 6396
+ccm.c: 22059
+ccmd.c: 47173
+ccwdev.h: 6880
+ccwgroup.c: 16375
+ccwgroup.h: 2479
+cd1400.h: 7059
+cd1865.h: 13309
+cd32.txt: 535
+cda2df87ba4ecc7988be7a45d01645e11c9f4c: 307
+cdb89712.c: 5870
+cdc2.c: 6912
+cdc-acm.c: 43081
+cdc-acm.h: 3737
+cdc_eem.c: 9394
+cdc_ether.c: 17432
+cdc.h: 7100
+cdc_subset.c: 10970
+cdc-wdm.c: 19634
+cdefBF512.h: 1386
+cdefBF514.h: 5819
+cdefBF516.h: 16666
+cdefBF518.h: 16668
+cdefBF51x_base.h: 71524
+cdefBF522.h: 1386
+cdefBF525.h: 26762
+cdefBF527.h: 37609
+cdefBF52x_base.h: 71524
+cdefBF532.h: 48301
+cdefBF534.h: 124785
+cdefBF537.h: 13187
+cdefBF538.h: 148152
+cdefBF539.h: 16826
+cdefBF542.h: 35078
+cdefBF544.h: 59758
+cdefBF547.h: 48769
+cdefBF548.h: 98262
+cdefBF549.h: 115636
+cdefBF54x_base.h: 169306
+cdefBF561.h: 117485
+cdef_LPBlackfin.h: 20055
+cdev.c: 25135
+cdev.h: 677
+cdk.h: 12770
+cdrom: 4096
+cdrom.c: 99243
+cdrom.h: 36224
+cdrom-standard.tex: 51371
+cdrom.txt: 19223
+cds.txt: 21022
+ce6230.c: 8126
+ce6230.h: 2306
+ceiva.c: 7563
+cell: 4096
+cell.c: 9326
+cell_defconfig: 37867
+celleb_defconfig: 32091
+celleb_pci.c: 12369
+celleb_pci.h: 1402
+celleb_scc_epci.c: 10052
+celleb_scc.h: 7871
+celleb_scc_pciex.c: 15023
+celleb_scc_sio.c: 2600
+celleb_scc_uhc.c: 2518
+celleb_setup.c: 6097
+cell_edac.c: 7394
+cell-pmu.h: 4133
+cell-regs.h: 9211
+centaur.c: 5432
+central.c: 6181
+CERF: 1215
+cerf.c: 3449
+cerfcube_defconfig: 17978
+cerf.h: 810
+cerr-sb1.c: 16742
+cevt-bcm1480.c: 4444
+cevt-ds1287.c: 2833
+cevt-gt641xx.c: 3662
+cevt-r4k.c: 5115
+cevt-r4k.h: 1421
+cevt-sb1250.c: 4380
+cevt-smtc.c: 8920
+cevt-txx9.c: 5694
+cex-gen.S: 1009
+cex-oct.S: 1574
+cex-sb1.S: 4707
+cfag12864b: 3173
+cfag12864b.c: 8350
+cfag12864b-example.c: 5897
+cfag12864bfb.c: 4656
+cfag12864b.h: 2147
+cfbcopyarea.c: 11312
+cfbfillrect.c: 8940
+cfbimgblt.c: 8396
+cfe: 4096
+cfe_api.c: 11219
+cfe_api.h: 3833
+cfe_api_int.h: 4031
+cfe.c: 8423
+cfe_console.c: 1737
+cfe_error.h: 2197
+cfg80211.c: 10563
+cfg80211.h: 1079
+cfg.c: 35379
+cfg.h: 155
+cfi_cmdset_0001.c: 73671
+cfi_cmdset_0002.c: 53117
+cfi_cmdset_0020.c: 38615
+cfi_endian.h: 1238
+cfi_flagadm.c: 3947
+cfi.h: 13714
+cfi_probe.c: 11670
+cfi_util.c: 5934
+cfm.c: 16482
+cfq-iosched.c: 65456
+cfunc.c: 33674
+cfunc.h: 23021
+cg14.c: 15044
+cg3.c: 11707
+cg6.c: 22284
+cgroup.c: 95997
+cgroup_debug.c: 2057
+cgroup_freezer.c: 9146
+cgroup.h: 15604
+cgroups: 4096
+cgroupstats.h: 2155
+cgroupstats.txt: 1307
+cgroups.txt: 21831
+cgroup_subsys.h: 697
+ch341.c: 15479
+ch9.h: 24667
+chafsr.h: 9671
+chainiv.c: 8763
+changebit.S: 617
+ChangeLog: 18049
+CHANGELOG: 18049
+ChangeLog.1992-1997: 59954
+ChangeLog.arcmsr: 6754
+ChangeLog.history: 25741
+ChangeLog.ide-cd.1994-2004: 15586
+ChangeLog.ide-floppy.1996-2002: 4068
+ChangeLog.ide-tape.1995-2002: 16249
+ChangeLog.ips: 5304
+ChangeLog.lpfc: 89671
+ChangeLog.megaraid: 23975
+ChangeLog.megaraid_sas: 12624
+ChangeLog.ncr53c8xx: 22786
+ChangeLog.sym53c8xx: 29464
+ChangeLog.sym53c8xx_2: 6011
+Changes: 4725
+CHANGES: 4725
+chan_kern.c: 13142
+chan_kern.h: 1587
+chan_user.c: 7101
+chan_user.h: 1710
+char: 4096
+char_dev.c: 13712
+chb.c: 5975
+ch.c: 24601
+check-all.sh: 434
+check.c: 3835
+check-gas: 277
+check-gas-asm.S: 37
+check.h: 551
+checkincludes.pl: 529
+checkkconfigsymbols.sh: 1851
+checklist.c: 8211
+checklist.txt: 14315
+check-lxdialog.sh: 1653
+check-model.c: 47
+checkpatch.pl: 70566
+checkpoint.c: 21921
+checks.c: 15663
+check-segrel.lds: 203
+check-segrel.S: 45
+check-serialize.S: 41
+check.sh: 214
+check_signature.c: 599
+checkstack.pl: 5332
+checksum_32.h: 4895
+checksum_32.S: 4739
+checksum_64.h: 5349
+checksum_64.S: 6192
+checksum.c: 4610
+checksumcopy.S: 2455
+checksum.h: 6169
+checksum_mm.h: 3391
+checksum_no.h: 3074
+checksum.S: 9073
+checksyscalls.sh: 5661
+check-text-align.S: 69
+checkversion.pl: 1867
+chelsio: 4096
+cherrs.S: 15233
+chio.h: 5287
+chip.c: 15518
+chip.h: 5099
+chipram.c: 3350
+chipreg.c: 2405
+chips: 4096
+chipsfb.c: 12752
+chlist.h: 30
+chmc.c: 20666
+chmctrl.h: 8057
+chp.c: 17406
+chp.h: 1489
+chpid.h: 1040
+chrp: 4096
+chrp32_defconfig: 40160
+chrp.h: 308
+chsc.c: 22534
+chsc.h: 2470
+chsc_sch.c: 19838
+chsc_sch.h: 179
+chunk.c: 8172
+ci13xxx_udc.c: 69484
+ci13xxx_udc.h: 6227
+cia.c: 4343
+cicada.c: 3994
+cic.c: 14355
+cifs: 4096
+cif.S: 1000
+cifsacl.c: 21375
+cifsacl.h: 2405
+cifs_debug.c: 21856
+cifs_debug.h: 2329
+cifs_dfs_ref.c: 9982
+cifsencrypt.c: 12795
+cifsencrypt.h: 1256
+cifsfs.c: 31585
+cifsfs.h: 4854
+cifs_fs_sb.h: 2432
+cifsglob.h: 23265
+cifspdu.h: 81322
+cifsproto.h: 16968
+cifssmb.c: 173618
+cifs_spnego.c: 4357
+cifs_spnego.h: 1628
+cifs.txt: 2406
+cifs_unicode.c: 7190
+cifs_unicode.h: 8878
+cifs_uniupr.h: 12874
+cimax2.c: 11227
+cimax2.h: 1921
+cinergyT2-core.c: 6717
+cinergyT2-fe.c: 8456
+cinergyT2.h: 3001
+cinit.c: 59044
+cio: 4096
+cio.c: 27748
+cio_debug.h: 849
+cio.h: 4879
+cipher.c: 7783
+cipso_ipv4.c: 64343
+cipso_ipv4.h: 7616
+cipso_ipv4.txt: 2252
+circ_buf.h: 1000
+cirrusfb.c: 77607
+cirrusfb.txt: 1934
+cirrus.h: 8939
+cis: 4096
+ciscode.h: 3364
+cisreg.h: 2804
+cistpl.c: 38770
+cistpl.h: 14596
+ci.txt: 6753
+ck804xrom.c: 10948
+class: 4096
+class.c: 12662
+class_to_string.h: 1508
+class.txt: 4758
+claw.c: 115821
+claw.h: 14619
+clcd.c: 5668
+clcd.h: 6601
+cleanfile: 3492
+cleanpatch: 5132
+cleanup.c: 28008
+clearbit.S: 613
+clear_page_64.S: 969
+clear_page.S: 401
+clear_user.S: 2687
+clep7312.c: 1478
+client.c: 45575
+client.h: 7071
+clinkage.h: 27
+clip.c: 24997
+clk.c: 774
+clkdev.c: 3488
+clkdev.h: 122
+clkgen_defs_asm.h: 7393
+clkgen_defs.h: 5421
+clk.h: 4465
+clk_interface.h: 683
+clksupport.h: 844
+clk.txt: 1173
+clnt.c: 42336
+clnt.h: 5095
+clntlock.c: 6865
+clntproc.c: 21263
+clock24xx.c: 22943
+clock24xx.h: 82888
+clock34xx.c: 31225
+clock34xx.h: 84973
+clock-7x01a.c: 4770
+clock.c: 6387
+clockchips.h: 4535
+clock-cpg.c: 5839
+clock-dclk.c: 4423
+clockdomain.c: 16366
+clockdomain.h: 3231
+clockdomains.h: 9108
+clockevents.c: 6244
+clock_getres.S: 1020
+clock_gettime.S: 2948
+clock.h: 1320
+clock_imx21.c: 23302
+clock_imx27.c: 22042
+clock-imx35.c: 13016
+clocking.txt: 1582
+clocks.c: 2153
+clocks.h: 2092
+clock-sh3.c: 2204
+clock-sh4-202.c: 3818
+clock-sh4.c: 1967
+clock-sh5.c: 1848
+clock-sh7201.c: 1982
+clock-sh7203.c: 1936
+clock-sh7206.c: 1931
+clock-sh7343.c: 6574
+clock-sh7366.c: 6500
+clock-sh7619.c: 1741
+clock-sh7705.c: 2140
+clock-sh7706.c: 2055
+clock-sh7709.c: 2302
+clock-sh7710.c: 1874
+clock-sh7712.c: 1592
+clock-sh7722.c: 5683
+clock-sh7723.c: 7223
+clock-sh7724.c: 7654
+clock-sh7763.c: 2503
+clock-sh7770.c: 1749
+clock-sh7780.c: 2630
+clock-sh7785.c: 3792
+clock-sh7786.c: 3252
+clock-shx3.c: 2959
+clocks-init.c: 2524
+clocksource: 4096
+clocksource.c: 16881
+clocksource.h: 11531
+clock.txt: 2443
+clone.c: 1295
+clps7111.h: 5605
+clps711x.c: 13340
+clps711xfb.c: 10751
+cls_api.c: 14078
+cls_basic.c: 6522
+cls_cgroup.c: 6506
+cls_flow.c: 15621
+cls_fw.c: 8499
+cls_route.c: 12482
+cls_rsvp6.c: 768
+cls_rsvp.c: 761
+cls_rsvp.h: 14927
+cls_tcindex.c: 11961
+cls_u32.c: 16562
+cluster: 4096
+cluster.c: 14916
+cluster.h: 3649
+clut_vga16.ppm: 230
+cm109.c: 24186
+cm4000_cs.c: 50839
+cm4000_cs.h: 1822
+cm4040_cs.c: 17240
+cm4040_cs.h: 1435
+cm5200_defconfig: 30374
+cm5200.dts: 5770
+cm9780.h: 1648
+cma.c: 76031
+cmap_xfbdev.txt: 1927
+cm_bf527.c: 24357
+CM-BF527_defconfig: 33449
+cm_bf533.c: 10441
+CM-BF533_defconfig: 17784
+cm_bf537.c: 15825
+CM-BF537E_defconfig: 22519
+CM-BF537U_defconfig: 18739
+cm_bf548.c: 20079
+CM-BF548_defconfig: 31514
+cm_bf561.c: 11463
+CM-BF561_defconfig: 19376
+cmb.h: 2128
+cm.c: 108467
+cmd640.c: 22942
+cmd64x.c: 13588
+cmdblk.h: 1843
+cmd.c: 12040
+cmd.h: 3292
+cmdline.c: 774
+cmdlinepart.c: 9405
+cmdpkt.h: 4387
+cmdresp.c: 16004
+cmf.c: 34004
+cm.h: 3735
+CMI8330: 3229
+cmi8330.c: 22466
+cmipci.c: 104710
+CMIPCI.txt: 9357
+cmmap.c: 75502
+cmm.c: 74564
+cmm_data_2860.c: 34802
+cmm_data_2870.c: 28944
+cmm_data.c: 42
+cmm_info.c: 42
+cmm_sanity.c: 44
+cm_msgs.h: 21469
+cmmsta.c: 182636
+cmm_sync.c: 42
+cmm_wpa.c: 41
+cmode.S: 4744
+cmpdi2.c: 435
+cmp.h: 486
+cmpxchg_32.h: 9438
+cmpxchg_64.h: 4582
+cmpxchg.c: 1500
+cmpxchg-grb.h: 2053
+cmpxchg.h: 3173
+cmpxchg-irq.h: 796
+cmpxchg-llsc.h: 1420
+cmpxchg-local.h: 1369
+cm-regbits-24xx.h: 14321
+cm-regbits-34xx.h: 26454
+cm_sbs.c: 3007
+cmservice.c: 13501
+cmtdef.h: 23113
+cmt.h: 1786
+cmtp: 4096
+cmtp.h: 3099
+cmu.c: 5791
+cm-x255.c: 5295
+cm-x270.c: 7295
+cmx270_nand.c: 6063
+cm-x2xx.c: 11698
+cm_x2xx_defconfig: 48725
+cm-x2xx-pci.c: 5404
+cm-x2xx-pci.h: 460
+cm-x300.c: 11712
+cm_x300_defconfig: 39363
+cn_cifs.h: 1323
+cnic.c: 66079
+cnic_defs.h: 16086
+cnic.h: 7097
+cnic_if.h: 7270
+cnode.c: 4219
+cn_proc.c: 7019
+cn_proc.h: 3206
+cn_queue.c: 6122
+cnt32_to_63.h: 3193
+cn_test.c: 4483
+cnv_float.h: 13001
+coalesced_mmio.c: 3435
+coalesced_mmio.h: 652
+cobalt: 4096
+cobalt_btns.c: 4645
+cobalt_defconfig: 29161
+cobalt.h: 614
+cobalt_lcdfb.c: 7871
+cobra.c: 6747
+c-octeon.c: 7206
+coda: 4096
+coda_cache.h: 673
+coda_fs_i.h: 1700
+coda.h: 17708
+coda_int.h: 434
+coda_linux.c: 5125
+coda_linux.h: 2883
+coda_psdev.h: 3200
+coda.txt: 49725
+code16gcc.h: 388
+codecs: 12288
+codec.txt: 5826
+code-patching.c: 12715
+code-patching.h: 1744
+CodingStyle: 29820
+coff.h: 12413
+coh901327_wdt.c: 14160
+coid.c: 75657
+coldfire: 4096
+coldfire.h: 1492
+colibri.h: 1059
+colibri-pxa270.c: 3375
+colibri_pxa270_defconfig: 42182
+colibri-pxa300.c: 4795
+colibri_pxa300_defconfig: 27217
+colibri-pxa320.c: 4735
+colibri-pxa3xx.c: 3817
+collate.c: 3675
+collate.h: 1705
+collie.c: 7329
+collie_defconfig: 18902
+collie.h: 3779
+color.c: 4817
+color.h: 1187
+com20020.c: 10296
+com20020_cs.c: 10301
+com20020.h: 3624
+com20020-isa.c: 5185
+com20020-pci.c: 5701
+com90io.c: 11118
+com90xx.c: 18469
+comedi: 4096
+comedi_bond.c: 17048
+comedi_compat32.c: 17423
+comedi_compat32.h: 1861
+comedidev.h: 16882
+comedi_fc.c: 3317
+comedi_fc.h: 2462
+comedi_fops.c: 60764
+comedi_fops.h: 191
+comedi.h: 29999
+comedi_ksyms.c: 2407
+comedilib.h: 7998
+comedi_parport.c: 9181
+comedi_pci.h: 1605
+comedi_test.c: 14760
+command.c: 8449
+command.h: 8829
+command-list.txt: 288
+commands.c: 25775
+commands.h: 11936
+comm.c: 4950
+commctrl.c: 23882
+comminit.c: 13072
+commit.c: 32855
+commit-msg.sample: 894
+common: 4096
+common.c: 25712
+commoncap.c: 27617
+common_defconfig: 11971
+common.h: 12299
+CommonIO: 4651
+common.lds.S: 2212
+common-offsets.h: 1451
+common-pci.c: 12979
+common_perm_to_string.h: 1100
+common-smdk.c: 4474
+common-smdk.h: 451
+commproc.c: 8070
+commproc.h: 25607
+commsup.c: 51665
+CompactFlash: 1735
+compal-laptop.c: 8886
+comparator.h: 5271
+compartmentalisation.txt: 1944
+compat_audit.c: 664
+compat_binfmt_elf.c: 3496
+compat.c: 2196
+compat_exec_domain.c: 741
+compat.h: 369
+compatibility-list.txt: 1345
+compat_ioctl.c: 7581
+compat_ioctl.h: 4449
+compat_linux.c: 21127
+compat_linux.h: 7320
+compatmac.h: 332
+compat_mq.c: 4132
+compat_ptrace.h: 2572
+compat_rt_sigframe.h: 1846
+compat_signal.c: 17351
+compat_signal.h: 57
+compat-signal.h: 2664
+compat_ucontext.h: 552
+compat_wrapper.S: 48644
+compiler-gcc3.h: 823
+compiler-gcc4.h: 1407
+compiler-gcc.h: 3118
+compiler.h: 4524
+compiler-intel.h: 746
+completion.h: 3226
+composite.c: 30121
+composite.h: 14982
+compr.c: 10363
+compress.c: 1839
+compressed: 4096
+compress.h: 974
+compression.c: 18461
+compression.h: 1742
+compr.h: 3025
+compr_lzo.c: 2312
+compr_rtime.c: 2867
+compr_rubin.c: 8932
+compr_zlib.c: 5850
+computone.txt: 17570
+comstats.h: 3120
+con3215.c: 30319
+con3270.c: 15947
+concap.h: 3778
+concat.h: 454
+conditional.c: 11225
+conditional.h: 617
+conex.c: 32880
+conf.c: 11969
+confdata.c: 19322
+config: 2695
+config3270.sh: 2009
+config.c: 24033
+config.c.in: 496
+config_defs_asm.h: 5405
+config_defs.h: 4370
+configfs: 4096
+configfs_example_explicit.c: 12619
+configfs_example_macros.c: 11555
+configfs.h: 8837
+configfs_internal.h: 5080
+configfs.txt: 21464
+config.h: 1142
+config.mk: 7917
+config-osm.c: 2170
+config_roms.c: 4579
+config_roms.h: 588
+configs: 4096
+configs.c: 2818
+configuring.txt: 4139
+cong.c: 12223
+conmakehash.c: 6121
+connect.c: 38
+connection.c: 13263
+connector: 4096
+connector.c: 11327
+connector.h: 4405
+connector.txt: 6503
+conntrack.h: 810
+consistent.c: 3927
+console: 4096
+console_32.c: 2071
+console_64.c: 1575
+console.c: 7199
+console.h: 2080
+consolemap.c: 22885
+consolemap.h: 1029
+console_struct.h: 5109
+console.txt: 5814
+constants.c: 49479
+constants.h: 2939
+const.h: 596
+constraint.h: 2093
+consumer.h: 8894
+consumer.txt: 6869
+container.c: 7095
+container.h: 198
+contec_pci_dio.c: 5763
+context.c: 1678
+context.h: 3703
+context.S: 6412
+contig.c: 7791
+contregs.h: 3351
+CONTRIBUTORS: 495
+contributors.txt: 3035
+control.c: 43620
+control_compat.c: 11584
+controlfb.c: 27775
+controlfb.h: 4696
+control.h: 9928
+ControlNames.txt: 2085
+control_w.h: 1820
+cookie.c: 13149
+coprocessor.h: 5194
+coprocessor.S: 7277
+coproc.h: 362
+cops.c: 29453
+cops_ffdrv.h: 21384
+cops.h: 1400
+cops_ltdrv.h: 9491
+cops.txt: 2768
+copy_32.S: 9822
+copy.c: 2883
+copy_from_user.S: 1986
+COPYING: 18693
+COPYING.LIB: 25265
+copy_in_user.S: 1659
+copy_page_64.S: 2337
+copypage_64.S: 2011
+copypage-fa.c: 2349
+copypage-feroceon.c: 3145
+copy_page_mck.S: 5871
+copy_page.S: 532
+copypage-v3.c: 2110
+copypage-v4mc.c: 3649
+copypage-v4wb.c: 2820
+copypage-v4wt.c: 2403
+copypage-v6.c: 3822
+copypage-xsc3.c: 2840
+copypage-xscale.c: 3881
+copy.S: 1321
+copy_template.S: 5586
+copy_to_user.S: 2016
+copy_user_64.S: 5420
+copyuser_64.S: 9936
+copy_user_memcpy.S: 5245
+copy_user_nocache_64.S: 2468
+copy_user.S: 2573
+core: 4096
+core_apecs.c: 10176
+core_apecs.h: 17281
+coreb.c: 1844
+core.c: 24656
+core-card.c: 15330
+core-cdev.c: 37224
+core_cia.c: 33365
+core_cia.h: 15760
+core-device.c: 32375
+coredump.c: 5613
+core.h: 5921
+core_irongate.c: 10486
+core_irongate.h: 6754
+core-iso.c: 8971
+core_lca.c: 14096
+core_lca.h: 11596
+core_locking.txt: 4081
+core_marvel.c: 25082
+core_marvel.h: 9350
+core_mcpcia.c: 16238
+core_mcpcia.h: 11691
+core_polaris.c: 4523
+core_polaris.h: 2948
+core_priv.h: 1817
+core_t2.c: 16416
+core_t2.h: 20353
+coretemp: 1672
+coretemp.c: 11947
+core_titan.c: 20020
+core_titan.h: 11455
+core-topology.c: 15332
+core-transaction.c: 27218
+core_tsunami.c: 13148
+core_tsunami.h: 8469
+core.txt: 804
+core_wildfire.c: 17607
+core_wildfire.h: 8616
+corgi.c: 9471
+corgi_defconfig: 47365
+corgi.h: 4831
+corgikbd.c: 12406
+corgi_lcd.c: 16845
+corgi_lcd.h: 421
+corgi_pm.c: 7155
+corgi_ssp.c: 7384
+corgi_ts.c: 9648
+cosa.c: 59334
+cosa.h: 4349
+country.h: 4726
+cow.h: 1883
+cow_sys.h: 692
+cow_user.c: 12166
+coyote.h: 949
+coyote-pci.c: 1459
+coyote-setup.c: 3158
+cp1emu.c: 28793
+cp210x.c: 24866
+cp437.uni: 4426
+cp6.c: 1398
+cpc925_edac.c: 30540
+cpc.h: 16904
+cpci_hotplug_core.c: 17267
+cpci_hotplug.h: 3193
+cpci_hotplug_pci.c: 7823
+cpcihp_generic.c: 6519
+cpcihp_zt5550.c: 8619
+cpcihp_zt5550.h: 2730
+cpc_int.h: 2284
+cpcmd.c: 3087
+cpcmd.h: 1259
+cpc-usb: 4096
+cpc-usb_drv.c: 28935
+cpcusb.h: 2856
+cpfile.c: 24964
+cpfile.h: 1680
+cphy.h: 6427
+cpia2: 4096
+cpia2_core.c: 77737
+cpia2dev.h: 1919
+cpia2.h: 13192
+cpia2_overview.txt: 2357
+cpia2_registers.h: 17890
+cpia2_usb.c: 25426
+cpia2_v4l.c: 50779
+cpia.c: 114212
+cpia.h: 11791
+cpia_pp.c: 22139
+cpia_usb.c: 16084
+cp_intc.c: 3984
+cp_intc.h: 2302
+cpl5_cmd.h: 12577
+cplb.h: 4597
+cplbinfo.c: 3920
+cplbinit.c: 3353
+cplbinit.h: 2491
+cplbmgr.c: 9975
+cplb-mpu: 4096
+cplb-nompu: 4096
+cpm: 4096
+cpm1.c: 19027
+cpm1.h: 23000
+cpm2.c: 8657
+cpm2.h: 51335
+cpm2_pic.c: 7028
+cpm2_pic.h: 177
+cpmac.c: 35475
+cpm_common.c: 8715
+cpm.h: 3601
+cpm_qe: 4096
+cpm-serial.c: 5276
+cpm.txt: 2279
+cpm_uart: 4096
+cpm_uart_core.c: 34184
+cpm_uart_cpm1.c: 4062
+cpm_uart_cpm1.h: 630
+cpm_uart_cpm2.c: 4728
+cpm_uart_cpm2.h: 692
+cpm_uart.h: 3846
+cppi_dma.c: 44672
+cppi_dma.h: 3257
+cpqarray.c: 48267
+cpqarray.h: 3023
+cpqarray.txt: 2224
+cpqphp_core.c: 37277
+cpqphp_ctrl.c: 77860
+cpqphp.h: 22122
+cpqphp_nvram.c: 13820
+cpqphp_nvram.h: 1534
+cpqphp_pci.c: 39788
+cpqphp_sysfs.c: 5682
+cprecomp.h: 1072
+cpsmgr.c: 18525
+cpu: 4096
+cpu5wdt.c: 6940
+cpuacct.txt: 1941
+cpu_buffer.c: 11402
+cpu_buffer.h: 2876
+cpu-bugs64.c: 7627
+cpu.c: 5945
+cpucheck.c: 6054
+cpu-common: 4096
+cpudata_32.h: 574
+cpudata_64.h: 1041
+cpudata.h: 184
+cpu_debug.c: 17937
+cpu_debug.h: 3759
+cpu-drivers.txt: 7387
+cpufeature.h: 13827
+cpu-feature-overrides.h: 1176
+cpu-features.h: 7307
+cpu_features.txt: 2681
+cpufreq: 4096
+cpu-freq: 4096
+cpufreq_32.c: 18804
+cpufreq_64.c: 20116
+cpufreq.c: 49742
+cpufreq_conservative.c: 18026
+cpu-freq.h: 2392
+cpufreq.h: 12164
+cpufreq-nforce2.c: 9537
+cpufreq-nforce2.txt: 597
+cpufreq_ondemand.c: 19342
+cpufreq_performance.c: 1553
+cpufreq_powersave.c: 1625
+cpufreq-pxa2xx.c: 14833
+cpufreq-pxa3xx.c: 6493
+cpufreq_spudemand.c: 4449
+cpufreq_stats.c: 9729
+cpufreq-stats.txt: 5021
+cpufreq_userspace.c: 6109
+cpu.h: 1297
+cpu-h7201.c: 1510
+cpu-h7202.c: 5243
+cpu_hotplug.c: 2052
+cpu-hotplug-spec: 1155
+cpu-hotplug.txt: 14935
+cpuid.c: 5549
+cpuid.h: 617
+cpuidle: 4096
+cpuidle.c: 8664
+cpuidle.h: 1058
+cpu_imx27.c: 1739
+cpuinfo.c: 2141
+cpu-info.h: 2924
+cpuinfo.h: 2135
+cpuinfo-pvr-full.c: 2822
+cpuinfo-static.c: 4940
+cpu-irqs.h: 2654
+cpu-load.txt: 3110
+cpumap.c: 10894
+cpumap.h: 320
+cpumask.c: 4643
+cpumask.h: 381
+cpu-multi32.h: 1743
+cpu-omap.c: 4053
+cpu-probe.c: 23180
+cpu-regs.h: 14601
+cpu-sa1100.c: 7866
+cpu-sa1110.c: 9518
+cpuset.c: 72697
+cpuset.h: 4740
+cpusets.txt: 36191
+cpu_setup_44x.S: 1639
+cpu_setup_6xx.S: 11167
+cpu_setup_fsl_booke.S: 1766
+cpu_setup_pa6t.S: 1218
+cpu_setup_ppc970.S: 3704
+cpu-sh2: 4096
+cpu-sh2a: 4096
+cpu-sh3: 4096
+cpu-sh4: 4096
+cpu-sh5: 4096
+cpu-single.h: 1429
+cputable.c: 57765
+cputable.h: 19753
+cputhreads.h: 1572
+cputime.h: 118
+cputopology.txt: 3013
+cputype.h: 840
+cpu_vect.h: 1321
+cp_vers.h: 933
+cpwd.c: 16512
+cq.c: 20469
+c-qcam.c: 19812
+CQcam.txt: 7069
+cq_desc.h: 2507
+cq_enet_desc.h: 6342
+cq_exch_desc.h: 5837
+cq.h: 4130
+c-r3k.c: 8056
+c-r4k.c: 37720
+cramfs: 4096
+cramfs_fs.h: 2930
+cramfs_fs_sb.h: 343
+cramfs.txt: 2599
+crash.c: 9898
+crash_dump_32.c: 2149
+crash_dump_64.c: 1417
+crash_dump.c: 3851
+crash_dump.h: 2002
+cr_bllcd.c: 7402
+crc16.c: 2838
+crc16.h: 622
+crc32.c: 15299
+crc32c.c: 8200
+crc32c.h: 254
+crc32c-intel.c: 4975
+crc32defs.h: 1072
+crc32.h: 880
+crc32hash.c: 654
+crc7.c: 2329
+crc7.h: 272
+crc-ccitt.c: 3052
+crc-ccitt.h: 330
+crc.h: 880
+crc-itu-t.c: 2892
+crc-itu-t.h: 615
+crc-t10dif.c: 2965
+crc-t10dif.h: 140
+cred.c: 14888
+credentials.txt: 20932
+cred.h: 10905
+cred-internals.h: 559
+CREDITS: 603
+crime.c: 2833
+crime.h: 5271
+cris: 4096
+cris_defs_asm.h: 3805
+crisksyms.c: 472
+cris_supp_reg.h: 198
+crisv10.c: 129158
+crisv10.h: 4289
+crm_regs.h: 1700
+cr_pll.c: 4842
+crt0_ram.S: 2152
+crt0_rom.S: 3157
+crt0.S: 1979
+crtsavres.S: 6123
+crunch-bits.S: 8521
+crunch.c: 2001
+crw.c: 4007
+crw.h: 2025
+cryptd.c: 16974
+cryptd.h: 650
+crypto: 4096
+crypto4xx_alg.c: 8383
+crypto4xx_core.c: 34847
+crypto4xx_core.h: 5634
+crypto4xx_reg_def.h: 7646
+crypto4xx_sa.c: 2984
+crypto4xx_sa.h: 5742
+crypto.c: 16089
+crypto_compat.h: 2294
+cryptocop.c: 111134
+cryptocop.h: 7614
+crypto_des.h: 516
+crypto.h: 35141
+cryptohash.h: 264
+cryptoloop.c: 5005
+crypto_null.c: 5051
+crypto_wq.c: 896
+crypto_wq.h: 122
+crypt_s390.h: 10190
+cs4231.c: 6021
+cs4231-regs.h: 8547
+cs4236.c: 22848
+cs4236_lib.c: 35470
+cs423x: 4096
+cs4270.c: 26832
+cs4270.h: 804
+cs4281.c: 66411
+cs4362a.h: 2039
+cs4398.h: 1968
+cs461x.txt: 2184
+cs46xx: 4096
+cs46xx.c: 5301
+cs46xx_dsp_scb_types.h: 28137
+cs46xx_dsp_spos.h: 6198
+cs46xx_dsp_task_types.h: 7293
+cs46xx.h: 73681
+cs46xx_image.h: 155782
+cs46xx_lib.c: 107227
+cs46xx_lib.h: 8586
+cs5345.c: 5839
+cs5345.h: 1210
+cs53l32a.c: 5932
+cs53l32a.h: 1196
+cs5520.c: 4777
+cs5530.c: 8332
+cs5535audio: 4096
+cs5535audio.c: 10538
+cs5535audio.h: 4162
+cs5535audio_olpc.c: 4595
+cs5535audio_pcm.c: 13419
+cs5535audio_pm.c: 4043
+cs5535.c: 6298
+cs5535_gpio.c: 6000
+cs5536.c: 7861
+cs553x_nand.c: 10268
+cs8403.h: 8833
+cs8420.h: 1681
+cs8427.c: 18610
+cs8427.h: 10572
+cs89712.h: 1848
+cs89x0.c: 59868
+cs89x0.h: 16242
+cs89x0.txt: 25508
+csb337_defconfig: 28177
+csb637_defconfig: 29026
+csb701.c: 1321
+csb726.c: 7527
+csb726.h: 658
+cs.c: 21706
+cscanmgr.c: 14014
+cs.h: 6099
+cs_internal.h: 7245
+csr1212.c: 38810
+csr1212.h: 14571
+csr.c: 26430
+csrc-bcm1480.c: 1705
+csrc-ioasic.c: 1796
+csrc-octeon.c: 1473
+csrc-r4k.c: 885
+csrc-sb1250.c: 2176
+csr.h: 2690
+css.c: 26134
+css.h: 4460
+cstate.c: 4904
+cs_types.h: 934
+csum-copy_64.S: 4160
+csum_copy_from_user.S: 439
+csum_copy.S: 7018
+csum_copy_to_user.S: 431
+csumcpfruser.S: 1663
+csum_ipv6_magic.S: 2885
+csumipv6.S: 696
+csum-partial_64.c: 3530
+csum_partial_copy.c: 8909
+csum_partial_copy_generic.S: 1729
+csumpartialcopygeneric.S: 6850
+csumpartialcopy.S: 1151
+csumpartialcopyuser.S: 2378
+csum_partial.S: 16737
+csumpartial.S: 3126
+csum-wrappers_64.c: 3926
+ct20k1reg.h: 20603
+ct20k2reg.h: 3088
+ct82c710.c: 6778
+ctamixer.c: 10033
+ctamixer.h: 2795
+ctatc.c: 42227
+ctatc.h: 5058
+ctcm_dbug.c: 1932
+ctcm_dbug.h: 3316
+ctcm_fsms.c: 75291
+ctcm_fsms.h: 8271
+ctcm_main.c: 45768
+ctcm_main.h: 6938
+ctcm_mpc.c: 59919
+ctcm_mpc.h: 5324
+ctcm_sysfs.c: 5171
+ctdaio.c: 17904
+ctdaio.h: 3291
+cthardware.c: 1688
+cthardware.h: 7286
+cthw20k1.c: 49680
+cthw20k1.h: 598
+cthw20k2.c: 49114
+cthw20k2.h: 598
+ctimap.c: 2516
+ctimap.h: 1167
+ctkip.c: 17399
+ctl_unnumbered.txt: 962
+ctmixer.c: 28786
+ctmixer.h: 1691
+ctpcm.c: 11244
+ctpcm.h: 612
+ctr.c: 11026
+ctree.c: 111552
+ctree.h: 75158
+ctresource.c: 5825
+ctresource.h: 2267
+ctr.h: 524
+ctrlchar.c: 1752
+ctrlchar.h: 484
+cts.c: 10045
+ctsrc.c: 19870
+ctsrc.h: 4527
+cttimer.c: 11342
+cttimer.h: 686
+ctvmem.c: 5666
+ctvmem.h: 1787
+c-tx39.c: 10852
+ctxfi: 4096
+ctxrx.c: 147975
+ctype.c: 1041
+ctype.h: 1399
+cu3088.c: 3577
+cu3088.h: 848
+cuboot-52xx.c: 1660
+cuboot-824x.c: 1224
+cuboot-83xx.c: 1525
+cuboot-85xx.c: 1673
+cuboot-85xx-cpm2.c: 1764
+cuboot-8xx.c: 1149
+cuboot-acadia.c: 4964
+cuboot-amigaone.c: 868
+cuboot-bamboo.c: 689
+cuboot.c: 944
+cuboot-c2k.c: 4884
+cuboot-ebony.c: 782
+cuboot.h: 365
+cuboot-katmai.c: 1294
+cuboot-mpc7448hpc2.c: 1279
+cuboot-pq2.c: 7138
+cuboot-rainier.c: 1453
+cuboot-sam440ep.c: 1254
+cuboot-sequoia.c: 1453
+cuboot-taishan.c: 1361
+cuboot-warp.c: 916
+cuboot-yosemite.c: 1095
+cuda.h: 978
+cumana_1.c: 7960
+cumana_2.c: 14690
+current.h: 677
+cuse.c: 14893
+cvisionppc.h: 1577
+cvmx-address.h: 8499
+cvmx-asm.h: 4526
+cvmx-asxx-defs.h: 14223
+cvmx-bootinfo.h: 9081
+cvmx-bootmem.c: 20524
+cvmx-bootmem.h: 12982
+cvmx-ciu-defs.h: 39090
+cvmx-cmd-queue.c: 9400
+cvmx-cmd-queue.h: 18993
+cvmx-config.h: 6486
+cvmx-dbg-defs.h: 2123
+cvmx-fau.h: 19011
+cvmx-fpa.c: 4975
+cvmx-fpa-defs.h: 11938
+cvmx-fpa.h: 8284
+cvmx-gmxx-defs.h: 79305
+cvmx-gpio-defs.h: 6346
+cvmx.h: 14240
+cvmx-helper-board.c: 21950
+cvmx-helper-board.h: 6656
+cvmx-helper.c: 32770
+cvmx-helper-errata.c: 2592
+cvmx-helper-errata.h: 1277
+cvmx-helper-fpa.c: 7545
+cvmx-helper-fpa.h: 2360
+cvmx-helper.h: 7482
+cvmx-helper-jtag.c: 4203
+cvmx-helper-jtag.h: 1530
+cvmx-helper-loop.c: 2679
+cvmx-helper-loop.h: 1901
+cvmx-helper-npi.c: 3413
+cvmx-helper-npi.h: 1897
+cvmx-helper-rgmii.c: 17448
+cvmx-helper-rgmii.h: 3560
+cvmx-helper-sgmii.c: 17037
+cvmx-helper-sgmii.h: 3417
+cvmx-helper-spi.c: 6088
+cvmx-helper-spi.h: 2785
+cvmx-helper-util.c: 12555
+cvmx-helper-util.h: 6164
+cvmx-helper-xaui.c: 11997
+cvmx-helper-xaui.h: 3409
+cvmx-interrupt-decodes.c: 13959
+cvmx-interrupt-rsl.c: 3787
+cvmx-iob-defs.h: 16589
+cvmx-ipd-defs.h: 27302
+cvmx-ipd.h: 10763
+cvmx-l2c.c: 19669
+cvmx-l2c-defs.h: 23395
+cvmx-l2c.h: 10068
+cvmx-l2d-defs.h: 9721
+cvmx-l2t-defs.h: 3720
+cvmx-led-defs.h: 6731
+cvmx-mdio.h: 13085
+cvmx-mio-defs.h: 54538
+cvmx-npei-defs.h: 61528
+cvmx-npi-defs.h: 46348
+cvmx-packet.h: 1964
+cvmx-pci-defs.h: 40401
+cvmx-pcieep-defs.h: 32743
+cvmx-pciercx-defs.h: 36139
+cvmx-pcsx-defs.h: 11497
+cvmx-pcsxx-defs.h: 9562
+cvmx-pescx-defs.h: 11439
+cvmx-pexp-defs.h: 9365
+cvmx-pip-defs.h: 34993
+cvmx-pip.h: 16579
+cvmx-pko.c: 14987
+cvmx-pko-defs.h: 31966
+cvmx-pko.h: 18946
+cvmx-pow-defs.h: 19069
+cvmx-pow.h: 59817
+cvmx-scratch.h: 3875
+cvmx-smix-defs.h: 5173
+cvmx-spi.c: 22343
+cvmx-spi.h: 9516
+cvmx-spinlock.h: 6516
+cvmx-spxx-defs.h: 9687
+cvmx-srxx-defs.h: 3849
+cvmx-stxx-defs.h: 8491
+cvmx-sysinfo.c: 3570
+cvmx-sysinfo.h: 4893
+cvmx-wqe.h: 11943
+cwc4630.h: 15478
+cwcasync.h: 7969
+cwcbinhack.h: 1566
+cwcdma.asp: 4526
+cwcdma.h: 2174
+cwcsnoop.h: 1513
+cwep.c: 9662
+cwm.c: 3787
+cwm.h: 2421
+cx18: 4096
+cx18-audio.c: 2589
+cx18-audio.h: 905
+cx18-av-audio.c: 14932
+cx18-av-core.c: 41048
+cx18-av-core.h: 13381
+cx18-av-firmware.c: 7225
+cx18-av-vbi.c: 9043
+cx18-cards.c: 16165
+cx18-cards.h: 4838
+cx18-controls.c: 9435
+cx18-controls.h: 1257
+cx18-driver.c: 35409
+cx18-driver.h: 23311
+cx18-dvb.c: 9950
+cx18-dvb.h: 946
+cx18-fileops.c: 21082
+cx18-fileops.h: 1421
+cx18-firmware.c: 14987
+cx18-firmware.h: 1001
+cx18-gpio.c: 9268
+cx18-gpio.h: 1226
+cx18-i2c.c: 8776
+cx18-i2c.h: 1083
+cx18-io.c: 2807
+cx18-ioctl.c: 27533
+cx18-ioctl.h: 1423
+cx18-io.h: 4951
+cx18-irq.c: 2319
+cx18-irq.h: 1417
+cx18-mailbox.c: 21623
+cx18-mailbox.h: 3643
+cx18-queue.c: 6955
+cx18-queue.h: 2294
+cx18-scb.c: 5787
+cx18-scb.h: 7441
+cx18-streams.c: 21499
+cx18-streams.h: 1889
+cx18.txt: 811
+cx18-vbi.c: 7419
+cx18-vbi.h: 1031
+cx18-version.h: 1319
+cx18-video.c: 1080
+cx18-video.h: 875
+cx22700.c: 11029
+cx22700.h: 1488
+cx22702.c: 14516
+cx22702.h: 1673
+cx231xx: 4096
+cx231xx-audio.c: 14952
+cx231xx-avcore.c: 77231
+cx231xx-cards.c: 23257
+cx231xx-conf-reg.h: 25445
+cx231xx-core.c: 30779
+cx231xx-dvb.c: 13339
+cx231xx.h: 22018
+cx231xx-i2c.c: 12912
+cx231xx-input.c: 6423
+cx231xx-pcb-cfg.c: 20991
+cx231xx-pcb-cfg.h: 6456
+cx231xx-reg.h: 67462
+cx231xx-vbi.c: 17757
+cx231xx-vbi.h: 2261
+cx231xx-video.c: 58825
+cx23418.h: 17951
+cx2341x: 4096
+cx2341x.c: 38287
+cx2341x.h: 7383
+cx23885: 4096
+cx23885-417.c: 48981
+cx23885-cards.c: 25645
+cx23885-core.c: 54422
+cx23885-dvb.c: 26635
+cx23885.h: 16143
+cx23885-i2c.c: 9910
+cx23885-reg.h: 12999
+cx23885-vbi.c: 6762
+cx23885-video.c: 40258
+cx24110.c: 20853
+cx24110.h: 1810
+cx24113.c: 14661
+cx24113.h: 1673
+cx24116.c: 40768
+cx24116.h: 1706
+cx24123.c: 30243
+cx24123.h: 1979
+cx25840: 4096
+cx25840-audio.c: 11073
+cx25840-core.c: 45706
+cx25840-core.h: 3605
+cx25840-firmware.c: 3889
+cx25840.h: 3250
+cx25840-vbi.c: 7108
+cx88: 4096
+cx88-alsa.c: 23036
+cx88-blackbird.c: 39031
+cx88-cards.c: 89130
+cx88-core.c: 31343
+cx88-dsp.c: 8787
+cx88-dvb.c: 39095
+cx88.h: 22857
+cx88-i2c.c: 5568
+cx88-input.c: 14002
+cx88-mpeg.c: 24270
+cx88-reg.h: 34334
+cx88-tvaudio.c: 28674
+cx88-vbi.c: 6438
+cx88-video.c: 56637
+cx88-vp3054-i2c.c: 4322
+cx88-vp3054-i2c.h: 1559
+cxacru.c: 37008
+cxacru.txt: 2325
+cxgb2.c: 38481
+cxgb3: 4096
+cxgb3_ctl_defs.h: 5067
+cxgb3_defs.h: 3489
+cxgb3i: 4096
+cxgb3i_ddp.c: 20593
+cxgb3i_ddp.h: 8254
+cxgb3i.h: 4401
+cxgb3i_init.c: 3040
+cxgb3i_iscsi.c: 27545
+cxgb3_ioctl.h: 3847
+cxgb3i_offload.c: 50331
+cxgb3i_offload.h: 7277
+cxgb3i_pdu.c: 12368
+cxgb3i_pdu.h: 1710
+cxgb3i.txt: 3295
+cxgb3_main.c: 84313
+cxgb3_offload.c: 37599
+cxgb3_offload.h: 6272
+cxgb.txt: 13829
+cxio_dbg.c: 5114
+cxio_hal.c: 38094
+cxio_hal.h: 7482
+cxio_resource.c: 9188
+cxio_resource.h: 3116
+cxio_wr.h: 20826
+cxusb.c: 48202
+cxusb.h: 724
+cy82c693.c: 10524
+cyber2000fb.c: 43356
+cyber2000fb.h: 16008
+cyberjack.c: 14547
+cyclades.c: 158213
+cyclades.h: 24974
+cyclomx.h: 2544
+cyclone.c: 3125
+cyclone.h: 403
+cycx_cfm.h: 2926
+cycx_drv.c: 15649
+cycx_drv.h: 2183
+cycx_main.c: 9413
+cycx_x25.c: 45814
+cycx_x25.h: 3727
+cylinder.c: 5848
+cypress_atacb.c: 8391
+cypress_cy7c63.c: 7689
+cypress.h: 2856
+cypress_m8.c: 47071
+cypress_m8.h: 2367
+cyrix.c: 5962
+cytherm.c: 11260
+d101m_ucode.bin.ihex: 1675
+d101s_ucode.bin.ihex: 1675
+d102e_ucode.bin.ihex: 1675
+da9030_battery.c: 16256
+da9034-ts.c: 9057
+da903x_bl.c: 4988
+da903x.c: 13455
+da903x.h: 7048
+dabusb: 4096
+dabusb.c: 22084
+dabusb.h: 1873
+DAC960.c: 265715
+DAC960.h: 151800
+daca.c: 7036
+dac.h: 752
+dadapter.c: 14853
+dadapter.h: 1070
+daemon.c: 16879
+daemon.h: 8435
+daemon_kern.c: 2419
+daemon_user.c: 4368
+daisy.c: 12538
+DAI.txt: 2270
+dapm.txt: 10267
+daqboard2000.c: 25750
+darla20.c: 2889
+darla20_dsp.c: 3479
+darla24.c: 3153
+darla24_dsp.c: 3845
+dart.h: 2235
+dart_iommu.c: 10816
+das08.c: 26325
+das08_cs.c: 14893
+das08.h: 2561
+das16.c: 44853
+das16m1.c: 21006
+das1800.c: 48894
+das6402.c: 8510
+das800.c: 24454
+DASD: 3388
+dasd_3990_erp.c: 68376
+dasd_alias.c: 26580
+dasd.c: 72767
+dasd_devmap.c: 29631
+dasd_diag.c: 17829
+dasd_diag.h: 2628
+dasd_eckd.c: 95322
+dasd_eckd.h: 11295
+dasd_eer.c: 20468
+dasd_erp.c: 4866
+dasd_fba.c: 17801
+dasd_fba.h: 1816
+dasd_genhd.c: 4783
+dasd.h: 11124
+dasd_int.h: 21917
+dasd_ioctl.c: 11160
+dasd_proc.c: 9802
+data.c: 2497
+datafab.c: 20690
+datagram.c: 4449
+data-integrity.txt: 13815
+datalink.h: 482
+datapage.S: 2018
+datarate.c: 12551
+datarate.h: 2494
+datastream.c: 15931
+datastream.h: 514
+dat.c: 11476
+dat.h: 2048
+davicom.c: 4985
+davinci: 4096
+davinci_all_defconfig: 43899
+davinci.c: 13768
+davinci_emac.c: 84968
+davinci-evm.c: 6719
+davinci.h: 3430
+davinci-i2s.c: 17146
+davinci-i2s.h: 495
+davinci_nand.c: 23119
+davinci-pcm.c: 10560
+davinci-pcm.h: 783
+davinci-sffsdr.c: 4374
+davinci_wdt.c: 6690
+db1000_defconfig: 23355
+db1100_defconfig: 23611
+db1200_defconfig: 25180
+db1200.h: 6115
+db1500_defconfig: 30453
+db1550_defconfig: 26655
+db1x00: 4096
+db1x00.h: 5353
+db78x00-bp-setup.c: 2591
+db88f5281-setup.c: 9805
+db88f6281-bp-setup.c: 2227
+db9.c: 21255
+dbdma2.c: 10987
+dbdma.c: 29134
+dbdma.h: 3834
+dbell.c: 1075
+dbell.h: 1308
+dbg.c: 7231
+dbg_current.S: 402
+dbg.h: 144
+dbg_io.c: 5088
+dbg_stackcheck.S: 427
+dbg_stackkill.S: 575
+dbl_float.h: 36770
+dbox2-flash.c: 2719
+dbri.c: 80387
+dbus_contexts: 195
+dc21285.c: 5936
+dc21285-timer.c: 1332
+dc232b: 4096
+dc395x.c: 145696
+dc395x.h: 25842
+dc395x.txt: 3337
+dca: 4096
+dcache.c: 60424
+dcache.h: 2009
+dca-core.c: 6864
+dca.h: 2530
+dca-sysfs.c: 2700
+dcb: 4096
+dcbnl.c: 29597
+dcbnl.h: 11558
+dccp: 4096
+dccp.h: 15873
+dccp.txt: 7484
+dcdbas.c: 16163
+dcdbas.h: 2821
+dcdbas.txt: 3709
+dcookies.c: 6936
+dcookies.h: 1289
+dcore.c: 21748
+dcr.c: 6132
+dcr-generic.h: 1621
+dcr.h: 6308
+dcr-low.S: 983
+dcr-mmio.h: 1838
+dcr-native.h: 4500
+dcr-regs.h: 5140
+dcssblk.c: 27372
+dcu.h: 1481
+dd.c: 9413
+ddp.c: 49018
+ddr2_defs_asm.h: 11790
+ddr2_defs.h: 9835
+ddr.h: 4564
+de2104x.c: 54503
+de4x5.c: 169230
+de4x5.h: 49229
+de4x5.txt: 8677
+de600.c: 13275
+de600.h: 5588
+de620.c: 26654
+de620.h: 4970
+deadline-iosched.c: 11700
+deadline-iosched.txt: 2841
+debug-8250.S: 719
+debug.c: 7221
+debug-cmd.h: 1653
+debug-devices.c: 1975
+debugfs: 4096
+debug_fs.c: 16621
+debugfs.c: 6192
+debugfs.h: 2563
+debugfs_key.c: 9097
+debugfs_key.h: 1348
+debugfs-kmemtrace: 2769
+debugfs_netdev.c: 14895
+debugfs_netdev.h: 739
+debugfs-pktcdvd: 448
+debugfs_sta.c: 7063
+debugfs_sta.h: 427
+debugfs.txt: 7128
+debugging: 1594
+Debugging390.txt: 97243
+debugging-modules.txt: 954
+debugging-via-ohci1394.txt: 7635
+debug.h: 1195
+Debug.h: 1195
+debug_if.h: 3572
+debug-leds.c: 7120
+debug-levels.h: 1482
+debuglib.c: 4523
+debuglib.h: 11740
+debug_locks.c: 1127
+debug_locks.h: 1663
+debug-macro.S: 619
+debugobjects.c: 24352
+debugobjects.h: 2960
+debugobjects.tmpl: 14144
+debug-pagealloc.c: 2607
+debug-pl01x.S: 693
+debugport.c: 12453
+debugreg.h: 2904
+debug.S: 2650
+debug-stub.c: 6089
+debugtraps.S: 1210
+debug.txt: 5755
+dec: 4096
+dec21285.h: 5572
+dec_and_lock.c: 809
+decbin.S: 15728
+declance.c: 35842
+decl.h: 2409
+decnet: 4096
+decnet.txt: 10805
+decodecode: 1702
+decode_exc.c: 11585
+decode_rs.c: 6959
+decompress: 4096
+decompress_bunzip2.c: 23556
+decompress.c: 1126
+decompress_inflate.c: 3544
+decompress_unlzma.c: 15528
+decompress_v10.lds: 342
+decompress_v32.lds: 337
+decstation_defconfig: 17956
+dectypes.h: 427
+default_defconfig: 39014
+defBF512.h: 1271
+defBF514.h: 13406
+defBF516.h: 46402
+defBF518.h: 48358
+defBF51x_base.h: 113540
+defBF522.h: 1271
+defBF525.h: 44639
+defBF527.h: 77635
+defBF52x_base.h: 116393
+defBF532.h: 74150
+defBF534.h: 189790
+defBF537.h: 35002
+defBF539.h: 212777
+defBF542.h: 58060
+defBF544.h: 57371
+defBF547.h: 78333
+defBF548.h: 117603
+defBF549.h: 180941
+defBF54x_base.h: 251535
+defBF561.h: 109277
+defconfig: 20414
+deferred_io.txt: 3031
+defines.h: 5063
+define_trace.h: 1988
+defkeymap.c: 6243
+defkeymap.c_shipped: 11007
+defkeymap.map: 12183
+deflate.c: 5615
+deflate_syms.c: 377
+def_LPBlackfin.h: 29239
+defpalo.conf: 789
+defs.h: 12522
+deftree.c: 40510
+defutil.h: 11891
+defxx.c: 116343
+defxx.h: 54496
+delay_32.h: 882
+delay_64.h: 378
+delay-accounting.txt: 3837
+delayacct.c: 5038
+delayacct.h: 4108
+delay.c: 581
+delayed-ref.c: 24860
+delayed-ref.h: 6619
+delay.h: 1166
+delay_mm.h: 1362
+delay_no.h: 2314
+delay.S: 1279
+delay.txt: 694
+delegation.c: 14100
+delegation.h: 2261
+delkin_cb.c: 4687
+dell-laptop.c: 9519
+dell_rbu.c: 19420
+dell_rbu.txt: 4973
+dell-wmi.c: 6724
+delta.c: 23513
+delta.h: 5823
+demo_main.c: 29367
+demux.h: 8791
+denormal.c: 3335
+dentry.c: 2934
+dentry-locking.txt: 8359
+depca.c: 61475
+depca.h: 6823
+depca.txt: 1245
+desc.c: 19546
+desc_defs.h: 2385
+desc.h: 20526
+des_check_key.c: 4011
+descore-readme.txt: 17200
+description: 73
+des_generic.c: 36210
+des.h: 403
+design_notes.txt: 4626
+design.txt: 17558
+des_s390.c: 17966
+dev-audio.c: 1656
+devboards: 4096
+dev.c: 16990
+devconnect.c: 33409
+devdma.c: 2008
+devdma.h: 271
+development-process: 4096
+dev-fb.c: 1681
+devfs: 459
+dev.h: 9111
+dev-hsmmc1.c: 1647
+dev-hsmmc.c: 1640
+dev-i2c0.c: 1622
+dev-i2c1.c: 1587
+device.c: 3904
+device_cfg.h: 2924
+device_cgroup.c: 12005
+device_cgroup.h: 380
+device-drivers.tmpl: 13872
+device_fsm.c: 34071
+device.h: 31245
+device_handler: 4096
+device_id.c: 8750
+device_id.h: 9158
+device-init.c: 23541
+deviceiobook.tmpl: 11288
+device_main.c: 128828
+device-mapper: 4096
+device-mapper.h: 10956
+device_ops.c: 22502
+device_pgid.c: 16031
+devices: 4096
+devices.c: 19482
+devices.h: 918
+devices-rsk7203.c: 2587
+device_status.c: 12596
+devices.txt: 118144
+devicetable.txt: 1298
+device.txt: 6393
+devinet.c: 40642
+dev-interface: 8905
+devio.c: 45517
+dev-ioctl.c: 18582
+devmap.c: 1464
+dev_mcast.c: 5650
+devops_32.c: 1879
+devops_64.c: 1006
+devpts: 4096
+devpts_fs.h: 1454
+devpts.txt: 5085
+devres.c: 16191
+devres.txt: 7761
+devs.c: 9766
+devs.h: 1960
+dev-sysfs.c: 3852
+dev_table.c: 5563
+dev_table.h: 10908
+devtree.c: 8324
+dev-uart.c: 3521
+dev-usb.c: 1134
+dev-usb-hsotg.c: 992
+dfadd.c: 15801
+dfcmp.c: 5306
+dfdiv.c: 12636
+dfifo.h: 2160
+dfmpy.c: 11736
+dfrem.c: 8997
+dfs.c: 37
+dfs.h: 27
+dfsqrt.c: 5530
+dfsub.c: 15897
+dfu: 4096
+dfu.c: 6025
+dgram.c: 8393
+diag.c: 1739
+diag.h: 1050
+dialog.h: 6696
+dib0070.c: 13441
+dib0070.h: 1691
+dib0700_core.c: 11979
+dib0700_devices.c: 54526
+dib0700.h: 2680
+dib07x0.h: 266
+dib3000.h: 1813
+dib3000mb.c: 23970
+dib3000mb_priv.h: 16232
+dib3000mc.c: 26706
+dib3000mc.h: 2337
+dib7000m.c: 40754
+dib7000m.h: 2102
+dib7000p.c: 40757
+dib7000p.h: 2849
+dibusb-common.c: 12123
+dibusb.h: 3337
+dibusb-mb.c: 14485
+dibusb-mc.c: 5124
+dibx000_common.c: 4156
+dibx000_common.h: 2896
+di.c: 31214
+di_dbg.h: 1102
+diddfunc.c: 2703
+di_defs.h: 8217
+did_vers.h: 933
+diffconfig: 3642
+dig: 4096
+digest.c: 2574
+digi1.h: 3665
+digi_acceleport.c: 58641
+digiepca.txt: 3789
+digiFep1.h: 1928
+digiPCI.h: 1382
+digitv.c: 9329
+digitv.h: 1457
+digsy_mtc.dts: 5933
+di.h: 4386
+dilnetpc.c: 13589
+dino.c: 31503
+dio: 4096
+dio.c: 8573
+dio-driver.c: 3552
+dio.h: 11200
+dio-sysfs.c: 2250
+dir.c: 25683
+direct.c: 6527
+direct.h: 1640
+direct-io.c: 35225
+directory.c: 7736
+directory-locking: 5153
+dirent.h: 177
+dir_f.c: 10085
+dir_f.h: 1267
+dir_fplus.c: 4598
+dir_fplus.h: 1014
+dir.h: 1246
+dirhash.c: 6496
+dir-item.c: 11583
+disable-tsc-ctxt-sw-stress-test.c: 1724
+disable-tsc-on-off-stress-test.c: 1717
+disable-tsc-test.c: 2121
+dis-asm.h: 895
+disassemble.c: 19044
+disassemble.h: 1766
+dis.c: 41703
+discontig.c: 1271
+discover.c: 9895
+discover.h: 2378
+discovery.c: 12785
+discovery.h: 3572
+disk-io.c: 67604
+disk-io.h: 4751
+diskonchip.c: 50636
+disk-shock-protection.txt: 6881
+dispc.c: 37465
+dispc.h: 1183
+display: 4096
+display7seg.c: 6503
+display7seg.h: 1882
+display.c: 1573
+display_gx1.c: 6318
+display_gx1.h: 4598
+display_gx.c: 4945
+display.h: 2117
+display-sysfs.c: 6099
+diu.txt: 470
+div64.c: 3889
+div64-generic.c: 283
+div64.h: 371
+div64.S: 3866
+diva.c: 34488
+divacapi.h: 50994
+diva_didd.c: 3571
+diva_dma.c: 2843
+diva_dma.h: 1993
+diva.h: 1010
+divamnt.c: 5616
+diva_pci.h: 631
+divasfunc.c: 5512
+divasi.c: 12379
+divasmain.c: 21787
+divasproc.c: 10764
+divasync.h: 20126
+divdi3.S: 6280
+divert: 4096
+divert_init.c: 2399
+divert_procfs.c: 8581
+divide.S: 4293
+divsi3.S: 6392
+div_small.S: 1546
+div_Xsig.S: 10096
+dl2k.c: 48901
+dl2k.h: 14949
+dl2k.txt: 9387
+dlci.c: 11723
+DLINK.txt: 7386
+dlm: 4096
+dlmapi.h: 9492
+dlmast.c: 13019
+dlmcommon.h: 29686
+dlmconstants.h: 5013
+dlmconvert.c: 15590
+dlmconvert.h: 1218
+dlmdebug.c: 28761
+dlmdebug.h: 2109
+dlm_device.h: 2536
+dlmdomain.c: 49292
+dlmdomain.h: 1165
+dlmfs.c: 15242
+dlmfs.txt: 4319
+dlmfsver.c: 1211
+dlmfsver.h: 997
+dlmglue.c: 110475
+dlmglue.h: 5587
+dlm.h: 5602
+dlm_internal.h: 16633
+dlmlock.c: 19997
+dlmmaster.c: 96511
+dlm_netlink.h: 1064
+dlm_plock.h: 1135
+dlmrecovery.c: 85132
+dlmthread.c: 21013
+dlmunlock.c: 19250
+dlmver.c: 1203
+dlmver.h: 991
+dm1105: 4096
+dm1105.c: 22399
+dm355.c: 17263
+dm355evm_keys.c: 8928
+dm355evm_msp.c: 10717
+dm355evm_msp.h: 2879
+dm355.h: 586
+dm644x.c: 14946
+dm644x.h: 1316
+dm646x.c: 15438
+dm646x.h: 757
+dm9000.c: 34291
+dm9000.h: 4167
+dm9000.txt: 5137
+dm9601.c: 15941
+dma: 4096
+dma-alloc.c: 4571
+dma-api.c: 9315
+DMA-API.txt: 28886
+DMA-attributes.txt: 1376
+dma-attrs.h: 1758
+dmabounce.c: 14340
+dmabrg.c: 5279
+dmabrg.h: 497
+dmabuf.c: 35686
+dma.c: 6328
+dmac.c: 4805
+dmac.h: 11517
+dma-coherence.h: 1492
+dma-coherent.c: 3667
+dma-coherent.h: 891
+dmacopy.c: 909
+dma-core.h: 639
+dmactl-regs.h: 4663
+dma-debug.c: 31988
+dma-debug.h: 4915
+dma-default.c: 8575
+dma_defs_asm.h: 14594
+dma_defs.h: 14110
+dmaengine.c: 28040
+dmaengine.h: 15831
+dmaengine.txt: 42
+dma-g2.c: 4776
+dma.h: 2547
+dma-iommu.c: 3128
+dma-isa.c: 5163
+DMA-ISA-LPC.txt: 5333
+dma_lib.c: 16254
+dma-m2p.c: 9922
+dma-mapping-broken.h: 2488
+dma-mapping.c: 5434
+dma-mapping-common.h: 5646
+dma-mapping.h: 4368
+DMA-mapping.txt: 27929
+dma_mm.h: 455
+dma-mx1-mx2.c: 23615
+dma-mx1-mx2.h: 2711
+dma_no.h: 16955
+dma-noncoherent.c: 10156
+dma-octeon.c: 10532
+dma-plat.h: 2025
+dmapool.c: 13226
+dmapool.h: 923
+dma-pvr2.c: 2423
+dmar.c: 31385
+dma_remapping.h: 988
+dmar.h: 6143
+dmascc.c: 37724
+dma-sh4a.h: 2469
+dma-sh7760.c: 10216
+dma-sh.c: 7913
+dma-sh.h: 2862
+dmasound: 4096
+dmasound_atari.c: 42606
+dmasound_core.c: 44456
+dmasound.h: 8131
+dmasound_paula.c: 19160
+dmasound_q40.c: 14354
+dma-swiotlb.c: 4748
+dma-sysfs.c: 4348
+dmatest.c: 15129
+dma_timer.c: 2282
+dma.txt: 6352
+DMA.txt: 6352
+dma_v.h: 1177
+dm-bio-record.h: 1629
+dm.c: 60780
+dm-crypt.c: 32243
+dm-crypt.txt: 1485
+dm-delay.c: 8567
+dm-dirty-log.h: 3944
+dme1737: 11748
+dme1737.c: 74868
+dmesg.c: 1657
+dm-exception-store.c: 6745
+dm-exception-store.h: 4659
+dmfe.c: 60351
+dmfe.txt: 2168
+dm.h: 3933
+dmi.h: 411
+dmi-id.c: 6586
+dm-io.c: 11366
+dm-ioctl.c: 33212
+dm-ioctl.h: 9109
+dm-io.h: 2051
+dm-io.txt: 3298
+dmi_scan.c: 15130
+dm-kcopyd.c: 14244
+dm-kcopyd.h: 1335
+dm-linear.c: 3614
+dm-log.c: 19367
+dm-log.txt: 2397
+dm-log-userspace-base.c: 16497
+dm-log-userspace.h: 12944
+dm-log-userspace-transfer.c: 6936
+dm-log-userspace-transfer.h: 452
+dmm32at.c: 30666
+dm-mpath.c: 37626
+dm-mpath.h: 415
+dm-path-selector.c: 2473
+dm-path-selector.h: 2533
+dm-queue-length.c: 5495
+dm-queue-length.txt: 1218
+dm-raid1.c: 32159
+dm-region-hash.c: 18043
+dm-region-hash.h: 3217
+dm-round-robin.c: 4673
+dm-service-time.c: 8360
+dm-service-time.txt: 3243
+dm-snap.c: 33940
+dm-snap-persistent.c: 17550
+dm-snap-transient.c: 3687
+dm-stripe.c: 8013
+dm-sysfs.c: 2204
+dm-table.c: 27836
+dm-target.c: 2600
+dmtimer.c: 22824
+dmtimer.h: 3450
+dm-uevent.c: 5482
+dm-uevent.h: 1678
+dm-uevent.txt: 2650
+dmv182.c: 3833
+dmx3191d.c: 4547
+dmxdev.c: 28366
+dmxdev.h: 2409
+dmx.h: 3848
+dm-zero.c: 1495
+dn_dev.c: 33824
+dn_dev.h: 5493
+dnet.c: 25715
+dnet.h: 7221
+dnfb.c: 8139
+dn_fib.c: 18396
+dn_fib.h: 4894
+dn.h: 4527
+dn_ints.c: 1049
+dn_neigh.c: 15875
+dn_neigh.h: 824
+dn_nsp.h: 6229
+dn_nsp_in.c: 21566
+dn_nsp_out.c: 17942
+dnode.c: 30235
+dnotify: 4096
+dnotify.c: 12385
+dnotify.h: 978
+dnotify.txt: 3565
+dn_route.c: 44768
+dn_route.h: 4165
+dn_rtmsg.c: 3778
+dn_rules.c: 5755
+dns323-setup.c: 10831
+dns_resolve.c: 3678
+dns_resolve.h: 1294
+dn_table.c: 20482
+dn_timer.c: 3167
+do_balan.c: 58466
+doc2000.c: 32664
+doc2000.h: 5486
+doc2001.c: 25107
+doc2001plus.c: 31825
+DocBook: 4096
+docecc.c: 15968
+dock.c: 31358
+docprobe.c: 10340
+docproc.c: 11716
+do_csum.S: 2991
+Documentation: 4096
+do_func.S: 13813
+domain.c: 29471
+domain.h: 2107
+do_mounts.c: 9465
+do_mounts.h: 1396
+do_mounts_initrd.c: 3256
+do_mounts_md.c: 8071
+do_mounts_rd.c: 8166
+donauboe.c: 48207
+donauboe.h: 14213
+dontdiff: 1964
+doorbell.c: 2900
+doorbell.h: 2894
+dot11d.c: 5434
+dot11d.h: 2916
+dot_command.c: 4062
+dot_command.h: 2259
+dot.gdbinit: 5372
+dot.gdbinit_200MHz_16MB: 5763
+dot.gdbinit_300MHz_32MB: 5763
+dot.gdbinit_400MHz_32MB: 5764
+dot.gdbinit.nommu: 3891
+dot.gdbinit.smp: 8938
+dot.gdbinit.vdec2: 5442
+do_timer.h: 349
+double_cpdo.c: 4122
+doublefault_32.c: 1732
+double.h: 6303
+down2.H16: 33610
+down3.bin.ihex: 35892
+down.H16: 36678
+dp_add.c: 4700
+dpc.c: 58689
+dpc.h: 1771
+dp_cmp.c: 1842
+dpcsup.c: 9553
+dp_div.c: 4369
+dp_fint.c: 1932
+dp_flong.c: 1912
+dp_frexp.c: 1450
+dp_fsp.c: 1879
+dp_logb.c: 1446
+dpmc.c: 3024
+dpmc.h: 1247
+dpmc_modes.S: 14539
+dp_modf.c: 2064
+dp_mul.c: 4812
+dp_scalb.c: 1508
+dp_simple.c: 2057
+dp_sqrt.c: 4372
+dp_sub.c: 4977
+dpt: 4096
+dpt_i2o.c: 96500
+dpti.h: 11787
+dpti_i2o.h: 13449
+dpti_ioctl.h: 5365
+dp_tint.c: 3021
+dpti.txt: 3614
+dp_tlong.c: 3061
+dptsig.h: 14986
+dqblk_qtree.h: 2108
+dqblk_v1.h: 342
+dqblk_v2.h: 367
+dqblk_xfs.h: 6607
+dqueue.c: 2180
+dqueue.h: 1007
+dquot.c: 72530
+draft-ietf-cipso-ipsecurity-01.txt: 28638
+dram_init.S: 3913
+draw_functrace.py: 3560
+dreamcast_defconfig: 25856
+driver: 11995
+driver.c: 54722
+driver-changes.txt: 4022
+driver_chipcommon.c: 13262
+driver_chipcommon_pmu.c: 17510
+driver_extif.c: 3829
+driver_gige.c: 7415
+driver.h: 4405
+driver_mipscore.c: 6999
+driver-model: 4096
+driver-model.txt: 10127
+driver-ops.h: 5035
+driver_pcicore.c: 16619
+drivers: 4096
+drivers.c: 22567
+drivers-testing.txt: 2173
+driver.txt: 8049
+drm: 4096
+drm_agpsupport.c: 13149
+drm_auth.c: 5698
+drm_bufs.c: 44350
+drm_cache.c: 2119
+drm_context.c: 11821
+drm_core.h: 1468
+drm_crtc.c: 63999
+drm_crtc.h: 25347
+drm_crtc_helper.c: 29207
+drm_crtc_helper.h: 4951
+drm_debugfs.c: 6275
+drm_dma.c: 4147
+drm_drawable.c: 5166
+drm_drv.c: 16709
+drm_edid.c: 24730
+drm_edid.h: 5722
+drm_fops.c: 14460
+drm_gem.c: 14905
+drm.h: 23018
+drm_hashtab.c: 5440
+drm_hashtab.h: 2589
+drm_info.c: 9606
+drm_ioc32.c: 33632
+drm_ioctl.c: 9402
+drm_irq.c: 17068
+drm_lock.c: 11107
+drm_memory.c: 5012
+drm_memory.h: 1936
+drm_mm.c: 9213
+drm_mm.h: 3301
+drm_mode.h: 6855
+drm_modes.c: 14802
+drm_os_linux.h: 4047
+drm_pci.c: 3839
+drm_pciids.h: 40171
+drmP.h: 49714
+drm_proc.c: 6339
+drm_sarea.h: 2655
+drm_scatter.c: 5431
+drm_sman.c: 8782
+drm_sman.h: 5975
+drm_stub.c: 13017
+drm_sysfs.c: 13561
+drm_vm.c: 18670
+drop_caches.c: 1684
+drop_monitor.c: 8677
+drp-avail.c: 8822
+drp.c: 24684
+drp-ie.c: 9743
+drv.c: 22503
+drvfbi.c: 12647
+drx397xD.c: 30335
+drx397xD_fw.h: 1525
+drx397xD.h: 3015
+ds1286.h: 1223
+ds1287.h: 1019
+ds1302.c: 7604
+ds1305.h: 1068
+ds1603.c: 3162
+ds1603.h: 566
+ds1620.c: 8486
+ds1621: 2670
+ds1621.c: 9932
+ds1682.c: 7160
+ds17287rtc.h: 2676
+ds1_ctrl.fw.ihex: 33804
+ds1_dsp.fw.ihex: 364
+ds1e_ctrl.fw.ihex: 33804
+ds1wm.c: 11691
+ds1wm.h: 114
+ds2482: 743
+ds2482.c: 14041
+ds2490: 3576
+ds2490.c: 24260
+ds2760_battery.c: 13485
+dsa: 4096
+dsa.c: 9418
+dsa.h: 1617
+dsa_priv.h: 4060
+dsbr100.c: 17605
+ds.c: 38706
+dsc.c: 1195
+dscc4.c: 55052
+dsdt-override.txt: 247
+dsemul.c: 4501
+dsfield.c: 19154
+dsfield.h: 1127
+ds.h: 8003
+dsinit.c: 6745
+dsmethod.c: 19169
+dsmg600.h: 1216
+dsmg600-pci.c: 1898
+dsmg600-setup.c: 7030
+dsmthdat.c: 21585
+dsobject.c: 23900
+dsopcode.c: 39305
+dsp56k: 4096
+dsp56k.c: 12404
+dsp56k.h: 1269
+dsp_audio.c: 11056
+dsp_biquad.h: 1622
+dsp_blowfish.c: 23738
+dspbootcode.bin.ihex: 36048
+dsp_cmx.c: 52826
+dsp_common.h: 1309
+dsp_core.c: 33551
+dsp_defs.h: 12149
+dspdids.h: 2695
+dsp_dtmf.c: 7570
+dsp_ecdis.h: 3527
+dsp.h: 7893
+dsp_hwec.c: 3049
+dsp_hwec.h: 242
+dsp_pipeline.c: 8348
+dsp_spos.c: 55617
+dsp_spos.h: 7631
+dsp_spos_scb_lib.c: 49424
+dsp_tones.c: 17264
+dsp_tst.h: 1486
+dsrv4bri.h: 1644
+dsrv_bri.h: 1178
+dsrv_pri.h: 1247
+ds_selftest.c: 9393
+ds_selftest.h: 363
+dst: 4096
+dst.c: 49967
+dst_ca.c: 21634
+dst_ca.h: 1591
+dst_common.h: 4277
+dst.h: 14556
+dst_priv.h: 598
+dstr.c: 5143
+dsutils.c: 25450
+dswexec.c: 19731
+dswload.c: 31066
+dswscope.c: 6750
+dswstate.c: 21428
+dt019x.c: 9062
+dt2801.c: 15251
+dt2811.c: 14680
+dt2814.c: 8589
+dt2815.c: 7337
+dt2817.c: 4517
+dt282x.c: 35248
+dt3000.c: 23494
+dt9812.c: 28480
+dtc: 4096
+dt.c: 16907
+dtc2278.c: 3867
+dtc3x80.txt: 1952
+dtc.c: 13348
+dtc.h: 2644
+dtc-lexer.l: 6979
+dtc-lexer.lex.c_shipped: 57920
+dtc-parser.tab.c_shipped: 55472
+dtc-parser.tab.h_shipped: 3233
+dtc-parser.y: 6540
+dtc-src: 4096
+dtl1_cs.c: 14325
+dtlb_miss.S: 747
+dtlb_prot.S: 1267
+dtl.c: 6493
+dtlk.c: 16644
+dtlk.h: 3768
+dts: 4096
+dts-bindings: 4096
+dtt200u.c: 9848
+dtt200u-fe.c: 5300
+dtt200u.h: 1606
+dtv5100.c: 5845
+dtv5100.h: 1534
+dum.h: 7581
+dummy.c: 3850
+dummycon.c: 1805
+dummy_hcd.c: 50629
+dump_pagetables.c: 8879
+dumprequest.c: 3343
+dumprequest.h: 2117
+dumpstack_32.c: 3323
+dumpstack_64.c: 7276
+dump_stack.c: 290
+dumpstack.c: 8067
+dumpstack.h: 1003
+dump_tlb.c: 2643
+dv1394: 390
+dv1394.c: 74226
+dv1394.h: 10409
+dv1394-private.h: 17471
+dvb: 4096
+dvb-bt8xx.c: 28096
+dvb-bt8xx.h: 1816
+dvb_ca_en50221.c: 45737
+dvb_ca_en50221.h: 4082
+dvb-core: 4096
+dvb_demux.c: 30507
+dvb_demux.h: 3579
+dvbdev.c: 11761
+dvbdev.h: 4065
+dvb_dummy_fe.c: 7049
+dvb_dummy_fe.h: 1698
+dvb_filter.c: 12922
+dvb_filter.h: 6064
+dvb_frontend.c: 54720
+dvb_frontend.h: 11618
+dvb_math.c: 5423
+dvb_math.h: 1974
+dvb_net.c: 42892
+dvb_net.h: 1379
+dvb-pll.c: 17175
+dvb-pll.h: 1617
+dvb_ringbuffer.c: 7188
+dvb_ringbuffer.h: 6340
+dvb-ttusb-budget.c: 44105
+dvb-usb: 12288
+dvb-usb-common.h: 2150
+dvb-usb-dvb.c: 5850
+dvb-usb-firmware.c: 3956
+dvb-usb.h: 12194
+dvb-usb-i2c.c: 1061
+dvb-usb-ids.h: 11042
+dvb-usb-init.c: 8477
+dvb-usb-remote.c: 5519
+dvb-usb-urb.c: 2585
+dvi.c: 18260
+dvi.h: 2461
+dvma.c: 1265
+dvma.h: 9864
+dvo_ch7017.c: 14698
+dvo_ch7xxx.c: 9179
+dvo.h: 4860
+dvo_ivch.c: 10628
+dvo_sil164.c: 7534
+dvo_tfp410.c: 8848
+dw2102.c: 27129
+dw2102.h: 240
+dwarf2.h: 2393
+dw_dmac.c: 37849
+dw_dmac.h: 3078
+dw_dmac_regs.h: 6137
+dynamic_debug.c: 18386
+dynamic_debug.h: 2666
+dynamic-debug-howto.txt: 8633
+dyn.lds.S: 5092
+dz.c: 23133
+dz.h: 5439
+e00154b8e949bf4b89ac198aef9a247532ac2d: 297
+e100: 4096
+e1000: 4096
+e1000_82575.c: 42179
+e1000_82575.h: 8176
+e1000_defines.h: 28796
+e1000e: 4096
+e1000_ethtool.c: 56605
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread
* [Qemu-devel] [PATCH 25/25] Introduce qemu-dict unit-tests
2009-07-28 22:04 [Qemu-devel] [PATCH 00/25] Monitor handlers new structure phase 1 Luiz Capitulino
` (23 preceding siblings ...)
2009-07-28 22:05 ` [Qemu-devel] [PATCH 24/25] Introduce dictionary test data file Luiz Capitulino
@ 2009-07-28 22:05 ` Luiz Capitulino
24 siblings, 0 replies; 55+ messages in thread
From: Luiz Capitulino @ 2009-07-28 22:05 UTC (permalink / raw)
To: qemu-devel; +Cc: jan.kiszka, aliguori, dlaor, avi, Luiz Capitulino
This suite contains tests to assure that qemu-dict API will
work as expected.
To execute it, you should build QEMU with check support enabled
and then run:
$ ./check-qdict
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
---
Makefile | 1 +
check-qdict.c | 289 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
configure | 2 +-
3 files changed, 291 insertions(+), 1 deletions(-)
create mode 100644 check-qdict.c
diff --git a/Makefile b/Makefile
index e63f09d..e65b2c7 100644
--- a/Makefile
+++ b/Makefile
@@ -216,6 +216,7 @@ qemu-img-cmds.h: $(SRC_PATH)/qemu-img-cmds.hx
ifdef CONFIG_CHECK
LIBS += $(CHECK_LIBS)
+check-qdict: check-qdict.o qemu-dict.o qemu-malloc.o
endif
clean:
diff --git a/check-qdict.c b/check-qdict.c
new file mode 100644
index 0000000..ae3c19a
--- /dev/null
+++ b/check-qdict.c
@@ -0,0 +1,289 @@
+/*
+ * qemu-dict unit-tests.
+ *
+ * Copyright (C) 2009 Red Hat Inc.
+ *
+ * Authors:
+ * Luiz Capitulino <lcapitulino@redhat.com>
+ *
+ * Not really the best unit-testing example (and not developed in a
+ * test-driven way), but does the job.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <check.h>
+
+#include "qemu-dict.h"
+
+/*
+ * Basic API tests
+ */
+
+START_TEST(create_test)
+{
+ struct qemu_dict *qdict;
+
+ qdict = qemu_dict_create();
+ fail_unless(qdict != NULL, "qdict is NULL");
+ fail_unless(qemu_dict_size(qdict) == 0, "size is not 0");
+
+ free(qdict);
+}
+END_TEST
+
+START_TEST(destroy_simple_test)
+{
+ struct qemu_dict *qdict;
+
+ qdict = qemu_dict_create();
+ fail_unless(qdict != NULL, "qdict is NULL");
+
+ qemu_dict_destroy(qdict);
+ fail_unless(qemu_dict_size(qdict) == 0, "size is not 0");
+}
+END_TEST
+
+static struct qemu_dict *tests_dict = NULL;
+
+static void qdict_setup(void)
+{
+ tests_dict = qemu_dict_create();
+ fail_unless(tests_dict != NULL, "tests_dict is NULL");
+}
+
+static void qdict_teardown(void)
+{
+ qemu_dict_destroy(tests_dict);
+ tests_dict = NULL;
+}
+
+/* two tests in one, not good but... */
+START_TEST(insert_new_test)
+{
+ int *ret, value = 42;
+ const char *key = "test";
+
+ qemu_dict_add(tests_dict, key, &value);
+ fail_unless(qemu_dict_size(tests_dict) == 1);
+
+ ret = qemu_dict_get(tests_dict, key);
+ fail_unless(*ret == value);
+}
+END_TEST
+
+START_TEST(insert_existing_test)
+{
+ int *ret, value1, value2;
+ const char *key = "test";
+
+ value1 = 42;
+ qemu_dict_add(tests_dict, key, &value1);
+ fail_unless(qemu_dict_size(tests_dict) == 1);
+
+ value2 = 667;
+ qemu_dict_add(tests_dict, key, &value2);
+
+ ret = qemu_dict_get(tests_dict, key);
+ fail_unless(*ret == value1);
+}
+END_TEST
+
+START_TEST(exists_not_exists_test)
+{
+ fail_unless(qemu_dict_exists(tests_dict, "test") == 0);
+}
+END_TEST
+
+START_TEST(exists_exists_test)
+{
+ const char *key = "test";
+
+ qemu_dict_add(tests_dict, key, NULL);
+ fail_unless(qemu_dict_exists(tests_dict, key) == 1);
+}
+END_TEST
+
+START_TEST(get_not_exists_test)
+{
+ fail_unless(qemu_dict_get(tests_dict, "test") == NULL);
+}
+END_TEST
+
+START_TEST(del_exists_test)
+{
+ int value = 42;
+ const char *key = "test";
+
+ qemu_dict_add(tests_dict, key, &value);
+ fail_unless(qemu_dict_size(tests_dict) == 1);
+
+ qemu_dict_del(tests_dict, key);
+ fail_unless(qemu_dict_size(tests_dict) == 0);
+ fail_unless(qemu_dict_get(tests_dict, key) == NULL);
+}
+END_TEST
+
+START_TEST(del_not_exists_test)
+{
+ const char *key = "test";
+
+ qemu_dict_del(tests_dict, key);
+ fail_unless(qemu_dict_size(tests_dict) == 0);
+ fail_unless(qemu_dict_get(tests_dict, key) == NULL);
+}
+END_TEST
+
+static int test_walkf_keys;
+static void test_walkf(const char *key, void *value)
+{
+ test_walkf_keys++;
+}
+
+START_TEST(walk_through_test)
+{
+ int i;
+ const char *strings[] = { "walk", "through", "test",
+ "foo", "bar", "qemu", "KVM",
+ NULL };
+
+ for (i = 0; strings[i] != NULL; i++)
+ qemu_dict_add(tests_dict, strings[i], NULL);
+
+ qemu_dict_walk(tests_dict, test_walkf);
+ fail_unless(test_walkf_keys == i);
+
+}
+END_TEST
+
+/*
+ * Stress test-case
+ *
+ * This is a lot big for a unit-test, but there is no other place
+ * to have it.
+ */
+
+static void remove_dots(char *string)
+{
+ char *p = strchr(string, ':');
+ if (p)
+ *p = '\0';
+}
+
+static int read_chars(FILE *file, char *key, char *value)
+{
+ if (fscanf(file, "%s%s", key, value) == EOF)
+ return 1;
+ remove_dots(key);
+ return 0;
+}
+
+#define reset_file(file) fseek(file, 0L, SEEK_SET)
+
+START_TEST(qdict_stress_test)
+{
+ size_t i;
+ FILE *test_file;
+ struct qemu_dict *qdict;
+ char key[128], value[128];
+
+ test_file = fopen("qdict-test-data.txt", "r");
+ fail_unless(test_file != NULL);
+
+ // Create the dict
+ qdict = qemu_dict_create();
+ fail_unless(qdict != NULL);
+
+ // Add everything from the test file
+ for (i = 0;; i++) {
+ if (read_chars(test_file, key, value))
+ break;
+ qemu_dict_add(qdict, key, strdup(value));
+ }
+ fail_unless(qemu_dict_size(qdict) == i);
+
+ // Check if everything is really in there
+ reset_file(test_file);
+ for (;;) {
+ char *p;
+
+ if (read_chars(test_file, key, value))
+ break;
+
+ p = qemu_dict_get(qdict, key);
+ fail_unless(p != NULL);
+ fail_unless(strcmp(p, value) == 0);
+ }
+
+ // Delete everything
+ reset_file(test_file);
+ for (;;) {
+ char *p;
+
+ if (read_chars(test_file, key, value))
+ break;
+
+ p = qemu_dict_del(qdict, key);
+ fail_unless(p != NULL);
+ fail_unless(strcmp(p, value) == 0);
+ free(p);
+
+ p = qemu_dict_get(qdict, key);
+ fail_unless(p == NULL);
+ }
+
+ fail_unless(qemu_dict_size(qdict) == 0);
+ qemu_dict_destroy(qdict);
+}
+END_TEST
+
+static Suite *qdict_suite(void)
+{
+ Suite *s;
+ TCase *qdict_api_tcase;
+ TCase *qdict_api2_tcase;
+ TCase *qdict_stress_tcase;
+
+ s = suite_create("qemu-dict test-suite");
+
+ /* Very basic API test-case */
+ qdict_api_tcase = tcase_create("Basic API");
+ suite_add_tcase(s, qdict_api_tcase);
+ tcase_add_test(qdict_api_tcase, create_test);
+ tcase_add_test(qdict_api_tcase, destroy_simple_test);
+
+ /* The same as above, but with fixture */
+ qdict_api2_tcase = tcase_create("Basic API 2");
+ suite_add_tcase(s, qdict_api2_tcase);
+ tcase_add_checked_fixture(qdict_api2_tcase, qdict_setup, qdict_teardown);
+ tcase_add_test(qdict_api2_tcase, insert_new_test);
+ tcase_add_test(qdict_api2_tcase, insert_existing_test);
+ tcase_add_test(qdict_api2_tcase, exists_not_exists_test);
+ tcase_add_test(qdict_api2_tcase, exists_exists_test);
+ tcase_add_test(qdict_api2_tcase, get_not_exists_test);
+ tcase_add_test(qdict_api2_tcase, del_exists_test);
+ tcase_add_test(qdict_api2_tcase, del_not_exists_test);
+ tcase_add_test(qdict_api2_tcase, walk_through_test);
+
+ /* The Big one */
+ qdict_stress_tcase = tcase_create("Stress test");
+ suite_add_tcase(s, qdict_stress_tcase);
+ tcase_add_test(qdict_stress_tcase, qdict_stress_test);
+
+ return s;
+}
+
+int main(void)
+{
+ int nf;
+ Suite *s;
+ SRunner *sr;
+
+ s = qdict_suite();
+ sr = srunner_create(s);
+
+ srunner_run_all(sr, CK_NORMAL);
+ nf = srunner_ntests_failed(sr);
+ srunner_free(sr);
+
+ return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/configure b/configure
index dc2cdd2..0a4d4a6 100755
--- a/configure
+++ b/configure
@@ -1765,7 +1765,7 @@ if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then
if [ "$linux" = "yes" ] ; then
tools="qemu-nbd\$(EXESUF) qemu-io\$(EXESUF) $tools"
if [ "$check" = "yes" ]; then
- tools="$tools"
+ tools="check-qdict $tools"
fi
fi
fi
--
1.6.4.rc3.12.gdf73a
^ permalink raw reply related [flat|nested] 55+ messages in thread