diff options
566 files changed, 8735 insertions, 4741 deletions
diff --git a/.gitignore b/.gitignore index 9c0d650385be..d24ad506e799 100644 --- a/.gitignore +++ b/.gitignore | |||
| @@ -52,6 +52,7 @@ series | |||
| 52 | 52 | ||
| 53 | # cscope files | 53 | # cscope files |
| 54 | cscope.* | 54 | cscope.* |
| 55 | ncscope.* | ||
| 55 | 56 | ||
| 56 | *.orig | 57 | *.orig |
| 57 | *~ | 58 | *~ |
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index 9c93a03ea33b..118ca6e9404f 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches | |||
| @@ -327,6 +327,52 @@ Some people also put extra tags at the end. They'll just be ignored for | |||
| 327 | now, but you can do this to mark internal company procedures or just | 327 | now, but you can do this to mark internal company procedures or just |
| 328 | point out some special detail about the sign-off. | 328 | point out some special detail about the sign-off. |
| 329 | 329 | ||
| 330 | If you are a subsystem or branch maintainer, sometimes you need to slightly | ||
| 331 | modify patches you receive in order to merge them, because the code is not | ||
| 332 | exactly the same in your tree and the submitters'. If you stick strictly to | ||
| 333 | rule (c), you should ask the submitter to rediff, but this is a totally | ||
| 334 | counter-productive waste of time and energy. Rule (b) allows you to adjust | ||
| 335 | the code, but then it is very impolite to change one submitter's code and | ||
| 336 | make him endorse your bugs. To solve this problem, it is recommended that | ||
| 337 | you add a line between the last Signed-off-by header and yours, indicating | ||
| 338 | the nature of your changes. While there is nothing mandatory about this, it | ||
| 339 | seems like prepending the description with your mail and/or name, all | ||
| 340 | enclosed in square brackets, is noticeable enough to make it obvious that | ||
| 341 | you are responsible for last-minute changes. Example : | ||
| 342 | |||
| 343 | Signed-off-by: Random J Developer <random@developer.example.org> | ||
| 344 | [lucky@maintainer.example.org: struct foo moved from foo.c to foo.h] | ||
| 345 | Signed-off-by: Lucky K Maintainer <lucky@maintainer.example.org> | ||
| 346 | |||
| 347 | This practise is particularly helpful if you maintain a stable branch and | ||
| 348 | want at the same time to credit the author, track changes, merge the fix, | ||
| 349 | and protect the submitter from complaints. Note that under no circumstances | ||
| 350 | can you change the author's identity (the From header), as it is the one | ||
| 351 | which appears in the changelog. | ||
| 352 | |||
| 353 | Special note to back-porters: It seems to be a common and useful practise | ||
| 354 | to insert an indication of the origin of a patch at the top of the commit | ||
| 355 | message (just after the subject line) to facilitate tracking. For instance, | ||
| 356 | here's what we see in 2.6-stable : | ||
| 357 | |||
| 358 | Date: Tue May 13 19:10:30 2008 +0000 | ||
| 359 | |||
| 360 | SCSI: libiscsi regression in 2.6.25: fix nop timer handling | ||
| 361 | |||
| 362 | commit 4cf1043593db6a337f10e006c23c69e5fc93e722 upstream | ||
| 363 | |||
| 364 | And here's what appears in 2.4 : | ||
| 365 | |||
| 366 | Date: Tue May 13 22:12:27 2008 +0200 | ||
| 367 | |||
| 368 | wireless, airo: waitbusy() won't delay | ||
| 369 | |||
| 370 | [backport of 2.6 commit b7acbdfbd1f277c1eb23f344f899cfa4cd0bf36a] | ||
| 371 | |||
| 372 | Whatever the format, this information provides a valuable help to people | ||
| 373 | tracking your trees, and to people trying to trouble-shoot bugs in your | ||
| 374 | tree. | ||
| 375 | |||
| 330 | 376 | ||
| 331 | 13) When to use Acked-by: and Cc: | 377 | 13) When to use Acked-by: and Cc: |
| 332 | 378 | ||
diff --git a/Documentation/cpusets.txt b/Documentation/cpusets.txt index fb7b361e6eea..d803c5c68ab5 100644 --- a/Documentation/cpusets.txt +++ b/Documentation/cpusets.txt | |||
| @@ -199,7 +199,7 @@ using the sched_setaffinity, mbind and set_mempolicy system calls. | |||
| 199 | The following rules apply to each cpuset: | 199 | The following rules apply to each cpuset: |
| 200 | 200 | ||
| 201 | - Its CPUs and Memory Nodes must be a subset of its parents. | 201 | - Its CPUs and Memory Nodes must be a subset of its parents. |
| 202 | - It can only be marked exclusive if its parent is. | 202 | - It can't be marked exclusive unless its parent is. |
| 203 | - If its cpu or memory is exclusive, they may not overlap any sibling. | 203 | - If its cpu or memory is exclusive, they may not overlap any sibling. |
| 204 | 204 | ||
| 205 | These rules, and the natural hierarchy of cpusets, enable efficient | 205 | These rules, and the natural hierarchy of cpusets, enable efficient |
| @@ -345,7 +345,7 @@ is modified to perform an inline check for this PF_SPREAD_PAGE task | |||
| 345 | flag, and if set, a call to a new routine cpuset_mem_spread_node() | 345 | flag, and if set, a call to a new routine cpuset_mem_spread_node() |
| 346 | returns the node to prefer for the allocation. | 346 | returns the node to prefer for the allocation. |
| 347 | 347 | ||
| 348 | Similarly, setting 'memory_spread_cache' turns on the flag | 348 | Similarly, setting 'memory_spread_slab' turns on the flag |
| 349 | PF_SPREAD_SLAB, and appropriately marked slab caches will allocate | 349 | PF_SPREAD_SLAB, and appropriately marked slab caches will allocate |
| 350 | pages from the node returned by cpuset_mem_spread_node(). | 350 | pages from the node returned by cpuset_mem_spread_node(). |
| 351 | 351 | ||
| @@ -709,7 +709,10 @@ Now you want to do something with this cpuset. | |||
| 709 | 709 | ||
| 710 | In this directory you can find several files: | 710 | In this directory you can find several files: |
| 711 | # ls | 711 | # ls |
| 712 | cpus cpu_exclusive mems mem_exclusive mem_hardwall tasks | 712 | cpu_exclusive memory_migrate mems tasks |
| 713 | cpus memory_pressure notify_on_release | ||
| 714 | mem_exclusive memory_spread_page sched_load_balance | ||
| 715 | mem_hardwall memory_spread_slab sched_relax_domain_level | ||
| 713 | 716 | ||
| 714 | Reading them will give you information about the state of this cpuset: | 717 | Reading them will give you information about the state of this cpuset: |
| 715 | the CPUs and Memory Nodes it can use, the processes that are using | 718 | the CPUs and Memory Nodes it can use, the processes that are using |
diff --git a/Documentation/kernel-doc-nano-HOWTO.txt b/Documentation/kernel-doc-nano-HOWTO.txt index 2075c0658bf5..0bd32748a467 100644 --- a/Documentation/kernel-doc-nano-HOWTO.txt +++ b/Documentation/kernel-doc-nano-HOWTO.txt | |||
| @@ -1,6 +1,105 @@ | |||
| 1 | kernel-doc nano-HOWTO | 1 | kernel-doc nano-HOWTO |
| 2 | ===================== | 2 | ===================== |
| 3 | 3 | ||
| 4 | How to format kernel-doc comments | ||
| 5 | --------------------------------- | ||
| 6 | |||
| 7 | In order to provide embedded, 'C' friendly, easy to maintain, | ||
| 8 | but consistent and extractable documentation of the functions and | ||
| 9 | data structures in the Linux kernel, the Linux kernel has adopted | ||
| 10 | a consistent style for documenting functions and their parameters, | ||
| 11 | and structures and their members. | ||
| 12 | |||
| 13 | The format for this documentation is called the kernel-doc format. | ||
| 14 | It is documented in this Documentation/kernel-doc-nano-HOWTO.txt file. | ||
| 15 | |||
| 16 | This style embeds the documentation within the source files, using | ||
| 17 | a few simple conventions. The scripts/kernel-doc perl script, some | ||
| 18 | SGML templates in Documentation/DocBook, and other tools understand | ||
| 19 | these conventions, and are used to extract this embedded documentation | ||
| 20 | into various documents. | ||
| 21 | |||
| 22 | In order to provide good documentation of kernel functions and data | ||
| 23 | structures, please use the following conventions to format your | ||
| 24 | kernel-doc comments in Linux kernel source. | ||
| 25 | |||
| 26 | We definitely need kernel-doc formatted documentation for functions | ||
| 27 | that are exported to loadable modules using EXPORT_SYMBOL. | ||
| 28 | |||
| 29 | We also look to provide kernel-doc formatted documentation for | ||
| 30 | functions externally visible to other kernel files (not marked | ||
| 31 | "static"). | ||
| 32 | |||
| 33 | We also recommend providing kernel-doc formatted documentation | ||
| 34 | for private (file "static") routines, for consistency of kernel | ||
| 35 | source code layout. But this is lower priority and at the | ||
| 36 | discretion of the MAINTAINER of that kernel source file. | ||
| 37 | |||
| 38 | Data structures visible in kernel include files should also be | ||
| 39 | documented using kernel-doc formatted comments. | ||
| 40 | |||
| 41 | The opening comment mark "/**" is reserved for kernel-doc comments. | ||
| 42 | Only comments so marked will be considered by the kernel-doc scripts, | ||
| 43 | and any comment so marked must be in kernel-doc format. Do not use | ||
| 44 | "/**" to be begin a comment block unless the comment block contains | ||
| 45 | kernel-doc formatted comments. The closing comment marker for | ||
| 46 | kernel-doc comments can be either "*/" or "**/". | ||
| 47 | |||
| 48 | Kernel-doc comments should be placed just before the function | ||
| 49 | or data structure being described. | ||
| 50 | |||
| 51 | Example kernel-doc function comment: | ||
| 52 | |||
| 53 | /** | ||
| 54 | * foobar() - short function description of foobar | ||
| 55 | * @arg1: Describe the first argument to foobar. | ||
| 56 | * @arg2: Describe the second argument to foobar. | ||
| 57 | * One can provide multiple line descriptions | ||
| 58 | * for arguments. | ||
| 59 | * | ||
| 60 | * A longer description, with more discussion of the function foobar() | ||
| 61 | * that might be useful to those using or modifying it. Begins with | ||
| 62 | * empty comment line, and may include additional embedded empty | ||
| 63 | * comment lines. | ||
| 64 | * | ||
| 65 | * The longer description can have multiple paragraphs. | ||
| 66 | **/ | ||
| 67 | |||
| 68 | The first line, with the short description, must be on a single line. | ||
| 69 | |||
| 70 | The @argument descriptions must begin on the very next line following | ||
| 71 | this opening short function description line, with no intervening | ||
| 72 | empty comment lines. | ||
| 73 | |||
| 74 | Example kernel-doc data structure comment. | ||
| 75 | |||
| 76 | /** | ||
| 77 | * struct blah - the basic blah structure | ||
| 78 | * @mem1: describe the first member of struct blah | ||
| 79 | * @mem2: describe the second member of struct blah, | ||
| 80 | * perhaps with more lines and words. | ||
| 81 | * | ||
| 82 | * Longer description of this structure. | ||
| 83 | **/ | ||
| 84 | |||
| 85 | The kernel-doc function comments describe each parameter to the | ||
| 86 | function, in order, with the @name lines. | ||
| 87 | |||
| 88 | The kernel-doc data structure comments describe each structure member | ||
| 89 | in the data structure, with the @name lines. | ||
| 90 | |||
| 91 | The longer description formatting is "reflowed", losing your line | ||
| 92 | breaks. So presenting carefully formatted lists within these | ||
| 93 | descriptions won't work so well; derived documentation will lose | ||
| 94 | the formatting. | ||
| 95 | |||
| 96 | See the section below "How to add extractable documentation to your | ||
| 97 | source files" for more details and notes on how to format kernel-doc | ||
| 98 | comments. | ||
| 99 | |||
| 100 | Components of the kernel-doc system | ||
| 101 | ----------------------------------- | ||
| 102 | |||
| 4 | Many places in the source tree have extractable documentation in the | 103 | Many places in the source tree have extractable documentation in the |
| 5 | form of block comments above functions. The components of this system | 104 | form of block comments above functions. The components of this system |
| 6 | are: | 105 | are: |
diff --git a/Documentation/kernel-docs.txt b/Documentation/kernel-docs.txt index 5a4ef48224ae..28cdc2af2131 100644 --- a/Documentation/kernel-docs.txt +++ b/Documentation/kernel-docs.txt | |||
| @@ -715,14 +715,14 @@ | |||
| 715 | 715 | ||
| 716 | * Name: "Gary's Encyclopedia - The Linux Kernel" | 716 | * Name: "Gary's Encyclopedia - The Linux Kernel" |
| 717 | Author: Gary (I suppose...). | 717 | Author: Gary (I suppose...). |
| 718 | URL: http://www.lisoleg.net/cgi-bin/lisoleg.pl?view=kernel.htm | 718 | URL: http://slencyclopedia.berlios.de/index.html |
| 719 | Keywords: links, not found here?. | 719 | Keywords: linux, community, everything! |
| 720 | Description: Gary's Encyclopedia exists to allow the rapid finding | 720 | Description: Gary's Encyclopedia exists to allow the rapid finding |
| 721 | of documentation and other information of interest to GNU/Linux | 721 | of documentation and other information of interest to GNU/Linux |
| 722 | users. It has about 4000 links to external pages in 150 major | 722 | users. It has about 4000 links to external pages in 150 major |
| 723 | categories. This link is for kernel-specific links, documents, | 723 | categories. This link is for kernel-specific links, documents, |
| 724 | sites... Look there if you could not find here what you were | 724 | sites... This list is now hosted by developer.Berlios.de, |
| 725 | looking for. | 725 | but seems not to have been updated since sometime in 1999. |
| 726 | 726 | ||
| 727 | * Name: "The home page of Linux-MM" | 727 | * Name: "The home page of Linux-MM" |
| 728 | Author: The Linux-MM team. | 728 | Author: The Linux-MM team. |
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index 3be8ab2a886a..82fafe0429fe 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
| @@ -157,6 +157,9 @@ struct virtqueue | |||
| 157 | 157 | ||
| 158 | /* The routine to call when the Guest pings us. */ | 158 | /* The routine to call when the Guest pings us. */ |
| 159 | void (*handle_output)(int fd, struct virtqueue *me); | 159 | void (*handle_output)(int fd, struct virtqueue *me); |
| 160 | |||
| 161 | /* Outstanding buffers */ | ||
| 162 | unsigned int inflight; | ||
| 160 | }; | 163 | }; |
| 161 | 164 | ||
| 162 | /* Remember the arguments to the program so we can "reboot" */ | 165 | /* Remember the arguments to the program so we can "reboot" */ |
| @@ -702,6 +705,7 @@ static unsigned get_vq_desc(struct virtqueue *vq, | |||
| 702 | errx(1, "Looped descriptor"); | 705 | errx(1, "Looped descriptor"); |
| 703 | } while ((i = next_desc(vq, i)) != vq->vring.num); | 706 | } while ((i = next_desc(vq, i)) != vq->vring.num); |
| 704 | 707 | ||
| 708 | vq->inflight++; | ||
| 705 | return head; | 709 | return head; |
| 706 | } | 710 | } |
| 707 | 711 | ||
| @@ -719,6 +723,7 @@ static void add_used(struct virtqueue *vq, unsigned int head, int len) | |||
| 719 | /* Make sure buffer is written before we update index. */ | 723 | /* Make sure buffer is written before we update index. */ |
| 720 | wmb(); | 724 | wmb(); |
| 721 | vq->vring.used->idx++; | 725 | vq->vring.used->idx++; |
| 726 | vq->inflight--; | ||
| 722 | } | 727 | } |
| 723 | 728 | ||
| 724 | /* This actually sends the interrupt for this virtqueue */ | 729 | /* This actually sends the interrupt for this virtqueue */ |
| @@ -726,8 +731,9 @@ static void trigger_irq(int fd, struct virtqueue *vq) | |||
| 726 | { | 731 | { |
| 727 | unsigned long buf[] = { LHREQ_IRQ, vq->config.irq }; | 732 | unsigned long buf[] = { LHREQ_IRQ, vq->config.irq }; |
| 728 | 733 | ||
| 729 | /* If they don't want an interrupt, don't send one. */ | 734 | /* If they don't want an interrupt, don't send one, unless empty. */ |
| 730 | if (vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT) | 735 | if ((vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT) |
| 736 | && vq->inflight) | ||
| 731 | return; | 737 | return; |
| 732 | 738 | ||
| 733 | /* Send the Guest an interrupt tell them we used something up. */ | 739 | /* Send the Guest an interrupt tell them we used something up. */ |
| @@ -1107,6 +1113,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs, | |||
| 1107 | vq->next = NULL; | 1113 | vq->next = NULL; |
| 1108 | vq->last_avail_idx = 0; | 1114 | vq->last_avail_idx = 0; |
| 1109 | vq->dev = dev; | 1115 | vq->dev = dev; |
| 1116 | vq->inflight = 0; | ||
| 1110 | 1117 | ||
| 1111 | /* Initialize the configuration. */ | 1118 | /* Initialize the configuration. */ |
| 1112 | vq->config.num = num_descs; | 1119 | vq->config.num = num_descs; |
| @@ -1368,6 +1375,7 @@ static void setup_tun_net(const char *arg) | |||
| 1368 | 1375 | ||
| 1369 | /* Tell Guest what MAC address to use. */ | 1376 | /* Tell Guest what MAC address to use. */ |
| 1370 | add_feature(dev, VIRTIO_NET_F_MAC); | 1377 | add_feature(dev, VIRTIO_NET_F_MAC); |
| 1378 | add_feature(dev, VIRTIO_F_NOTIFY_ON_EMPTY); | ||
| 1371 | set_config(dev, sizeof(conf), &conf); | 1379 | set_config(dev, sizeof(conf), &conf); |
| 1372 | 1380 | ||
| 1373 | /* We don't need the socket any more; setup is done. */ | 1381 | /* We don't need the socket any more; setup is done. */ |
diff --git a/Documentation/networking/arcnet.txt b/Documentation/networking/arcnet.txt index 770fc41a78e8..796012540386 100644 --- a/Documentation/networking/arcnet.txt +++ b/Documentation/networking/arcnet.txt | |||
| @@ -46,7 +46,7 @@ These are the ARCnet drivers for Linux. | |||
| 46 | 46 | ||
| 47 | 47 | ||
| 48 | This new release (2.91) has been put together by David Woodhouse | 48 | This new release (2.91) has been put together by David Woodhouse |
| 49 | <dwmw2@cam.ac.uk>, in an attempt to tidy up the driver after adding support | 49 | <dwmw2@infradead.org>, in an attempt to tidy up the driver after adding support |
| 50 | for yet another chipset. Now the generic support has been separated from the | 50 | for yet another chipset. Now the generic support has been separated from the |
| 51 | individual chipset drivers, and the source files aren't quite so packed with | 51 | individual chipset drivers, and the source files aren't quite so packed with |
| 52 | #ifdefs! I've changed this file a bit, but kept it in the first person from | 52 | #ifdefs! I've changed this file a bit, but kept it in the first person from |
diff --git a/Documentation/networking/bridge.txt b/Documentation/networking/bridge.txt index bdae2db4119c..bec69a8a1697 100644 --- a/Documentation/networking/bridge.txt +++ b/Documentation/networking/bridge.txt | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | In order to use the Ethernet bridging functionality, you'll need the | 1 | In order to use the Ethernet bridging functionality, you'll need the |
| 2 | userspace tools. These programs and documentation are available | 2 | userspace tools. These programs and documentation are available |
| 3 | at http://bridge.sourceforge.net. The download page is | 3 | at http://www.linux-foundation.org/en/Net:Bridge. The download page is |
| 4 | http://prdownloads.sourceforge.net/bridge. | 4 | http://prdownloads.sourceforge.net/bridge. |
| 5 | 5 | ||
| 6 | If you still have questions, don't hesitate to post to the mailing list | 6 | If you still have questions, don't hesitate to post to the mailing list |
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 543957346469..7cf5685d3645 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
| @@ -60,7 +60,7 @@ | |||
| 60 | 59 -> DViCO FusionHDTV 5 PCI nano [18ac:d530] | 60 | 59 -> DViCO FusionHDTV 5 PCI nano [18ac:d530] |
| 61 | 60 -> Pinnacle Hybrid PCTV [12ab:1788] | 61 | 60 -> Pinnacle Hybrid PCTV [12ab:1788] |
| 62 | 61 -> Winfast TV2000 XP Global [107d:6f18] | 62 | 61 -> Winfast TV2000 XP Global [107d:6f18] |
| 63 | 62 -> PowerColor Real Angel 330 [14f1:ea3d] | 63 | 62 -> PowerColor RA330 [14f1:ea3d] |
| 64 | 63 -> Geniatech X8000-MT DVBT [14f1:8852] | 64 | 63 -> Geniatech X8000-MT DVBT [14f1:8852] |
| 65 | 64 -> DViCO FusionHDTV DVB-T PRO [18ac:db30] | 65 | 64 -> DViCO FusionHDTV DVB-T PRO [18ac:db30] |
| 66 | 65 -> DViCO FusionHDTV 7 Gold [18ac:d610] | 66 | 65 -> DViCO FusionHDTV 7 Gold [18ac:d610] |
diff --git a/Documentation/video4linux/cx18.txt b/Documentation/video4linux/cx18.txt index 077d56ec3f3d..6842c262890f 100644 --- a/Documentation/video4linux/cx18.txt +++ b/Documentation/video4linux/cx18.txt | |||
| @@ -1,7 +1,9 @@ | |||
| 1 | Some notes regarding the cx18 driver for the Conexant CX23418 MPEG | 1 | Some notes regarding the cx18 driver for the Conexant CX23418 MPEG |
| 2 | encoder chip: | 2 | encoder chip: |
| 3 | 3 | ||
| 4 | 1) The only hardware currently supported is the Hauppauge HVR-1600. | 4 | 1) The only hardware currently supported is the Hauppauge HVR-1600 |
| 5 | card and the Compro VideoMate H900 (note that this card only | ||
| 6 | supports analog input, it has no digital tuner!). | ||
| 5 | 7 | ||
| 6 | 2) Some people have problems getting the i2c bus to work. Cause unknown. | 8 | 2) Some people have problems getting the i2c bus to work. Cause unknown. |
| 7 | The symptom is that the eeprom cannot be read and the card is | 9 | The symptom is that the eeprom cannot be read and the card is |
diff --git a/Documentation/vm/pagemap.txt b/Documentation/vm/pagemap.txt new file mode 100644 index 000000000000..ce72c0fe6177 --- /dev/null +++ b/Documentation/vm/pagemap.txt | |||
| @@ -0,0 +1,77 @@ | |||
| 1 | pagemap, from the userspace perspective | ||
| 2 | --------------------------------------- | ||
| 3 | |||
| 4 | pagemap is a new (as of 2.6.25) set of interfaces in the kernel that allow | ||
| 5 | userspace programs to examine the page tables and related information by | ||
| 6 | reading files in /proc. | ||
| 7 | |||
| 8 | There are three components to pagemap: | ||
| 9 | |||
| 10 | * /proc/pid/pagemap. This file lets a userspace process find out which | ||
| 11 | physical frame each virtual page is mapped to. It contains one 64-bit | ||
| 12 | value for each virtual page, containing the following data (from | ||
| 13 | fs/proc/task_mmu.c, above pagemap_read): | ||
| 14 | |||
| 15 | * Bits 0-55 page frame number (PFN) if present | ||
| 16 | * Bits 0-4 swap type if swapped | ||
| 17 | * Bits 5-55 swap offset if swapped | ||
| 18 | * Bits 55-60 page shift (page size = 1<<page shift) | ||
| 19 | * Bit 61 reserved for future use | ||
| 20 | * Bit 62 page swapped | ||
| 21 | * Bit 63 page present | ||
| 22 | |||
| 23 | If the page is not present but in swap, then the PFN contains an | ||
| 24 | encoding of the swap file number and the page's offset into the | ||
| 25 | swap. Unmapped pages return a null PFN. This allows determining | ||
| 26 | precisely which pages are mapped (or in swap) and comparing mapped | ||
| 27 | pages between processes. | ||
| 28 | |||
| 29 | Efficient users of this interface will use /proc/pid/maps to | ||
| 30 | determine which areas of memory are actually mapped and llseek to | ||
| 31 | skip over unmapped regions. | ||
| 32 | |||
| 33 | * /proc/kpagecount. This file contains a 64-bit count of the number of | ||
| 34 | times each page is mapped, indexed by PFN. | ||
| 35 | |||
| 36 | * /proc/kpageflags. This file contains a 64-bit set of flags for each | ||
| 37 | page, indexed by PFN. | ||
| 38 | |||
| 39 | The flags are (from fs/proc/proc_misc, above kpageflags_read): | ||
| 40 | |||
| 41 | 0. LOCKED | ||
| 42 | 1. ERROR | ||
| 43 | 2. REFERENCED | ||
| 44 | 3. UPTODATE | ||
| 45 | 4. DIRTY | ||
| 46 | 5. LRU | ||
| 47 | 6. ACTIVE | ||
| 48 | 7. SLAB | ||
| 49 | 8. WRITEBACK | ||
| 50 | 9. RECLAIM | ||
| 51 | 10. BUDDY | ||
| 52 | |||
| 53 | Using pagemap to do something useful: | ||
| 54 | |||
| 55 | The general procedure for using pagemap to find out about a process' memory | ||
| 56 | usage goes like this: | ||
| 57 | |||
| 58 | 1. Read /proc/pid/maps to determine which parts of the memory space are | ||
| 59 | mapped to what. | ||
| 60 | 2. Select the maps you are interested in -- all of them, or a particular | ||
| 61 | library, or the stack or the heap, etc. | ||
| 62 | 3. Open /proc/pid/pagemap and seek to the pages you would like to examine. | ||
| 63 | 4. Read a u64 for each page from pagemap. | ||
| 64 | 5. Open /proc/kpagecount and/or /proc/kpageflags. For each PFN you just | ||
| 65 | read, seek to that entry in the file, and read the data you want. | ||
| 66 | |||
| 67 | For example, to find the "unique set size" (USS), which is the amount of | ||
| 68 | memory that a process is using that is not shared with any other process, | ||
| 69 | you can go through every map in the process, find the PFNs, look those up | ||
| 70 | in kpagecount, and tally up the number of pages that are only referenced | ||
| 71 | once. | ||
| 72 | |||
| 73 | Other notes: | ||
| 74 | |||
| 75 | Reading from any of the files will return -EINVAL if you are not starting | ||
| 76 | the read on an 8-byte boundary (e.g., if you seeked an odd number of bytes | ||
| 77 | into the file), or if the size of the read is not a multiple of 8 bytes. | ||
diff --git a/MAINTAINERS b/MAINTAINERS index bd3badbb9ed6..99f566508d70 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -1611,7 +1611,7 @@ ETHERNET BRIDGE | |||
| 1611 | P: Stephen Hemminger | 1611 | P: Stephen Hemminger |
| 1612 | M: shemminger@linux-foundation.org | 1612 | M: shemminger@linux-foundation.org |
| 1613 | L: bridge@lists.linux-foundation.org | 1613 | L: bridge@lists.linux-foundation.org |
| 1614 | W: http://bridge.sourceforge.net/ | 1614 | W: http://www.linux-foundation.org/en/Net:Bridge |
| 1615 | S: Maintained | 1615 | S: Maintained |
| 1616 | 1616 | ||
| 1617 | ETHERTEAM 16I DRIVER | 1617 | ETHERTEAM 16I DRIVER |
| @@ -2565,7 +2565,6 @@ LINUX SECURITY MODULE (LSM) FRAMEWORK | |||
| 2565 | P: Chris Wright | 2565 | P: Chris Wright |
| 2566 | M: chrisw@sous-sol.org | 2566 | M: chrisw@sous-sol.org |
| 2567 | L: linux-security-module@vger.kernel.org | 2567 | L: linux-security-module@vger.kernel.org |
| 2568 | W: http://lsm.immunix.org | ||
| 2569 | T: git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git | 2568 | T: git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git |
| 2570 | S: Supported | 2569 | S: Supported |
| 2571 | 2570 | ||
| @@ -3439,10 +3438,7 @@ L: rtc-linux@googlegroups.com | |||
| 3439 | S: Maintained | 3438 | S: Maintained |
| 3440 | 3439 | ||
| 3441 | REISERFS FILE SYSTEM | 3440 | REISERFS FILE SYSTEM |
| 3442 | P: Hans Reiser | ||
| 3443 | M: reiserfs-dev@namesys.com | ||
| 3444 | L: reiserfs-devel@vger.kernel.org | 3441 | L: reiserfs-devel@vger.kernel.org |
| 3445 | W: http://www.namesys.com | ||
| 3446 | S: Supported | 3442 | S: Supported |
| 3447 | 3443 | ||
| 3448 | RFKILL | 3444 | RFKILL |
| @@ -1,7 +1,7 @@ | |||
| 1 | VERSION = 2 | 1 | VERSION = 2 |
| 2 | PATCHLEVEL = 6 | 2 | PATCHLEVEL = 6 |
| 3 | SUBLEVEL = 26 | 3 | SUBLEVEL = 26 |
| 4 | EXTRAVERSION = -rc3 | 4 | EXTRAVERSION = -rc5 |
| 5 | NAME = Funky Weasel is Jiggy wit it | 5 | NAME = Funky Weasel is Jiggy wit it |
| 6 | 6 | ||
| 7 | # *DOCUMENTATION* | 7 | # *DOCUMENTATION* |
diff --git a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S index 67ea99ef6521..dd3fbd6766e1 100644 --- a/arch/arm/boot/compressed/head-xscale.S +++ b/arch/arm/boot/compressed/head-xscale.S | |||
| @@ -33,10 +33,6 @@ __XScale_start: | |||
| 33 | bic r0, r0, #0x1000 @ clear Icache | 33 | bic r0, r0, #0x1000 @ clear Icache |
| 34 | mcr p15, 0, r0, c1, c0, 0 | 34 | mcr p15, 0, r0, c1, c0, 0 |
| 35 | 35 | ||
| 36 | #ifdef CONFIG_ARCH_COTULLA_IDP | ||
| 37 | mov r7, #MACH_TYPE_COTULLA_IDP | ||
| 38 | #endif | ||
| 39 | |||
| 40 | #ifdef CONFIG_ARCH_IXP2000 | 36 | #ifdef CONFIG_ARCH_IXP2000 |
| 41 | mov r1, #-1 | 37 | mov r1, #-1 |
| 42 | mov r0, #0xd6000000 | 38 | mov r0, #0xd6000000 |
diff --git a/arch/arm/mach-pxa/cm-x270.c b/arch/arm/mach-pxa/cm-x270.c index 6d4416a4f378..f5851d1adc25 100644 --- a/arch/arm/mach-pxa/cm-x270.c +++ b/arch/arm/mach-pxa/cm-x270.c | |||
| @@ -59,7 +59,7 @@ static struct resource cmx270_dm9k_resource[] = { | |||
| 59 | [2] = { | 59 | [2] = { |
| 60 | .start = CMX270_ETHIRQ, | 60 | .start = CMX270_ETHIRQ, |
| 61 | .end = CMX270_ETHIRQ, | 61 | .end = CMX270_ETHIRQ, |
| 62 | .flags = IORESOURCE_IRQ, | 62 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, |
| 63 | } | 63 | } |
| 64 | }; | 64 | }; |
| 65 | 65 | ||
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c index edc4f07a230d..9c57700ee5c2 100644 --- a/arch/arm/mach-pxa/em-x270.c +++ b/arch/arm/mach-pxa/em-x270.c | |||
| @@ -50,7 +50,7 @@ static struct resource em_x270_dm9k_resource[] = { | |||
| 50 | [2] = { | 50 | [2] = { |
| 51 | .start = EM_X270_ETHIRQ, | 51 | .start = EM_X270_ETHIRQ, |
| 52 | .end = EM_X270_ETHIRQ, | 52 | .end = EM_X270_ETHIRQ, |
| 53 | .flags = IORESOURCE_IRQ, | 53 | .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, |
| 54 | } | 54 | } |
| 55 | }; | 55 | }; |
| 56 | 56 | ||
diff --git a/arch/arm/mach-pxa/tosa.c b/arch/arm/mach-pxa/tosa.c index c2cbd66db814..ab4a9f579913 100644 --- a/arch/arm/mach-pxa/tosa.c +++ b/arch/arm/mach-pxa/tosa.c | |||
| @@ -467,8 +467,8 @@ static struct platform_device *devices[] __initdata = { | |||
| 467 | 467 | ||
| 468 | static void tosa_poweroff(void) | 468 | static void tosa_poweroff(void) |
| 469 | { | 469 | { |
| 470 | pxa_gpio_mode(TOSA_GPIO_ON_RESET | GPIO_OUT); | 470 | gpio_direction_output(TOSA_GPIO_ON_RESET, 0); |
| 471 | GPSR(TOSA_GPIO_ON_RESET) = GPIO_bit(TOSA_GPIO_ON_RESET); | 471 | gpio_set_value(TOSA_GPIO_ON_RESET, 1); |
| 472 | 472 | ||
| 473 | mdelay(1000); | 473 | mdelay(1000); |
| 474 | arm_machine_restart('h'); | 474 | arm_machine_restart('h'); |
diff --git a/arch/avr32/configs/atngw100_defconfig b/arch/avr32/configs/atngw100_defconfig index 06046074d68b..119edb839ac3 100644 --- a/arch/avr32/configs/atngw100_defconfig +++ b/arch/avr32/configs/atngw100_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 23:20:41 2008 | 4 | # Mon May 26 13:30:59 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -37,17 +37,15 @@ CONFIG_POSIX_MQUEUE=y | |||
| 37 | CONFIG_BSD_PROCESS_ACCT=y | 37 | CONFIG_BSD_PROCESS_ACCT=y |
| 38 | CONFIG_BSD_PROCESS_ACCT_V3=y | 38 | CONFIG_BSD_PROCESS_ACCT_V3=y |
| 39 | # CONFIG_TASKSTATS is not set | 39 | # CONFIG_TASKSTATS is not set |
| 40 | # CONFIG_USER_NS is not set | ||
| 41 | # CONFIG_PID_NS is not set | ||
| 42 | # CONFIG_AUDIT is not set | 40 | # CONFIG_AUDIT is not set |
| 43 | # CONFIG_IKCONFIG is not set | 41 | # CONFIG_IKCONFIG is not set |
| 44 | CONFIG_LOG_BUF_SHIFT=14 | 42 | CONFIG_LOG_BUF_SHIFT=14 |
| 45 | # CONFIG_CGROUPS is not set | 43 | # CONFIG_CGROUPS is not set |
| 46 | CONFIG_FAIR_GROUP_SCHED=y | 44 | # CONFIG_GROUP_SCHED is not set |
| 47 | CONFIG_FAIR_USER_SCHED=y | ||
| 48 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
| 49 | CONFIG_SYSFS_DEPRECATED=y | 45 | CONFIG_SYSFS_DEPRECATED=y |
| 46 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 50 | # CONFIG_RELAY is not set | 47 | # CONFIG_RELAY is not set |
| 48 | # CONFIG_NAMESPACES is not set | ||
| 51 | CONFIG_BLK_DEV_INITRD=y | 49 | CONFIG_BLK_DEV_INITRD=y |
| 52 | CONFIG_INITRAMFS_SOURCE="" | 50 | CONFIG_INITRAMFS_SOURCE="" |
| 53 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 51 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| @@ -61,11 +59,13 @@ CONFIG_HOTPLUG=y | |||
| 61 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 62 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 63 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | ||
| 64 | # CONFIG_BASE_FULL is not set | 63 | # CONFIG_BASE_FULL is not set |
| 65 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 66 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
| 67 | CONFIG_EPOLL=y | 66 | CONFIG_EPOLL=y |
| 68 | CONFIG_SIGNALFD=y | 67 | CONFIG_SIGNALFD=y |
| 68 | CONFIG_TIMERFD=y | ||
| 69 | CONFIG_EVENTFD=y | 69 | CONFIG_EVENTFD=y |
| 70 | CONFIG_SHMEM=y | 70 | CONFIG_SHMEM=y |
| 71 | CONFIG_VM_EVENT_COUNTERS=y | 71 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -73,11 +73,21 @@ CONFIG_SLUB_DEBUG=y | |||
| 73 | # CONFIG_SLAB is not set | 73 | # CONFIG_SLAB is not set |
| 74 | CONFIG_SLUB=y | 74 | CONFIG_SLUB=y |
| 75 | # CONFIG_SLOB is not set | 75 | # CONFIG_SLOB is not set |
| 76 | CONFIG_PROFILING=y | ||
| 77 | # CONFIG_MARKERS is not set | ||
| 78 | CONFIG_OPROFILE=m | ||
| 79 | CONFIG_HAVE_OPROFILE=y | ||
| 80 | CONFIG_KPROBES=y | ||
| 81 | CONFIG_HAVE_KPROBES=y | ||
| 82 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 83 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 84 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 76 | CONFIG_SLABINFO=y | 85 | CONFIG_SLABINFO=y |
| 77 | CONFIG_RT_MUTEXES=y | 86 | CONFIG_RT_MUTEXES=y |
| 78 | # CONFIG_TINY_SHMEM is not set | 87 | # CONFIG_TINY_SHMEM is not set |
| 79 | CONFIG_BASE_SMALL=1 | 88 | CONFIG_BASE_SMALL=1 |
| 80 | CONFIG_MODULES=y | 89 | CONFIG_MODULES=y |
| 90 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 81 | CONFIG_MODULE_UNLOAD=y | 91 | CONFIG_MODULE_UNLOAD=y |
| 82 | CONFIG_MODULE_FORCE_UNLOAD=y | 92 | CONFIG_MODULE_FORCE_UNLOAD=y |
| 83 | # CONFIG_MODVERSIONS is not set | 93 | # CONFIG_MODVERSIONS is not set |
| @@ -101,10 +111,15 @@ CONFIG_IOSCHED_CFQ=y | |||
| 101 | CONFIG_DEFAULT_CFQ=y | 111 | CONFIG_DEFAULT_CFQ=y |
| 102 | # CONFIG_DEFAULT_NOOP is not set | 112 | # CONFIG_DEFAULT_NOOP is not set |
| 103 | CONFIG_DEFAULT_IOSCHED="cfq" | 113 | CONFIG_DEFAULT_IOSCHED="cfq" |
| 114 | CONFIG_CLASSIC_RCU=y | ||
| 104 | 115 | ||
| 105 | # | 116 | # |
| 106 | # System Type and features | 117 | # System Type and features |
| 107 | # | 118 | # |
| 119 | CONFIG_TICK_ONESHOT=y | ||
| 120 | CONFIG_NO_HZ=y | ||
| 121 | CONFIG_HIGH_RES_TIMERS=y | ||
| 122 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 108 | CONFIG_SUBARCH_AVR32B=y | 123 | CONFIG_SUBARCH_AVR32B=y |
| 109 | CONFIG_MMU=y | 124 | CONFIG_MMU=y |
| 110 | CONFIG_PERFORMANCE_COUNTERS=y | 125 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -141,16 +156,19 @@ CONFIG_FLATMEM=y | |||
| 141 | CONFIG_FLAT_NODE_MEM_MAP=y | 156 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 142 | # CONFIG_SPARSEMEM_STATIC is not set | 157 | # CONFIG_SPARSEMEM_STATIC is not set |
| 143 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 158 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 159 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 144 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 160 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 145 | # CONFIG_RESOURCES_64BIT is not set | 161 | # CONFIG_RESOURCES_64BIT is not set |
| 146 | CONFIG_ZONE_DMA_FLAG=0 | 162 | CONFIG_ZONE_DMA_FLAG=0 |
| 147 | CONFIG_VIRT_TO_BUS=y | 163 | CONFIG_VIRT_TO_BUS=y |
| 148 | # CONFIG_OWNERSHIP_TRACE is not set | 164 | # CONFIG_OWNERSHIP_TRACE is not set |
| 165 | CONFIG_NMI_DEBUGGING=y | ||
| 149 | # CONFIG_HZ_100 is not set | 166 | # CONFIG_HZ_100 is not set |
| 150 | CONFIG_HZ_250=y | 167 | CONFIG_HZ_250=y |
| 151 | # CONFIG_HZ_300 is not set | 168 | # CONFIG_HZ_300 is not set |
| 152 | # CONFIG_HZ_1000 is not set | 169 | # CONFIG_HZ_1000 is not set |
| 153 | CONFIG_HZ=250 | 170 | CONFIG_HZ=250 |
| 171 | # CONFIG_SCHED_HRTICK is not set | ||
| 154 | CONFIG_CMDLINE="" | 172 | CONFIG_CMDLINE="" |
| 155 | 173 | ||
| 156 | # | 174 | # |
| @@ -164,9 +182,10 @@ CONFIG_CPU_FREQ=y | |||
| 164 | CONFIG_CPU_FREQ_TABLE=y | 182 | CONFIG_CPU_FREQ_TABLE=y |
| 165 | # CONFIG_CPU_FREQ_DEBUG is not set | 183 | # CONFIG_CPU_FREQ_DEBUG is not set |
| 166 | # CONFIG_CPU_FREQ_STAT is not set | 184 | # CONFIG_CPU_FREQ_STAT is not set |
| 167 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 185 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
| 186 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 168 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 187 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 169 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 188 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
| 170 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 189 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| 171 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 190 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 172 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 191 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| @@ -202,6 +221,7 @@ CONFIG_XFRM=y | |||
| 202 | CONFIG_XFRM_USER=y | 221 | CONFIG_XFRM_USER=y |
| 203 | # CONFIG_XFRM_SUB_POLICY is not set | 222 | # CONFIG_XFRM_SUB_POLICY is not set |
| 204 | # CONFIG_XFRM_MIGRATE is not set | 223 | # CONFIG_XFRM_MIGRATE is not set |
| 224 | # CONFIG_XFRM_STATISTICS is not set | ||
| 205 | CONFIG_NET_KEY=y | 225 | CONFIG_NET_KEY=y |
| 206 | # CONFIG_NET_KEY_MIGRATE is not set | 226 | # CONFIG_NET_KEY_MIGRATE is not set |
| 207 | CONFIG_INET=y | 227 | CONFIG_INET=y |
| @@ -255,87 +275,40 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=y | |||
| 255 | CONFIG_INET6_XFRM_MODE_BEET=y | 275 | CONFIG_INET6_XFRM_MODE_BEET=y |
| 256 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 276 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 257 | CONFIG_IPV6_SIT=y | 277 | CONFIG_IPV6_SIT=y |
| 278 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
| 258 | # CONFIG_IPV6_TUNNEL is not set | 279 | # CONFIG_IPV6_TUNNEL is not set |
| 259 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 280 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 281 | # CONFIG_IPV6_MROUTE is not set | ||
| 260 | # CONFIG_NETWORK_SECMARK is not set | 282 | # CONFIG_NETWORK_SECMARK is not set |
| 261 | CONFIG_NETFILTER=y | 283 | CONFIG_NETFILTER=y |
| 262 | # CONFIG_NETFILTER_DEBUG is not set | 284 | # CONFIG_NETFILTER_DEBUG is not set |
| 263 | CONFIG_BRIDGE_NETFILTER=y | 285 | # CONFIG_NETFILTER_ADVANCED is not set |
| 264 | 286 | ||
| 265 | # | 287 | # |
| 266 | # Core Netfilter Configuration | 288 | # Core Netfilter Configuration |
| 267 | # | 289 | # |
| 268 | # CONFIG_NETFILTER_NETLINK is not set | 290 | CONFIG_NETFILTER_NETLINK=m |
| 269 | CONFIG_NF_CONNTRACK_ENABLED=m | 291 | CONFIG_NETFILTER_NETLINK_LOG=m |
| 270 | CONFIG_NF_CONNTRACK=m | 292 | CONFIG_NF_CONNTRACK=m |
| 271 | CONFIG_NF_CT_ACCT=y | ||
| 272 | CONFIG_NF_CONNTRACK_MARK=y | ||
| 273 | # CONFIG_NF_CONNTRACK_EVENTS is not set | ||
| 274 | CONFIG_NF_CT_PROTO_GRE=m | ||
| 275 | # CONFIG_NF_CT_PROTO_SCTP is not set | ||
| 276 | # CONFIG_NF_CT_PROTO_UDPLITE is not set | ||
| 277 | CONFIG_NF_CONNTRACK_AMANDA=m | ||
| 278 | CONFIG_NF_CONNTRACK_FTP=m | 293 | CONFIG_NF_CONNTRACK_FTP=m |
| 279 | CONFIG_NF_CONNTRACK_H323=m | ||
| 280 | CONFIG_NF_CONNTRACK_IRC=m | 294 | CONFIG_NF_CONNTRACK_IRC=m |
| 281 | CONFIG_NF_CONNTRACK_NETBIOS_NS=m | ||
| 282 | CONFIG_NF_CONNTRACK_PPTP=m | ||
| 283 | CONFIG_NF_CONNTRACK_SANE=m | ||
| 284 | CONFIG_NF_CONNTRACK_SIP=m | 295 | CONFIG_NF_CONNTRACK_SIP=m |
| 285 | CONFIG_NF_CONNTRACK_TFTP=m | 296 | CONFIG_NF_CT_NETLINK=m |
| 286 | CONFIG_NETFILTER_XTABLES=y | 297 | CONFIG_NETFILTER_XTABLES=y |
| 287 | CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m | ||
| 288 | # CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set | ||
| 289 | # CONFIG_NETFILTER_XT_TARGET_DSCP is not set | ||
| 290 | CONFIG_NETFILTER_XT_TARGET_MARK=m | 298 | CONFIG_NETFILTER_XT_TARGET_MARK=m |
| 291 | CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m | ||
| 292 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m | 299 | CONFIG_NETFILTER_XT_TARGET_NFLOG=m |
| 293 | # CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set | ||
| 294 | # CONFIG_NETFILTER_XT_TARGET_TRACE is not set | ||
| 295 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m | 300 | CONFIG_NETFILTER_XT_TARGET_TCPMSS=m |
| 296 | CONFIG_NETFILTER_XT_MATCH_COMMENT=m | ||
| 297 | CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m | ||
| 298 | # CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set | ||
| 299 | CONFIG_NETFILTER_XT_MATCH_CONNMARK=m | ||
| 300 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m | 301 | CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m |
| 301 | # CONFIG_NETFILTER_XT_MATCH_DCCP is not set | ||
| 302 | # CONFIG_NETFILTER_XT_MATCH_DSCP is not set | ||
| 303 | CONFIG_NETFILTER_XT_MATCH_ESP=m | ||
| 304 | CONFIG_NETFILTER_XT_MATCH_HELPER=m | ||
| 305 | CONFIG_NETFILTER_XT_MATCH_LENGTH=m | ||
| 306 | CONFIG_NETFILTER_XT_MATCH_LIMIT=m | ||
| 307 | CONFIG_NETFILTER_XT_MATCH_MAC=m | ||
| 308 | CONFIG_NETFILTER_XT_MATCH_MARK=m | 302 | CONFIG_NETFILTER_XT_MATCH_MARK=m |
| 309 | CONFIG_NETFILTER_XT_MATCH_POLICY=m | 303 | CONFIG_NETFILTER_XT_MATCH_POLICY=m |
| 310 | CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m | ||
| 311 | # CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set | ||
| 312 | CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m | ||
| 313 | CONFIG_NETFILTER_XT_MATCH_QUOTA=m | ||
| 314 | CONFIG_NETFILTER_XT_MATCH_REALM=m | ||
| 315 | # CONFIG_NETFILTER_XT_MATCH_SCTP is not set | ||
| 316 | CONFIG_NETFILTER_XT_MATCH_STATE=m | 304 | CONFIG_NETFILTER_XT_MATCH_STATE=m |
| 317 | CONFIG_NETFILTER_XT_MATCH_STATISTIC=m | ||
| 318 | CONFIG_NETFILTER_XT_MATCH_STRING=m | ||
| 319 | CONFIG_NETFILTER_XT_MATCH_TCPMSS=m | ||
| 320 | # CONFIG_NETFILTER_XT_MATCH_TIME is not set | ||
| 321 | # CONFIG_NETFILTER_XT_MATCH_U32 is not set | ||
| 322 | CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m | ||
| 323 | 305 | ||
| 324 | # | 306 | # |
| 325 | # IP: Netfilter Configuration | 307 | # IP: Netfilter Configuration |
| 326 | # | 308 | # |
| 327 | CONFIG_NF_CONNTRACK_IPV4=m | 309 | CONFIG_NF_CONNTRACK_IPV4=m |
| 328 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y | 310 | CONFIG_NF_CONNTRACK_PROC_COMPAT=y |
| 329 | # CONFIG_IP_NF_QUEUE is not set | ||
| 330 | CONFIG_IP_NF_IPTABLES=m | 311 | CONFIG_IP_NF_IPTABLES=m |
| 331 | CONFIG_IP_NF_MATCH_IPRANGE=m | ||
| 332 | CONFIG_IP_NF_MATCH_TOS=m | ||
| 333 | CONFIG_IP_NF_MATCH_RECENT=m | ||
| 334 | CONFIG_IP_NF_MATCH_ECN=m | ||
| 335 | CONFIG_IP_NF_MATCH_AH=m | ||
| 336 | CONFIG_IP_NF_MATCH_TTL=m | ||
| 337 | CONFIG_IP_NF_MATCH_OWNER=m | ||
| 338 | CONFIG_IP_NF_MATCH_ADDRTYPE=m | ||
| 339 | CONFIG_IP_NF_FILTER=m | 312 | CONFIG_IP_NF_FILTER=m |
| 340 | CONFIG_IP_NF_TARGET_REJECT=m | 313 | CONFIG_IP_NF_TARGET_REJECT=m |
| 341 | CONFIG_IP_NF_TARGET_LOG=m | 314 | CONFIG_IP_NF_TARGET_LOG=m |
| @@ -343,54 +316,25 @@ CONFIG_IP_NF_TARGET_LOG=m | |||
| 343 | CONFIG_NF_NAT=m | 316 | CONFIG_NF_NAT=m |
| 344 | CONFIG_NF_NAT_NEEDED=y | 317 | CONFIG_NF_NAT_NEEDED=y |
| 345 | CONFIG_IP_NF_TARGET_MASQUERADE=m | 318 | CONFIG_IP_NF_TARGET_MASQUERADE=m |
| 346 | CONFIG_IP_NF_TARGET_REDIRECT=m | ||
| 347 | CONFIG_IP_NF_TARGET_NETMAP=m | ||
| 348 | CONFIG_IP_NF_TARGET_SAME=m | ||
| 349 | CONFIG_NF_NAT_SNMP_BASIC=m | ||
| 350 | CONFIG_NF_NAT_PROTO_GRE=m | ||
| 351 | CONFIG_NF_NAT_FTP=m | 319 | CONFIG_NF_NAT_FTP=m |
| 352 | CONFIG_NF_NAT_IRC=m | 320 | CONFIG_NF_NAT_IRC=m |
| 353 | CONFIG_NF_NAT_TFTP=m | 321 | # CONFIG_NF_NAT_TFTP is not set |
| 354 | CONFIG_NF_NAT_AMANDA=m | 322 | # CONFIG_NF_NAT_AMANDA is not set |
| 355 | CONFIG_NF_NAT_PPTP=m | 323 | # CONFIG_NF_NAT_PPTP is not set |
| 356 | CONFIG_NF_NAT_H323=m | 324 | # CONFIG_NF_NAT_H323 is not set |
| 357 | CONFIG_NF_NAT_SIP=m | 325 | CONFIG_NF_NAT_SIP=m |
| 358 | CONFIG_IP_NF_MANGLE=m | 326 | CONFIG_IP_NF_MANGLE=m |
| 359 | CONFIG_IP_NF_TARGET_TOS=m | ||
| 360 | CONFIG_IP_NF_TARGET_ECN=m | ||
| 361 | CONFIG_IP_NF_TARGET_TTL=m | ||
| 362 | CONFIG_IP_NF_TARGET_CLUSTERIP=m | ||
| 363 | CONFIG_IP_NF_RAW=m | ||
| 364 | CONFIG_IP_NF_ARPTABLES=m | ||
| 365 | CONFIG_IP_NF_ARPFILTER=m | ||
| 366 | CONFIG_IP_NF_ARP_MANGLE=m | ||
| 367 | 327 | ||
| 368 | # | 328 | # |
| 369 | # IPv6: Netfilter Configuration (EXPERIMENTAL) | 329 | # IPv6: Netfilter Configuration |
| 370 | # | 330 | # |
| 371 | CONFIG_NF_CONNTRACK_IPV6=m | 331 | CONFIG_NF_CONNTRACK_IPV6=m |
| 372 | CONFIG_IP6_NF_QUEUE=m | ||
| 373 | CONFIG_IP6_NF_IPTABLES=m | 332 | CONFIG_IP6_NF_IPTABLES=m |
| 374 | CONFIG_IP6_NF_MATCH_RT=m | ||
| 375 | CONFIG_IP6_NF_MATCH_OPTS=m | ||
| 376 | CONFIG_IP6_NF_MATCH_FRAG=m | ||
| 377 | CONFIG_IP6_NF_MATCH_HL=m | ||
| 378 | CONFIG_IP6_NF_MATCH_OWNER=m | ||
| 379 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m | 333 | CONFIG_IP6_NF_MATCH_IPV6HEADER=m |
| 380 | CONFIG_IP6_NF_MATCH_AH=m | ||
| 381 | CONFIG_IP6_NF_MATCH_MH=m | ||
| 382 | CONFIG_IP6_NF_MATCH_EUI64=m | ||
| 383 | CONFIG_IP6_NF_FILTER=m | 334 | CONFIG_IP6_NF_FILTER=m |
| 384 | CONFIG_IP6_NF_TARGET_LOG=m | 335 | CONFIG_IP6_NF_TARGET_LOG=m |
| 385 | CONFIG_IP6_NF_TARGET_REJECT=m | 336 | CONFIG_IP6_NF_TARGET_REJECT=m |
| 386 | CONFIG_IP6_NF_MANGLE=m | 337 | CONFIG_IP6_NF_MANGLE=m |
| 387 | CONFIG_IP6_NF_TARGET_HL=m | ||
| 388 | CONFIG_IP6_NF_RAW=m | ||
| 389 | |||
| 390 | # | ||
| 391 | # Bridge: Netfilter Configuration | ||
| 392 | # | ||
| 393 | # CONFIG_BRIDGE_NF_EBTABLES is not set | ||
| 394 | # CONFIG_IP_DCCP is not set | 338 | # CONFIG_IP_DCCP is not set |
| 395 | # CONFIG_IP_SCTP is not set | 339 | # CONFIG_IP_SCTP is not set |
| 396 | # CONFIG_TIPC is not set | 340 | # CONFIG_TIPC is not set |
| @@ -407,7 +351,6 @@ CONFIG_LLC=m | |||
| 407 | # CONFIG_ECONET is not set | 351 | # CONFIG_ECONET is not set |
| 408 | # CONFIG_WAN_ROUTER is not set | 352 | # CONFIG_WAN_ROUTER is not set |
| 409 | # CONFIG_NET_SCHED is not set | 353 | # CONFIG_NET_SCHED is not set |
| 410 | CONFIG_NET_CLS_ROUTE=y | ||
| 411 | 354 | ||
| 412 | # | 355 | # |
| 413 | # Network testing | 356 | # Network testing |
| @@ -415,6 +358,7 @@ CONFIG_NET_CLS_ROUTE=y | |||
| 415 | # CONFIG_NET_PKTGEN is not set | 358 | # CONFIG_NET_PKTGEN is not set |
| 416 | # CONFIG_NET_TCPPROBE is not set | 359 | # CONFIG_NET_TCPPROBE is not set |
| 417 | # CONFIG_HAMRADIO is not set | 360 | # CONFIG_HAMRADIO is not set |
| 361 | # CONFIG_CAN is not set | ||
| 418 | # CONFIG_IRDA is not set | 362 | # CONFIG_IRDA is not set |
| 419 | # CONFIG_BT is not set | 363 | # CONFIG_BT is not set |
| 420 | # CONFIG_AF_RXRPC is not set | 364 | # CONFIG_AF_RXRPC is not set |
| @@ -450,6 +394,7 @@ CONFIG_MTD=y | |||
| 450 | CONFIG_MTD_PARTITIONS=y | 394 | CONFIG_MTD_PARTITIONS=y |
| 451 | # CONFIG_MTD_REDBOOT_PARTS is not set | 395 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 452 | CONFIG_MTD_CMDLINE_PARTS=y | 396 | CONFIG_MTD_CMDLINE_PARTS=y |
| 397 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 453 | 398 | ||
| 454 | # | 399 | # |
| 455 | # User Modules And Translation Layers | 400 | # User Modules And Translation Layers |
| @@ -531,11 +476,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 531 | CONFIG_BLK_DEV_RAM=m | 476 | CONFIG_BLK_DEV_RAM=m |
| 532 | CONFIG_BLK_DEV_RAM_COUNT=16 | 477 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 533 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 478 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 534 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 479 | # CONFIG_BLK_DEV_XIP is not set |
| 535 | # CONFIG_CDROM_PKTCDVD is not set | 480 | # CONFIG_CDROM_PKTCDVD is not set |
| 536 | # CONFIG_ATA_OVER_ETH is not set | 481 | # CONFIG_ATA_OVER_ETH is not set |
| 537 | # CONFIG_MISC_DEVICES is not set | 482 | CONFIG_MISC_DEVICES=y |
| 538 | # CONFIG_IDE is not set | 483 | # CONFIG_ATMEL_PWM is not set |
| 484 | CONFIG_ATMEL_TCLIB=y | ||
| 485 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
| 486 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
| 487 | # CONFIG_EEPROM_93CX6 is not set | ||
| 488 | # CONFIG_ATMEL_SSC is not set | ||
| 489 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 490 | # CONFIG_HAVE_IDE is not set | ||
| 539 | 491 | ||
| 540 | # | 492 | # |
| 541 | # SCSI device support | 493 | # SCSI device support |
| @@ -568,11 +520,13 @@ CONFIG_PHYLIB=y | |||
| 568 | # CONFIG_SMSC_PHY is not set | 520 | # CONFIG_SMSC_PHY is not set |
| 569 | # CONFIG_BROADCOM_PHY is not set | 521 | # CONFIG_BROADCOM_PHY is not set |
| 570 | # CONFIG_ICPLUS_PHY is not set | 522 | # CONFIG_ICPLUS_PHY is not set |
| 523 | # CONFIG_REALTEK_PHY is not set | ||
| 571 | # CONFIG_FIXED_PHY is not set | 524 | # CONFIG_FIXED_PHY is not set |
| 572 | # CONFIG_MDIO_BITBANG is not set | 525 | # CONFIG_MDIO_BITBANG is not set |
| 573 | CONFIG_NET_ETHERNET=y | 526 | CONFIG_NET_ETHERNET=y |
| 574 | # CONFIG_MII is not set | 527 | # CONFIG_MII is not set |
| 575 | CONFIG_MACB=y | 528 | CONFIG_MACB=y |
| 529 | # CONFIG_ENC28J60 is not set | ||
| 576 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 530 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 577 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 531 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| 578 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 532 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
| @@ -586,6 +540,7 @@ CONFIG_MACB=y | |||
| 586 | # | 540 | # |
| 587 | # CONFIG_WLAN_PRE80211 is not set | 541 | # CONFIG_WLAN_PRE80211 is not set |
| 588 | # CONFIG_WLAN_80211 is not set | 542 | # CONFIG_WLAN_80211 is not set |
| 543 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 589 | # CONFIG_WAN is not set | 544 | # CONFIG_WAN is not set |
| 590 | CONFIG_PPP=m | 545 | CONFIG_PPP=m |
| 591 | # CONFIG_PPP_MULTILINK is not set | 546 | # CONFIG_PPP_MULTILINK is not set |
| @@ -599,7 +554,6 @@ CONFIG_PPPOE=m | |||
| 599 | # CONFIG_PPPOL2TP is not set | 554 | # CONFIG_PPPOL2TP is not set |
| 600 | # CONFIG_SLIP is not set | 555 | # CONFIG_SLIP is not set |
| 601 | CONFIG_SLHC=m | 556 | CONFIG_SLHC=m |
| 602 | # CONFIG_SHAPER is not set | ||
| 603 | # CONFIG_NETCONSOLE is not set | 557 | # CONFIG_NETCONSOLE is not set |
| 604 | # CONFIG_NETPOLL is not set | 558 | # CONFIG_NETPOLL is not set |
| 605 | # CONFIG_NET_POLL_CONTROLLER is not set | 559 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -621,6 +575,7 @@ CONFIG_SLHC=m | |||
| 621 | # Character devices | 575 | # Character devices |
| 622 | # | 576 | # |
| 623 | # CONFIG_VT is not set | 577 | # CONFIG_VT is not set |
| 578 | # CONFIG_DEVKMEM is not set | ||
| 624 | # CONFIG_SERIAL_NONSTANDARD is not set | 579 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 625 | 580 | ||
| 626 | # | 581 | # |
| @@ -633,6 +588,7 @@ CONFIG_SLHC=m | |||
| 633 | # | 588 | # |
| 634 | CONFIG_SERIAL_ATMEL=y | 589 | CONFIG_SERIAL_ATMEL=y |
| 635 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 590 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 591 | CONFIG_SERIAL_ATMEL_PDC=y | ||
| 636 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 592 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 637 | CONFIG_SERIAL_CORE=y | 593 | CONFIG_SERIAL_CORE=y |
| 638 | CONFIG_SERIAL_CORE_CONSOLE=y | 594 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -640,21 +596,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 640 | # CONFIG_LEGACY_PTYS is not set | 596 | # CONFIG_LEGACY_PTYS is not set |
| 641 | # CONFIG_IPMI_HANDLER is not set | 597 | # CONFIG_IPMI_HANDLER is not set |
| 642 | # CONFIG_HW_RANDOM is not set | 598 | # CONFIG_HW_RANDOM is not set |
| 643 | # CONFIG_RTC is not set | ||
| 644 | # CONFIG_GEN_RTC is not set | ||
| 645 | # CONFIG_R3964 is not set | 599 | # CONFIG_R3964 is not set |
| 646 | # CONFIG_RAW_DRIVER is not set | 600 | # CONFIG_RAW_DRIVER is not set |
| 647 | # CONFIG_TCG_TPM is not set | 601 | # CONFIG_TCG_TPM is not set |
| 648 | CONFIG_I2C=m | 602 | CONFIG_I2C=m |
| 649 | CONFIG_I2C_BOARDINFO=y | 603 | CONFIG_I2C_BOARDINFO=y |
| 650 | CONFIG_I2C_CHARDEV=m | 604 | CONFIG_I2C_CHARDEV=m |
| 651 | |||
| 652 | # | ||
| 653 | # I2C Algorithms | ||
| 654 | # | ||
| 655 | CONFIG_I2C_ALGOBIT=m | 605 | CONFIG_I2C_ALGOBIT=m |
| 656 | # CONFIG_I2C_ALGOPCF is not set | ||
| 657 | # CONFIG_I2C_ALGOPCA is not set | ||
| 658 | 606 | ||
| 659 | # | 607 | # |
| 660 | # I2C Hardware Bus support | 608 | # I2C Hardware Bus support |
| @@ -665,27 +613,23 @@ CONFIG_I2C_GPIO=m | |||
| 665 | # CONFIG_I2C_SIMTEC is not set | 613 | # CONFIG_I2C_SIMTEC is not set |
| 666 | # CONFIG_I2C_TAOS_EVM is not set | 614 | # CONFIG_I2C_TAOS_EVM is not set |
| 667 | # CONFIG_I2C_STUB is not set | 615 | # CONFIG_I2C_STUB is not set |
| 616 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 668 | 617 | ||
| 669 | # | 618 | # |
| 670 | # Miscellaneous I2C Chip support | 619 | # Miscellaneous I2C Chip support |
| 671 | # | 620 | # |
| 672 | # CONFIG_SENSORS_DS1337 is not set | ||
| 673 | # CONFIG_SENSORS_DS1374 is not set | ||
| 674 | # CONFIG_DS1682 is not set | 621 | # CONFIG_DS1682 is not set |
| 675 | # CONFIG_SENSORS_EEPROM is not set | 622 | # CONFIG_SENSORS_EEPROM is not set |
| 676 | # CONFIG_SENSORS_PCF8574 is not set | 623 | # CONFIG_SENSORS_PCF8574 is not set |
| 677 | # CONFIG_SENSORS_PCA9539 is not set | 624 | # CONFIG_PCF8575 is not set |
| 678 | # CONFIG_SENSORS_PCF8591 is not set | 625 | # CONFIG_SENSORS_PCF8591 is not set |
| 626 | # CONFIG_TPS65010 is not set | ||
| 679 | # CONFIG_SENSORS_MAX6875 is not set | 627 | # CONFIG_SENSORS_MAX6875 is not set |
| 680 | # CONFIG_SENSORS_TSL2550 is not set | 628 | # CONFIG_SENSORS_TSL2550 is not set |
| 681 | # CONFIG_I2C_DEBUG_CORE is not set | 629 | # CONFIG_I2C_DEBUG_CORE is not set |
| 682 | # CONFIG_I2C_DEBUG_ALGO is not set | 630 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 683 | # CONFIG_I2C_DEBUG_BUS is not set | 631 | # CONFIG_I2C_DEBUG_BUS is not set |
| 684 | # CONFIG_I2C_DEBUG_CHIP is not set | 632 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 685 | |||
| 686 | # | ||
| 687 | # SPI support | ||
| 688 | # | ||
| 689 | CONFIG_SPI=y | 633 | CONFIG_SPI=y |
| 690 | # CONFIG_SPI_DEBUG is not set | 634 | # CONFIG_SPI_DEBUG is not set |
| 691 | CONFIG_SPI_MASTER=y | 635 | CONFIG_SPI_MASTER=y |
| @@ -702,9 +646,27 @@ CONFIG_SPI_ATMEL=y | |||
| 702 | # CONFIG_SPI_AT25 is not set | 646 | # CONFIG_SPI_AT25 is not set |
| 703 | CONFIG_SPI_SPIDEV=m | 647 | CONFIG_SPI_SPIDEV=m |
| 704 | # CONFIG_SPI_TLE62X0 is not set | 648 | # CONFIG_SPI_TLE62X0 is not set |
| 649 | CONFIG_HAVE_GPIO_LIB=y | ||
| 650 | |||
| 651 | # | ||
| 652 | # GPIO Support | ||
| 653 | # | ||
| 654 | # CONFIG_DEBUG_GPIO is not set | ||
| 655 | |||
| 656 | # | ||
| 657 | # I2C GPIO expanders: | ||
| 658 | # | ||
| 659 | # CONFIG_GPIO_PCA953X is not set | ||
| 660 | # CONFIG_GPIO_PCF857X is not set | ||
| 661 | |||
| 662 | # | ||
| 663 | # SPI GPIO expanders: | ||
| 664 | # | ||
| 665 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 705 | # CONFIG_W1 is not set | 666 | # CONFIG_W1 is not set |
| 706 | # CONFIG_POWER_SUPPLY is not set | 667 | # CONFIG_POWER_SUPPLY is not set |
| 707 | # CONFIG_HWMON is not set | 668 | # CONFIG_HWMON is not set |
| 669 | # CONFIG_THERMAL is not set | ||
| 708 | CONFIG_WATCHDOG=y | 670 | CONFIG_WATCHDOG=y |
| 709 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 671 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 710 | 672 | ||
| @@ -724,12 +686,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 724 | # Multifunction device drivers | 686 | # Multifunction device drivers |
| 725 | # | 687 | # |
| 726 | # CONFIG_MFD_SM501 is not set | 688 | # CONFIG_MFD_SM501 is not set |
| 689 | # CONFIG_HTC_PASIC3 is not set | ||
| 727 | 690 | ||
| 728 | # | 691 | # |
| 729 | # Multimedia devices | 692 | # Multimedia devices |
| 730 | # | 693 | # |
| 694 | |||
| 695 | # | ||
| 696 | # Multimedia core support | ||
| 697 | # | ||
| 731 | # CONFIG_VIDEO_DEV is not set | 698 | # CONFIG_VIDEO_DEV is not set |
| 732 | # CONFIG_DVB_CORE is not set | 699 | # CONFIG_DVB_CORE is not set |
| 700 | # CONFIG_VIDEO_MEDIA is not set | ||
| 701 | |||
| 702 | # | ||
| 703 | # Multimedia drivers | ||
| 704 | # | ||
| 733 | # CONFIG_DAB is not set | 705 | # CONFIG_DAB is not set |
| 734 | 706 | ||
| 735 | # | 707 | # |
| @@ -753,14 +725,12 @@ CONFIG_USB_SUPPORT=y | |||
| 753 | # CONFIG_USB_ARCH_HAS_HCD is not set | 725 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 754 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 726 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 755 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 727 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 728 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 729 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 756 | 730 | ||
| 757 | # | 731 | # |
| 758 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 732 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 759 | # | 733 | # |
| 760 | |||
| 761 | # | ||
| 762 | # USB Gadget Support | ||
| 763 | # | ||
| 764 | CONFIG_USB_GADGET=y | 734 | CONFIG_USB_GADGET=y |
| 765 | # CONFIG_USB_GADGET_DEBUG is not set | 735 | # CONFIG_USB_GADGET_DEBUG is not set |
| 766 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 736 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| @@ -772,6 +742,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 772 | # CONFIG_USB_GADGET_NET2280 is not set | 742 | # CONFIG_USB_GADGET_NET2280 is not set |
| 773 | # CONFIG_USB_GADGET_PXA2XX is not set | 743 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 774 | # CONFIG_USB_GADGET_M66592 is not set | 744 | # CONFIG_USB_GADGET_M66592 is not set |
| 745 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 775 | # CONFIG_USB_GADGET_GOKU is not set | 746 | # CONFIG_USB_GADGET_GOKU is not set |
| 776 | # CONFIG_USB_GADGET_LH7A40X is not set | 747 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 777 | # CONFIG_USB_GADGET_OMAP is not set | 748 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -787,6 +758,7 @@ CONFIG_USB_FILE_STORAGE=m | |||
| 787 | # CONFIG_USB_FILE_STORAGE_TEST is not set | 758 | # CONFIG_USB_FILE_STORAGE_TEST is not set |
| 788 | CONFIG_USB_G_SERIAL=m | 759 | CONFIG_USB_G_SERIAL=m |
| 789 | # CONFIG_USB_MIDI_GADGET is not set | 760 | # CONFIG_USB_MIDI_GADGET is not set |
| 761 | # CONFIG_USB_G_PRINTER is not set | ||
| 790 | CONFIG_MMC=m | 762 | CONFIG_MMC=m |
| 791 | # CONFIG_MMC_DEBUG is not set | 763 | # CONFIG_MMC_DEBUG is not set |
| 792 | # CONFIG_MMC_UNSAFE_RESUME is not set | 764 | # CONFIG_MMC_UNSAFE_RESUME is not set |
| @@ -797,11 +769,13 @@ CONFIG_MMC=m | |||
| 797 | CONFIG_MMC_BLOCK=m | 769 | CONFIG_MMC_BLOCK=m |
| 798 | CONFIG_MMC_BLOCK_BOUNCE=y | 770 | CONFIG_MMC_BLOCK_BOUNCE=y |
| 799 | # CONFIG_SDIO_UART is not set | 771 | # CONFIG_SDIO_UART is not set |
| 772 | # CONFIG_MMC_TEST is not set | ||
| 800 | 773 | ||
| 801 | # | 774 | # |
| 802 | # MMC/SD Host Controller Drivers | 775 | # MMC/SD Host Controller Drivers |
| 803 | # | 776 | # |
| 804 | CONFIG_MMC_SPI=m | 777 | CONFIG_MMC_SPI=m |
| 778 | # CONFIG_MEMSTICK is not set | ||
| 805 | CONFIG_NEW_LEDS=y | 779 | CONFIG_NEW_LEDS=y |
| 806 | CONFIG_LEDS_CLASS=y | 780 | CONFIG_LEDS_CLASS=y |
| 807 | 781 | ||
| @@ -816,6 +790,8 @@ CONFIG_LEDS_GPIO=y | |||
| 816 | CONFIG_LEDS_TRIGGERS=y | 790 | CONFIG_LEDS_TRIGGERS=y |
| 817 | CONFIG_LEDS_TRIGGER_TIMER=y | 791 | CONFIG_LEDS_TRIGGER_TIMER=y |
| 818 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 792 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
| 793 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 794 | # CONFIG_ACCESSIBILITY is not set | ||
| 819 | CONFIG_RTC_LIB=y | 795 | CONFIG_RTC_LIB=y |
| 820 | CONFIG_RTC_CLASS=y | 796 | CONFIG_RTC_CLASS=y |
| 821 | CONFIG_RTC_HCTOSYS=y | 797 | CONFIG_RTC_HCTOSYS=y |
| @@ -844,19 +820,22 @@ CONFIG_RTC_INTF_DEV=y | |||
| 844 | # CONFIG_RTC_DRV_PCF8563 is not set | 820 | # CONFIG_RTC_DRV_PCF8563 is not set |
| 845 | # CONFIG_RTC_DRV_PCF8583 is not set | 821 | # CONFIG_RTC_DRV_PCF8583 is not set |
| 846 | # CONFIG_RTC_DRV_M41T80 is not set | 822 | # CONFIG_RTC_DRV_M41T80 is not set |
| 823 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 847 | 824 | ||
| 848 | # | 825 | # |
| 849 | # SPI RTC drivers | 826 | # SPI RTC drivers |
| 850 | # | 827 | # |
| 851 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 852 | # CONFIG_RTC_DRV_MAX6902 is not set | 828 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 829 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 830 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 853 | 831 | ||
| 854 | # | 832 | # |
| 855 | # Platform RTC drivers | 833 | # Platform RTC drivers |
| 856 | # | 834 | # |
| 835 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 857 | # CONFIG_RTC_DRV_DS1553 is not set | 836 | # CONFIG_RTC_DRV_DS1553 is not set |
| 858 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 859 | # CONFIG_RTC_DRV_DS1742 is not set | 837 | # CONFIG_RTC_DRV_DS1742 is not set |
| 838 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 860 | # CONFIG_RTC_DRV_M48T86 is not set | 839 | # CONFIG_RTC_DRV_M48T86 is not set |
| 861 | # CONFIG_RTC_DRV_M48T59 is not set | 840 | # CONFIG_RTC_DRV_M48T59 is not set |
| 862 | # CONFIG_RTC_DRV_V3020 is not set | 841 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -865,10 +844,6 @@ CONFIG_RTC_INTF_DEV=y | |||
| 865 | # on-CPU RTC drivers | 844 | # on-CPU RTC drivers |
| 866 | # | 845 | # |
| 867 | CONFIG_RTC_DRV_AT32AP700X=y | 846 | CONFIG_RTC_DRV_AT32AP700X=y |
| 868 | |||
| 869 | # | ||
| 870 | # Userspace I/O | ||
| 871 | # | ||
| 872 | # CONFIG_UIO is not set | 847 | # CONFIG_UIO is not set |
| 873 | 848 | ||
| 874 | # | 849 | # |
| @@ -885,14 +860,11 @@ CONFIG_JBD=m | |||
| 885 | # CONFIG_JFS_FS is not set | 860 | # CONFIG_JFS_FS is not set |
| 886 | # CONFIG_FS_POSIX_ACL is not set | 861 | # CONFIG_FS_POSIX_ACL is not set |
| 887 | # CONFIG_XFS_FS is not set | 862 | # CONFIG_XFS_FS is not set |
| 888 | # CONFIG_GFS2_FS is not set | ||
| 889 | # CONFIG_OCFS2_FS is not set | 863 | # CONFIG_OCFS2_FS is not set |
| 890 | # CONFIG_MINIX_FS is not set | 864 | # CONFIG_DNOTIFY is not set |
| 891 | # CONFIG_ROMFS_FS is not set | ||
| 892 | CONFIG_INOTIFY=y | 865 | CONFIG_INOTIFY=y |
| 893 | CONFIG_INOTIFY_USER=y | 866 | CONFIG_INOTIFY_USER=y |
| 894 | # CONFIG_QUOTA is not set | 867 | # CONFIG_QUOTA is not set |
| 895 | # CONFIG_DNOTIFY is not set | ||
| 896 | # CONFIG_AUTOFS_FS is not set | 868 | # CONFIG_AUTOFS_FS is not set |
| 897 | # CONFIG_AUTOFS4_FS is not set | 869 | # CONFIG_AUTOFS4_FS is not set |
| 898 | CONFIG_FUSE_FS=m | 870 | CONFIG_FUSE_FS=m |
| @@ -948,8 +920,10 @@ CONFIG_JFFS2_RTIME=y | |||
| 948 | # CONFIG_JFFS2_RUBIN is not set | 920 | # CONFIG_JFFS2_RUBIN is not set |
| 949 | # CONFIG_CRAMFS is not set | 921 | # CONFIG_CRAMFS is not set |
| 950 | # CONFIG_VXFS_FS is not set | 922 | # CONFIG_VXFS_FS is not set |
| 923 | # CONFIG_MINIX_FS is not set | ||
| 951 | # CONFIG_HPFS_FS is not set | 924 | # CONFIG_HPFS_FS is not set |
| 952 | # CONFIG_QNX4FS_FS is not set | 925 | # CONFIG_QNX4FS_FS is not set |
| 926 | # CONFIG_ROMFS_FS is not set | ||
| 953 | # CONFIG_SYSV_FS is not set | 927 | # CONFIG_SYSV_FS is not set |
| 954 | # CONFIG_UFS_FS is not set | 928 | # CONFIG_UFS_FS is not set |
| 955 | CONFIG_NETWORK_FILESYSTEMS=y | 929 | CONFIG_NETWORK_FILESYSTEMS=y |
| @@ -957,12 +931,10 @@ CONFIG_NFS_FS=y | |||
| 957 | CONFIG_NFS_V3=y | 931 | CONFIG_NFS_V3=y |
| 958 | # CONFIG_NFS_V3_ACL is not set | 932 | # CONFIG_NFS_V3_ACL is not set |
| 959 | # CONFIG_NFS_V4 is not set | 933 | # CONFIG_NFS_V4 is not set |
| 960 | # CONFIG_NFS_DIRECTIO is not set | ||
| 961 | CONFIG_NFSD=m | 934 | CONFIG_NFSD=m |
| 962 | CONFIG_NFSD_V3=y | 935 | CONFIG_NFSD_V3=y |
| 963 | # CONFIG_NFSD_V3_ACL is not set | 936 | # CONFIG_NFSD_V3_ACL is not set |
| 964 | # CONFIG_NFSD_V4 is not set | 937 | # CONFIG_NFSD_V4 is not set |
| 965 | CONFIG_NFSD_TCP=y | ||
| 966 | CONFIG_ROOT_NFS=y | 938 | CONFIG_ROOT_NFS=y |
| 967 | CONFIG_LOCKD=y | 939 | CONFIG_LOCKD=y |
| 968 | CONFIG_LOCKD_V4=y | 940 | CONFIG_LOCKD_V4=y |
| @@ -1030,11 +1002,6 @@ CONFIG_NLS_ISO8859_1=m | |||
| 1030 | # CONFIG_NLS_KOI8_U is not set | 1002 | # CONFIG_NLS_KOI8_U is not set |
| 1031 | CONFIG_NLS_UTF8=m | 1003 | CONFIG_NLS_UTF8=m |
| 1032 | # CONFIG_DLM is not set | 1004 | # CONFIG_DLM is not set |
| 1033 | CONFIG_INSTRUMENTATION=y | ||
| 1034 | CONFIG_PROFILING=y | ||
| 1035 | CONFIG_OPROFILE=m | ||
| 1036 | CONFIG_KPROBES=y | ||
| 1037 | # CONFIG_MARKERS is not set | ||
| 1038 | 1005 | ||
| 1039 | # | 1006 | # |
| 1040 | # Kernel hacking | 1007 | # Kernel hacking |
| @@ -1042,6 +1009,7 @@ CONFIG_KPROBES=y | |||
| 1042 | # CONFIG_PRINTK_TIME is not set | 1009 | # CONFIG_PRINTK_TIME is not set |
| 1043 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1010 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1044 | CONFIG_ENABLE_MUST_CHECK=y | 1011 | CONFIG_ENABLE_MUST_CHECK=y |
| 1012 | CONFIG_FRAME_WARN=1024 | ||
| 1045 | CONFIG_MAGIC_SYSRQ=y | 1013 | CONFIG_MAGIC_SYSRQ=y |
| 1046 | # CONFIG_UNUSED_SYMBOLS is not set | 1014 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1047 | # CONFIG_DEBUG_FS is not set | 1015 | # CONFIG_DEBUG_FS is not set |
| @@ -1052,7 +1020,9 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1052 | CONFIG_SCHED_DEBUG=y | 1020 | CONFIG_SCHED_DEBUG=y |
| 1053 | # CONFIG_SCHEDSTATS is not set | 1021 | # CONFIG_SCHEDSTATS is not set |
| 1054 | # CONFIG_TIMER_STATS is not set | 1022 | # CONFIG_TIMER_STATS is not set |
| 1023 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1055 | # CONFIG_SLUB_DEBUG_ON is not set | 1024 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1025 | # CONFIG_SLUB_STATS is not set | ||
| 1056 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1026 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1057 | # CONFIG_RT_MUTEX_TESTER is not set | 1027 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1058 | # CONFIG_DEBUG_SPINLOCK is not set | 1028 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -1066,12 +1036,14 @@ CONFIG_SCHED_DEBUG=y | |||
| 1066 | CONFIG_DEBUG_BUGVERBOSE=y | 1036 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1067 | # CONFIG_DEBUG_INFO is not set | 1037 | # CONFIG_DEBUG_INFO is not set |
| 1068 | # CONFIG_DEBUG_VM is not set | 1038 | # CONFIG_DEBUG_VM is not set |
| 1039 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1069 | # CONFIG_DEBUG_LIST is not set | 1040 | # CONFIG_DEBUG_LIST is not set |
| 1070 | # CONFIG_DEBUG_SG is not set | 1041 | # CONFIG_DEBUG_SG is not set |
| 1071 | CONFIG_FRAME_POINTER=y | 1042 | CONFIG_FRAME_POINTER=y |
| 1072 | # CONFIG_FORCED_INLINING is not set | ||
| 1073 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1043 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 1074 | # CONFIG_RCU_TORTURE_TEST is not set | 1044 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1045 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
| 1046 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 1075 | # CONFIG_LKDTM is not set | 1047 | # CONFIG_LKDTM is not set |
| 1076 | # CONFIG_FAULT_INJECTION is not set | 1048 | # CONFIG_FAULT_INJECTION is not set |
| 1077 | # CONFIG_SAMPLES is not set | 1049 | # CONFIG_SAMPLES is not set |
| @@ -1083,52 +1055,90 @@ CONFIG_FRAME_POINTER=y | |||
| 1083 | # CONFIG_SECURITY is not set | 1055 | # CONFIG_SECURITY is not set |
| 1084 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1056 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 1085 | CONFIG_CRYPTO=y | 1057 | CONFIG_CRYPTO=y |
| 1058 | |||
| 1059 | # | ||
| 1060 | # Crypto core or helper | ||
| 1061 | # | ||
| 1086 | CONFIG_CRYPTO_ALGAPI=y | 1062 | CONFIG_CRYPTO_ALGAPI=y |
| 1063 | CONFIG_CRYPTO_AEAD=y | ||
| 1087 | CONFIG_CRYPTO_BLKCIPHER=y | 1064 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1088 | CONFIG_CRYPTO_HASH=y | 1065 | CONFIG_CRYPTO_HASH=y |
| 1089 | CONFIG_CRYPTO_MANAGER=y | 1066 | CONFIG_CRYPTO_MANAGER=y |
| 1067 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1068 | # CONFIG_CRYPTO_NULL is not set | ||
| 1069 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1070 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1071 | # CONFIG_CRYPTO_TEST is not set | ||
| 1072 | |||
| 1073 | # | ||
| 1074 | # Authenticated Encryption with Associated Data | ||
| 1075 | # | ||
| 1076 | # CONFIG_CRYPTO_CCM is not set | ||
| 1077 | # CONFIG_CRYPTO_GCM is not set | ||
| 1078 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1079 | |||
| 1080 | # | ||
| 1081 | # Block modes | ||
| 1082 | # | ||
| 1083 | CONFIG_CRYPTO_CBC=y | ||
| 1084 | # CONFIG_CRYPTO_CTR is not set | ||
| 1085 | # CONFIG_CRYPTO_CTS is not set | ||
| 1086 | CONFIG_CRYPTO_ECB=m | ||
| 1087 | # CONFIG_CRYPTO_LRW is not set | ||
| 1088 | CONFIG_CRYPTO_PCBC=m | ||
| 1089 | # CONFIG_CRYPTO_XTS is not set | ||
| 1090 | |||
| 1091 | # | ||
| 1092 | # Hash modes | ||
| 1093 | # | ||
| 1090 | CONFIG_CRYPTO_HMAC=y | 1094 | CONFIG_CRYPTO_HMAC=y |
| 1091 | # CONFIG_CRYPTO_XCBC is not set | 1095 | # CONFIG_CRYPTO_XCBC is not set |
| 1092 | # CONFIG_CRYPTO_NULL is not set | 1096 | |
| 1097 | # | ||
| 1098 | # Digest | ||
| 1099 | # | ||
| 1100 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1093 | # CONFIG_CRYPTO_MD4 is not set | 1101 | # CONFIG_CRYPTO_MD4 is not set |
| 1094 | CONFIG_CRYPTO_MD5=y | 1102 | CONFIG_CRYPTO_MD5=y |
| 1103 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1095 | CONFIG_CRYPTO_SHA1=y | 1104 | CONFIG_CRYPTO_SHA1=y |
| 1096 | # CONFIG_CRYPTO_SHA256 is not set | 1105 | # CONFIG_CRYPTO_SHA256 is not set |
| 1097 | # CONFIG_CRYPTO_SHA512 is not set | 1106 | # CONFIG_CRYPTO_SHA512 is not set |
| 1098 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1099 | # CONFIG_CRYPTO_TGR192 is not set | 1107 | # CONFIG_CRYPTO_TGR192 is not set |
| 1100 | # CONFIG_CRYPTO_GF128MUL is not set | 1108 | # CONFIG_CRYPTO_WP512 is not set |
| 1101 | CONFIG_CRYPTO_ECB=m | 1109 | |
| 1102 | CONFIG_CRYPTO_CBC=y | 1110 | # |
| 1103 | CONFIG_CRYPTO_PCBC=m | 1111 | # Ciphers |
| 1104 | # CONFIG_CRYPTO_LRW is not set | 1112 | # |
| 1105 | # CONFIG_CRYPTO_XTS is not set | ||
| 1106 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1107 | CONFIG_CRYPTO_DES=y | ||
| 1108 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1109 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1110 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1111 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1112 | # CONFIG_CRYPTO_AES is not set | 1113 | # CONFIG_CRYPTO_AES is not set |
| 1114 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1115 | CONFIG_CRYPTO_ARC4=m | ||
| 1116 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1117 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1113 | # CONFIG_CRYPTO_CAST5 is not set | 1118 | # CONFIG_CRYPTO_CAST5 is not set |
| 1114 | # CONFIG_CRYPTO_CAST6 is not set | 1119 | # CONFIG_CRYPTO_CAST6 is not set |
| 1115 | # CONFIG_CRYPTO_TEA is not set | 1120 | CONFIG_CRYPTO_DES=y |
| 1116 | CONFIG_CRYPTO_ARC4=m | 1121 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1117 | # CONFIG_CRYPTO_KHAZAD is not set | 1122 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1118 | # CONFIG_CRYPTO_ANUBIS is not set | 1123 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1119 | # CONFIG_CRYPTO_SEED is not set | 1124 | # CONFIG_CRYPTO_SEED is not set |
| 1125 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1126 | # CONFIG_CRYPTO_TEA is not set | ||
| 1127 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1128 | |||
| 1129 | # | ||
| 1130 | # Compression | ||
| 1131 | # | ||
| 1120 | CONFIG_CRYPTO_DEFLATE=y | 1132 | CONFIG_CRYPTO_DEFLATE=y |
| 1121 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1133 | # CONFIG_CRYPTO_LZO is not set |
| 1122 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1123 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1124 | # CONFIG_CRYPTO_TEST is not set | ||
| 1125 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1126 | CONFIG_CRYPTO_HW=y | 1134 | CONFIG_CRYPTO_HW=y |
| 1127 | 1135 | ||
| 1128 | # | 1136 | # |
| 1129 | # Library routines | 1137 | # Library routines |
| 1130 | # | 1138 | # |
| 1131 | CONFIG_BITREVERSE=y | 1139 | CONFIG_BITREVERSE=y |
| 1140 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1141 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 1132 | CONFIG_CRC_CCITT=m | 1142 | CONFIG_CRC_CCITT=m |
| 1133 | # CONFIG_CRC16 is not set | 1143 | # CONFIG_CRC16 is not set |
| 1134 | CONFIG_CRC_ITU_T=m | 1144 | CONFIG_CRC_ITU_T=m |
| @@ -1137,10 +1147,6 @@ CONFIG_CRC7=m | |||
| 1137 | # CONFIG_LIBCRC32C is not set | 1147 | # CONFIG_LIBCRC32C is not set |
| 1138 | CONFIG_ZLIB_INFLATE=y | 1148 | CONFIG_ZLIB_INFLATE=y |
| 1139 | CONFIG_ZLIB_DEFLATE=y | 1149 | CONFIG_ZLIB_DEFLATE=y |
| 1140 | CONFIG_TEXTSEARCH=y | ||
| 1141 | CONFIG_TEXTSEARCH_KMP=m | ||
| 1142 | CONFIG_TEXTSEARCH_BM=m | ||
| 1143 | CONFIG_TEXTSEARCH_FSM=m | ||
| 1144 | CONFIG_PLIST=y | 1150 | CONFIG_PLIST=y |
| 1145 | CONFIG_HAS_IOMEM=y | 1151 | CONFIG_HAS_IOMEM=y |
| 1146 | CONFIG_HAS_IOPORT=y | 1152 | CONFIG_HAS_IOPORT=y |
diff --git a/arch/avr32/configs/atstk1002_defconfig b/arch/avr32/configs/atstk1002_defconfig index 2fb2ede5f2b4..c6d02eac8791 100644 --- a/arch/avr32/configs/atstk1002_defconfig +++ b/arch/avr32/configs/atstk1002_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 23:07:43 2008 | 4 | # Mon May 26 13:30:20 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -36,15 +36,15 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
| 36 | CONFIG_POSIX_MQUEUE=y | 36 | CONFIG_POSIX_MQUEUE=y |
| 37 | # CONFIG_BSD_PROCESS_ACCT is not set | 37 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 38 | # CONFIG_TASKSTATS is not set | 38 | # CONFIG_TASKSTATS is not set |
| 39 | # CONFIG_USER_NS is not set | ||
| 40 | # CONFIG_PID_NS is not set | ||
| 41 | # CONFIG_AUDIT is not set | 39 | # CONFIG_AUDIT is not set |
| 42 | # CONFIG_IKCONFIG is not set | 40 | # CONFIG_IKCONFIG is not set |
| 43 | CONFIG_LOG_BUF_SHIFT=14 | 41 | CONFIG_LOG_BUF_SHIFT=14 |
| 44 | # CONFIG_CGROUPS is not set | 42 | # CONFIG_CGROUPS is not set |
| 45 | # CONFIG_FAIR_GROUP_SCHED is not set | 43 | # CONFIG_GROUP_SCHED is not set |
| 46 | CONFIG_SYSFS_DEPRECATED=y | 44 | CONFIG_SYSFS_DEPRECATED=y |
| 45 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 47 | CONFIG_RELAY=y | 46 | CONFIG_RELAY=y |
| 47 | # CONFIG_NAMESPACES is not set | ||
| 48 | CONFIG_BLK_DEV_INITRD=y | 48 | CONFIG_BLK_DEV_INITRD=y |
| 49 | CONFIG_INITRAMFS_SOURCE="" | 49 | CONFIG_INITRAMFS_SOURCE="" |
| 50 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 50 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| @@ -58,11 +58,13 @@ CONFIG_HOTPLUG=y | |||
| 58 | CONFIG_PRINTK=y | 58 | CONFIG_PRINTK=y |
| 59 | CONFIG_BUG=y | 59 | CONFIG_BUG=y |
| 60 | CONFIG_ELF_CORE=y | 60 | CONFIG_ELF_CORE=y |
| 61 | # CONFIG_COMPAT_BRK is not set | ||
| 61 | # CONFIG_BASE_FULL is not set | 62 | # CONFIG_BASE_FULL is not set |
| 62 | CONFIG_FUTEX=y | 63 | CONFIG_FUTEX=y |
| 63 | CONFIG_ANON_INODES=y | 64 | CONFIG_ANON_INODES=y |
| 64 | CONFIG_EPOLL=y | 65 | CONFIG_EPOLL=y |
| 65 | CONFIG_SIGNALFD=y | 66 | CONFIG_SIGNALFD=y |
| 67 | CONFIG_TIMERFD=y | ||
| 66 | CONFIG_EVENTFD=y | 68 | CONFIG_EVENTFD=y |
| 67 | CONFIG_SHMEM=y | 69 | CONFIG_SHMEM=y |
| 68 | CONFIG_VM_EVENT_COUNTERS=y | 70 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -70,11 +72,21 @@ CONFIG_SLUB_DEBUG=y | |||
| 70 | # CONFIG_SLAB is not set | 72 | # CONFIG_SLAB is not set |
| 71 | CONFIG_SLUB=y | 73 | CONFIG_SLUB=y |
| 72 | # CONFIG_SLOB is not set | 74 | # CONFIG_SLOB is not set |
| 75 | CONFIG_PROFILING=y | ||
| 76 | # CONFIG_MARKERS is not set | ||
| 77 | CONFIG_OPROFILE=m | ||
| 78 | CONFIG_HAVE_OPROFILE=y | ||
| 79 | CONFIG_KPROBES=y | ||
| 80 | CONFIG_HAVE_KPROBES=y | ||
| 81 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 83 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 73 | CONFIG_SLABINFO=y | 84 | CONFIG_SLABINFO=y |
| 74 | CONFIG_RT_MUTEXES=y | 85 | CONFIG_RT_MUTEXES=y |
| 75 | # CONFIG_TINY_SHMEM is not set | 86 | # CONFIG_TINY_SHMEM is not set |
| 76 | CONFIG_BASE_SMALL=1 | 87 | CONFIG_BASE_SMALL=1 |
| 77 | CONFIG_MODULES=y | 88 | CONFIG_MODULES=y |
| 89 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 78 | CONFIG_MODULE_UNLOAD=y | 90 | CONFIG_MODULE_UNLOAD=y |
| 79 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 91 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 80 | # CONFIG_MODVERSIONS is not set | 92 | # CONFIG_MODVERSIONS is not set |
| @@ -98,10 +110,15 @@ CONFIG_IOSCHED_CFQ=y | |||
| 98 | CONFIG_DEFAULT_CFQ=y | 110 | CONFIG_DEFAULT_CFQ=y |
| 99 | # CONFIG_DEFAULT_NOOP is not set | 111 | # CONFIG_DEFAULT_NOOP is not set |
| 100 | CONFIG_DEFAULT_IOSCHED="cfq" | 112 | CONFIG_DEFAULT_IOSCHED="cfq" |
| 113 | CONFIG_CLASSIC_RCU=y | ||
| 101 | 114 | ||
| 102 | # | 115 | # |
| 103 | # System Type and features | 116 | # System Type and features |
| 104 | # | 117 | # |
| 118 | CONFIG_TICK_ONESHOT=y | ||
| 119 | CONFIG_NO_HZ=y | ||
| 120 | CONFIG_HIGH_RES_TIMERS=y | ||
| 121 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 105 | CONFIG_SUBARCH_AVR32B=y | 122 | CONFIG_SUBARCH_AVR32B=y |
| 106 | CONFIG_MMU=y | 123 | CONFIG_MMU=y |
| 107 | CONFIG_PERFORMANCE_COUNTERS=y | 124 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -147,16 +164,19 @@ CONFIG_FLATMEM=y | |||
| 147 | CONFIG_FLAT_NODE_MEM_MAP=y | 164 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 148 | # CONFIG_SPARSEMEM_STATIC is not set | 165 | # CONFIG_SPARSEMEM_STATIC is not set |
| 149 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 166 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 167 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 150 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 168 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 151 | # CONFIG_RESOURCES_64BIT is not set | 169 | # CONFIG_RESOURCES_64BIT is not set |
| 152 | CONFIG_ZONE_DMA_FLAG=0 | 170 | CONFIG_ZONE_DMA_FLAG=0 |
| 153 | CONFIG_VIRT_TO_BUS=y | 171 | CONFIG_VIRT_TO_BUS=y |
| 154 | # CONFIG_OWNERSHIP_TRACE is not set | 172 | # CONFIG_OWNERSHIP_TRACE is not set |
| 173 | CONFIG_NMI_DEBUGGING=y | ||
| 155 | # CONFIG_HZ_100 is not set | 174 | # CONFIG_HZ_100 is not set |
| 156 | CONFIG_HZ_250=y | 175 | CONFIG_HZ_250=y |
| 157 | # CONFIG_HZ_300 is not set | 176 | # CONFIG_HZ_300 is not set |
| 158 | # CONFIG_HZ_1000 is not set | 177 | # CONFIG_HZ_1000 is not set |
| 159 | CONFIG_HZ=250 | 178 | CONFIG_HZ=250 |
| 179 | # CONFIG_SCHED_HRTICK is not set | ||
| 160 | CONFIG_CMDLINE="" | 180 | CONFIG_CMDLINE="" |
| 161 | 181 | ||
| 162 | # | 182 | # |
| @@ -170,9 +190,10 @@ CONFIG_CPU_FREQ=y | |||
| 170 | CONFIG_CPU_FREQ_TABLE=y | 190 | CONFIG_CPU_FREQ_TABLE=y |
| 171 | # CONFIG_CPU_FREQ_DEBUG is not set | 191 | # CONFIG_CPU_FREQ_DEBUG is not set |
| 172 | # CONFIG_CPU_FREQ_STAT is not set | 192 | # CONFIG_CPU_FREQ_STAT is not set |
| 173 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 193 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
| 194 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 174 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 175 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 196 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
| 176 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| 177 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 198 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 178 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 199 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| @@ -208,6 +229,7 @@ CONFIG_XFRM=y | |||
| 208 | CONFIG_XFRM_USER=m | 229 | CONFIG_XFRM_USER=m |
| 209 | # CONFIG_XFRM_SUB_POLICY is not set | 230 | # CONFIG_XFRM_SUB_POLICY is not set |
| 210 | # CONFIG_XFRM_MIGRATE is not set | 231 | # CONFIG_XFRM_MIGRATE is not set |
| 232 | # CONFIG_XFRM_STATISTICS is not set | ||
| 211 | CONFIG_NET_KEY=m | 233 | CONFIG_NET_KEY=m |
| 212 | # CONFIG_NET_KEY_MIGRATE is not set | 234 | # CONFIG_NET_KEY_MIGRATE is not set |
| 213 | CONFIG_INET=y | 235 | CONFIG_INET=y |
| @@ -252,8 +274,10 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m | |||
| 252 | CONFIG_INET6_XFRM_MODE_BEET=m | 274 | CONFIG_INET6_XFRM_MODE_BEET=m |
| 253 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set | 275 | # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set |
| 254 | CONFIG_IPV6_SIT=m | 276 | CONFIG_IPV6_SIT=m |
| 277 | CONFIG_IPV6_NDISC_NODETYPE=y | ||
| 255 | CONFIG_IPV6_TUNNEL=m | 278 | CONFIG_IPV6_TUNNEL=m |
| 256 | # CONFIG_IPV6_MULTIPLE_TABLES is not set | 279 | # CONFIG_IPV6_MULTIPLE_TABLES is not set |
| 280 | # CONFIG_IPV6_MROUTE is not set | ||
| 257 | # CONFIG_NETWORK_SECMARK is not set | 281 | # CONFIG_NETWORK_SECMARK is not set |
| 258 | # CONFIG_NETFILTER is not set | 282 | # CONFIG_NETFILTER is not set |
| 259 | # CONFIG_IP_DCCP is not set | 283 | # CONFIG_IP_DCCP is not set |
| @@ -279,6 +303,7 @@ CONFIG_LLC=m | |||
| 279 | # CONFIG_NET_PKTGEN is not set | 303 | # CONFIG_NET_PKTGEN is not set |
| 280 | # CONFIG_NET_TCPPROBE is not set | 304 | # CONFIG_NET_TCPPROBE is not set |
| 281 | # CONFIG_HAMRADIO is not set | 305 | # CONFIG_HAMRADIO is not set |
| 306 | # CONFIG_CAN is not set | ||
| 282 | # CONFIG_IRDA is not set | 307 | # CONFIG_IRDA is not set |
| 283 | # CONFIG_BT is not set | 308 | # CONFIG_BT is not set |
| 284 | # CONFIG_AF_RXRPC is not set | 309 | # CONFIG_AF_RXRPC is not set |
| @@ -314,6 +339,7 @@ CONFIG_MTD=y | |||
| 314 | CONFIG_MTD_PARTITIONS=y | 339 | CONFIG_MTD_PARTITIONS=y |
| 315 | # CONFIG_MTD_REDBOOT_PARTS is not set | 340 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 316 | CONFIG_MTD_CMDLINE_PARTS=y | 341 | CONFIG_MTD_CMDLINE_PARTS=y |
| 342 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 317 | 343 | ||
| 318 | # | 344 | # |
| 319 | # User Modules And Translation Layers | 345 | # User Modules And Translation Layers |
| @@ -368,6 +394,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 368 | # | 394 | # |
| 369 | CONFIG_MTD_DATAFLASH=m | 395 | CONFIG_MTD_DATAFLASH=m |
| 370 | CONFIG_MTD_M25P80=m | 396 | CONFIG_MTD_M25P80=m |
| 397 | CONFIG_M25PXX_USE_FAST_READ=y | ||
| 371 | # CONFIG_MTD_SLRAM is not set | 398 | # CONFIG_MTD_SLRAM is not set |
| 372 | # CONFIG_MTD_PHRAM is not set | 399 | # CONFIG_MTD_PHRAM is not set |
| 373 | # CONFIG_MTD_MTDRAM is not set | 400 | # CONFIG_MTD_MTDRAM is not set |
| @@ -395,13 +422,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 395 | CONFIG_BLK_DEV_RAM=m | 422 | CONFIG_BLK_DEV_RAM=m |
| 396 | CONFIG_BLK_DEV_RAM_COUNT=16 | 423 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 397 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 424 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 398 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 425 | # CONFIG_BLK_DEV_XIP is not set |
| 399 | # CONFIG_CDROM_PKTCDVD is not set | 426 | # CONFIG_CDROM_PKTCDVD is not set |
| 400 | # CONFIG_ATA_OVER_ETH is not set | 427 | # CONFIG_ATA_OVER_ETH is not set |
| 401 | CONFIG_MISC_DEVICES=y | 428 | CONFIG_MISC_DEVICES=y |
| 429 | CONFIG_ATMEL_PWM=m | ||
| 430 | CONFIG_ATMEL_TCLIB=y | ||
| 431 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
| 432 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
| 402 | # CONFIG_EEPROM_93CX6 is not set | 433 | # CONFIG_EEPROM_93CX6 is not set |
| 403 | CONFIG_ATMEL_SSC=m | 434 | CONFIG_ATMEL_SSC=m |
| 404 | # CONFIG_IDE is not set | 435 | # CONFIG_ENCLOSURE_SERVICES is not set |
| 436 | # CONFIG_HAVE_IDE is not set | ||
| 405 | 437 | ||
| 406 | # | 438 | # |
| 407 | # SCSI device support | 439 | # SCSI device support |
| @@ -444,6 +476,9 @@ CONFIG_SCSI_WAIT_SCAN=m | |||
| 444 | # CONFIG_SCSI_LOWLEVEL is not set | 476 | # CONFIG_SCSI_LOWLEVEL is not set |
| 445 | CONFIG_ATA=m | 477 | CONFIG_ATA=m |
| 446 | # CONFIG_ATA_NONSTANDARD is not set | 478 | # CONFIG_ATA_NONSTANDARD is not set |
| 479 | # CONFIG_SATA_PMP is not set | ||
| 480 | CONFIG_ATA_SFF=y | ||
| 481 | # CONFIG_SATA_MV is not set | ||
| 447 | CONFIG_PATA_AT32=m | 482 | CONFIG_PATA_AT32=m |
| 448 | # CONFIG_PATA_PLATFORM is not set | 483 | # CONFIG_PATA_PLATFORM is not set |
| 449 | # CONFIG_MD is not set | 484 | # CONFIG_MD is not set |
| @@ -469,11 +504,13 @@ CONFIG_PHYLIB=y | |||
| 469 | # CONFIG_SMSC_PHY is not set | 504 | # CONFIG_SMSC_PHY is not set |
| 470 | # CONFIG_BROADCOM_PHY is not set | 505 | # CONFIG_BROADCOM_PHY is not set |
| 471 | # CONFIG_ICPLUS_PHY is not set | 506 | # CONFIG_ICPLUS_PHY is not set |
| 507 | # CONFIG_REALTEK_PHY is not set | ||
| 472 | # CONFIG_FIXED_PHY is not set | 508 | # CONFIG_FIXED_PHY is not set |
| 473 | # CONFIG_MDIO_BITBANG is not set | 509 | # CONFIG_MDIO_BITBANG is not set |
| 474 | CONFIG_NET_ETHERNET=y | 510 | CONFIG_NET_ETHERNET=y |
| 475 | # CONFIG_MII is not set | 511 | # CONFIG_MII is not set |
| 476 | CONFIG_MACB=y | 512 | CONFIG_MACB=y |
| 513 | # CONFIG_ENC28J60 is not set | ||
| 477 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | 514 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 478 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | 515 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| 479 | # CONFIG_IBM_NEW_EMAC_TAH is not set | 516 | # CONFIG_IBM_NEW_EMAC_TAH is not set |
| @@ -487,6 +524,7 @@ CONFIG_MACB=y | |||
| 487 | # | 524 | # |
| 488 | # CONFIG_WLAN_PRE80211 is not set | 525 | # CONFIG_WLAN_PRE80211 is not set |
| 489 | # CONFIG_WLAN_80211 is not set | 526 | # CONFIG_WLAN_80211 is not set |
| 527 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 490 | # CONFIG_WAN is not set | 528 | # CONFIG_WAN is not set |
| 491 | CONFIG_PPP=m | 529 | CONFIG_PPP=m |
| 492 | # CONFIG_PPP_MULTILINK is not set | 530 | # CONFIG_PPP_MULTILINK is not set |
| @@ -500,7 +538,6 @@ CONFIG_PPP_BSDCOMP=m | |||
| 500 | # CONFIG_PPPOL2TP is not set | 538 | # CONFIG_PPPOL2TP is not set |
| 501 | # CONFIG_SLIP is not set | 539 | # CONFIG_SLIP is not set |
| 502 | CONFIG_SLHC=m | 540 | CONFIG_SLHC=m |
| 503 | # CONFIG_SHAPER is not set | ||
| 504 | # CONFIG_NETCONSOLE is not set | 541 | # CONFIG_NETCONSOLE is not set |
| 505 | # CONFIG_NETPOLL is not set | 542 | # CONFIG_NETPOLL is not set |
| 506 | # CONFIG_NET_POLL_CONTROLLER is not set | 543 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -556,6 +593,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 556 | # Character devices | 593 | # Character devices |
| 557 | # | 594 | # |
| 558 | # CONFIG_VT is not set | 595 | # CONFIG_VT is not set |
| 596 | # CONFIG_DEVKMEM is not set | ||
| 559 | # CONFIG_SERIAL_NONSTANDARD is not set | 597 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 560 | 598 | ||
| 561 | # | 599 | # |
| @@ -568,6 +606,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 568 | # | 606 | # |
| 569 | CONFIG_SERIAL_ATMEL=y | 607 | CONFIG_SERIAL_ATMEL=y |
| 570 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 608 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 609 | CONFIG_SERIAL_ATMEL_PDC=y | ||
| 571 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 610 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 572 | CONFIG_SERIAL_CORE=y | 611 | CONFIG_SERIAL_CORE=y |
| 573 | CONFIG_SERIAL_CORE_CONSOLE=y | 612 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -575,21 +614,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 575 | # CONFIG_LEGACY_PTYS is not set | 614 | # CONFIG_LEGACY_PTYS is not set |
| 576 | # CONFIG_IPMI_HANDLER is not set | 615 | # CONFIG_IPMI_HANDLER is not set |
| 577 | # CONFIG_HW_RANDOM is not set | 616 | # CONFIG_HW_RANDOM is not set |
| 578 | # CONFIG_RTC is not set | ||
| 579 | # CONFIG_GEN_RTC is not set | ||
| 580 | # CONFIG_R3964 is not set | 617 | # CONFIG_R3964 is not set |
| 581 | # CONFIG_RAW_DRIVER is not set | 618 | # CONFIG_RAW_DRIVER is not set |
| 582 | # CONFIG_TCG_TPM is not set | 619 | # CONFIG_TCG_TPM is not set |
| 583 | CONFIG_I2C=m | 620 | CONFIG_I2C=m |
| 584 | CONFIG_I2C_BOARDINFO=y | 621 | CONFIG_I2C_BOARDINFO=y |
| 585 | CONFIG_I2C_CHARDEV=m | 622 | CONFIG_I2C_CHARDEV=m |
| 586 | |||
| 587 | # | ||
| 588 | # I2C Algorithms | ||
| 589 | # | ||
| 590 | CONFIG_I2C_ALGOBIT=m | 623 | CONFIG_I2C_ALGOBIT=m |
| 591 | # CONFIG_I2C_ALGOPCF is not set | ||
| 592 | # CONFIG_I2C_ALGOPCA is not set | ||
| 593 | 624 | ||
| 594 | # | 625 | # |
| 595 | # I2C Hardware Bus support | 626 | # I2C Hardware Bus support |
| @@ -600,27 +631,23 @@ CONFIG_I2C_GPIO=m | |||
| 600 | # CONFIG_I2C_SIMTEC is not set | 631 | # CONFIG_I2C_SIMTEC is not set |
| 601 | # CONFIG_I2C_TAOS_EVM is not set | 632 | # CONFIG_I2C_TAOS_EVM is not set |
| 602 | # CONFIG_I2C_STUB is not set | 633 | # CONFIG_I2C_STUB is not set |
| 634 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 603 | 635 | ||
| 604 | # | 636 | # |
| 605 | # Miscellaneous I2C Chip support | 637 | # Miscellaneous I2C Chip support |
| 606 | # | 638 | # |
| 607 | # CONFIG_SENSORS_DS1337 is not set | ||
| 608 | # CONFIG_SENSORS_DS1374 is not set | ||
| 609 | # CONFIG_DS1682 is not set | 639 | # CONFIG_DS1682 is not set |
| 610 | # CONFIG_SENSORS_EEPROM is not set | 640 | # CONFIG_SENSORS_EEPROM is not set |
| 611 | # CONFIG_SENSORS_PCF8574 is not set | 641 | # CONFIG_SENSORS_PCF8574 is not set |
| 612 | # CONFIG_SENSORS_PCA9539 is not set | 642 | # CONFIG_PCF8575 is not set |
| 613 | # CONFIG_SENSORS_PCF8591 is not set | 643 | # CONFIG_SENSORS_PCF8591 is not set |
| 644 | # CONFIG_TPS65010 is not set | ||
| 614 | # CONFIG_SENSORS_MAX6875 is not set | 645 | # CONFIG_SENSORS_MAX6875 is not set |
| 615 | # CONFIG_SENSORS_TSL2550 is not set | 646 | # CONFIG_SENSORS_TSL2550 is not set |
| 616 | # CONFIG_I2C_DEBUG_CORE is not set | 647 | # CONFIG_I2C_DEBUG_CORE is not set |
| 617 | # CONFIG_I2C_DEBUG_ALGO is not set | 648 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 618 | # CONFIG_I2C_DEBUG_BUS is not set | 649 | # CONFIG_I2C_DEBUG_BUS is not set |
| 619 | # CONFIG_I2C_DEBUG_CHIP is not set | 650 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 620 | |||
| 621 | # | ||
| 622 | # SPI support | ||
| 623 | # | ||
| 624 | CONFIG_SPI=y | 651 | CONFIG_SPI=y |
| 625 | # CONFIG_SPI_DEBUG is not set | 652 | # CONFIG_SPI_DEBUG is not set |
| 626 | CONFIG_SPI_MASTER=y | 653 | CONFIG_SPI_MASTER=y |
| @@ -637,9 +664,27 @@ CONFIG_SPI_ATMEL=y | |||
| 637 | # CONFIG_SPI_AT25 is not set | 664 | # CONFIG_SPI_AT25 is not set |
| 638 | CONFIG_SPI_SPIDEV=m | 665 | CONFIG_SPI_SPIDEV=m |
| 639 | # CONFIG_SPI_TLE62X0 is not set | 666 | # CONFIG_SPI_TLE62X0 is not set |
| 667 | CONFIG_HAVE_GPIO_LIB=y | ||
| 668 | |||
| 669 | # | ||
| 670 | # GPIO Support | ||
| 671 | # | ||
| 672 | # CONFIG_DEBUG_GPIO is not set | ||
| 673 | |||
| 674 | # | ||
| 675 | # I2C GPIO expanders: | ||
| 676 | # | ||
| 677 | # CONFIG_GPIO_PCA953X is not set | ||
| 678 | # CONFIG_GPIO_PCF857X is not set | ||
| 679 | |||
| 680 | # | ||
| 681 | # SPI GPIO expanders: | ||
| 682 | # | ||
| 683 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 640 | # CONFIG_W1 is not set | 684 | # CONFIG_W1 is not set |
| 641 | # CONFIG_POWER_SUPPLY is not set | 685 | # CONFIG_POWER_SUPPLY is not set |
| 642 | # CONFIG_HWMON is not set | 686 | # CONFIG_HWMON is not set |
| 687 | # CONFIG_THERMAL is not set | ||
| 643 | CONFIG_WATCHDOG=y | 688 | CONFIG_WATCHDOG=y |
| 644 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 689 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 645 | 690 | ||
| @@ -659,12 +704,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 659 | # Multifunction device drivers | 704 | # Multifunction device drivers |
| 660 | # | 705 | # |
| 661 | # CONFIG_MFD_SM501 is not set | 706 | # CONFIG_MFD_SM501 is not set |
| 707 | # CONFIG_HTC_PASIC3 is not set | ||
| 662 | 708 | ||
| 663 | # | 709 | # |
| 664 | # Multimedia devices | 710 | # Multimedia devices |
| 665 | # | 711 | # |
| 712 | |||
| 713 | # | ||
| 714 | # Multimedia core support | ||
| 715 | # | ||
| 666 | # CONFIG_VIDEO_DEV is not set | 716 | # CONFIG_VIDEO_DEV is not set |
| 667 | # CONFIG_DVB_CORE is not set | 717 | # CONFIG_DVB_CORE is not set |
| 718 | # CONFIG_VIDEO_MEDIA is not set | ||
| 719 | |||
| 720 | # | ||
| 721 | # Multimedia drivers | ||
| 722 | # | ||
| 668 | # CONFIG_DAB is not set | 723 | # CONFIG_DAB is not set |
| 669 | 724 | ||
| 670 | # | 725 | # |
| @@ -682,8 +737,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 682 | # CONFIG_FB_SYS_FILLRECT is not set | 737 | # CONFIG_FB_SYS_FILLRECT is not set |
| 683 | # CONFIG_FB_SYS_COPYAREA is not set | 738 | # CONFIG_FB_SYS_COPYAREA is not set |
| 684 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 739 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 740 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 685 | # CONFIG_FB_SYS_FOPS is not set | 741 | # CONFIG_FB_SYS_FOPS is not set |
| 686 | CONFIG_FB_DEFERRED_IO=y | ||
| 687 | # CONFIG_FB_SVGALIB is not set | 742 | # CONFIG_FB_SVGALIB is not set |
| 688 | # CONFIG_FB_MACMODES is not set | 743 | # CONFIG_FB_MACMODES is not set |
| 689 | # CONFIG_FB_BACKLIGHT is not set | 744 | # CONFIG_FB_BACKLIGHT is not set |
| @@ -749,7 +804,11 @@ CONFIG_SND_AT73C213_TARGET_BITRATE=48000 | |||
| 749 | # CONFIG_SND_SOC is not set | 804 | # CONFIG_SND_SOC is not set |
| 750 | 805 | ||
| 751 | # | 806 | # |
| 752 | # SoC Audio support for SuperH | 807 | # ALSA SoC audio for Freescale SOCs |
| 808 | # | ||
| 809 | |||
| 810 | # | ||
| 811 | # SoC Audio for the Texas Instruments OMAP | ||
| 753 | # | 812 | # |
| 754 | 813 | ||
| 755 | # | 814 | # |
| @@ -761,14 +820,12 @@ CONFIG_USB_SUPPORT=y | |||
| 761 | # CONFIG_USB_ARCH_HAS_HCD is not set | 820 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 762 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 821 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 763 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 822 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 823 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 824 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 764 | 825 | ||
| 765 | # | 826 | # |
| 766 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 827 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 767 | # | 828 | # |
| 768 | |||
| 769 | # | ||
| 770 | # USB Gadget Support | ||
| 771 | # | ||
| 772 | CONFIG_USB_GADGET=y | 829 | CONFIG_USB_GADGET=y |
| 773 | # CONFIG_USB_GADGET_DEBUG is not set | 830 | # CONFIG_USB_GADGET_DEBUG is not set |
| 774 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 831 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| @@ -781,6 +838,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 781 | # CONFIG_USB_GADGET_NET2280 is not set | 838 | # CONFIG_USB_GADGET_NET2280 is not set |
| 782 | # CONFIG_USB_GADGET_PXA2XX is not set | 839 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 783 | # CONFIG_USB_GADGET_M66592 is not set | 840 | # CONFIG_USB_GADGET_M66592 is not set |
| 841 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 784 | # CONFIG_USB_GADGET_GOKU is not set | 842 | # CONFIG_USB_GADGET_GOKU is not set |
| 785 | # CONFIG_USB_GADGET_LH7A40X is not set | 843 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 786 | # CONFIG_USB_GADGET_OMAP is not set | 844 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -796,6 +854,7 @@ CONFIG_USB_FILE_STORAGE=m | |||
| 796 | # CONFIG_USB_FILE_STORAGE_TEST is not set | 854 | # CONFIG_USB_FILE_STORAGE_TEST is not set |
| 797 | CONFIG_USB_G_SERIAL=m | 855 | CONFIG_USB_G_SERIAL=m |
| 798 | # CONFIG_USB_MIDI_GADGET is not set | 856 | # CONFIG_USB_MIDI_GADGET is not set |
| 857 | # CONFIG_USB_G_PRINTER is not set | ||
| 799 | CONFIG_MMC=m | 858 | CONFIG_MMC=m |
| 800 | # CONFIG_MMC_DEBUG is not set | 859 | # CONFIG_MMC_DEBUG is not set |
| 801 | # CONFIG_MMC_UNSAFE_RESUME is not set | 860 | # CONFIG_MMC_UNSAFE_RESUME is not set |
| @@ -806,17 +865,20 @@ CONFIG_MMC=m | |||
| 806 | CONFIG_MMC_BLOCK=m | 865 | CONFIG_MMC_BLOCK=m |
| 807 | CONFIG_MMC_BLOCK_BOUNCE=y | 866 | CONFIG_MMC_BLOCK_BOUNCE=y |
| 808 | # CONFIG_SDIO_UART is not set | 867 | # CONFIG_SDIO_UART is not set |
| 868 | CONFIG_MMC_TEST=m | ||
| 809 | 869 | ||
| 810 | # | 870 | # |
| 811 | # MMC/SD Host Controller Drivers | 871 | # MMC/SD Host Controller Drivers |
| 812 | # | 872 | # |
| 813 | CONFIG_MMC_SPI=m | 873 | CONFIG_MMC_SPI=m |
| 874 | # CONFIG_MEMSTICK is not set | ||
| 814 | CONFIG_NEW_LEDS=y | 875 | CONFIG_NEW_LEDS=y |
| 815 | CONFIG_LEDS_CLASS=m | 876 | CONFIG_LEDS_CLASS=m |
| 816 | 877 | ||
| 817 | # | 878 | # |
| 818 | # LED drivers | 879 | # LED drivers |
| 819 | # | 880 | # |
| 881 | CONFIG_LEDS_ATMEL_PWM=m | ||
| 820 | CONFIG_LEDS_GPIO=m | 882 | CONFIG_LEDS_GPIO=m |
| 821 | 883 | ||
| 822 | # | 884 | # |
| @@ -825,6 +887,8 @@ CONFIG_LEDS_GPIO=m | |||
| 825 | CONFIG_LEDS_TRIGGERS=y | 887 | CONFIG_LEDS_TRIGGERS=y |
| 826 | CONFIG_LEDS_TRIGGER_TIMER=m | 888 | CONFIG_LEDS_TRIGGER_TIMER=m |
| 827 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m | 889 | CONFIG_LEDS_TRIGGER_HEARTBEAT=m |
| 890 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=m | ||
| 891 | # CONFIG_ACCESSIBILITY is not set | ||
| 828 | CONFIG_RTC_LIB=y | 892 | CONFIG_RTC_LIB=y |
| 829 | CONFIG_RTC_CLASS=y | 893 | CONFIG_RTC_CLASS=y |
| 830 | CONFIG_RTC_HCTOSYS=y | 894 | CONFIG_RTC_HCTOSYS=y |
| @@ -853,19 +917,22 @@ CONFIG_RTC_INTF_DEV=y | |||
| 853 | # CONFIG_RTC_DRV_PCF8563 is not set | 917 | # CONFIG_RTC_DRV_PCF8563 is not set |
| 854 | # CONFIG_RTC_DRV_PCF8583 is not set | 918 | # CONFIG_RTC_DRV_PCF8583 is not set |
| 855 | # CONFIG_RTC_DRV_M41T80 is not set | 919 | # CONFIG_RTC_DRV_M41T80 is not set |
| 920 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 856 | 921 | ||
| 857 | # | 922 | # |
| 858 | # SPI RTC drivers | 923 | # SPI RTC drivers |
| 859 | # | 924 | # |
| 860 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 861 | # CONFIG_RTC_DRV_MAX6902 is not set | 925 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 926 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 927 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 862 | 928 | ||
| 863 | # | 929 | # |
| 864 | # Platform RTC drivers | 930 | # Platform RTC drivers |
| 865 | # | 931 | # |
| 932 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 866 | # CONFIG_RTC_DRV_DS1553 is not set | 933 | # CONFIG_RTC_DRV_DS1553 is not set |
| 867 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 868 | # CONFIG_RTC_DRV_DS1742 is not set | 934 | # CONFIG_RTC_DRV_DS1742 is not set |
| 935 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 869 | # CONFIG_RTC_DRV_M48T86 is not set | 936 | # CONFIG_RTC_DRV_M48T86 is not set |
| 870 | # CONFIG_RTC_DRV_M48T59 is not set | 937 | # CONFIG_RTC_DRV_M48T59 is not set |
| 871 | # CONFIG_RTC_DRV_V3020 is not set | 938 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -874,10 +941,6 @@ CONFIG_RTC_INTF_DEV=y | |||
| 874 | # on-CPU RTC drivers | 941 | # on-CPU RTC drivers |
| 875 | # | 942 | # |
| 876 | CONFIG_RTC_DRV_AT32AP700X=y | 943 | CONFIG_RTC_DRV_AT32AP700X=y |
| 877 | |||
| 878 | # | ||
| 879 | # Userspace I/O | ||
| 880 | # | ||
| 881 | # CONFIG_UIO is not set | 944 | # CONFIG_UIO is not set |
| 882 | 945 | ||
| 883 | # | 946 | # |
| @@ -895,14 +958,11 @@ CONFIG_JBD=m | |||
| 895 | # CONFIG_JFS_FS is not set | 958 | # CONFIG_JFS_FS is not set |
| 896 | # CONFIG_FS_POSIX_ACL is not set | 959 | # CONFIG_FS_POSIX_ACL is not set |
| 897 | # CONFIG_XFS_FS is not set | 960 | # CONFIG_XFS_FS is not set |
| 898 | # CONFIG_GFS2_FS is not set | ||
| 899 | # CONFIG_OCFS2_FS is not set | 961 | # CONFIG_OCFS2_FS is not set |
| 900 | CONFIG_MINIX_FS=m | 962 | # CONFIG_DNOTIFY is not set |
| 901 | # CONFIG_ROMFS_FS is not set | ||
| 902 | CONFIG_INOTIFY=y | 963 | CONFIG_INOTIFY=y |
| 903 | CONFIG_INOTIFY_USER=y | 964 | CONFIG_INOTIFY_USER=y |
| 904 | # CONFIG_QUOTA is not set | 965 | # CONFIG_QUOTA is not set |
| 905 | # CONFIG_DNOTIFY is not set | ||
| 906 | # CONFIG_AUTOFS_FS is not set | 966 | # CONFIG_AUTOFS_FS is not set |
| 907 | # CONFIG_AUTOFS4_FS is not set | 967 | # CONFIG_AUTOFS4_FS is not set |
| 908 | CONFIG_FUSE_FS=m | 968 | CONFIG_FUSE_FS=m |
| @@ -957,8 +1017,10 @@ CONFIG_JFFS2_RTIME=y | |||
| 957 | # CONFIG_JFFS2_RUBIN is not set | 1017 | # CONFIG_JFFS2_RUBIN is not set |
| 958 | # CONFIG_CRAMFS is not set | 1018 | # CONFIG_CRAMFS is not set |
| 959 | # CONFIG_VXFS_FS is not set | 1019 | # CONFIG_VXFS_FS is not set |
| 1020 | CONFIG_MINIX_FS=m | ||
| 960 | # CONFIG_HPFS_FS is not set | 1021 | # CONFIG_HPFS_FS is not set |
| 961 | # CONFIG_QNX4FS_FS is not set | 1022 | # CONFIG_QNX4FS_FS is not set |
| 1023 | # CONFIG_ROMFS_FS is not set | ||
| 962 | # CONFIG_SYSV_FS is not set | 1024 | # CONFIG_SYSV_FS is not set |
| 963 | # CONFIG_UFS_FS is not set | 1025 | # CONFIG_UFS_FS is not set |
| 964 | CONFIG_NETWORK_FILESYSTEMS=y | 1026 | CONFIG_NETWORK_FILESYSTEMS=y |
| @@ -966,7 +1028,6 @@ CONFIG_NFS_FS=y | |||
| 966 | CONFIG_NFS_V3=y | 1028 | CONFIG_NFS_V3=y |
| 967 | # CONFIG_NFS_V3_ACL is not set | 1029 | # CONFIG_NFS_V3_ACL is not set |
| 968 | # CONFIG_NFS_V4 is not set | 1030 | # CONFIG_NFS_V4 is not set |
| 969 | # CONFIG_NFS_DIRECTIO is not set | ||
| 970 | # CONFIG_NFSD is not set | 1031 | # CONFIG_NFSD is not set |
| 971 | CONFIG_ROOT_NFS=y | 1032 | CONFIG_ROOT_NFS=y |
| 972 | CONFIG_LOCKD=y | 1033 | CONFIG_LOCKD=y |
| @@ -1028,11 +1089,6 @@ CONFIG_NLS_ISO8859_1=m | |||
| 1028 | # CONFIG_NLS_KOI8_U is not set | 1089 | # CONFIG_NLS_KOI8_U is not set |
| 1029 | CONFIG_NLS_UTF8=m | 1090 | CONFIG_NLS_UTF8=m |
| 1030 | # CONFIG_DLM is not set | 1091 | # CONFIG_DLM is not set |
| 1031 | CONFIG_INSTRUMENTATION=y | ||
| 1032 | CONFIG_PROFILING=y | ||
| 1033 | CONFIG_OPROFILE=m | ||
| 1034 | CONFIG_KPROBES=y | ||
| 1035 | # CONFIG_MARKERS is not set | ||
| 1036 | 1092 | ||
| 1037 | # | 1093 | # |
| 1038 | # Kernel hacking | 1094 | # Kernel hacking |
| @@ -1040,6 +1096,7 @@ CONFIG_KPROBES=y | |||
| 1040 | # CONFIG_PRINTK_TIME is not set | 1096 | # CONFIG_PRINTK_TIME is not set |
| 1041 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1097 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1042 | CONFIG_ENABLE_MUST_CHECK=y | 1098 | CONFIG_ENABLE_MUST_CHECK=y |
| 1099 | CONFIG_FRAME_WARN=1024 | ||
| 1043 | CONFIG_MAGIC_SYSRQ=y | 1100 | CONFIG_MAGIC_SYSRQ=y |
| 1044 | # CONFIG_UNUSED_SYMBOLS is not set | 1101 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1045 | CONFIG_DEBUG_FS=y | 1102 | CONFIG_DEBUG_FS=y |
| @@ -1050,7 +1107,9 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1050 | CONFIG_SCHED_DEBUG=y | 1107 | CONFIG_SCHED_DEBUG=y |
| 1051 | # CONFIG_SCHEDSTATS is not set | 1108 | # CONFIG_SCHEDSTATS is not set |
| 1052 | # CONFIG_TIMER_STATS is not set | 1109 | # CONFIG_TIMER_STATS is not set |
| 1110 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1053 | # CONFIG_SLUB_DEBUG_ON is not set | 1111 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1112 | # CONFIG_SLUB_STATS is not set | ||
| 1054 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1113 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1055 | # CONFIG_RT_MUTEX_TESTER is not set | 1114 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1056 | # CONFIG_DEBUG_SPINLOCK is not set | 1115 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -1064,12 +1123,14 @@ CONFIG_SCHED_DEBUG=y | |||
| 1064 | CONFIG_DEBUG_BUGVERBOSE=y | 1123 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1065 | # CONFIG_DEBUG_INFO is not set | 1124 | # CONFIG_DEBUG_INFO is not set |
| 1066 | # CONFIG_DEBUG_VM is not set | 1125 | # CONFIG_DEBUG_VM is not set |
| 1126 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1067 | # CONFIG_DEBUG_LIST is not set | 1127 | # CONFIG_DEBUG_LIST is not set |
| 1068 | # CONFIG_DEBUG_SG is not set | 1128 | # CONFIG_DEBUG_SG is not set |
| 1069 | CONFIG_FRAME_POINTER=y | 1129 | CONFIG_FRAME_POINTER=y |
| 1070 | CONFIG_FORCED_INLINING=y | ||
| 1071 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1130 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 1072 | # CONFIG_RCU_TORTURE_TEST is not set | 1131 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1132 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
| 1133 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 1073 | # CONFIG_LKDTM is not set | 1134 | # CONFIG_LKDTM is not set |
| 1074 | # CONFIG_FAULT_INJECTION is not set | 1135 | # CONFIG_FAULT_INJECTION is not set |
| 1075 | # CONFIG_SAMPLES is not set | 1136 | # CONFIG_SAMPLES is not set |
| @@ -1081,52 +1142,90 @@ CONFIG_FORCED_INLINING=y | |||
| 1081 | # CONFIG_SECURITY is not set | 1142 | # CONFIG_SECURITY is not set |
| 1082 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 1143 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 1083 | CONFIG_CRYPTO=y | 1144 | CONFIG_CRYPTO=y |
| 1145 | |||
| 1146 | # | ||
| 1147 | # Crypto core or helper | ||
| 1148 | # | ||
| 1084 | CONFIG_CRYPTO_ALGAPI=m | 1149 | CONFIG_CRYPTO_ALGAPI=m |
| 1150 | CONFIG_CRYPTO_AEAD=m | ||
| 1085 | CONFIG_CRYPTO_BLKCIPHER=m | 1151 | CONFIG_CRYPTO_BLKCIPHER=m |
| 1086 | CONFIG_CRYPTO_HASH=m | 1152 | CONFIG_CRYPTO_HASH=m |
| 1087 | CONFIG_CRYPTO_MANAGER=m | 1153 | CONFIG_CRYPTO_MANAGER=m |
| 1154 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1155 | # CONFIG_CRYPTO_NULL is not set | ||
| 1156 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1157 | CONFIG_CRYPTO_AUTHENC=m | ||
| 1158 | # CONFIG_CRYPTO_TEST is not set | ||
| 1159 | |||
| 1160 | # | ||
| 1161 | # Authenticated Encryption with Associated Data | ||
| 1162 | # | ||
| 1163 | # CONFIG_CRYPTO_CCM is not set | ||
| 1164 | # CONFIG_CRYPTO_GCM is not set | ||
| 1165 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1166 | |||
| 1167 | # | ||
| 1168 | # Block modes | ||
| 1169 | # | ||
| 1170 | CONFIG_CRYPTO_CBC=m | ||
| 1171 | # CONFIG_CRYPTO_CTR is not set | ||
| 1172 | # CONFIG_CRYPTO_CTS is not set | ||
| 1173 | # CONFIG_CRYPTO_ECB is not set | ||
| 1174 | # CONFIG_CRYPTO_LRW is not set | ||
| 1175 | # CONFIG_CRYPTO_PCBC is not set | ||
| 1176 | # CONFIG_CRYPTO_XTS is not set | ||
| 1177 | |||
| 1178 | # | ||
| 1179 | # Hash modes | ||
| 1180 | # | ||
| 1088 | CONFIG_CRYPTO_HMAC=m | 1181 | CONFIG_CRYPTO_HMAC=m |
| 1089 | # CONFIG_CRYPTO_XCBC is not set | 1182 | # CONFIG_CRYPTO_XCBC is not set |
| 1090 | # CONFIG_CRYPTO_NULL is not set | 1183 | |
| 1184 | # | ||
| 1185 | # Digest | ||
| 1186 | # | ||
| 1187 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1091 | # CONFIG_CRYPTO_MD4 is not set | 1188 | # CONFIG_CRYPTO_MD4 is not set |
| 1092 | CONFIG_CRYPTO_MD5=m | 1189 | CONFIG_CRYPTO_MD5=m |
| 1190 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1093 | CONFIG_CRYPTO_SHA1=m | 1191 | CONFIG_CRYPTO_SHA1=m |
| 1094 | # CONFIG_CRYPTO_SHA256 is not set | 1192 | # CONFIG_CRYPTO_SHA256 is not set |
| 1095 | # CONFIG_CRYPTO_SHA512 is not set | 1193 | # CONFIG_CRYPTO_SHA512 is not set |
| 1096 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1097 | # CONFIG_CRYPTO_TGR192 is not set | 1194 | # CONFIG_CRYPTO_TGR192 is not set |
| 1098 | # CONFIG_CRYPTO_GF128MUL is not set | 1195 | # CONFIG_CRYPTO_WP512 is not set |
| 1099 | # CONFIG_CRYPTO_ECB is not set | 1196 | |
| 1100 | CONFIG_CRYPTO_CBC=m | 1197 | # |
| 1101 | # CONFIG_CRYPTO_PCBC is not set | 1198 | # Ciphers |
| 1102 | # CONFIG_CRYPTO_LRW is not set | 1199 | # |
| 1103 | # CONFIG_CRYPTO_XTS is not set | ||
| 1104 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1105 | CONFIG_CRYPTO_DES=m | ||
| 1106 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1107 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1108 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1109 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1110 | # CONFIG_CRYPTO_AES is not set | 1200 | # CONFIG_CRYPTO_AES is not set |
| 1201 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1202 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1203 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 1204 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1111 | # CONFIG_CRYPTO_CAST5 is not set | 1205 | # CONFIG_CRYPTO_CAST5 is not set |
| 1112 | # CONFIG_CRYPTO_CAST6 is not set | 1206 | # CONFIG_CRYPTO_CAST6 is not set |
| 1113 | # CONFIG_CRYPTO_TEA is not set | 1207 | CONFIG_CRYPTO_DES=m |
| 1114 | # CONFIG_CRYPTO_ARC4 is not set | 1208 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1115 | # CONFIG_CRYPTO_KHAZAD is not set | 1209 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1116 | # CONFIG_CRYPTO_ANUBIS is not set | 1210 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1117 | # CONFIG_CRYPTO_SEED is not set | 1211 | # CONFIG_CRYPTO_SEED is not set |
| 1212 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1213 | # CONFIG_CRYPTO_TEA is not set | ||
| 1214 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1215 | |||
| 1216 | # | ||
| 1217 | # Compression | ||
| 1218 | # | ||
| 1118 | CONFIG_CRYPTO_DEFLATE=m | 1219 | CONFIG_CRYPTO_DEFLATE=m |
| 1119 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | 1220 | # CONFIG_CRYPTO_LZO is not set |
| 1120 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1121 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1122 | # CONFIG_CRYPTO_TEST is not set | ||
| 1123 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 1124 | # CONFIG_CRYPTO_HW is not set | 1221 | # CONFIG_CRYPTO_HW is not set |
| 1125 | 1222 | ||
| 1126 | # | 1223 | # |
| 1127 | # Library routines | 1224 | # Library routines |
| 1128 | # | 1225 | # |
| 1129 | CONFIG_BITREVERSE=y | 1226 | CONFIG_BITREVERSE=y |
| 1227 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1228 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 1130 | CONFIG_CRC_CCITT=m | 1229 | CONFIG_CRC_CCITT=m |
| 1131 | # CONFIG_CRC16 is not set | 1230 | # CONFIG_CRC16 is not set |
| 1132 | CONFIG_CRC_ITU_T=m | 1231 | CONFIG_CRC_ITU_T=m |
diff --git a/arch/avr32/configs/atstk1003_defconfig b/arch/avr32/configs/atstk1003_defconfig index 45e23e03f074..5a4ae6b5d28f 100644 --- a/arch/avr32/configs/atstk1003_defconfig +++ b/arch/avr32/configs/atstk1003_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 22:54:34 2008 | 4 | # Mon May 26 13:33:05 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -39,17 +39,15 @@ CONFIG_BSD_PROCESS_ACCT_V3=y | |||
| 39 | CONFIG_TASKSTATS=y | 39 | CONFIG_TASKSTATS=y |
| 40 | CONFIG_TASK_DELAY_ACCT=y | 40 | CONFIG_TASK_DELAY_ACCT=y |
| 41 | # CONFIG_TASK_XACCT is not set | 41 | # CONFIG_TASK_XACCT is not set |
| 42 | # CONFIG_USER_NS is not set | ||
| 43 | # CONFIG_PID_NS is not set | ||
| 44 | CONFIG_AUDIT=y | 42 | CONFIG_AUDIT=y |
| 45 | # CONFIG_IKCONFIG is not set | 43 | # CONFIG_IKCONFIG is not set |
| 46 | CONFIG_LOG_BUF_SHIFT=14 | 44 | CONFIG_LOG_BUF_SHIFT=14 |
| 47 | # CONFIG_CGROUPS is not set | 45 | # CONFIG_CGROUPS is not set |
| 48 | CONFIG_FAIR_GROUP_SCHED=y | 46 | # CONFIG_GROUP_SCHED is not set |
| 49 | CONFIG_FAIR_USER_SCHED=y | ||
| 50 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
| 51 | CONFIG_SYSFS_DEPRECATED=y | 47 | CONFIG_SYSFS_DEPRECATED=y |
| 48 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 52 | CONFIG_RELAY=y | 49 | CONFIG_RELAY=y |
| 50 | # CONFIG_NAMESPACES is not set | ||
| 53 | CONFIG_BLK_DEV_INITRD=y | 51 | CONFIG_BLK_DEV_INITRD=y |
| 54 | CONFIG_INITRAMFS_SOURCE="" | 52 | CONFIG_INITRAMFS_SOURCE="" |
| 55 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 53 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| @@ -63,11 +61,13 @@ CONFIG_HOTPLUG=y | |||
| 63 | CONFIG_PRINTK=y | 61 | CONFIG_PRINTK=y |
| 64 | CONFIG_BUG=y | 62 | CONFIG_BUG=y |
| 65 | CONFIG_ELF_CORE=y | 63 | CONFIG_ELF_CORE=y |
| 64 | # CONFIG_COMPAT_BRK is not set | ||
| 66 | # CONFIG_BASE_FULL is not set | 65 | # CONFIG_BASE_FULL is not set |
| 67 | CONFIG_FUTEX=y | 66 | CONFIG_FUTEX=y |
| 68 | CONFIG_ANON_INODES=y | 67 | CONFIG_ANON_INODES=y |
| 69 | CONFIG_EPOLL=y | 68 | CONFIG_EPOLL=y |
| 70 | CONFIG_SIGNALFD=y | 69 | CONFIG_SIGNALFD=y |
| 70 | CONFIG_TIMERFD=y | ||
| 71 | CONFIG_EVENTFD=y | 71 | CONFIG_EVENTFD=y |
| 72 | CONFIG_SHMEM=y | 72 | CONFIG_SHMEM=y |
| 73 | CONFIG_VM_EVENT_COUNTERS=y | 73 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -75,11 +75,20 @@ CONFIG_VM_EVENT_COUNTERS=y | |||
| 75 | # CONFIG_SLAB is not set | 75 | # CONFIG_SLAB is not set |
| 76 | CONFIG_SLUB=y | 76 | CONFIG_SLUB=y |
| 77 | # CONFIG_SLOB is not set | 77 | # CONFIG_SLOB is not set |
| 78 | CONFIG_SLABINFO=y | 78 | CONFIG_PROFILING=y |
| 79 | # CONFIG_MARKERS is not set | ||
| 80 | CONFIG_OPROFILE=m | ||
| 81 | CONFIG_HAVE_OPROFILE=y | ||
| 82 | CONFIG_KPROBES=y | ||
| 83 | CONFIG_HAVE_KPROBES=y | ||
| 84 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 85 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 86 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 79 | CONFIG_RT_MUTEXES=y | 87 | CONFIG_RT_MUTEXES=y |
| 80 | # CONFIG_TINY_SHMEM is not set | 88 | # CONFIG_TINY_SHMEM is not set |
| 81 | CONFIG_BASE_SMALL=1 | 89 | CONFIG_BASE_SMALL=1 |
| 82 | CONFIG_MODULES=y | 90 | CONFIG_MODULES=y |
| 91 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 83 | CONFIG_MODULE_UNLOAD=y | 92 | CONFIG_MODULE_UNLOAD=y |
| 84 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 93 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 85 | # CONFIG_MODVERSIONS is not set | 94 | # CONFIG_MODVERSIONS is not set |
| @@ -103,10 +112,15 @@ CONFIG_IOSCHED_CFQ=y | |||
| 103 | CONFIG_DEFAULT_CFQ=y | 112 | CONFIG_DEFAULT_CFQ=y |
| 104 | # CONFIG_DEFAULT_NOOP is not set | 113 | # CONFIG_DEFAULT_NOOP is not set |
| 105 | CONFIG_DEFAULT_IOSCHED="cfq" | 114 | CONFIG_DEFAULT_IOSCHED="cfq" |
| 115 | CONFIG_CLASSIC_RCU=y | ||
| 106 | 116 | ||
| 107 | # | 117 | # |
| 108 | # System Type and features | 118 | # System Type and features |
| 109 | # | 119 | # |
| 120 | CONFIG_TICK_ONESHOT=y | ||
| 121 | CONFIG_NO_HZ=y | ||
| 122 | CONFIG_HIGH_RES_TIMERS=y | ||
| 123 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 110 | CONFIG_SUBARCH_AVR32B=y | 124 | CONFIG_SUBARCH_AVR32B=y |
| 111 | CONFIG_MMU=y | 125 | CONFIG_MMU=y |
| 112 | CONFIG_PERFORMANCE_COUNTERS=y | 126 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -152,16 +166,19 @@ CONFIG_FLATMEM=y | |||
| 152 | CONFIG_FLAT_NODE_MEM_MAP=y | 166 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 153 | # CONFIG_SPARSEMEM_STATIC is not set | 167 | # CONFIG_SPARSEMEM_STATIC is not set |
| 154 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 168 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 169 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 155 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 170 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 156 | # CONFIG_RESOURCES_64BIT is not set | 171 | # CONFIG_RESOURCES_64BIT is not set |
| 157 | CONFIG_ZONE_DMA_FLAG=0 | 172 | CONFIG_ZONE_DMA_FLAG=0 |
| 158 | CONFIG_VIRT_TO_BUS=y | 173 | CONFIG_VIRT_TO_BUS=y |
| 159 | # CONFIG_OWNERSHIP_TRACE is not set | 174 | # CONFIG_OWNERSHIP_TRACE is not set |
| 175 | CONFIG_NMI_DEBUGGING=y | ||
| 160 | # CONFIG_HZ_100 is not set | 176 | # CONFIG_HZ_100 is not set |
| 161 | CONFIG_HZ_250=y | 177 | CONFIG_HZ_250=y |
| 162 | # CONFIG_HZ_300 is not set | 178 | # CONFIG_HZ_300 is not set |
| 163 | # CONFIG_HZ_1000 is not set | 179 | # CONFIG_HZ_1000 is not set |
| 164 | CONFIG_HZ=250 | 180 | CONFIG_HZ=250 |
| 181 | # CONFIG_SCHED_HRTICK is not set | ||
| 165 | CONFIG_CMDLINE="" | 182 | CONFIG_CMDLINE="" |
| 166 | 183 | ||
| 167 | # | 184 | # |
| @@ -175,9 +192,10 @@ CONFIG_CPU_FREQ=y | |||
| 175 | CONFIG_CPU_FREQ_TABLE=y | 192 | CONFIG_CPU_FREQ_TABLE=y |
| 176 | # CONFIG_CPU_FREQ_DEBUG is not set | 193 | # CONFIG_CPU_FREQ_DEBUG is not set |
| 177 | # CONFIG_CPU_FREQ_STAT is not set | 194 | # CONFIG_CPU_FREQ_STAT is not set |
| 178 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set |
| 196 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 179 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 180 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 198 | CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y |
| 181 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 199 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| 182 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 200 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 183 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 201 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| @@ -234,8 +252,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 234 | CONFIG_DEFAULT_TCP_CONG="cubic" | 252 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 235 | # CONFIG_TCP_MD5SIG is not set | 253 | # CONFIG_TCP_MD5SIG is not set |
| 236 | # CONFIG_IPV6 is not set | 254 | # CONFIG_IPV6 is not set |
| 237 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 238 | # CONFIG_INET6_TUNNEL is not set | ||
| 239 | # CONFIG_NETWORK_SECMARK is not set | 255 | # CONFIG_NETWORK_SECMARK is not set |
| 240 | # CONFIG_NETFILTER is not set | 256 | # CONFIG_NETFILTER is not set |
| 241 | # CONFIG_IP_DCCP is not set | 257 | # CONFIG_IP_DCCP is not set |
| @@ -260,6 +276,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 260 | # CONFIG_NET_PKTGEN is not set | 276 | # CONFIG_NET_PKTGEN is not set |
| 261 | # CONFIG_NET_TCPPROBE is not set | 277 | # CONFIG_NET_TCPPROBE is not set |
| 262 | # CONFIG_HAMRADIO is not set | 278 | # CONFIG_HAMRADIO is not set |
| 279 | # CONFIG_CAN is not set | ||
| 263 | # CONFIG_IRDA is not set | 280 | # CONFIG_IRDA is not set |
| 264 | # CONFIG_BT is not set | 281 | # CONFIG_BT is not set |
| 265 | # CONFIG_AF_RXRPC is not set | 282 | # CONFIG_AF_RXRPC is not set |
| @@ -295,6 +312,7 @@ CONFIG_MTD=y | |||
| 295 | CONFIG_MTD_PARTITIONS=y | 312 | CONFIG_MTD_PARTITIONS=y |
| 296 | # CONFIG_MTD_REDBOOT_PARTS is not set | 313 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 297 | CONFIG_MTD_CMDLINE_PARTS=y | 314 | CONFIG_MTD_CMDLINE_PARTS=y |
| 315 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 298 | 316 | ||
| 299 | # | 317 | # |
| 300 | # User Modules And Translation Layers | 318 | # User Modules And Translation Layers |
| @@ -349,6 +367,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 349 | # | 367 | # |
| 350 | CONFIG_MTD_DATAFLASH=m | 368 | CONFIG_MTD_DATAFLASH=m |
| 351 | CONFIG_MTD_M25P80=m | 369 | CONFIG_MTD_M25P80=m |
| 370 | CONFIG_M25PXX_USE_FAST_READ=y | ||
| 352 | # CONFIG_MTD_SLRAM is not set | 371 | # CONFIG_MTD_SLRAM is not set |
| 353 | # CONFIG_MTD_PHRAM is not set | 372 | # CONFIG_MTD_PHRAM is not set |
| 354 | # CONFIG_MTD_MTDRAM is not set | 373 | # CONFIG_MTD_MTDRAM is not set |
| @@ -376,13 +395,18 @@ CONFIG_BLK_DEV_NBD=m | |||
| 376 | CONFIG_BLK_DEV_RAM=m | 395 | CONFIG_BLK_DEV_RAM=m |
| 377 | CONFIG_BLK_DEV_RAM_COUNT=16 | 396 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 378 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 397 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 379 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 398 | # CONFIG_BLK_DEV_XIP is not set |
| 380 | # CONFIG_CDROM_PKTCDVD is not set | 399 | # CONFIG_CDROM_PKTCDVD is not set |
| 381 | # CONFIG_ATA_OVER_ETH is not set | 400 | # CONFIG_ATA_OVER_ETH is not set |
| 382 | CONFIG_MISC_DEVICES=y | 401 | CONFIG_MISC_DEVICES=y |
| 402 | CONFIG_ATMEL_PWM=m | ||
| 403 | CONFIG_ATMEL_TCLIB=y | ||
| 404 | CONFIG_ATMEL_TCB_CLKSRC=y | ||
| 405 | CONFIG_ATMEL_TCB_CLKSRC_BLOCK=0 | ||
| 383 | # CONFIG_EEPROM_93CX6 is not set | 406 | # CONFIG_EEPROM_93CX6 is not set |
| 384 | CONFIG_ATMEL_SSC=m | 407 | CONFIG_ATMEL_SSC=m |
| 385 | # CONFIG_IDE is not set | 408 | # CONFIG_ENCLOSURE_SERVICES is not set |
| 409 | # CONFIG_HAVE_IDE is not set | ||
| 386 | 410 | ||
| 387 | # | 411 | # |
| 388 | # SCSI device support | 412 | # SCSI device support |
| @@ -427,6 +451,9 @@ CONFIG_SCSI_LOWLEVEL=y | |||
| 427 | # CONFIG_SCSI_DEBUG is not set | 451 | # CONFIG_SCSI_DEBUG is not set |
| 428 | CONFIG_ATA=m | 452 | CONFIG_ATA=m |
| 429 | # CONFIG_ATA_NONSTANDARD is not set | 453 | # CONFIG_ATA_NONSTANDARD is not set |
| 454 | # CONFIG_SATA_PMP is not set | ||
| 455 | CONFIG_ATA_SFF=y | ||
| 456 | # CONFIG_SATA_MV is not set | ||
| 430 | CONFIG_PATA_AT32=m | 457 | CONFIG_PATA_AT32=m |
| 431 | # CONFIG_PATA_PLATFORM is not set | 458 | # CONFIG_PATA_PLATFORM is not set |
| 432 | # CONFIG_MD is not set | 459 | # CONFIG_MD is not set |
| @@ -447,6 +474,7 @@ CONFIG_NETDEVICES=y | |||
| 447 | # | 474 | # |
| 448 | # CONFIG_WLAN_PRE80211 is not set | 475 | # CONFIG_WLAN_PRE80211 is not set |
| 449 | # CONFIG_WLAN_80211 is not set | 476 | # CONFIG_WLAN_80211 is not set |
| 477 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 450 | # CONFIG_WAN is not set | 478 | # CONFIG_WAN is not set |
| 451 | CONFIG_PPP=m | 479 | CONFIG_PPP=m |
| 452 | # CONFIG_PPP_MULTILINK is not set | 480 | # CONFIG_PPP_MULTILINK is not set |
| @@ -460,7 +488,6 @@ CONFIG_PPP_BSDCOMP=m | |||
| 460 | # CONFIG_PPPOL2TP is not set | 488 | # CONFIG_PPPOL2TP is not set |
| 461 | # CONFIG_SLIP is not set | 489 | # CONFIG_SLIP is not set |
| 462 | CONFIG_SLHC=m | 490 | CONFIG_SLHC=m |
| 463 | # CONFIG_SHAPER is not set | ||
| 464 | # CONFIG_NETCONSOLE is not set | 491 | # CONFIG_NETCONSOLE is not set |
| 465 | # CONFIG_NETPOLL is not set | 492 | # CONFIG_NETPOLL is not set |
| 466 | # CONFIG_NET_POLL_CONTROLLER is not set | 493 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -516,6 +543,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 516 | # Character devices | 543 | # Character devices |
| 517 | # | 544 | # |
| 518 | # CONFIG_VT is not set | 545 | # CONFIG_VT is not set |
| 546 | # CONFIG_DEVKMEM is not set | ||
| 519 | # CONFIG_SERIAL_NONSTANDARD is not set | 547 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 520 | 548 | ||
| 521 | # | 549 | # |
| @@ -528,6 +556,7 @@ CONFIG_MOUSE_GPIO=m | |||
| 528 | # | 556 | # |
| 529 | CONFIG_SERIAL_ATMEL=y | 557 | CONFIG_SERIAL_ATMEL=y |
| 530 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 558 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 559 | CONFIG_SERIAL_ATMEL_PDC=y | ||
| 531 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 560 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 532 | CONFIG_SERIAL_CORE=y | 561 | CONFIG_SERIAL_CORE=y |
| 533 | CONFIG_SERIAL_CORE_CONSOLE=y | 562 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -535,21 +564,13 @@ CONFIG_UNIX98_PTYS=y | |||
| 535 | # CONFIG_LEGACY_PTYS is not set | 564 | # CONFIG_LEGACY_PTYS is not set |
| 536 | # CONFIG_IPMI_HANDLER is not set | 565 | # CONFIG_IPMI_HANDLER is not set |
| 537 | # CONFIG_HW_RANDOM is not set | 566 | # CONFIG_HW_RANDOM is not set |
| 538 | # CONFIG_RTC is not set | ||
| 539 | # CONFIG_GEN_RTC is not set | ||
| 540 | # CONFIG_R3964 is not set | 567 | # CONFIG_R3964 is not set |
| 541 | # CONFIG_RAW_DRIVER is not set | 568 | # CONFIG_RAW_DRIVER is not set |
| 542 | # CONFIG_TCG_TPM is not set | 569 | # CONFIG_TCG_TPM is not set |
| 543 | CONFIG_I2C=m | 570 | CONFIG_I2C=m |
| 544 | CONFIG_I2C_BOARDINFO=y | 571 | CONFIG_I2C_BOARDINFO=y |
| 545 | CONFIG_I2C_CHARDEV=m | 572 | CONFIG_I2C_CHARDEV=m |
| 546 | |||
| 547 | # | ||
| 548 | # I2C Algorithms | ||
| 549 | # | ||
| 550 | CONFIG_I2C_ALGOBIT=m | 573 | CONFIG_I2C_ALGOBIT=m |
| 551 | # CONFIG_I2C_ALGOPCF is not set | ||
| 552 | # CONFIG_I2C_ALGOPCA is not set | ||
| 553 | 574 | ||
| 554 | # | 575 | # |
| 555 | # I2C Hardware Bus support | 576 | # I2C Hardware Bus support |
| @@ -560,27 +581,23 @@ CONFIG_I2C_GPIO=m | |||
| 560 | # CONFIG_I2C_SIMTEC is not set | 581 | # CONFIG_I2C_SIMTEC is not set |
| 561 | # CONFIG_I2C_TAOS_EVM is not set | 582 | # CONFIG_I2C_TAOS_EVM is not set |
| 562 | # CONFIG_I2C_STUB is not set | 583 | # CONFIG_I2C_STUB is not set |
| 584 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 563 | 585 | ||
| 564 | # | 586 | # |
| 565 | # Miscellaneous I2C Chip support | 587 | # Miscellaneous I2C Chip support |
| 566 | # | 588 | # |
| 567 | # CONFIG_SENSORS_DS1337 is not set | ||
| 568 | # CONFIG_SENSORS_DS1374 is not set | ||
| 569 | # CONFIG_DS1682 is not set | 589 | # CONFIG_DS1682 is not set |
| 570 | # CONFIG_SENSORS_EEPROM is not set | 590 | # CONFIG_SENSORS_EEPROM is not set |
| 571 | # CONFIG_SENSORS_PCF8574 is not set | 591 | # CONFIG_SENSORS_PCF8574 is not set |
| 572 | # CONFIG_SENSORS_PCA9539 is not set | 592 | # CONFIG_PCF8575 is not set |
| 573 | # CONFIG_SENSORS_PCF8591 is not set | 593 | # CONFIG_SENSORS_PCF8591 is not set |
| 594 | # CONFIG_TPS65010 is not set | ||
| 574 | # CONFIG_SENSORS_MAX6875 is not set | 595 | # CONFIG_SENSORS_MAX6875 is not set |
| 575 | # CONFIG_SENSORS_TSL2550 is not set | 596 | # CONFIG_SENSORS_TSL2550 is not set |
| 576 | # CONFIG_I2C_DEBUG_CORE is not set | 597 | # CONFIG_I2C_DEBUG_CORE is not set |
| 577 | # CONFIG_I2C_DEBUG_ALGO is not set | 598 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 578 | # CONFIG_I2C_DEBUG_BUS is not set | 599 | # CONFIG_I2C_DEBUG_BUS is not set |
| 579 | # CONFIG_I2C_DEBUG_CHIP is not set | 600 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 580 | |||
| 581 | # | ||
| 582 | # SPI support | ||
| 583 | # | ||
| 584 | CONFIG_SPI=y | 601 | CONFIG_SPI=y |
| 585 | # CONFIG_SPI_DEBUG is not set | 602 | # CONFIG_SPI_DEBUG is not set |
| 586 | CONFIG_SPI_MASTER=y | 603 | CONFIG_SPI_MASTER=y |
| @@ -597,9 +614,27 @@ CONFIG_SPI_ATMEL=y | |||
| 597 | # CONFIG_SPI_AT25 is not set | 614 | # CONFIG_SPI_AT25 is not set |
| 598 | CONFIG_SPI_SPIDEV=m | 615 | CONFIG_SPI_SPIDEV=m |
| 599 | # CONFIG_SPI_TLE62X0 is not set | 616 | # CONFIG_SPI_TLE62X0 is not set |
| 617 | CONFIG_HAVE_GPIO_LIB=y | ||
| 618 | |||
| 619 | # | ||
| 620 | # GPIO Support | ||
| 621 | # | ||
| 622 | # CONFIG_DEBUG_GPIO is not set | ||
| 623 | |||
| 624 | # | ||
| 625 | # I2C GPIO expanders: | ||
| 626 | # | ||
| 627 | # CONFIG_GPIO_PCA953X is not set | ||
| 628 | # CONFIG_GPIO_PCF857X is not set | ||
| 629 | |||
| 630 | # | ||
| 631 | # SPI GPIO expanders: | ||
| 632 | # | ||
| 633 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 600 | # CONFIG_W1 is not set | 634 | # CONFIG_W1 is not set |
| 601 | # CONFIG_POWER_SUPPLY is not set | 635 | # CONFIG_POWER_SUPPLY is not set |
| 602 | # CONFIG_HWMON is not set | 636 | # CONFIG_HWMON is not set |
| 637 | # CONFIG_THERMAL is not set | ||
| 603 | CONFIG_WATCHDOG=y | 638 | CONFIG_WATCHDOG=y |
| 604 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 639 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 605 | 640 | ||
| @@ -619,12 +654,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 619 | # Multifunction device drivers | 654 | # Multifunction device drivers |
| 620 | # | 655 | # |
| 621 | # CONFIG_MFD_SM501 is not set | 656 | # CONFIG_MFD_SM501 is not set |
| 657 | # CONFIG_HTC_PASIC3 is not set | ||
| 622 | 658 | ||
| 623 | # | 659 | # |
| 624 | # Multimedia devices | 660 | # Multimedia devices |
| 625 | # | 661 | # |
| 662 | |||
| 663 | # | ||
| 664 | # Multimedia core support | ||
| 665 | # | ||
| 626 | # CONFIG_VIDEO_DEV is not set | 666 | # CONFIG_VIDEO_DEV is not set |
| 627 | # CONFIG_DVB_CORE is not set | 667 | # CONFIG_DVB_CORE is not set |
| 668 | # CONFIG_VIDEO_MEDIA is not set | ||
| 669 | |||
| 670 | # | ||
| 671 | # Multimedia drivers | ||
| 672 | # | ||
| 628 | # CONFIG_DAB is not set | 673 | # CONFIG_DAB is not set |
| 629 | 674 | ||
| 630 | # | 675 | # |
| @@ -682,7 +727,11 @@ CONFIG_SND_AT73C213_TARGET_BITRATE=48000 | |||
| 682 | # CONFIG_SND_SOC is not set | 727 | # CONFIG_SND_SOC is not set |
| 683 | 728 | ||
| 684 | # | 729 | # |
| 685 | # SoC Audio support for SuperH | 730 | # ALSA SoC audio for Freescale SOCs |
| 731 | # | ||
| 732 | |||
| 733 | # | ||
| 734 | # SoC Audio for the Texas Instruments OMAP | ||
| 686 | # | 735 | # |
| 687 | 736 | ||
| 688 | # | 737 | # |
| @@ -694,14 +743,12 @@ CONFIG_USB_SUPPORT=y | |||
| 694 | # CONFIG_USB_ARCH_HAS_HCD is not set | 743 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 695 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 744 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 696 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 745 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 746 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 747 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 697 | 748 | ||
| 698 | # | 749 | # |
| 699 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 750 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 700 | # | 751 | # |
| 701 | |||
| 702 | # | ||
| 703 | # USB Gadget Support | ||
| 704 | # | ||
| 705 | CONFIG_USB_GADGET=y | 752 | CONFIG_USB_GADGET=y |
| 706 | # CONFIG_USB_GADGET_DEBUG is not set | 753 | # CONFIG_USB_GADGET_DEBUG is not set |
| 707 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 754 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| @@ -714,6 +761,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 714 | # CONFIG_USB_GADGET_NET2280 is not set | 761 | # CONFIG_USB_GADGET_NET2280 is not set |
| 715 | # CONFIG_USB_GADGET_PXA2XX is not set | 762 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 716 | # CONFIG_USB_GADGET_M66592 is not set | 763 | # CONFIG_USB_GADGET_M66592 is not set |
| 764 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 717 | # CONFIG_USB_GADGET_GOKU is not set | 765 | # CONFIG_USB_GADGET_GOKU is not set |
| 718 | # CONFIG_USB_GADGET_LH7A40X is not set | 766 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 719 | # CONFIG_USB_GADGET_OMAP is not set | 767 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -729,6 +777,7 @@ CONFIG_USB_FILE_STORAGE=m | |||
| 729 | # CONFIG_USB_FILE_STORAGE_TEST is not set | 777 | # CONFIG_USB_FILE_STORAGE_TEST is not set |
| 730 | CONFIG_USB_G_SERIAL=m | 778 | CONFIG_USB_G_SERIAL=m |
| 731 | # CONFIG_USB_MIDI_GADGET is not set | 779 | # CONFIG_USB_MIDI_GADGET is not set |
| 780 | # CONFIG_USB_G_PRINTER is not set | ||
| 732 | CONFIG_MMC=m | 781 | CONFIG_MMC=m |
| 733 | # CONFIG_MMC_DEBUG is not set | 782 | # CONFIG_MMC_DEBUG is not set |
| 734 | # CONFIG_MMC_UNSAFE_RESUME is not set | 783 | # CONFIG_MMC_UNSAFE_RESUME is not set |
| @@ -739,17 +788,20 @@ CONFIG_MMC=m | |||
| 739 | CONFIG_MMC_BLOCK=m | 788 | CONFIG_MMC_BLOCK=m |
| 740 | # CONFIG_MMC_BLOCK_BOUNCE is not set | 789 | # CONFIG_MMC_BLOCK_BOUNCE is not set |
| 741 | # CONFIG_SDIO_UART is not set | 790 | # CONFIG_SDIO_UART is not set |
| 791 | # CONFIG_MMC_TEST is not set | ||
| 742 | 792 | ||
| 743 | # | 793 | # |
| 744 | # MMC/SD Host Controller Drivers | 794 | # MMC/SD Host Controller Drivers |
| 745 | # | 795 | # |
| 746 | CONFIG_MMC_SPI=m | 796 | CONFIG_MMC_SPI=m |
| 797 | # CONFIG_MEMSTICK is not set | ||
| 747 | CONFIG_NEW_LEDS=y | 798 | CONFIG_NEW_LEDS=y |
| 748 | CONFIG_LEDS_CLASS=y | 799 | CONFIG_LEDS_CLASS=y |
| 749 | 800 | ||
| 750 | # | 801 | # |
| 751 | # LED drivers | 802 | # LED drivers |
| 752 | # | 803 | # |
| 804 | CONFIG_LEDS_ATMEL_PWM=m | ||
| 753 | CONFIG_LEDS_GPIO=y | 805 | CONFIG_LEDS_GPIO=y |
| 754 | 806 | ||
| 755 | # | 807 | # |
| @@ -758,6 +810,8 @@ CONFIG_LEDS_GPIO=y | |||
| 758 | CONFIG_LEDS_TRIGGERS=y | 810 | CONFIG_LEDS_TRIGGERS=y |
| 759 | CONFIG_LEDS_TRIGGER_TIMER=y | 811 | CONFIG_LEDS_TRIGGER_TIMER=y |
| 760 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y | 812 | CONFIG_LEDS_TRIGGER_HEARTBEAT=y |
| 813 | CONFIG_LEDS_TRIGGER_DEFAULT_ON=y | ||
| 814 | # CONFIG_ACCESSIBILITY is not set | ||
| 761 | CONFIG_RTC_LIB=y | 815 | CONFIG_RTC_LIB=y |
| 762 | CONFIG_RTC_CLASS=y | 816 | CONFIG_RTC_CLASS=y |
| 763 | CONFIG_RTC_HCTOSYS=y | 817 | CONFIG_RTC_HCTOSYS=y |
| @@ -786,19 +840,22 @@ CONFIG_RTC_INTF_DEV=y | |||
| 786 | # CONFIG_RTC_DRV_PCF8563 is not set | 840 | # CONFIG_RTC_DRV_PCF8563 is not set |
| 787 | # CONFIG_RTC_DRV_PCF8583 is not set | 841 | # CONFIG_RTC_DRV_PCF8583 is not set |
| 788 | # CONFIG_RTC_DRV_M41T80 is not set | 842 | # CONFIG_RTC_DRV_M41T80 is not set |
| 843 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 789 | 844 | ||
| 790 | # | 845 | # |
| 791 | # SPI RTC drivers | 846 | # SPI RTC drivers |
| 792 | # | 847 | # |
| 793 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 794 | # CONFIG_RTC_DRV_MAX6902 is not set | 848 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 849 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 850 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 795 | 851 | ||
| 796 | # | 852 | # |
| 797 | # Platform RTC drivers | 853 | # Platform RTC drivers |
| 798 | # | 854 | # |
| 855 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 799 | # CONFIG_RTC_DRV_DS1553 is not set | 856 | # CONFIG_RTC_DRV_DS1553 is not set |
| 800 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 801 | # CONFIG_RTC_DRV_DS1742 is not set | 857 | # CONFIG_RTC_DRV_DS1742 is not set |
| 858 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 802 | # CONFIG_RTC_DRV_M48T86 is not set | 859 | # CONFIG_RTC_DRV_M48T86 is not set |
| 803 | # CONFIG_RTC_DRV_M48T59 is not set | 860 | # CONFIG_RTC_DRV_M48T59 is not set |
| 804 | # CONFIG_RTC_DRV_V3020 is not set | 861 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -807,11 +864,8 @@ CONFIG_RTC_INTF_DEV=y | |||
| 807 | # on-CPU RTC drivers | 864 | # on-CPU RTC drivers |
| 808 | # | 865 | # |
| 809 | CONFIG_RTC_DRV_AT32AP700X=y | 866 | CONFIG_RTC_DRV_AT32AP700X=y |
| 810 | |||
| 811 | # | ||
| 812 | # Userspace I/O | ||
| 813 | # | ||
| 814 | CONFIG_UIO=m | 867 | CONFIG_UIO=m |
| 868 | # CONFIG_UIO_SMX is not set | ||
| 815 | 869 | ||
| 816 | # | 870 | # |
| 817 | # File systems | 871 | # File systems |
| @@ -828,14 +882,11 @@ CONFIG_JBD=m | |||
| 828 | # CONFIG_JFS_FS is not set | 882 | # CONFIG_JFS_FS is not set |
| 829 | # CONFIG_FS_POSIX_ACL is not set | 883 | # CONFIG_FS_POSIX_ACL is not set |
| 830 | # CONFIG_XFS_FS is not set | 884 | # CONFIG_XFS_FS is not set |
| 831 | # CONFIG_GFS2_FS is not set | ||
| 832 | # CONFIG_OCFS2_FS is not set | 885 | # CONFIG_OCFS2_FS is not set |
| 833 | # CONFIG_MINIX_FS is not set | 886 | # CONFIG_DNOTIFY is not set |
| 834 | # CONFIG_ROMFS_FS is not set | ||
| 835 | CONFIG_INOTIFY=y | 887 | CONFIG_INOTIFY=y |
| 836 | CONFIG_INOTIFY_USER=y | 888 | CONFIG_INOTIFY_USER=y |
| 837 | # CONFIG_QUOTA is not set | 889 | # CONFIG_QUOTA is not set |
| 838 | # CONFIG_DNOTIFY is not set | ||
| 839 | # CONFIG_AUTOFS_FS is not set | 890 | # CONFIG_AUTOFS_FS is not set |
| 840 | # CONFIG_AUTOFS4_FS is not set | 891 | # CONFIG_AUTOFS4_FS is not set |
| 841 | CONFIG_FUSE_FS=m | 892 | CONFIG_FUSE_FS=m |
| @@ -891,8 +942,10 @@ CONFIG_JFFS2_RTIME=y | |||
| 891 | # CONFIG_JFFS2_RUBIN is not set | 942 | # CONFIG_JFFS2_RUBIN is not set |
| 892 | # CONFIG_CRAMFS is not set | 943 | # CONFIG_CRAMFS is not set |
| 893 | # CONFIG_VXFS_FS is not set | 944 | # CONFIG_VXFS_FS is not set |
| 945 | # CONFIG_MINIX_FS is not set | ||
| 894 | # CONFIG_HPFS_FS is not set | 946 | # CONFIG_HPFS_FS is not set |
| 895 | # CONFIG_QNX4FS_FS is not set | 947 | # CONFIG_QNX4FS_FS is not set |
| 948 | # CONFIG_ROMFS_FS is not set | ||
| 896 | # CONFIG_SYSV_FS is not set | 949 | # CONFIG_SYSV_FS is not set |
| 897 | # CONFIG_UFS_FS is not set | 950 | # CONFIG_UFS_FS is not set |
| 898 | # CONFIG_NETWORK_FILESYSTEMS is not set | 951 | # CONFIG_NETWORK_FILESYSTEMS is not set |
| @@ -943,11 +996,6 @@ CONFIG_NLS_ISO8859_1=m | |||
| 943 | # CONFIG_NLS_KOI8_U is not set | 996 | # CONFIG_NLS_KOI8_U is not set |
| 944 | CONFIG_NLS_UTF8=m | 997 | CONFIG_NLS_UTF8=m |
| 945 | # CONFIG_DLM is not set | 998 | # CONFIG_DLM is not set |
| 946 | CONFIG_INSTRUMENTATION=y | ||
| 947 | CONFIG_PROFILING=y | ||
| 948 | CONFIG_OPROFILE=m | ||
| 949 | CONFIG_KPROBES=y | ||
| 950 | # CONFIG_MARKERS is not set | ||
| 951 | 999 | ||
| 952 | # | 1000 | # |
| 953 | # Kernel hacking | 1001 | # Kernel hacking |
| @@ -955,6 +1003,7 @@ CONFIG_KPROBES=y | |||
| 955 | # CONFIG_PRINTK_TIME is not set | 1003 | # CONFIG_PRINTK_TIME is not set |
| 956 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1004 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 957 | CONFIG_ENABLE_MUST_CHECK=y | 1005 | CONFIG_ENABLE_MUST_CHECK=y |
| 1006 | CONFIG_FRAME_WARN=1024 | ||
| 958 | CONFIG_MAGIC_SYSRQ=y | 1007 | CONFIG_MAGIC_SYSRQ=y |
| 959 | # CONFIG_UNUSED_SYMBOLS is not set | 1008 | # CONFIG_UNUSED_SYMBOLS is not set |
| 960 | CONFIG_DEBUG_FS=y | 1009 | CONFIG_DEBUG_FS=y |
| @@ -965,6 +1014,7 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 965 | CONFIG_SCHED_DEBUG=y | 1014 | CONFIG_SCHED_DEBUG=y |
| 966 | # CONFIG_SCHEDSTATS is not set | 1015 | # CONFIG_SCHEDSTATS is not set |
| 967 | # CONFIG_TIMER_STATS is not set | 1016 | # CONFIG_TIMER_STATS is not set |
| 1017 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 968 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1018 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 969 | # CONFIG_RT_MUTEX_TESTER is not set | 1019 | # CONFIG_RT_MUTEX_TESTER is not set |
| 970 | # CONFIG_DEBUG_SPINLOCK is not set | 1020 | # CONFIG_DEBUG_SPINLOCK is not set |
| @@ -978,12 +1028,14 @@ CONFIG_SCHED_DEBUG=y | |||
| 978 | CONFIG_DEBUG_BUGVERBOSE=y | 1028 | CONFIG_DEBUG_BUGVERBOSE=y |
| 979 | # CONFIG_DEBUG_INFO is not set | 1029 | # CONFIG_DEBUG_INFO is not set |
| 980 | # CONFIG_DEBUG_VM is not set | 1030 | # CONFIG_DEBUG_VM is not set |
| 1031 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 981 | # CONFIG_DEBUG_LIST is not set | 1032 | # CONFIG_DEBUG_LIST is not set |
| 982 | # CONFIG_DEBUG_SG is not set | 1033 | # CONFIG_DEBUG_SG is not set |
| 983 | CONFIG_FRAME_POINTER=y | 1034 | CONFIG_FRAME_POINTER=y |
| 984 | CONFIG_FORCED_INLINING=y | ||
| 985 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1035 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 986 | # CONFIG_RCU_TORTURE_TEST is not set | 1036 | # CONFIG_RCU_TORTURE_TEST is not set |
| 1037 | # CONFIG_KPROBES_SANITY_TEST is not set | ||
| 1038 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 987 | # CONFIG_LKDTM is not set | 1039 | # CONFIG_LKDTM is not set |
| 988 | # CONFIG_FAULT_INJECTION is not set | 1040 | # CONFIG_FAULT_INJECTION is not set |
| 989 | # CONFIG_SAMPLES is not set | 1041 | # CONFIG_SAMPLES is not set |
| @@ -1000,6 +1052,8 @@ CONFIG_FORCED_INLINING=y | |||
| 1000 | # Library routines | 1052 | # Library routines |
| 1001 | # | 1053 | # |
| 1002 | CONFIG_BITREVERSE=y | 1054 | CONFIG_BITREVERSE=y |
| 1055 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1056 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 1003 | CONFIG_CRC_CCITT=m | 1057 | CONFIG_CRC_CCITT=m |
| 1004 | # CONFIG_CRC16 is not set | 1058 | # CONFIG_CRC16 is not set |
| 1005 | CONFIG_CRC_ITU_T=m | 1059 | CONFIG_CRC_ITU_T=m |
diff --git a/arch/avr32/configs/atstk1004_defconfig b/arch/avr32/configs/atstk1004_defconfig index 634c52760349..a0912fb7c92e 100644 --- a/arch/avr32/configs/atstk1004_defconfig +++ b/arch/avr32/configs/atstk1004_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24-rc7 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Jan 9 23:04:20 2008 | 4 | # Mon May 26 13:34:57 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_AVR32=y | 6 | CONFIG_AVR32=y |
| 7 | CONFIG_GENERIC_GPIO=y | 7 | CONFIG_GENERIC_GPIO=y |
| @@ -13,10 +13,10 @@ CONFIG_HARDIRQS_SW_RESEND=y | |||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | 13 | CONFIG_GENERIC_IRQ_PROBE=y |
| 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 14 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 15 | CONFIG_GENERIC_TIME=y | 15 | CONFIG_GENERIC_TIME=y |
| 16 | CONFIG_GENERIC_CLOCKEVENTS=y | ||
| 16 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set | 17 | # CONFIG_RWSEM_XCHGADD_ALGORITHM is not set |
| 17 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 18 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 19 | CONFIG_ARCH_SUPPORTS_OPROFILE=y | ||
| 20 | CONFIG_GENERIC_HWEIGHT=y | 20 | CONFIG_GENERIC_HWEIGHT=y |
| 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y | 21 | CONFIG_GENERIC_CALIBRATE_DELAY=y |
| 22 | CONFIG_GENERIC_BUG=y | 22 | CONFIG_GENERIC_BUG=y |
| @@ -34,15 +34,15 @@ CONFIG_LOCALVERSION="" | |||
| 34 | # CONFIG_POSIX_MQUEUE is not set | 34 | # CONFIG_POSIX_MQUEUE is not set |
| 35 | # CONFIG_BSD_PROCESS_ACCT is not set | 35 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 36 | # CONFIG_TASKSTATS is not set | 36 | # CONFIG_TASKSTATS is not set |
| 37 | # CONFIG_USER_NS is not set | ||
| 38 | # CONFIG_PID_NS is not set | ||
| 39 | # CONFIG_AUDIT is not set | 37 | # CONFIG_AUDIT is not set |
| 40 | # CONFIG_IKCONFIG is not set | 38 | # CONFIG_IKCONFIG is not set |
| 41 | CONFIG_LOG_BUF_SHIFT=14 | 39 | CONFIG_LOG_BUF_SHIFT=14 |
| 42 | # CONFIG_CGROUPS is not set | 40 | # CONFIG_CGROUPS is not set |
| 43 | # CONFIG_FAIR_GROUP_SCHED is not set | 41 | # CONFIG_GROUP_SCHED is not set |
| 44 | CONFIG_SYSFS_DEPRECATED=y | 42 | CONFIG_SYSFS_DEPRECATED=y |
| 43 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 45 | # CONFIG_RELAY is not set | 44 | # CONFIG_RELAY is not set |
| 45 | # CONFIG_NAMESPACES is not set | ||
| 46 | # CONFIG_BLK_DEV_INITRD is not set | 46 | # CONFIG_BLK_DEV_INITRD is not set |
| 47 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 47 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 48 | CONFIG_SYSCTL=y | 48 | CONFIG_SYSCTL=y |
| @@ -54,24 +54,38 @@ CONFIG_HOTPLUG=y | |||
| 54 | CONFIG_PRINTK=y | 54 | CONFIG_PRINTK=y |
| 55 | CONFIG_BUG=y | 55 | CONFIG_BUG=y |
| 56 | CONFIG_ELF_CORE=y | 56 | CONFIG_ELF_CORE=y |
| 57 | # CONFIG_COMPAT_BRK is not set | ||
| 57 | # CONFIG_BASE_FULL is not set | 58 | # CONFIG_BASE_FULL is not set |
| 58 | # CONFIG_FUTEX is not set | 59 | # CONFIG_FUTEX is not set |
| 59 | # CONFIG_EPOLL is not set | 60 | # CONFIG_EPOLL is not set |
| 60 | # CONFIG_SIGNALFD is not set | 61 | # CONFIG_SIGNALFD is not set |
| 62 | # CONFIG_TIMERFD is not set | ||
| 61 | # CONFIG_EVENTFD is not set | 63 | # CONFIG_EVENTFD is not set |
| 62 | CONFIG_SHMEM=y | 64 | CONFIG_SHMEM=y |
| 63 | CONFIG_VM_EVENT_COUNTERS=y | 65 | CONFIG_VM_EVENT_COUNTERS=y |
| 64 | # CONFIG_SLAB is not set | 66 | # CONFIG_SLAB is not set |
| 65 | # CONFIG_SLUB is not set | 67 | # CONFIG_SLUB is not set |
| 66 | CONFIG_SLOB=y | 68 | CONFIG_SLOB=y |
| 69 | # CONFIG_PROFILING is not set | ||
| 70 | # CONFIG_MARKERS is not set | ||
| 71 | CONFIG_HAVE_OPROFILE=y | ||
| 72 | CONFIG_HAVE_KPROBES=y | ||
| 73 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 74 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 75 | # CONFIG_PROC_PAGE_MONITOR is not set | ||
| 67 | # CONFIG_TINY_SHMEM is not set | 76 | # CONFIG_TINY_SHMEM is not set |
| 68 | CONFIG_BASE_SMALL=1 | 77 | CONFIG_BASE_SMALL=1 |
| 69 | # CONFIG_MODULES is not set | 78 | # CONFIG_MODULES is not set |
| 70 | # CONFIG_BLOCK is not set | 79 | # CONFIG_BLOCK is not set |
| 80 | CONFIG_CLASSIC_RCU=y | ||
| 71 | 81 | ||
| 72 | # | 82 | # |
| 73 | # System Type and features | 83 | # System Type and features |
| 74 | # | 84 | # |
| 85 | # CONFIG_TICK_ONESHOT is not set | ||
| 86 | # CONFIG_NO_HZ is not set | ||
| 87 | # CONFIG_HIGH_RES_TIMERS is not set | ||
| 88 | CONFIG_GENERIC_CLOCKEVENTS_BUILD=y | ||
| 75 | CONFIG_SUBARCH_AVR32B=y | 89 | CONFIG_SUBARCH_AVR32B=y |
| 76 | CONFIG_MMU=y | 90 | CONFIG_MMU=y |
| 77 | CONFIG_PERFORMANCE_COUNTERS=y | 91 | CONFIG_PERFORMANCE_COUNTERS=y |
| @@ -115,16 +129,19 @@ CONFIG_FLATMEM=y | |||
| 115 | CONFIG_FLAT_NODE_MEM_MAP=y | 129 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 116 | # CONFIG_SPARSEMEM_STATIC is not set | 130 | # CONFIG_SPARSEMEM_STATIC is not set |
| 117 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | 131 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set |
| 132 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 118 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 133 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 119 | # CONFIG_RESOURCES_64BIT is not set | 134 | # CONFIG_RESOURCES_64BIT is not set |
| 120 | CONFIG_ZONE_DMA_FLAG=0 | 135 | CONFIG_ZONE_DMA_FLAG=0 |
| 121 | CONFIG_VIRT_TO_BUS=y | 136 | CONFIG_VIRT_TO_BUS=y |
| 122 | # CONFIG_OWNERSHIP_TRACE is not set | 137 | # CONFIG_OWNERSHIP_TRACE is not set |
| 138 | # CONFIG_NMI_DEBUGGING is not set | ||
| 123 | # CONFIG_HZ_100 is not set | 139 | # CONFIG_HZ_100 is not set |
| 124 | CONFIG_HZ_250=y | 140 | CONFIG_HZ_250=y |
| 125 | # CONFIG_HZ_300 is not set | 141 | # CONFIG_HZ_300 is not set |
| 126 | # CONFIG_HZ_1000 is not set | 142 | # CONFIG_HZ_1000 is not set |
| 127 | CONFIG_HZ=250 | 143 | CONFIG_HZ=250 |
| 144 | # CONFIG_SCHED_HRTICK is not set | ||
| 128 | CONFIG_CMDLINE="" | 145 | CONFIG_CMDLINE="" |
| 129 | 146 | ||
| 130 | # | 147 | # |
| @@ -134,20 +151,7 @@ CONFIG_CMDLINE="" | |||
| 134 | # | 151 | # |
| 135 | # CPU Frequency scaling | 152 | # CPU Frequency scaling |
| 136 | # | 153 | # |
| 137 | CONFIG_CPU_FREQ=y | 154 | # CONFIG_CPU_FREQ is not set |
| 138 | CONFIG_CPU_FREQ_TABLE=y | ||
| 139 | # CONFIG_CPU_FREQ_DEBUG is not set | ||
| 140 | # CONFIG_CPU_FREQ_STAT is not set | ||
| 141 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | ||
| 142 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | ||
| 143 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | ||
| 144 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
| 145 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||
| 146 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | ||
| 147 | CONFIG_CPU_FREQ_GOV_USERSPACE=y | ||
| 148 | CONFIG_CPU_FREQ_GOV_ONDEMAND=y | ||
| 149 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
| 150 | CONFIG_CPU_FREQ_AT32AP=y | ||
| 151 | 155 | ||
| 152 | # | 156 | # |
| 153 | # Bus options | 157 | # Bus options |
| @@ -197,8 +201,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 197 | CONFIG_DEFAULT_TCP_CONG="cubic" | 201 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 198 | # CONFIG_TCP_MD5SIG is not set | 202 | # CONFIG_TCP_MD5SIG is not set |
| 199 | # CONFIG_IPV6 is not set | 203 | # CONFIG_IPV6 is not set |
| 200 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 201 | # CONFIG_INET6_TUNNEL is not set | ||
| 202 | # CONFIG_NETWORK_SECMARK is not set | 204 | # CONFIG_NETWORK_SECMARK is not set |
| 203 | # CONFIG_NETFILTER is not set | 205 | # CONFIG_NETFILTER is not set |
| 204 | # CONFIG_IP_DCCP is not set | 206 | # CONFIG_IP_DCCP is not set |
| @@ -222,6 +224,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 222 | # | 224 | # |
| 223 | # CONFIG_NET_PKTGEN is not set | 225 | # CONFIG_NET_PKTGEN is not set |
| 224 | # CONFIG_HAMRADIO is not set | 226 | # CONFIG_HAMRADIO is not set |
| 227 | # CONFIG_CAN is not set | ||
| 225 | # CONFIG_IRDA is not set | 228 | # CONFIG_IRDA is not set |
| 226 | # CONFIG_BT is not set | 229 | # CONFIG_BT is not set |
| 227 | # CONFIG_AF_RXRPC is not set | 230 | # CONFIG_AF_RXRPC is not set |
| @@ -255,6 +258,7 @@ CONFIG_MTD=y | |||
| 255 | CONFIG_MTD_PARTITIONS=y | 258 | CONFIG_MTD_PARTITIONS=y |
| 256 | # CONFIG_MTD_REDBOOT_PARTS is not set | 259 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 257 | CONFIG_MTD_CMDLINE_PARTS=y | 260 | CONFIG_MTD_CMDLINE_PARTS=y |
| 261 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 258 | 262 | ||
| 259 | # | 263 | # |
| 260 | # User Modules And Translation Layers | 264 | # User Modules And Translation Layers |
| @@ -321,6 +325,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 321 | # CONFIG_MTD_UBI is not set | 325 | # CONFIG_MTD_UBI is not set |
| 322 | # CONFIG_PARPORT is not set | 326 | # CONFIG_PARPORT is not set |
| 323 | # CONFIG_MISC_DEVICES is not set | 327 | # CONFIG_MISC_DEVICES is not set |
| 328 | # CONFIG_HAVE_IDE is not set | ||
| 324 | 329 | ||
| 325 | # | 330 | # |
| 326 | # SCSI device support | 331 | # SCSI device support |
| @@ -346,6 +351,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 346 | # Character devices | 351 | # Character devices |
| 347 | # | 352 | # |
| 348 | # CONFIG_VT is not set | 353 | # CONFIG_VT is not set |
| 354 | # CONFIG_DEVKMEM is not set | ||
| 349 | # CONFIG_SERIAL_NONSTANDARD is not set | 355 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 350 | 356 | ||
| 351 | # | 357 | # |
| @@ -358,6 +364,7 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2 | |||
| 358 | # | 364 | # |
| 359 | CONFIG_SERIAL_ATMEL=y | 365 | CONFIG_SERIAL_ATMEL=y |
| 360 | CONFIG_SERIAL_ATMEL_CONSOLE=y | 366 | CONFIG_SERIAL_ATMEL_CONSOLE=y |
| 367 | # CONFIG_SERIAL_ATMEL_PDC is not set | ||
| 361 | # CONFIG_SERIAL_ATMEL_TTYAT is not set | 368 | # CONFIG_SERIAL_ATMEL_TTYAT is not set |
| 362 | CONFIG_SERIAL_CORE=y | 369 | CONFIG_SERIAL_CORE=y |
| 363 | CONFIG_SERIAL_CORE_CONSOLE=y | 370 | CONFIG_SERIAL_CORE_CONSOLE=y |
| @@ -365,15 +372,9 @@ CONFIG_UNIX98_PTYS=y | |||
| 365 | # CONFIG_LEGACY_PTYS is not set | 372 | # CONFIG_LEGACY_PTYS is not set |
| 366 | # CONFIG_IPMI_HANDLER is not set | 373 | # CONFIG_IPMI_HANDLER is not set |
| 367 | # CONFIG_HW_RANDOM is not set | 374 | # CONFIG_HW_RANDOM is not set |
| 368 | # CONFIG_RTC is not set | ||
| 369 | # CONFIG_GEN_RTC is not set | ||
| 370 | # CONFIG_R3964 is not set | 375 | # CONFIG_R3964 is not set |
| 371 | # CONFIG_TCG_TPM is not set | 376 | # CONFIG_TCG_TPM is not set |
| 372 | # CONFIG_I2C is not set | 377 | # CONFIG_I2C is not set |
| 373 | |||
| 374 | # | ||
| 375 | # SPI support | ||
| 376 | # | ||
| 377 | CONFIG_SPI=y | 378 | CONFIG_SPI=y |
| 378 | CONFIG_SPI_MASTER=y | 379 | CONFIG_SPI_MASTER=y |
| 379 | 380 | ||
| @@ -389,9 +390,24 @@ CONFIG_SPI_ATMEL=y | |||
| 389 | # CONFIG_SPI_AT25 is not set | 390 | # CONFIG_SPI_AT25 is not set |
| 390 | # CONFIG_SPI_SPIDEV is not set | 391 | # CONFIG_SPI_SPIDEV is not set |
| 391 | # CONFIG_SPI_TLE62X0 is not set | 392 | # CONFIG_SPI_TLE62X0 is not set |
| 393 | CONFIG_HAVE_GPIO_LIB=y | ||
| 394 | |||
| 395 | # | ||
| 396 | # GPIO Support | ||
| 397 | # | ||
| 398 | |||
| 399 | # | ||
| 400 | # I2C GPIO expanders: | ||
| 401 | # | ||
| 402 | |||
| 403 | # | ||
| 404 | # SPI GPIO expanders: | ||
| 405 | # | ||
| 406 | # CONFIG_GPIO_MCP23S08 is not set | ||
| 392 | # CONFIG_W1 is not set | 407 | # CONFIG_W1 is not set |
| 393 | # CONFIG_POWER_SUPPLY is not set | 408 | # CONFIG_POWER_SUPPLY is not set |
| 394 | # CONFIG_HWMON is not set | 409 | # CONFIG_HWMON is not set |
| 410 | # CONFIG_THERMAL is not set | ||
| 395 | CONFIG_WATCHDOG=y | 411 | CONFIG_WATCHDOG=y |
| 396 | # CONFIG_WATCHDOG_NOWAYOUT is not set | 412 | # CONFIG_WATCHDOG_NOWAYOUT is not set |
| 397 | 413 | ||
| @@ -411,12 +427,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 411 | # Multifunction device drivers | 427 | # Multifunction device drivers |
| 412 | # | 428 | # |
| 413 | # CONFIG_MFD_SM501 is not set | 429 | # CONFIG_MFD_SM501 is not set |
| 430 | # CONFIG_HTC_PASIC3 is not set | ||
| 414 | 431 | ||
| 415 | # | 432 | # |
| 416 | # Multimedia devices | 433 | # Multimedia devices |
| 417 | # | 434 | # |
| 435 | |||
| 436 | # | ||
| 437 | # Multimedia core support | ||
| 438 | # | ||
| 418 | # CONFIG_VIDEO_DEV is not set | 439 | # CONFIG_VIDEO_DEV is not set |
| 419 | # CONFIG_DVB_CORE is not set | 440 | # CONFIG_DVB_CORE is not set |
| 441 | # CONFIG_VIDEO_MEDIA is not set | ||
| 442 | |||
| 443 | # | ||
| 444 | # Multimedia drivers | ||
| 445 | # | ||
| 420 | # CONFIG_DAB is not set | 446 | # CONFIG_DAB is not set |
| 421 | 447 | ||
| 422 | # | 448 | # |
| @@ -434,8 +460,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 434 | # CONFIG_FB_SYS_FILLRECT is not set | 460 | # CONFIG_FB_SYS_FILLRECT is not set |
| 435 | # CONFIG_FB_SYS_COPYAREA is not set | 461 | # CONFIG_FB_SYS_COPYAREA is not set |
| 436 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 462 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 463 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 437 | # CONFIG_FB_SYS_FOPS is not set | 464 | # CONFIG_FB_SYS_FOPS is not set |
| 438 | CONFIG_FB_DEFERRED_IO=y | ||
| 439 | # CONFIG_FB_SVGALIB is not set | 465 | # CONFIG_FB_SVGALIB is not set |
| 440 | # CONFIG_FB_MACMODES is not set | 466 | # CONFIG_FB_MACMODES is not set |
| 441 | # CONFIG_FB_BACKLIGHT is not set | 467 | # CONFIG_FB_BACKLIGHT is not set |
| @@ -467,14 +493,12 @@ CONFIG_USB_SUPPORT=y | |||
| 467 | # CONFIG_USB_ARCH_HAS_HCD is not set | 493 | # CONFIG_USB_ARCH_HAS_HCD is not set |
| 468 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 494 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 469 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 495 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 496 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 497 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 470 | 498 | ||
| 471 | # | 499 | # |
| 472 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 500 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| 473 | # | 501 | # |
| 474 | |||
| 475 | # | ||
| 476 | # USB Gadget Support | ||
| 477 | # | ||
| 478 | CONFIG_USB_GADGET=y | 502 | CONFIG_USB_GADGET=y |
| 479 | # CONFIG_USB_GADGET_DEBUG_FILES is not set | 503 | # CONFIG_USB_GADGET_DEBUG_FILES is not set |
| 480 | CONFIG_USB_GADGET_SELECTED=y | 504 | CONFIG_USB_GADGET_SELECTED=y |
| @@ -485,6 +509,7 @@ CONFIG_USB_ATMEL_USBA=y | |||
| 485 | # CONFIG_USB_GADGET_NET2280 is not set | 509 | # CONFIG_USB_GADGET_NET2280 is not set |
| 486 | # CONFIG_USB_GADGET_PXA2XX is not set | 510 | # CONFIG_USB_GADGET_PXA2XX is not set |
| 487 | # CONFIG_USB_GADGET_M66592 is not set | 511 | # CONFIG_USB_GADGET_M66592 is not set |
| 512 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 488 | # CONFIG_USB_GADGET_GOKU is not set | 513 | # CONFIG_USB_GADGET_GOKU is not set |
| 489 | # CONFIG_USB_GADGET_LH7A40X is not set | 514 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 490 | # CONFIG_USB_GADGET_OMAP is not set | 515 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -499,8 +524,11 @@ CONFIG_USB_ETH=y | |||
| 499 | # CONFIG_USB_FILE_STORAGE is not set | 524 | # CONFIG_USB_FILE_STORAGE is not set |
| 500 | # CONFIG_USB_G_SERIAL is not set | 525 | # CONFIG_USB_G_SERIAL is not set |
| 501 | # CONFIG_USB_MIDI_GADGET is not set | 526 | # CONFIG_USB_MIDI_GADGET is not set |
| 527 | # CONFIG_USB_G_PRINTER is not set | ||
| 502 | # CONFIG_MMC is not set | 528 | # CONFIG_MMC is not set |
| 529 | # CONFIG_MEMSTICK is not set | ||
| 503 | # CONFIG_NEW_LEDS is not set | 530 | # CONFIG_NEW_LEDS is not set |
| 531 | # CONFIG_ACCESSIBILITY is not set | ||
| 504 | CONFIG_RTC_LIB=y | 532 | CONFIG_RTC_LIB=y |
| 505 | CONFIG_RTC_CLASS=y | 533 | CONFIG_RTC_CLASS=y |
| 506 | CONFIG_RTC_HCTOSYS=y | 534 | CONFIG_RTC_HCTOSYS=y |
| @@ -519,15 +547,17 @@ CONFIG_RTC_INTF_DEV=y | |||
| 519 | # | 547 | # |
| 520 | # SPI RTC drivers | 548 | # SPI RTC drivers |
| 521 | # | 549 | # |
| 522 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 523 | # CONFIG_RTC_DRV_MAX6902 is not set | 550 | # CONFIG_RTC_DRV_MAX6902 is not set |
| 551 | # CONFIG_RTC_DRV_R9701 is not set | ||
| 552 | # CONFIG_RTC_DRV_RS5C348 is not set | ||
| 524 | 553 | ||
| 525 | # | 554 | # |
| 526 | # Platform RTC drivers | 555 | # Platform RTC drivers |
| 527 | # | 556 | # |
| 557 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 528 | # CONFIG_RTC_DRV_DS1553 is not set | 558 | # CONFIG_RTC_DRV_DS1553 is not set |
| 529 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 530 | # CONFIG_RTC_DRV_DS1742 is not set | 559 | # CONFIG_RTC_DRV_DS1742 is not set |
| 560 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 531 | # CONFIG_RTC_DRV_M48T86 is not set | 561 | # CONFIG_RTC_DRV_M48T86 is not set |
| 532 | # CONFIG_RTC_DRV_M48T59 is not set | 562 | # CONFIG_RTC_DRV_M48T59 is not set |
| 533 | # CONFIG_RTC_DRV_V3020 is not set | 563 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -536,18 +566,14 @@ CONFIG_RTC_INTF_DEV=y | |||
| 536 | # on-CPU RTC drivers | 566 | # on-CPU RTC drivers |
| 537 | # | 567 | # |
| 538 | CONFIG_RTC_DRV_AT32AP700X=y | 568 | CONFIG_RTC_DRV_AT32AP700X=y |
| 539 | |||
| 540 | # | ||
| 541 | # Userspace I/O | ||
| 542 | # | ||
| 543 | # CONFIG_UIO is not set | 569 | # CONFIG_UIO is not set |
| 544 | 570 | ||
| 545 | # | 571 | # |
| 546 | # File systems | 572 | # File systems |
| 547 | # | 573 | # |
| 574 | # CONFIG_DNOTIFY is not set | ||
| 548 | # CONFIG_INOTIFY is not set | 575 | # CONFIG_INOTIFY is not set |
| 549 | # CONFIG_QUOTA is not set | 576 | # CONFIG_QUOTA is not set |
| 550 | # CONFIG_DNOTIFY is not set | ||
| 551 | # CONFIG_AUTOFS_FS is not set | 577 | # CONFIG_AUTOFS_FS is not set |
| 552 | # CONFIG_AUTOFS4_FS is not set | 578 | # CONFIG_AUTOFS4_FS is not set |
| 553 | # CONFIG_FUSE_FS is not set | 579 | # CONFIG_FUSE_FS is not set |
| @@ -580,7 +606,6 @@ CONFIG_JFFS2_RTIME=y | |||
| 580 | # CONFIG_NETWORK_FILESYSTEMS is not set | 606 | # CONFIG_NETWORK_FILESYSTEMS is not set |
| 581 | # CONFIG_NLS is not set | 607 | # CONFIG_NLS is not set |
| 582 | # CONFIG_DLM is not set | 608 | # CONFIG_DLM is not set |
| 583 | # CONFIG_INSTRUMENTATION is not set | ||
| 584 | 609 | ||
| 585 | # | 610 | # |
| 586 | # Kernel hacking | 611 | # Kernel hacking |
| @@ -588,6 +613,7 @@ CONFIG_JFFS2_RTIME=y | |||
| 588 | # CONFIG_PRINTK_TIME is not set | 613 | # CONFIG_PRINTK_TIME is not set |
| 589 | CONFIG_ENABLE_WARN_DEPRECATED=y | 614 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 590 | CONFIG_ENABLE_MUST_CHECK=y | 615 | CONFIG_ENABLE_MUST_CHECK=y |
| 616 | CONFIG_FRAME_WARN=1024 | ||
| 591 | CONFIG_MAGIC_SYSRQ=y | 617 | CONFIG_MAGIC_SYSRQ=y |
| 592 | # CONFIG_UNUSED_SYMBOLS is not set | 618 | # CONFIG_UNUSED_SYMBOLS is not set |
| 593 | # CONFIG_DEBUG_FS is not set | 619 | # CONFIG_DEBUG_FS is not set |
| @@ -608,6 +634,8 @@ CONFIG_MAGIC_SYSRQ=y | |||
| 608 | # Library routines | 634 | # Library routines |
| 609 | # | 635 | # |
| 610 | CONFIG_BITREVERSE=y | 636 | CONFIG_BITREVERSE=y |
| 637 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 638 | # CONFIG_GENERIC_FIND_NEXT_BIT is not set | ||
| 611 | # CONFIG_CRC_CCITT is not set | 639 | # CONFIG_CRC_CCITT is not set |
| 612 | # CONFIG_CRC16 is not set | 640 | # CONFIG_CRC16 is not set |
| 613 | # CONFIG_CRC_ITU_T is not set | 641 | # CONFIG_CRC_ITU_T is not set |
diff --git a/arch/avr32/kernel/avr32_ksyms.c b/arch/avr32/kernel/avr32_ksyms.c index 80f55f8dbf1c..84a7d44edc67 100644 --- a/arch/avr32/kernel/avr32_ksyms.c +++ b/arch/avr32/kernel/avr32_ksyms.c | |||
| @@ -29,7 +29,9 @@ EXPORT_SYMBOL(__avr32_asr64); | |||
| 29 | */ | 29 | */ |
| 30 | EXPORT_SYMBOL(memset); | 30 | EXPORT_SYMBOL(memset); |
| 31 | EXPORT_SYMBOL(memcpy); | 31 | EXPORT_SYMBOL(memcpy); |
| 32 | |||
| 32 | EXPORT_SYMBOL(clear_page); | 33 | EXPORT_SYMBOL(clear_page); |
| 34 | EXPORT_SYMBOL(copy_page); | ||
| 33 | 35 | ||
| 34 | /* | 36 | /* |
| 35 | * Userspace access stuff. | 37 | * Userspace access stuff. |
| @@ -41,6 +43,8 @@ EXPORT_SYMBOL(strncpy_from_user); | |||
| 41 | EXPORT_SYMBOL(__strncpy_from_user); | 43 | EXPORT_SYMBOL(__strncpy_from_user); |
| 42 | EXPORT_SYMBOL(clear_user); | 44 | EXPORT_SYMBOL(clear_user); |
| 43 | EXPORT_SYMBOL(__clear_user); | 45 | EXPORT_SYMBOL(__clear_user); |
| 46 | EXPORT_SYMBOL(strnlen_user); | ||
| 47 | |||
| 44 | EXPORT_SYMBOL(csum_partial); | 48 | EXPORT_SYMBOL(csum_partial); |
| 45 | EXPORT_SYMBOL(csum_partial_copy_generic); | 49 | EXPORT_SYMBOL(csum_partial_copy_generic); |
| 46 | 50 | ||
diff --git a/arch/avr32/mach-at32ap/cpufreq.c b/arch/avr32/mach-at32ap/cpufreq.c index 235524b79193..5dd8d25428bf 100644 --- a/arch/avr32/mach-at32ap/cpufreq.c +++ b/arch/avr32/mach-at32ap/cpufreq.c | |||
| @@ -108,5 +108,4 @@ static int __init at32_cpufreq_init(void) | |||
| 108 | { | 108 | { |
| 109 | return cpufreq_register_driver(&at32_driver); | 109 | return cpufreq_register_driver(&at32_driver); |
| 110 | } | 110 | } |
| 111 | 111 | late_initcall(at32_cpufreq_init); | |
| 112 | arch_initcall(at32_cpufreq_init); | ||
diff --git a/arch/blackfin/kernel/gptimers.c b/arch/blackfin/kernel/gptimers.c index e698554895a7..3a3e9615b002 100644 --- a/arch/blackfin/kernel/gptimers.c +++ b/arch/blackfin/kernel/gptimers.c | |||
| @@ -10,8 +10,8 @@ | |||
| 10 | 10 | ||
| 11 | #include <linux/kernel.h> | 11 | #include <linux/kernel.h> |
| 12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
| 13 | #include <linux/io.h> | ||
| 13 | 14 | ||
| 14 | #include <asm/io.h> | ||
| 15 | #include <asm/blackfin.h> | 15 | #include <asm/blackfin.h> |
| 16 | #include <asm/gptimers.h> | 16 | #include <asm/gptimers.h> |
| 17 | 17 | ||
diff --git a/arch/blackfin/lib/outs.S b/arch/blackfin/lib/outs.S index 3daf96035bf6..4685b7aa0080 100644 --- a/arch/blackfin/lib/outs.S +++ b/arch/blackfin/lib/outs.S | |||
| @@ -76,4 +76,4 @@ ENTRY(_outsw_8) | |||
| 76 | R0 = R0 + R1; | 76 | R0 = R0 + R1; |
| 77 | .Lword8_loop_e: W[P0] = R0; | 77 | .Lword8_loop_e: W[P0] = R0; |
| 78 | RTS; | 78 | RTS; |
| 79 | ENDPROC(_outsw) | 79 | ENDPROC(_outsw_8) |
diff --git a/arch/blackfin/mach-bf527/boards/ezkit.c b/arch/blackfin/mach-bf527/boards/ezkit.c index bb6d58c931de..fa4f4e833e84 100644 --- a/arch/blackfin/mach-bf527/boards/ezkit.c +++ b/arch/blackfin/mach-bf527/boards/ezkit.c | |||
| @@ -647,10 +647,10 @@ static struct spi_board_info bfin_spi_board_info[] __initdata = { | |||
| 647 | { | 647 | { |
| 648 | .modalias = "ad7877", | 648 | .modalias = "ad7877", |
| 649 | .platform_data = &bfin_ad7877_ts_info, | 649 | .platform_data = &bfin_ad7877_ts_info, |
| 650 | .irq = IRQ_PF6, | 650 | .irq = IRQ_PF8, |
| 651 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ | 651 | .max_speed_hz = 12500000, /* max spi clock (SCK) speed in HZ */ |
| 652 | .bus_num = 0, | 652 | .bus_num = 0, |
| 653 | .chip_select = 1, | 653 | .chip_select = 2, |
| 654 | .controller_data = &spi_ad7877_chip_info, | 654 | .controller_data = &spi_ad7877_chip_info, |
| 655 | }, | 655 | }, |
| 656 | #endif | 656 | #endif |
diff --git a/arch/blackfin/mach-bf537/boards/Makefile b/arch/blackfin/mach-bf537/boards/Makefile index 87e450f29e37..c94f7a5b8211 100644 --- a/arch/blackfin/mach-bf537/boards/Makefile +++ b/arch/blackfin/mach-bf537/boards/Makefile | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_GENERIC_BF537_BOARD) += generic_board.o | 5 | obj-$(CONFIG_GENERIC_BF537_BOARD) += generic_board.o |
| 6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o led.o | 6 | obj-$(CONFIG_BFIN537_STAMP) += stamp.o |
| 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o | 7 | obj-$(CONFIG_BFIN537_BLUETECHNIX_CM) += cm_bf537.o |
| 8 | obj-$(CONFIG_PNAV10) += pnav10.o | 8 | obj-$(CONFIG_PNAV10) += pnav10.o |
| 9 | obj-$(CONFIG_CAMSIG_MINOTAUR) += minotaur.o | 9 | obj-$(CONFIG_CAMSIG_MINOTAUR) += minotaur.o |
diff --git a/arch/blackfin/mach-bf537/boards/led.S b/arch/blackfin/mach-bf537/boards/led.S deleted file mode 100644 index 4e9ea4283e5f..000000000000 --- a/arch/blackfin/mach-bf537/boards/led.S +++ /dev/null | |||
| @@ -1,183 +0,0 @@ | |||
| 1 | /**************************************************** | ||
| 2 | * LED1 ---- PF6 LED2 ---- PF7 * | ||
| 3 | * LED3 ---- PF8 LED4 ---- PF9 * | ||
| 4 | * LED5 ---- PF10 LED6 ---- PF11 * | ||
| 5 | ****************************************************/ | ||
| 6 | |||
| 7 | #include <linux/linkage.h> | ||
| 8 | #include <asm/blackfin.h> | ||
| 9 | |||
| 10 | /* All functions in this file save the registers they uses. | ||
| 11 | So there is no need to save any registers before calling them. */ | ||
| 12 | |||
| 13 | .text; | ||
| 14 | |||
| 15 | /* Initialize LEDs. */ | ||
| 16 | |||
| 17 | ENTRY(_led_init) | ||
| 18 | LINK 12; | ||
| 19 | [--SP] = P0; | ||
| 20 | [--SP] = R0; | ||
| 21 | [--SP] = R1; | ||
| 22 | [--SP] = R2; | ||
| 23 | R1 = PF6|PF7|PF8|PF9|PF10|PF11 (Z); | ||
| 24 | R2 = ~R1; | ||
| 25 | |||
| 26 | P0.H = hi(PORTF_FER); | ||
| 27 | P0.L = lo(PORTF_FER); | ||
| 28 | R0 = W[P0](Z); | ||
| 29 | SSYNC; | ||
| 30 | R0 = R0 & R2; | ||
| 31 | W[P0] = R0.L; | ||
| 32 | SSYNC; | ||
| 33 | |||
| 34 | P0.H = hi(PORTFIO_DIR); | ||
| 35 | P0.L = lo(PORTFIO_DIR); | ||
| 36 | R0 = W[P0](Z); | ||
| 37 | SSYNC; | ||
| 38 | R0 = R0 | R1; | ||
| 39 | W[P0] = R0.L; | ||
| 40 | SSYNC; | ||
| 41 | |||
| 42 | P0.H = hi(PORTFIO_INEN); | ||
| 43 | P0.L = lo(PORTFIO_INEN); | ||
| 44 | R0 = W[P0](Z); | ||
| 45 | SSYNC; | ||
| 46 | R0 = R0 & R2; | ||
| 47 | W[P0] = R0.L; | ||
| 48 | SSYNC; | ||
| 49 | |||
| 50 | R2 = [SP++]; | ||
| 51 | R1 = [SP++]; | ||
| 52 | R0 = [SP++]; | ||
| 53 | P0 = [SP++]; | ||
| 54 | UNLINK; | ||
| 55 | RTS; | ||
| 56 | .size _led_init, .-_led_init | ||
| 57 | |||
| 58 | /* Set one LED on. Leave other LEDs unchanged. | ||
| 59 | It expects the LED number passed through R0. */ | ||
| 60 | |||
| 61 | ENTRY(_led_on) | ||
| 62 | LINK 12; | ||
| 63 | [--SP] = P0; | ||
| 64 | [--SP] = R1; | ||
| 65 | CALL _led_init; | ||
| 66 | R1 = 1; | ||
| 67 | R0 += 5; | ||
| 68 | R1 <<= R0; | ||
| 69 | P0.H = hi(PORTFIO); | ||
| 70 | P0.L = lo(PORTFIO); | ||
| 71 | R0 = W[P0](Z); | ||
| 72 | SSYNC; | ||
| 73 | R0 = R0 | R1; | ||
| 74 | W[P0] = R0.L; | ||
| 75 | SSYNC; | ||
| 76 | R1 = [SP++]; | ||
| 77 | P0 = [SP++]; | ||
| 78 | UNLINK; | ||
| 79 | RTS; | ||
| 80 | .size _led_on, .-_led_on | ||
| 81 | |||
| 82 | /* Set one LED off. Leave other LEDs unchanged. */ | ||
| 83 | |||
| 84 | ENTRY(_led_off) | ||
| 85 | LINK 12; | ||
| 86 | [--SP] = P0; | ||
| 87 | [--SP] = R1; | ||
| 88 | CALL _led_init; | ||
| 89 | R1 = 1; | ||
| 90 | R0 += 5; | ||
| 91 | R1 <<= R0; | ||
| 92 | R1 = ~R1; | ||
| 93 | P0.H = hi(PORTFIO); | ||
| 94 | P0.L = lo(PORTFIO); | ||
| 95 | R0 = W[P0](Z); | ||
| 96 | SSYNC; | ||
| 97 | R0 = R0 & R1; | ||
| 98 | W[P0] = R0.L; | ||
| 99 | SSYNC; | ||
| 100 | R1 = [SP++]; | ||
| 101 | P0 = [SP++]; | ||
| 102 | UNLINK; | ||
| 103 | RTS; | ||
| 104 | .size _led_off, .-_led_off | ||
| 105 | |||
| 106 | /* Toggle one LED. Leave other LEDs unchanged. */ | ||
| 107 | |||
| 108 | ENTRY(_led_toggle) | ||
| 109 | LINK 12; | ||
| 110 | [--SP] = P0; | ||
| 111 | [--SP] = R1; | ||
| 112 | CALL _led_init; | ||
| 113 | R1 = 1; | ||
| 114 | R0 += 5; | ||
| 115 | R1 <<= R0; | ||
| 116 | P0.H = hi(PORTFIO); | ||
| 117 | P0.L = lo(PORTFIO); | ||
| 118 | R0 = W[P0](Z); | ||
| 119 | SSYNC; | ||
| 120 | R0 = R0 ^ R1; | ||
| 121 | W[P0] = R0.L; | ||
| 122 | SSYNC; | ||
| 123 | R1 = [SP++]; | ||
| 124 | P0 = [SP++]; | ||
| 125 | UNLINK; | ||
| 126 | RTS; | ||
| 127 | .size _led_toggle, .-_led_toggle | ||
| 128 | |||
| 129 | /* Display the number using LEDs in binary format. */ | ||
| 130 | |||
| 131 | ENTRY(_led_disp_num) | ||
| 132 | LINK 12; | ||
| 133 | [--SP] = P0; | ||
| 134 | [--SP] = R1; | ||
| 135 | [--SP] = R2; | ||
| 136 | CALL _led_init; | ||
| 137 | R1 = 0x3f(X); | ||
| 138 | R0 = R0 & R1; | ||
| 139 | R2 = 6(X); | ||
| 140 | R0 <<= R2; | ||
| 141 | R1 <<= R2; | ||
| 142 | P0.H = hi(PORTFIO); | ||
| 143 | P0.L = lo(PORTFIO); | ||
| 144 | R2 = W[P0](Z); | ||
| 145 | SSYNC; | ||
| 146 | R1 = ~R1; | ||
| 147 | R2 = R2 & R1; | ||
| 148 | R2 = R2 | R0; | ||
| 149 | W[P0] = R2.L; | ||
| 150 | SSYNC; | ||
| 151 | R2 = [SP++]; | ||
| 152 | R1 = [SP++]; | ||
| 153 | P0 = [SP++]; | ||
| 154 | UNLINK; | ||
| 155 | RTS; | ||
| 156 | .size _led_disp_num, .-_led_disp_num | ||
| 157 | |||
| 158 | /* Toggle the number using LEDs in binary format. */ | ||
| 159 | |||
| 160 | ENTRY(_led_toggle_num) | ||
| 161 | LINK 12; | ||
| 162 | [--SP] = P0; | ||
| 163 | [--SP] = R1; | ||
| 164 | [--SP] = R2; | ||
| 165 | CALL _led_init; | ||
| 166 | R1 = 0x3f(X); | ||
| 167 | R0 = R0 & R1; | ||
| 168 | R1 = 6(X); | ||
| 169 | R0 <<= R1; | ||
| 170 | P0.H = hi(PORTFIO); | ||
| 171 | P0.L = lo(PORTFIO); | ||
| 172 | R1 = W[P0](Z); | ||
| 173 | SSYNC; | ||
| 174 | R1 = R1 ^ R0; | ||
| 175 | W[P0] = R1.L; | ||
| 176 | SSYNC; | ||
| 177 | R2 = [SP++]; | ||
| 178 | R1 = [SP++]; | ||
| 179 | P0 = [SP++]; | ||
| 180 | UNLINK; | ||
| 181 | RTS; | ||
| 182 | .size _led_toggle_num, .-_led_toggle_num | ||
| 183 | |||
diff --git a/arch/blackfin/mach-bf548/boards/Makefile b/arch/blackfin/mach-bf548/boards/Makefile index eed161dd7845..319ef54c4221 100644 --- a/arch/blackfin/mach-bf548/boards/Makefile +++ b/arch/blackfin/mach-bf548/boards/Makefile | |||
| @@ -2,5 +2,5 @@ | |||
| 2 | # arch/blackfin/mach-bf548/boards/Makefile | 2 | # arch/blackfin/mach-bf548/boards/Makefile |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-$(CONFIG_BFIN548_EZKIT) += ezkit.o led.o | 5 | obj-$(CONFIG_BFIN548_EZKIT) += ezkit.o |
| 6 | obj-$(CONFIG_BFIN548_BLUETECHNIX_CM) += cm_bf548.o | 6 | obj-$(CONFIG_BFIN548_BLUETECHNIX_CM) += cm_bf548.o |
diff --git a/arch/blackfin/mach-bf548/boards/cm_bf548.c b/arch/blackfin/mach-bf548/boards/cm_bf548.c index 3b74f96d3590..4f4ae8787edf 100644 --- a/arch/blackfin/mach-bf548/boards/cm_bf548.c +++ b/arch/blackfin/mach-bf548/boards/cm_bf548.c | |||
| @@ -684,7 +684,7 @@ static struct platform_device *cm_bf548_devices[] __initdata = { | |||
| 684 | 684 | ||
| 685 | static int __init cm_bf548_init(void) | 685 | static int __init cm_bf548_init(void) |
| 686 | { | 686 | { |
| 687 | printk(KERN_INFO "%s(): registering device resources\n", __FUNCTION__); | 687 | printk(KERN_INFO "%s(): registering device resources\n", __func__); |
| 688 | platform_add_devices(cm_bf548_devices, ARRAY_SIZE(cm_bf548_devices)); | 688 | platform_add_devices(cm_bf548_devices, ARRAY_SIZE(cm_bf548_devices)); |
| 689 | 689 | ||
| 690 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) | 690 | #if defined(CONFIG_SPI_BFIN) || defined(CONFIG_SPI_BFIN_MODULE) |
diff --git a/arch/blackfin/mach-bf548/boards/led.S b/arch/blackfin/mach-bf548/boards/led.S deleted file mode 100644 index f47daf3770d0..000000000000 --- a/arch/blackfin/mach-bf548/boards/led.S +++ /dev/null | |||
| @@ -1,172 +0,0 @@ | |||
| 1 | /**************************************************** | ||
| 2 | * LED1 ---- PG6 LED2 ---- PG7 * | ||
| 3 | * LED3 ---- PG8 LED4 ---- PG9 * | ||
| 4 | * LED5 ---- PG10 LED6 ---- PG11 * | ||
| 5 | ****************************************************/ | ||
| 6 | |||
| 7 | #include <linux/linkage.h> | ||
| 8 | #include <asm/blackfin.h> | ||
| 9 | |||
| 10 | /* All functions in this file save the registers they uses. | ||
| 11 | So there is no need to save any registers before calling them. */ | ||
| 12 | |||
| 13 | .text; | ||
| 14 | |||
| 15 | /* Initialize LEDs. */ | ||
| 16 | |||
| 17 | ENTRY(_led_init) | ||
| 18 | LINK 0; | ||
| 19 | [--SP] = P0; | ||
| 20 | [--SP] = R0; | ||
| 21 | [--SP] = R1; | ||
| 22 | [--SP] = R2; | ||
| 23 | R1 = (PG6|PG7|PG8|PG9|PG10|PG11)(Z); | ||
| 24 | R2 = ~R1; | ||
| 25 | |||
| 26 | P0.H = hi(PORTG_FER); | ||
| 27 | P0.L = lo(PORTG_FER); | ||
| 28 | R0 = W[P0](Z); | ||
| 29 | SSYNC; | ||
| 30 | R0 = R0 & R2; | ||
| 31 | W[P0] = R0.L; | ||
| 32 | SSYNC; | ||
| 33 | |||
| 34 | P0.H = hi(PORTG_DIR_SET); | ||
| 35 | P0.L = lo(PORTG_DIR_SET); | ||
| 36 | W[P0] = R1.L; | ||
| 37 | SSYNC; | ||
| 38 | |||
| 39 | P0.H = hi(PORTG_INEN); | ||
| 40 | P0.L = lo(PORTG_INEN); | ||
| 41 | R0 = W[P0](Z); | ||
| 42 | SSYNC; | ||
| 43 | R0 = R0 & R2; | ||
| 44 | W[P0] = R0.L; | ||
| 45 | SSYNC; | ||
| 46 | |||
| 47 | R2 = [SP++]; | ||
| 48 | R1 = [SP++]; | ||
| 49 | R0 = [SP++]; | ||
| 50 | P0 = [SP++]; | ||
| 51 | RTS; | ||
| 52 | .size _led_init, .-_led_init | ||
| 53 | |||
| 54 | /* Set one LED on. Leave other LEDs unchanged. | ||
| 55 | It expects the LED number passed through R0. */ | ||
| 56 | |||
| 57 | ENTRY(_led_on) | ||
| 58 | LINK 0; | ||
| 59 | [--SP] = P0; | ||
| 60 | [--SP] = R1; | ||
| 61 | CALL _led_init; | ||
| 62 | R1 = 1; | ||
| 63 | R0 += 5; | ||
| 64 | R1 <<= R0; | ||
| 65 | P0.H = hi(PORTG_SET); | ||
| 66 | P0.L = lo(PORTG_SET); | ||
| 67 | W[P0] = R1.L; | ||
| 68 | SSYNC; | ||
| 69 | R1 = [SP++]; | ||
| 70 | P0 = [SP++]; | ||
| 71 | UNLINK; | ||
| 72 | RTS; | ||
| 73 | .size _led_on, .-_led_on | ||
| 74 | |||
| 75 | /* Set one LED off. Leave other LEDs unchanged. */ | ||
| 76 | |||
| 77 | ENTRY(_led_off) | ||
| 78 | LINK 0; | ||
| 79 | [--SP] = P0; | ||
| 80 | [--SP] = R1; | ||
| 81 | CALL _led_init; | ||
| 82 | R1 = 1; | ||
| 83 | R0 += 5; | ||
| 84 | R1 <<= R0; | ||
| 85 | P0.H = hi(PORTG_CLEAR); | ||
| 86 | P0.L = lo(PORTG_CLEAR); | ||
| 87 | W[P0] = R1.L; | ||
| 88 | SSYNC; | ||
| 89 | R1 = [SP++]; | ||
| 90 | P0 = [SP++]; | ||
| 91 | UNLINK; | ||
| 92 | RTS; | ||
| 93 | .size _led_off, .-_led_off | ||
| 94 | |||
| 95 | /* Toggle one LED. Leave other LEDs unchanged. */ | ||
| 96 | |||
| 97 | ENTRY(_led_toggle) | ||
| 98 | LINK 0; | ||
| 99 | [--SP] = P0; | ||
| 100 | [--SP] = R1; | ||
| 101 | CALL _led_init; | ||
| 102 | R1 = 1; | ||
| 103 | R0 += 5; | ||
| 104 | R1 <<= R0; | ||
| 105 | P0.H = hi(PORTG); | ||
| 106 | P0.L = lo(PORTG); | ||
| 107 | R0 = W[P0](Z); | ||
| 108 | SSYNC; | ||
| 109 | R0 = R0 ^ R1; | ||
| 110 | W[P0] = R0.L; | ||
| 111 | SSYNC; | ||
| 112 | R1 = [SP++]; | ||
| 113 | P0 = [SP++]; | ||
| 114 | UNLINK; | ||
| 115 | RTS; | ||
| 116 | .size _led_toggle, .-_led_toggle | ||
| 117 | |||
| 118 | /* Display the number using LEDs in binary format. */ | ||
| 119 | |||
| 120 | ENTRY(_led_disp_num) | ||
| 121 | LINK 0; | ||
| 122 | [--SP] = P0; | ||
| 123 | [--SP] = R1; | ||
| 124 | [--SP] = R2; | ||
| 125 | CALL _led_init; | ||
| 126 | R1 = 0x3f(X); | ||
| 127 | R0 = R0 & R1; | ||
| 128 | R2 = 6(X); | ||
| 129 | R0 <<= R2; | ||
| 130 | R1 <<= R2; | ||
| 131 | P0.H = hi(PORTG); | ||
| 132 | P0.L = lo(PORTG); | ||
| 133 | R2 = W[P0](Z); | ||
| 134 | SSYNC; | ||
| 135 | R1 = ~R1; | ||
| 136 | R2 = R2 & R1; | ||
| 137 | R2 = R2 | R0; | ||
| 138 | W[P0] = R2.L; | ||
| 139 | SSYNC; | ||
| 140 | R2 = [SP++]; | ||
| 141 | R1 = [SP++]; | ||
| 142 | P0 = [SP++]; | ||
| 143 | UNLINK; | ||
| 144 | RTS; | ||
| 145 | .size _led_disp_num, .-_led_disp_num | ||
| 146 | |||
| 147 | /* Toggle the number using LEDs in binary format. */ | ||
| 148 | |||
| 149 | ENTRY(_led_toggle_num) | ||
| 150 | LINK 0; | ||
| 151 | [--SP] = P0; | ||
| 152 | [--SP] = R1; | ||
| 153 | [--SP] = R2; | ||
| 154 | CALL _led_init; | ||
| 155 | R1 = 0x3f(X); | ||
| 156 | R0 = R0 & R1; | ||
| 157 | R1 = 6(X); | ||
| 158 | R0 <<= R1; | ||
| 159 | P0.H = hi(PORTG); | ||
| 160 | P0.L = lo(PORTG); | ||
| 161 | R1 = W[P0](Z); | ||
| 162 | SSYNC; | ||
| 163 | R1 = R1 ^ R0; | ||
| 164 | W[P0] = R1.L; | ||
| 165 | SSYNC; | ||
| 166 | R2 = [SP++]; | ||
| 167 | R1 = [SP++]; | ||
| 168 | P0 = [SP++]; | ||
| 169 | UNLINK; | ||
| 170 | RTS; | ||
| 171 | .size _led_toggle_num, .-_led_toggle_num | ||
| 172 | |||
diff --git a/arch/frv/kernel/cmode.S b/arch/frv/kernel/cmode.S index 81ba28ad2207..53deeb5d7e87 100644 --- a/arch/frv/kernel/cmode.S +++ b/arch/frv/kernel/cmode.S | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* cmode.S: clock mode management | 1 | /* cmode.S: clock mode management |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. |
| 4 | * Written by David Woodhouse (dwmw2@redhat.com) | 4 | * Written by David Woodhouse (dwmw2@infradead.org) |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
diff --git a/arch/frv/kernel/sleep.S b/arch/frv/kernel/sleep.S index c9b2d51ab9ad..f67bf73cd2cc 100644 --- a/arch/frv/kernel/sleep.S +++ b/arch/frv/kernel/sleep.S | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* sleep.S: power saving mode entry | 1 | /* sleep.S: power saving mode entry |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. |
| 4 | * Written by David Woodhouse (dwmw2@redhat.com) | 4 | * Written by David Woodhouse (dwmw2@infradead.org) |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
diff --git a/arch/frv/mb93090-mb00/pci-dma-nommu.c b/arch/frv/mb93090-mb00/pci-dma-nommu.c index 4985466b1a7c..64ee58d748be 100644 --- a/arch/frv/mb93090-mb00/pci-dma-nommu.c +++ b/arch/frv/mb93090-mb00/pci-dma-nommu.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* pci-dma-nommu.c: Dynamic DMA mapping support for the FRV | 1 | /* pci-dma-nommu.c: Dynamic DMA mapping support for the FRV |
| 2 | * | 2 | * |
| 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. | 3 | * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved. |
| 4 | * Written by David Woodhouse (dwmw2@redhat.com) | 4 | * Written by David Woodhouse (dwmw2@infradead.org) |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or | 6 | * This program is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU General Public License | 7 | * modify it under the terms of the GNU General Public License |
diff --git a/arch/ia64/kernel/ivt.S b/arch/ia64/kernel/ivt.S index 6678c49daba3..80b44ea052d7 100644 --- a/arch/ia64/kernel/ivt.S +++ b/arch/ia64/kernel/ivt.S | |||
| @@ -1076,48 +1076,6 @@ END(ia64_syscall_setup) | |||
| 1076 | DBG_FAULT(15) | 1076 | DBG_FAULT(15) |
| 1077 | FAULT(15) | 1077 | FAULT(15) |
| 1078 | 1078 | ||
| 1079 | /* | ||
| 1080 | * Squatting in this space ... | ||
| 1081 | * | ||
| 1082 | * This special case dispatcher for illegal operation faults allows preserved | ||
| 1083 | * registers to be modified through a callback function (asm only) that is handed | ||
| 1084 | * back from the fault handler in r8. Up to three arguments can be passed to the | ||
| 1085 | * callback function by returning an aggregate with the callback as its first | ||
| 1086 | * element, followed by the arguments. | ||
| 1087 | */ | ||
| 1088 | ENTRY(dispatch_illegal_op_fault) | ||
| 1089 | .prologue | ||
| 1090 | .body | ||
| 1091 | SAVE_MIN_WITH_COVER | ||
| 1092 | ssm psr.ic | PSR_DEFAULT_BITS | ||
| 1093 | ;; | ||
| 1094 | srlz.i // guarantee that interruption collection is on | ||
| 1095 | ;; | ||
| 1096 | (p15) ssm psr.i // restore psr.i | ||
| 1097 | adds r3=8,r2 // set up second base pointer for SAVE_REST | ||
| 1098 | ;; | ||
| 1099 | alloc r14=ar.pfs,0,0,1,0 // must be first in insn group | ||
| 1100 | mov out0=ar.ec | ||
| 1101 | ;; | ||
| 1102 | SAVE_REST | ||
| 1103 | PT_REGS_UNWIND_INFO(0) | ||
| 1104 | ;; | ||
| 1105 | br.call.sptk.many rp=ia64_illegal_op_fault | ||
| 1106 | .ret0: ;; | ||
| 1107 | alloc r14=ar.pfs,0,0,3,0 // must be first in insn group | ||
| 1108 | mov out0=r9 | ||
| 1109 | mov out1=r10 | ||
| 1110 | mov out2=r11 | ||
| 1111 | movl r15=ia64_leave_kernel | ||
| 1112 | ;; | ||
| 1113 | mov rp=r15 | ||
| 1114 | mov b6=r8 | ||
| 1115 | ;; | ||
| 1116 | cmp.ne p6,p0=0,r8 | ||
| 1117 | (p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel | ||
| 1118 | br.sptk.many ia64_leave_kernel | ||
| 1119 | END(dispatch_illegal_op_fault) | ||
| 1120 | |||
| 1121 | .org ia64_ivt+0x4000 | 1079 | .org ia64_ivt+0x4000 |
| 1122 | ///////////////////////////////////////////////////////////////////////////////////////// | 1080 | ///////////////////////////////////////////////////////////////////////////////////////// |
| 1123 | // 0x4000 Entry 16 (size 64 bundles) Reserved | 1081 | // 0x4000 Entry 16 (size 64 bundles) Reserved |
| @@ -1715,6 +1673,48 @@ END(ia32_interrupt) | |||
| 1715 | DBG_FAULT(67) | 1673 | DBG_FAULT(67) |
| 1716 | FAULT(67) | 1674 | FAULT(67) |
| 1717 | 1675 | ||
| 1676 | /* | ||
| 1677 | * Squatting in this space ... | ||
| 1678 | * | ||
| 1679 | * This special case dispatcher for illegal operation faults allows preserved | ||
| 1680 | * registers to be modified through a callback function (asm only) that is handed | ||
| 1681 | * back from the fault handler in r8. Up to three arguments can be passed to the | ||
| 1682 | * callback function by returning an aggregate with the callback as its first | ||
| 1683 | * element, followed by the arguments. | ||
| 1684 | */ | ||
| 1685 | ENTRY(dispatch_illegal_op_fault) | ||
| 1686 | .prologue | ||
| 1687 | .body | ||
| 1688 | SAVE_MIN_WITH_COVER | ||
| 1689 | ssm psr.ic | PSR_DEFAULT_BITS | ||
| 1690 | ;; | ||
| 1691 | srlz.i // guarantee that interruption collection is on | ||
| 1692 | ;; | ||
| 1693 | (p15) ssm psr.i // restore psr.i | ||
| 1694 | adds r3=8,r2 // set up second base pointer for SAVE_REST | ||
| 1695 | ;; | ||
| 1696 | alloc r14=ar.pfs,0,0,1,0 // must be first in insn group | ||
| 1697 | mov out0=ar.ec | ||
| 1698 | ;; | ||
| 1699 | SAVE_REST | ||
| 1700 | PT_REGS_UNWIND_INFO(0) | ||
| 1701 | ;; | ||
| 1702 | br.call.sptk.many rp=ia64_illegal_op_fault | ||
| 1703 | .ret0: ;; | ||
| 1704 | alloc r14=ar.pfs,0,0,3,0 // must be first in insn group | ||
| 1705 | mov out0=r9 | ||
| 1706 | mov out1=r10 | ||
| 1707 | mov out2=r11 | ||
| 1708 | movl r15=ia64_leave_kernel | ||
| 1709 | ;; | ||
| 1710 | mov rp=r15 | ||
| 1711 | mov b6=r8 | ||
| 1712 | ;; | ||
| 1713 | cmp.ne p6,p0=0,r8 | ||
| 1714 | (p6) br.call.dpnt.many b6=b6 // call returns to ia64_leave_kernel | ||
| 1715 | br.sptk.many ia64_leave_kernel | ||
| 1716 | END(dispatch_illegal_op_fault) | ||
| 1717 | |||
| 1718 | #ifdef CONFIG_IA32_SUPPORT | 1718 | #ifdef CONFIG_IA32_SUPPORT |
| 1719 | 1719 | ||
| 1720 | /* | 1720 | /* |
diff --git a/arch/ia64/kernel/minstate.h b/arch/ia64/kernel/minstate.h index 7c548ac52bbc..74b6d670aaef 100644 --- a/arch/ia64/kernel/minstate.h +++ b/arch/ia64/kernel/minstate.h | |||
| @@ -15,6 +15,9 @@ | |||
| 15 | #define ACCOUNT_SYS_ENTER | 15 | #define ACCOUNT_SYS_ENTER |
| 16 | #endif | 16 | #endif |
| 17 | 17 | ||
| 18 | .section ".data.patch.rse", "a" | ||
| 19 | .previous | ||
| 20 | |||
| 18 | /* | 21 | /* |
| 19 | * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves | 22 | * DO_SAVE_MIN switches to the kernel stacks (if necessary) and saves |
| 20 | * the minimum state necessary that allows us to turn psr.ic back | 23 | * the minimum state necessary that allows us to turn psr.ic back |
| @@ -40,7 +43,7 @@ | |||
| 40 | * Note that psr.ic is NOT turned on by this macro. This is so that | 43 | * Note that psr.ic is NOT turned on by this macro. This is so that |
| 41 | * we can pass interruption state as arguments to a handler. | 44 | * we can pass interruption state as arguments to a handler. |
| 42 | */ | 45 | */ |
| 43 | #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA) \ | 46 | #define DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA,WORKAROUND) \ |
| 44 | mov r16=IA64_KR(CURRENT); /* M */ \ | 47 | mov r16=IA64_KR(CURRENT); /* M */ \ |
| 45 | mov r27=ar.rsc; /* M */ \ | 48 | mov r27=ar.rsc; /* M */ \ |
| 46 | mov r20=r1; /* A */ \ | 49 | mov r20=r1; /* A */ \ |
| @@ -87,6 +90,7 @@ | |||
| 87 | tbit.nz p15,p0=r29,IA64_PSR_I_BIT; \ | 90 | tbit.nz p15,p0=r29,IA64_PSR_I_BIT; \ |
| 88 | mov r29=b0 \ | 91 | mov r29=b0 \ |
| 89 | ;; \ | 92 | ;; \ |
| 93 | WORKAROUND; \ | ||
| 90 | adds r16=PT(R8),r1; /* initialize first base pointer */ \ | 94 | adds r16=PT(R8),r1; /* initialize first base pointer */ \ |
| 91 | adds r17=PT(R9),r1; /* initialize second base pointer */ \ | 95 | adds r17=PT(R9),r1; /* initialize second base pointer */ \ |
| 92 | (pKStk) mov r18=r0; /* make sure r18 isn't NaT */ \ | 96 | (pKStk) mov r18=r0; /* make sure r18 isn't NaT */ \ |
| @@ -206,6 +210,40 @@ | |||
| 206 | st8 [r25]=r10; /* ar.ssd */ \ | 210 | st8 [r25]=r10; /* ar.ssd */ \ |
| 207 | ;; | 211 | ;; |
| 208 | 212 | ||
| 209 | #define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs,) | 213 | #define RSE_WORKAROUND \ |
| 210 | #define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19) | 214 | (pUStk) extr.u r17=r18,3,6; \ |
| 211 | #define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, ) | 215 | (pUStk) sub r16=r18,r22; \ |
| 216 | [1:](pKStk) br.cond.sptk.many 1f; \ | ||
| 217 | .xdata4 ".data.patch.rse",1b-. \ | ||
| 218 | ;; \ | ||
| 219 | cmp.ge p6,p7 = 33,r17; \ | ||
| 220 | ;; \ | ||
| 221 | (p6) mov r17=0x310; \ | ||
| 222 | (p7) mov r17=0x308; \ | ||
| 223 | ;; \ | ||
| 224 | cmp.leu p1,p0=r16,r17; \ | ||
| 225 | (p1) br.cond.sptk.many 1f; \ | ||
| 226 | dep.z r17=r26,0,62; \ | ||
| 227 | movl r16=2f; \ | ||
| 228 | ;; \ | ||
| 229 | mov ar.pfs=r17; \ | ||
| 230 | dep r27=r0,r27,16,14; \ | ||
| 231 | mov b0=r16; \ | ||
| 232 | ;; \ | ||
| 233 | br.ret.sptk b0; \ | ||
| 234 | ;; \ | ||
| 235 | 2: \ | ||
| 236 | mov ar.rsc=r0 \ | ||
| 237 | ;; \ | ||
| 238 | flushrs; \ | ||
| 239 | ;; \ | ||
| 240 | mov ar.bspstore=r22 \ | ||
| 241 | ;; \ | ||
| 242 | mov r18=ar.bsp; \ | ||
| 243 | ;; \ | ||
| 244 | 1: \ | ||
| 245 | .pred.rel "mutex", pKStk, pUStk | ||
| 246 | |||
| 247 | #define SAVE_MIN_WITH_COVER DO_SAVE_MIN(cover, mov r30=cr.ifs, , RSE_WORKAROUND) | ||
| 248 | #define SAVE_MIN_WITH_COVER_R19 DO_SAVE_MIN(cover, mov r30=cr.ifs, mov r15=r19, RSE_WORKAROUND) | ||
| 249 | #define SAVE_MIN DO_SAVE_MIN( , mov r30=r0, , ) | ||
diff --git a/arch/ia64/kernel/patch.c b/arch/ia64/kernel/patch.c index e0dca8743dbb..b83b2c516008 100644 --- a/arch/ia64/kernel/patch.c +++ b/arch/ia64/kernel/patch.c | |||
| @@ -115,6 +115,29 @@ ia64_patch_vtop (unsigned long start, unsigned long end) | |||
| 115 | ia64_srlz_i(); | 115 | ia64_srlz_i(); |
| 116 | } | 116 | } |
| 117 | 117 | ||
| 118 | /* | ||
| 119 | * Disable the RSE workaround by turning the conditional branch | ||
| 120 | * that we tagged in each place the workaround was used into an | ||
| 121 | * unconditional branch. | ||
| 122 | */ | ||
| 123 | void __init | ||
| 124 | ia64_patch_rse (unsigned long start, unsigned long end) | ||
| 125 | { | ||
| 126 | s32 *offp = (s32 *) start; | ||
| 127 | u64 ip, *b; | ||
| 128 | |||
| 129 | while (offp < (s32 *) end) { | ||
| 130 | ip = (u64) offp + *offp; | ||
| 131 | |||
| 132 | b = (u64 *)(ip & -16); | ||
| 133 | b[1] &= ~0xf800000L; | ||
| 134 | ia64_fc((void *) ip); | ||
| 135 | ++offp; | ||
| 136 | } | ||
| 137 | ia64_sync_i(); | ||
| 138 | ia64_srlz_i(); | ||
| 139 | } | ||
| 140 | |||
| 118 | void __init | 141 | void __init |
| 119 | ia64_patch_mckinley_e9 (unsigned long start, unsigned long end) | 142 | ia64_patch_mckinley_e9 (unsigned long start, unsigned long end) |
| 120 | { | 143 | { |
diff --git a/arch/ia64/kernel/setup.c b/arch/ia64/kernel/setup.c index e9596cd0cdab..f48a809c686d 100644 --- a/arch/ia64/kernel/setup.c +++ b/arch/ia64/kernel/setup.c | |||
| @@ -560,6 +560,17 @@ setup_arch (char **cmdline_p) | |||
| 560 | /* process SAL system table: */ | 560 | /* process SAL system table: */ |
| 561 | ia64_sal_init(__va(efi.sal_systab)); | 561 | ia64_sal_init(__va(efi.sal_systab)); |
| 562 | 562 | ||
| 563 | #ifdef CONFIG_ITANIUM | ||
| 564 | ia64_patch_rse((u64) __start___rse_patchlist, (u64) __end___rse_patchlist); | ||
| 565 | #else | ||
| 566 | { | ||
| 567 | u64 num_phys_stacked; | ||
| 568 | |||
| 569 | if (ia64_pal_rse_info(&num_phys_stacked, 0) == 0 && num_phys_stacked > 96) | ||
| 570 | ia64_patch_rse((u64) __start___rse_patchlist, (u64) __end___rse_patchlist); | ||
| 571 | } | ||
| 572 | #endif | ||
| 573 | |||
| 563 | #ifdef CONFIG_SMP | 574 | #ifdef CONFIG_SMP |
| 564 | cpu_physical_id(0) = hard_smp_processor_id(); | 575 | cpu_physical_id(0) = hard_smp_processor_id(); |
| 565 | #endif | 576 | #endif |
diff --git a/arch/ia64/kernel/vmlinux.lds.S b/arch/ia64/kernel/vmlinux.lds.S index 80622acc95de..5929ab10a289 100644 --- a/arch/ia64/kernel/vmlinux.lds.S +++ b/arch/ia64/kernel/vmlinux.lds.S | |||
| @@ -156,6 +156,13 @@ SECTIONS | |||
| 156 | __end___vtop_patchlist = .; | 156 | __end___vtop_patchlist = .; |
| 157 | } | 157 | } |
| 158 | 158 | ||
| 159 | .data.patch.rse : AT(ADDR(.data.patch.rse) - LOAD_OFFSET) | ||
| 160 | { | ||
| 161 | __start___rse_patchlist = .; | ||
| 162 | *(.data.patch.rse) | ||
| 163 | __end___rse_patchlist = .; | ||
| 164 | } | ||
| 165 | |||
| 159 | .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) | 166 | .data.patch.mckinley_e9 : AT(ADDR(.data.patch.mckinley_e9) - LOAD_OFFSET) |
| 160 | { | 167 | { |
| 161 | __start___mckinley_e9_bundles = .; | 168 | __start___mckinley_e9_bundles = .; |
diff --git a/arch/m68k/configs/amiga_defconfig b/arch/m68k/configs/amiga_defconfig index dca50da9ffd0..8e2a0f5faf53 100644 --- a/arch/m68k/configs/amiga_defconfig +++ b/arch/m68k/configs/amiga_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:41 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/apollo_defconfig b/arch/m68k/configs/apollo_defconfig index c3cd5b749d2c..e2d511e2a1d1 100644 --- a/arch/m68k/configs/apollo_defconfig +++ b/arch/m68k/configs/apollo_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:42 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/atari_defconfig b/arch/m68k/configs/atari_defconfig index 073ae4bbe264..6e20d656adaf 100644 --- a/arch/m68k/configs/atari_defconfig +++ b/arch/m68k/configs/atari_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:43 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/bvme6000_defconfig b/arch/m68k/configs/bvme6000_defconfig index 0789ede2e9ee..a0a9b30bb502 100644 --- a/arch/m68k/configs/bvme6000_defconfig +++ b/arch/m68k/configs/bvme6000_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:45 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/hp300_defconfig b/arch/m68k/configs/hp300_defconfig index 3e140bf49b22..6778041de262 100644 --- a/arch/m68k/configs/hp300_defconfig +++ b/arch/m68k/configs/hp300_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:46 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/mac_defconfig b/arch/m68k/configs/mac_defconfig index ba3a91792cbf..7cd375740348 100644 --- a/arch/m68k/configs/mac_defconfig +++ b/arch/m68k/configs/mac_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:47 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/multi_defconfig b/arch/m68k/configs/multi_defconfig index 4d23f99227f9..0747fa3984df 100644 --- a/arch/m68k/configs/multi_defconfig +++ b/arch/m68k/configs/multi_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:42:31 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/mvme147_defconfig b/arch/m68k/configs/mvme147_defconfig index 188847fed824..e7a8246840b5 100644 --- a/arch/m68k/configs/mvme147_defconfig +++ b/arch/m68k/configs/mvme147_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:49 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/mvme16x_defconfig b/arch/m68k/configs/mvme16x_defconfig index 983e53d990c8..ab536eb172bb 100644 --- a/arch/m68k/configs/mvme16x_defconfig +++ b/arch/m68k/configs/mvme16x_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:50 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/q40_defconfig b/arch/m68k/configs/q40_defconfig index 7707f3fb0a70..e05be687b500 100644 --- a/arch/m68k/configs/q40_defconfig +++ b/arch/m68k/configs/q40_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:51 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/sun3_defconfig b/arch/m68k/configs/sun3_defconfig index a765f6f15d2c..296340d2b315 100644 --- a/arch/m68k/configs/sun3_defconfig +++ b/arch/m68k/configs/sun3_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:53 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/m68k/configs/sun3x_defconfig b/arch/m68k/configs/sun3x_defconfig index 431513937498..8d3a416c92bf 100644 --- a/arch/m68k/configs/sun3x_defconfig +++ b/arch/m68k/configs/sun3x_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.26-rc2 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Sun May 18 14:44:54 2008 | 4 | # Wed May 28 22:47:35 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_M68K=y | 6 | CONFIG_M68K=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -59,7 +59,7 @@ CONFIG_HOTPLUG=y | |||
| 59 | CONFIG_PRINTK=y | 59 | CONFIG_PRINTK=y |
| 60 | CONFIG_BUG=y | 60 | CONFIG_BUG=y |
| 61 | CONFIG_ELF_CORE=y | 61 | CONFIG_ELF_CORE=y |
| 62 | # CONFIG_COMPAT_BRK is not set | 62 | CONFIG_COMPAT_BRK=y |
| 63 | CONFIG_BASE_FULL=y | 63 | CONFIG_BASE_FULL=y |
| 64 | CONFIG_FUTEX=y | 64 | CONFIG_FUTEX=y |
| 65 | CONFIG_ANON_INODES=y | 65 | CONFIG_ANON_INODES=y |
diff --git a/arch/mips/au1000/common/clocks.c b/arch/mips/au1000/common/clocks.c index 46f8ee0e2657..043429d17c5f 100644 --- a/arch/mips/au1000/common/clocks.c +++ b/arch/mips/au1000/common/clocks.c | |||
| @@ -45,6 +45,7 @@ unsigned int get_au1x00_speed(void) | |||
| 45 | { | 45 | { |
| 46 | return au1x00_clock; | 46 | return au1x00_clock; |
| 47 | } | 47 | } |
| 48 | EXPORT_SYMBOL(get_au1x00_speed); | ||
| 48 | 49 | ||
| 49 | /* | 50 | /* |
| 50 | * The UART baud base is not known at compile time ... if | 51 | * The UART baud base is not known at compile time ... if |
diff --git a/arch/mips/au1000/common/dbdma.c b/arch/mips/au1000/common/dbdma.c index 42d555236de1..601ee9180ee4 100644 --- a/arch/mips/au1000/common/dbdma.c +++ b/arch/mips/au1000/common/dbdma.c | |||
| @@ -216,6 +216,17 @@ u32 au1xxx_ddma_add_device(dbdev_tab_t *dev) | |||
| 216 | } | 216 | } |
| 217 | EXPORT_SYMBOL(au1xxx_ddma_add_device); | 217 | EXPORT_SYMBOL(au1xxx_ddma_add_device); |
| 218 | 218 | ||
| 219 | void au1xxx_ddma_del_device(u32 devid) | ||
| 220 | { | ||
| 221 | dbdev_tab_t *p = find_dbdev_id(devid); | ||
| 222 | |||
| 223 | if (p != NULL) { | ||
| 224 | memset(p, 0, sizeof(dbdev_tab_t)); | ||
| 225 | p->dev_id = ~0; | ||
| 226 | } | ||
| 227 | } | ||
| 228 | EXPORT_SYMBOL(au1xxx_ddma_del_device); | ||
| 229 | |||
| 219 | /* Allocate a channel and return a non-zero descriptor if successful. */ | 230 | /* Allocate a channel and return a non-zero descriptor if successful. */ |
| 220 | u32 au1xxx_dbdma_chan_alloc(u32 srcid, u32 destid, | 231 | u32 au1xxx_dbdma_chan_alloc(u32 srcid, u32 destid, |
| 221 | void (*callback)(int, void *), void *callparam) | 232 | void (*callback)(int, void *), void *callparam) |
diff --git a/arch/mips/kernel/Makefile b/arch/mips/kernel/Makefile index cc0244036aec..65e46a6d4178 100644 --- a/arch/mips/kernel/Makefile +++ b/arch/mips/kernel/Makefile | |||
| @@ -30,7 +30,6 @@ obj-$(CONFIG_CPU_LOONGSON2) += r4k_fpu.o r4k_switch.o | |||
| 30 | obj-$(CONFIG_CPU_MIPS32) += r4k_fpu.o r4k_switch.o | 30 | obj-$(CONFIG_CPU_MIPS32) += r4k_fpu.o r4k_switch.o |
| 31 | obj-$(CONFIG_CPU_MIPS64) += r4k_fpu.o r4k_switch.o | 31 | obj-$(CONFIG_CPU_MIPS64) += r4k_fpu.o r4k_switch.o |
| 32 | obj-$(CONFIG_CPU_R3000) += r2300_fpu.o r2300_switch.o | 32 | obj-$(CONFIG_CPU_R3000) += r2300_fpu.o r2300_switch.o |
| 33 | obj-$(CONFIG_CPU_R4000) += r4k_fpu.o r4k_switch.o | ||
| 34 | obj-$(CONFIG_CPU_R4300) += r4k_fpu.o r4k_switch.o | 33 | obj-$(CONFIG_CPU_R4300) += r4k_fpu.o r4k_switch.o |
| 35 | obj-$(CONFIG_CPU_R4X00) += r4k_fpu.o r4k_switch.o | 34 | obj-$(CONFIG_CPU_R4X00) += r4k_fpu.o r4k_switch.o |
| 36 | obj-$(CONFIG_CPU_R5000) += r4k_fpu.o r4k_switch.o | 35 | obj-$(CONFIG_CPU_R5000) += r4k_fpu.o r4k_switch.o |
diff --git a/arch/mips/kernel/traps.c b/arch/mips/kernel/traps.c index cb8b0e2c7954..f9165d1a17bf 100644 --- a/arch/mips/kernel/traps.c +++ b/arch/mips/kernel/traps.c | |||
| @@ -88,15 +88,17 @@ static void show_raw_backtrace(unsigned long reg29) | |||
| 88 | #ifdef CONFIG_KALLSYMS | 88 | #ifdef CONFIG_KALLSYMS |
| 89 | printk("\n"); | 89 | printk("\n"); |
| 90 | #endif | 90 | #endif |
| 91 | #define IS_KVA01(a) ((((unsigned int)a) & 0xc0000000) == 0x80000000) | 91 | while (!kstack_end(sp)) { |
| 92 | if (IS_KVA01(sp)) { | 92 | unsigned long __user *p = |
| 93 | while (!kstack_end(sp)) { | 93 | (unsigned long __user *)(unsigned long)sp++; |
| 94 | addr = *sp++; | 94 | if (__get_user(addr, p)) { |
| 95 | if (__kernel_text_address(addr)) | 95 | printk(" (Bad stack address)"); |
| 96 | print_ip_sym(addr); | 96 | break; |
| 97 | } | 97 | } |
| 98 | printk("\n"); | 98 | if (__kernel_text_address(addr)) |
| 99 | print_ip_sym(addr); | ||
| 99 | } | 100 | } |
| 101 | printk("\n"); | ||
| 100 | } | 102 | } |
| 101 | 103 | ||
| 102 | #ifdef CONFIG_KALLSYMS | 104 | #ifdef CONFIG_KALLSYMS |
diff --git a/arch/mips/mips-boards/generic/time.c b/arch/mips/mips-boards/generic/time.c index 008fd82b5840..fe2cac1b4514 100644 --- a/arch/mips/mips-boards/generic/time.c +++ b/arch/mips/mips-boards/generic/time.c | |||
| @@ -58,27 +58,8 @@ static int mips_cpu_timer_irq; | |||
| 58 | static int mips_cpu_perf_irq; | 58 | static int mips_cpu_perf_irq; |
| 59 | extern int cp0_perfcount_irq; | 59 | extern int cp0_perfcount_irq; |
| 60 | 60 | ||
| 61 | DEFINE_PER_CPU(unsigned int, tickcount); | ||
| 62 | #define tickcount_this_cpu __get_cpu_var(tickcount) | ||
| 63 | static unsigned long ledbitmask; | ||
| 64 | |||
| 65 | static void mips_timer_dispatch(void) | 61 | static void mips_timer_dispatch(void) |
| 66 | { | 62 | { |
| 67 | #if defined(CONFIG_MIPS_MALTA) || defined(CONFIG_MIPS_ATLAS) | ||
| 68 | /* | ||
| 69 | * Yes, this is very tacky, won't work as expected with SMTC and | ||
| 70 | * dyntick will break it, | ||
| 71 | * but it gives me a nice warm feeling during debug | ||
| 72 | */ | ||
| 73 | #define LEDBAR 0xbf000408 | ||
| 74 | if (tickcount_this_cpu++ >= HZ) { | ||
| 75 | tickcount_this_cpu = 0; | ||
| 76 | change_bit(smp_processor_id(), &ledbitmask); | ||
| 77 | smp_wmb(); /* Make sure every one else sees the change */ | ||
| 78 | /* This will pick up any recent changes made by other CPU's */ | ||
| 79 | *(unsigned int *)LEDBAR = ledbitmask; | ||
| 80 | } | ||
| 81 | #endif | ||
| 82 | do_IRQ(mips_cpu_timer_irq); | 63 | do_IRQ(mips_cpu_timer_irq); |
| 83 | } | 64 | } |
| 84 | 65 | ||
diff --git a/arch/mips/mm/page.c b/arch/mips/mm/page.c index d827d6144369..cab81f42eee5 100644 --- a/arch/mips/mm/page.c +++ b/arch/mips/mm/page.c | |||
| @@ -310,8 +310,8 @@ void __cpuinit build_clear_page(void) | |||
| 310 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) | 310 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) |
| 311 | uasm_i_lui(&buf, AT, 0xa000); | 311 | uasm_i_lui(&buf, AT, 0xa000); |
| 312 | 312 | ||
| 313 | off = min(8, pref_bias_clear_store / cache_line_size) * | 313 | off = cache_line_size ? min(8, pref_bias_clear_store / cache_line_size) |
| 314 | cache_line_size; | 314 | * cache_line_size : 0; |
| 315 | while (off) { | 315 | while (off) { |
| 316 | build_clear_pref(&buf, -off); | 316 | build_clear_pref(&buf, -off); |
| 317 | off -= cache_line_size; | 317 | off -= cache_line_size; |
| @@ -454,12 +454,14 @@ void __cpuinit build_copy_page(void) | |||
| 454 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) | 454 | if (R4600_V2_HIT_CACHEOP_WAR && cpu_is_r4600_v2_x()) |
| 455 | uasm_i_lui(&buf, AT, 0xa000); | 455 | uasm_i_lui(&buf, AT, 0xa000); |
| 456 | 456 | ||
| 457 | off = min(8, pref_bias_copy_load / cache_line_size) * cache_line_size; | 457 | off = cache_line_size ? min(8, pref_bias_copy_load / cache_line_size) * |
| 458 | cache_line_size : 0; | ||
| 458 | while (off) { | 459 | while (off) { |
| 459 | build_copy_load_pref(&buf, -off); | 460 | build_copy_load_pref(&buf, -off); |
| 460 | off -= cache_line_size; | 461 | off -= cache_line_size; |
| 461 | } | 462 | } |
| 462 | off = min(8, pref_bias_copy_store / cache_line_size) * cache_line_size; | 463 | off = cache_line_size ? min(8, pref_bias_copy_load / cache_line_size) * |
| 464 | cache_line_size : 0; | ||
| 463 | while (off) { | 465 | while (off) { |
| 464 | build_copy_store_pref(&buf, -off); | 466 | build_copy_store_pref(&buf, -off); |
| 465 | off -= cache_line_size; | 467 | off -= cache_line_size; |
diff --git a/arch/mips/mm/tlbex.c b/arch/mips/mm/tlbex.c index 382738ca8a0b..76da73a5ab3c 100644 --- a/arch/mips/mm/tlbex.c +++ b/arch/mips/mm/tlbex.c | |||
| @@ -224,8 +224,9 @@ static u32 final_handler[64] __cpuinitdata; | |||
| 224 | static void __cpuinit __maybe_unused build_tlb_probe_entry(u32 **p) | 224 | static void __cpuinit __maybe_unused build_tlb_probe_entry(u32 **p) |
| 225 | { | 225 | { |
| 226 | switch (current_cpu_type()) { | 226 | switch (current_cpu_type()) { |
| 227 | /* Found by experiment: R4600 v2.0 needs this, too. */ | 227 | /* Found by experiment: R4600 v2.0/R4700 needs this, too. */ |
| 228 | case CPU_R4600: | 228 | case CPU_R4600: |
| 229 | case CPU_R4700: | ||
| 229 | case CPU_R5000: | 230 | case CPU_R5000: |
| 230 | case CPU_R5000A: | 231 | case CPU_R5000A: |
| 231 | case CPU_NEVADA: | 232 | case CPU_NEVADA: |
diff --git a/arch/mips/pci/ops-bridge.c b/arch/mips/pci/ops-bridge.c index 1fa09929cd7a..b46b3e211775 100644 --- a/arch/mips/pci/ops-bridge.c +++ b/arch/mips/pci/ops-bridge.c | |||
| @@ -14,6 +14,22 @@ | |||
| 14 | #include <asm/sn/sn0/hub.h> | 14 | #include <asm/sn/sn0/hub.h> |
| 15 | 15 | ||
| 16 | /* | 16 | /* |
| 17 | * Most of the IOC3 PCI config register aren't present | ||
| 18 | * we emulate what is needed for a normal PCI enumeration | ||
| 19 | */ | ||
| 20 | static u32 emulate_ioc3_cfg(int where, int size) | ||
| 21 | { | ||
| 22 | if (size == 1 && where == 0x3d) | ||
| 23 | return 0x01; | ||
| 24 | else if (size == 2 && where == 0x3c) | ||
| 25 | return 0x0100; | ||
| 26 | else if (size == 4 && where == 0x3c) | ||
| 27 | return 0x00000100; | ||
| 28 | |||
| 29 | return 0; | ||
| 30 | } | ||
| 31 | |||
| 32 | /* | ||
| 17 | * The Bridge ASIC supports both type 0 and type 1 access. Type 1 is | 33 | * The Bridge ASIC supports both type 0 and type 1 access. Type 1 is |
| 18 | * not really documented, so right now I can't write code which uses it. | 34 | * not really documented, so right now I can't write code which uses it. |
| 19 | * Therefore we use type 0 accesses for now even though they won't work | 35 | * Therefore we use type 0 accesses for now even though they won't work |
| @@ -64,7 +80,7 @@ oh_my_gawd: | |||
| 64 | * generic PCI code a chance to look at the wrong register. | 80 | * generic PCI code a chance to look at the wrong register. |
| 65 | */ | 81 | */ |
| 66 | if ((where >= 0x14 && where < 0x40) || (where >= 0x48)) { | 82 | if ((where >= 0x14 && where < 0x40) || (where >= 0x48)) { |
| 67 | *value = 0; | 83 | *value = emulate_ioc3_cfg(where, size); |
| 68 | return PCIBIOS_SUCCESSFUL; | 84 | return PCIBIOS_SUCCESSFUL; |
| 69 | } | 85 | } |
| 70 | 86 | ||
| @@ -127,7 +143,7 @@ oh_my_gawd: | |||
| 127 | * generic PCI code a chance to look at the wrong register. | 143 | * generic PCI code a chance to look at the wrong register. |
| 128 | */ | 144 | */ |
| 129 | if ((where >= 0x14 && where < 0x40) || (where >= 0x48)) { | 145 | if ((where >= 0x14 && where < 0x40) || (where >= 0x48)) { |
| 130 | *value = 0; | 146 | *value = emulate_ioc3_cfg(where, size); |
| 131 | return PCIBIOS_SUCCESSFUL; | 147 | return PCIBIOS_SUCCESSFUL; |
| 132 | } | 148 | } |
| 133 | 149 | ||
diff --git a/arch/mips/pci/pci-ip27.c b/arch/mips/pci/pci-ip27.c index bb64828a92fe..a18516925cdd 100644 --- a/arch/mips/pci/pci-ip27.c +++ b/arch/mips/pci/pci-ip27.c | |||
| @@ -47,6 +47,9 @@ int __cpuinit bridge_probe(nasid_t nasid, int widget_id, int masterwid) | |||
| 47 | static int num_bridges = 0; | 47 | static int num_bridges = 0; |
| 48 | bridge_t *bridge; | 48 | bridge_t *bridge; |
| 49 | int slot; | 49 | int slot; |
| 50 | extern int pci_probe_only; | ||
| 51 | |||
| 52 | pci_probe_only = 1; | ||
| 50 | 53 | ||
| 51 | printk("a bridge\n"); | 54 | printk("a bridge\n"); |
| 52 | 55 | ||
| @@ -100,6 +103,11 @@ int __cpuinit bridge_probe(nasid_t nasid, int widget_id, int masterwid) | |||
| 100 | */ | 103 | */ |
| 101 | bridge->b_wid_control |= BRIDGE_CTRL_IO_SWAP | | 104 | bridge->b_wid_control |= BRIDGE_CTRL_IO_SWAP | |
| 102 | BRIDGE_CTRL_MEM_SWAP; | 105 | BRIDGE_CTRL_MEM_SWAP; |
| 106 | #ifdef CONFIG_PAGE_SIZE_4KB | ||
| 107 | bridge->b_wid_control &= ~BRIDGE_CTRL_PAGE_SIZE; | ||
| 108 | #else /* 16kB or larger */ | ||
| 109 | bridge->b_wid_control |= BRIDGE_CTRL_PAGE_SIZE; | ||
| 110 | #endif | ||
| 103 | 111 | ||
| 104 | /* | 112 | /* |
| 105 | * Hmm... IRIX sets additional bits in the address which | 113 | * Hmm... IRIX sets additional bits in the address which |
diff --git a/arch/mips/sgi-ip27/ip27-init.c b/arch/mips/sgi-ip27/ip27-init.c index 7093e7c573a4..4a500e8cd3cc 100644 --- a/arch/mips/sgi-ip27/ip27-init.c +++ b/arch/mips/sgi-ip27/ip27-init.c | |||
| @@ -161,27 +161,6 @@ cnodeid_t get_compact_nodeid(void) | |||
| 161 | return NASID_TO_COMPACT_NODEID(get_nasid()); | 161 | return NASID_TO_COMPACT_NODEID(get_nasid()); |
| 162 | } | 162 | } |
| 163 | 163 | ||
| 164 | /* Extracted from the IOC3 meta driver. FIXME. */ | ||
| 165 | static inline void ioc3_sio_init(void) | ||
| 166 | { | ||
| 167 | struct ioc3 *ioc3; | ||
| 168 | nasid_t nid; | ||
| 169 | long loops; | ||
| 170 | |||
| 171 | nid = get_nasid(); | ||
| 172 | ioc3 = (struct ioc3 *) KL_CONFIG_CH_CONS_INFO(nid)->memory_base; | ||
| 173 | |||
| 174 | ioc3->sscr_a = 0; /* PIO mode for uarta. */ | ||
| 175 | ioc3->sscr_b = 0; /* PIO mode for uartb. */ | ||
| 176 | ioc3->sio_iec = ~0; | ||
| 177 | ioc3->sio_ies = (SIO_IR_SA_INT | SIO_IR_SB_INT); | ||
| 178 | |||
| 179 | loops=1000000; while(loops--); | ||
| 180 | ioc3->sregs.uarta.iu_fcr = 0; | ||
| 181 | ioc3->sregs.uartb.iu_fcr = 0; | ||
| 182 | loops=1000000; while(loops--); | ||
| 183 | } | ||
| 184 | |||
| 185 | static inline void ioc3_eth_init(void) | 164 | static inline void ioc3_eth_init(void) |
| 186 | { | 165 | { |
| 187 | struct ioc3 *ioc3; | 166 | struct ioc3 *ioc3; |
| @@ -234,7 +213,6 @@ void __init plat_mem_setup(void) | |||
| 234 | panic("Kernel compiled for N mode."); | 213 | panic("Kernel compiled for N mode."); |
| 235 | #endif | 214 | #endif |
| 236 | 215 | ||
| 237 | ioc3_sio_init(); | ||
| 238 | ioc3_eth_init(); | 216 | ioc3_eth_init(); |
| 239 | per_cpu_init(); | 217 | per_cpu_init(); |
| 240 | 218 | ||
diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c index bf438d02366e..42cd10956306 100644 --- a/arch/mips/sgi-ip27/ip27-memory.c +++ b/arch/mips/sgi-ip27/ip27-memory.c | |||
| @@ -33,10 +33,6 @@ | |||
| 33 | #define SLOT_PFNSHIFT (SLOT_SHIFT - PAGE_SHIFT) | 33 | #define SLOT_PFNSHIFT (SLOT_SHIFT - PAGE_SHIFT) |
| 34 | #define PFN_NASIDSHFT (NASID_SHFT - PAGE_SHIFT) | 34 | #define PFN_NASIDSHFT (NASID_SHFT - PAGE_SHIFT) |
| 35 | 35 | ||
| 36 | #define SLOT_IGNORED 0xffff | ||
| 37 | |||
| 38 | static short __initdata slot_lastfilled_cache[MAX_COMPACT_NODES]; | ||
| 39 | static unsigned short __initdata slot_psize_cache[MAX_COMPACT_NODES][MAX_MEM_SLOTS]; | ||
| 40 | static struct bootmem_data __initdata plat_node_bdata[MAX_COMPACT_NODES]; | 36 | static struct bootmem_data __initdata plat_node_bdata[MAX_COMPACT_NODES]; |
| 41 | 37 | ||
| 42 | struct node_data *__node_data[MAX_COMPACT_NODES]; | 38 | struct node_data *__node_data[MAX_COMPACT_NODES]; |
| @@ -267,51 +263,6 @@ static pfn_t __init slot_getbasepfn(cnodeid_t cnode, int slot) | |||
| 267 | return ((pfn_t)nasid << PFN_NASIDSHFT) | (slot << SLOT_PFNSHIFT); | 263 | return ((pfn_t)nasid << PFN_NASIDSHFT) | (slot << SLOT_PFNSHIFT); |
| 268 | } | 264 | } |
| 269 | 265 | ||
| 270 | /* | ||
| 271 | * Return the number of pages of memory provided by the given slot | ||
| 272 | * on the specified node. | ||
| 273 | */ | ||
| 274 | static pfn_t __init slot_getsize(cnodeid_t node, int slot) | ||
| 275 | { | ||
| 276 | return (pfn_t) slot_psize_cache[node][slot]; | ||
| 277 | } | ||
| 278 | |||
| 279 | /* | ||
| 280 | * Return highest slot filled | ||
| 281 | */ | ||
| 282 | static int __init node_getlastslot(cnodeid_t node) | ||
| 283 | { | ||
| 284 | return (int) slot_lastfilled_cache[node]; | ||
| 285 | } | ||
| 286 | |||
| 287 | /* | ||
| 288 | * Return the pfn of the last free page of memory on a node. | ||
| 289 | */ | ||
| 290 | static pfn_t __init node_getmaxclick(cnodeid_t node) | ||
| 291 | { | ||
| 292 | pfn_t slot_psize; | ||
| 293 | int slot; | ||
| 294 | |||
| 295 | /* | ||
| 296 | * Start at the top slot. When we find a slot with memory in it, | ||
| 297 | * that's the winner. | ||
| 298 | */ | ||
| 299 | for (slot = (MAX_MEM_SLOTS - 1); slot >= 0; slot--) { | ||
| 300 | if ((slot_psize = slot_getsize(node, slot))) { | ||
| 301 | if (slot_psize == SLOT_IGNORED) | ||
| 302 | continue; | ||
| 303 | /* Return the basepfn + the slot size, minus 1. */ | ||
| 304 | return slot_getbasepfn(node, slot) + slot_psize - 1; | ||
| 305 | } | ||
| 306 | } | ||
| 307 | |||
| 308 | /* | ||
| 309 | * If there's no memory on the node, return 0. This is likely | ||
| 310 | * to cause problems. | ||
| 311 | */ | ||
| 312 | return 0; | ||
| 313 | } | ||
| 314 | |||
| 315 | static pfn_t __init slot_psize_compute(cnodeid_t node, int slot) | 266 | static pfn_t __init slot_psize_compute(cnodeid_t node, int slot) |
| 316 | { | 267 | { |
| 317 | nasid_t nasid; | 268 | nasid_t nasid; |
| @@ -404,13 +355,13 @@ static void __init mlreset(void) | |||
| 404 | static void __init szmem(void) | 355 | static void __init szmem(void) |
| 405 | { | 356 | { |
| 406 | pfn_t slot_psize, slot0sz = 0, nodebytes; /* Hack to detect problem configs */ | 357 | pfn_t slot_psize, slot0sz = 0, nodebytes; /* Hack to detect problem configs */ |
| 407 | int slot, ignore; | 358 | int slot; |
| 408 | cnodeid_t node; | 359 | cnodeid_t node; |
| 409 | 360 | ||
| 410 | num_physpages = 0; | 361 | num_physpages = 0; |
| 411 | 362 | ||
| 412 | for_each_online_node(node) { | 363 | for_each_online_node(node) { |
| 413 | ignore = nodebytes = 0; | 364 | nodebytes = 0; |
| 414 | for (slot = 0; slot < MAX_MEM_SLOTS; slot++) { | 365 | for (slot = 0; slot < MAX_MEM_SLOTS; slot++) { |
| 415 | slot_psize = slot_psize_compute(node, slot); | 366 | slot_psize = slot_psize_compute(node, slot); |
| 416 | if (slot == 0) | 367 | if (slot == 0) |
| @@ -420,21 +371,20 @@ static void __init szmem(void) | |||
| 420 | * kernel text. | 371 | * kernel text. |
| 421 | */ | 372 | */ |
| 422 | nodebytes += (1LL << SLOT_SHIFT); | 373 | nodebytes += (1LL << SLOT_SHIFT); |
| 374 | |||
| 375 | if (!slot_psize) | ||
| 376 | continue; | ||
| 377 | |||
| 423 | if ((nodebytes >> PAGE_SHIFT) * (sizeof(struct page)) > | 378 | if ((nodebytes >> PAGE_SHIFT) * (sizeof(struct page)) > |
| 424 | (slot0sz << PAGE_SHIFT)) | 379 | (slot0sz << PAGE_SHIFT)) { |
| 425 | ignore = 1; | ||
| 426 | if (ignore && slot_psize) { | ||
| 427 | printk("Ignoring slot %d onwards on node %d\n", | 380 | printk("Ignoring slot %d onwards on node %d\n", |
| 428 | slot, node); | 381 | slot, node); |
| 429 | slot_psize_cache[node][slot] = SLOT_IGNORED; | ||
| 430 | slot = MAX_MEM_SLOTS; | 382 | slot = MAX_MEM_SLOTS; |
| 431 | continue; | 383 | continue; |
| 432 | } | 384 | } |
| 433 | num_physpages += slot_psize; | 385 | num_physpages += slot_psize; |
| 434 | slot_psize_cache[node][slot] = | 386 | add_active_range(node, slot_getbasepfn(node, slot), |
| 435 | (unsigned short) slot_psize; | 387 | slot_getbasepfn(node, slot) + slot_psize); |
| 436 | if (slot_psize) | ||
| 437 | slot_lastfilled_cache[node] = slot; | ||
| 438 | } | 388 | } |
| 439 | } | 389 | } |
| 440 | } | 390 | } |
| @@ -442,18 +392,20 @@ static void __init szmem(void) | |||
| 442 | static void __init node_mem_init(cnodeid_t node) | 392 | static void __init node_mem_init(cnodeid_t node) |
| 443 | { | 393 | { |
| 444 | pfn_t slot_firstpfn = slot_getbasepfn(node, 0); | 394 | pfn_t slot_firstpfn = slot_getbasepfn(node, 0); |
| 445 | pfn_t slot_lastpfn = slot_firstpfn + slot_getsize(node, 0); | ||
| 446 | pfn_t slot_freepfn = node_getfirstfree(node); | 395 | pfn_t slot_freepfn = node_getfirstfree(node); |
| 447 | struct pglist_data *pd; | ||
| 448 | unsigned long bootmap_size; | 396 | unsigned long bootmap_size; |
| 397 | pfn_t start_pfn, end_pfn; | ||
| 398 | |||
| 399 | get_pfn_range_for_nid(node, &start_pfn, &end_pfn); | ||
| 449 | 400 | ||
| 450 | /* | 401 | /* |
| 451 | * Allocate the node data structures on the node first. | 402 | * Allocate the node data structures on the node first. |
| 452 | */ | 403 | */ |
| 453 | __node_data[node] = __va(slot_freepfn << PAGE_SHIFT); | 404 | __node_data[node] = __va(slot_freepfn << PAGE_SHIFT); |
| 454 | 405 | ||
| 455 | pd = NODE_DATA(node); | 406 | NODE_DATA(node)->bdata = &plat_node_bdata[node]; |
| 456 | pd->bdata = &plat_node_bdata[node]; | 407 | NODE_DATA(node)->node_start_pfn = start_pfn; |
| 408 | NODE_DATA(node)->node_spanned_pages = end_pfn - start_pfn; | ||
| 457 | 409 | ||
| 458 | cpus_clear(hub_data(node)->h_cpus); | 410 | cpus_clear(hub_data(node)->h_cpus); |
| 459 | 411 | ||
| @@ -461,12 +413,12 @@ static void __init node_mem_init(cnodeid_t node) | |||
| 461 | sizeof(struct hub_data)); | 413 | sizeof(struct hub_data)); |
| 462 | 414 | ||
| 463 | bootmap_size = init_bootmem_node(NODE_DATA(node), slot_freepfn, | 415 | bootmap_size = init_bootmem_node(NODE_DATA(node), slot_freepfn, |
| 464 | slot_firstpfn, slot_lastpfn); | 416 | start_pfn, end_pfn); |
| 465 | free_bootmem_node(NODE_DATA(node), slot_firstpfn << PAGE_SHIFT, | 417 | free_bootmem_with_active_regions(node, end_pfn); |
| 466 | (slot_lastpfn - slot_firstpfn) << PAGE_SHIFT); | ||
| 467 | reserve_bootmem_node(NODE_DATA(node), slot_firstpfn << PAGE_SHIFT, | 418 | reserve_bootmem_node(NODE_DATA(node), slot_firstpfn << PAGE_SHIFT, |
| 468 | ((slot_freepfn - slot_firstpfn) << PAGE_SHIFT) + bootmap_size, | 419 | ((slot_freepfn - slot_firstpfn) << PAGE_SHIFT) + bootmap_size, |
| 469 | BOOTMEM_DEFAULT); | 420 | BOOTMEM_DEFAULT); |
| 421 | sparse_memory_present_with_active_regions(node); | ||
| 470 | } | 422 | } |
| 471 | 423 | ||
| 472 | /* | 424 | /* |
| @@ -515,16 +467,15 @@ void __init paging_init(void) | |||
| 515 | pagetable_init(); | 467 | pagetable_init(); |
| 516 | 468 | ||
| 517 | for_each_online_node(node) { | 469 | for_each_online_node(node) { |
| 518 | pfn_t start_pfn = slot_getbasepfn(node, 0); | 470 | pfn_t start_pfn, end_pfn; |
| 519 | pfn_t end_pfn = node_getmaxclick(node) + 1; | ||
| 520 | 471 | ||
| 521 | zones_size[ZONE_NORMAL] = end_pfn - start_pfn; | 472 | get_pfn_range_for_nid(node, &start_pfn, &end_pfn); |
| 522 | free_area_init_node(node, NODE_DATA(node), | ||
| 523 | zones_size, start_pfn, NULL); | ||
| 524 | 473 | ||
| 525 | if (end_pfn > max_low_pfn) | 474 | if (end_pfn > max_low_pfn) |
| 526 | max_low_pfn = end_pfn; | 475 | max_low_pfn = end_pfn; |
| 527 | } | 476 | } |
| 477 | zones_size[ZONE_NORMAL] = max_low_pfn; | ||
| 478 | free_area_init_nodes(zones_size); | ||
| 528 | } | 479 | } |
| 529 | 480 | ||
| 530 | void __init mem_init(void) | 481 | void __init mem_init(void) |
| @@ -535,34 +486,10 @@ void __init mem_init(void) | |||
| 535 | high_memory = (void *) __va(num_physpages << PAGE_SHIFT); | 486 | high_memory = (void *) __va(num_physpages << PAGE_SHIFT); |
| 536 | 487 | ||
| 537 | for_each_online_node(node) { | 488 | for_each_online_node(node) { |
| 538 | unsigned slot, numslots; | ||
| 539 | struct page *end, *p; | ||
| 540 | |||
| 541 | /* | 489 | /* |
| 542 | * This will free up the bootmem, ie, slot 0 memory. | 490 | * This will free up the bootmem, ie, slot 0 memory. |
| 543 | */ | 491 | */ |
| 544 | totalram_pages += free_all_bootmem_node(NODE_DATA(node)); | 492 | totalram_pages += free_all_bootmem_node(NODE_DATA(node)); |
| 545 | |||
| 546 | /* | ||
| 547 | * We need to manually do the other slots. | ||
| 548 | */ | ||
| 549 | numslots = node_getlastslot(node); | ||
| 550 | for (slot = 1; slot <= numslots; slot++) { | ||
| 551 | p = nid_page_nr(node, slot_getbasepfn(node, slot) - | ||
| 552 | slot_getbasepfn(node, 0)); | ||
| 553 | |||
| 554 | /* | ||
| 555 | * Free valid memory in current slot. | ||
| 556 | */ | ||
| 557 | for (end = p + slot_getsize(node, slot); p < end; p++) { | ||
| 558 | /* if (!page_is_ram(pgnr)) continue; */ | ||
| 559 | /* commented out until page_is_ram works */ | ||
| 560 | ClearPageReserved(p); | ||
| 561 | init_page_count(p); | ||
| 562 | __free_page(p); | ||
| 563 | totalram_pages++; | ||
| 564 | } | ||
| 565 | } | ||
| 566 | } | 493 | } |
| 567 | 494 | ||
| 568 | totalram_pages -= setup_zero_pages(); /* This comes from node 0 */ | 495 | totalram_pages -= setup_zero_pages(); /* This comes from node 0 */ |
diff --git a/arch/mips/sgi-ip27/ip27-smp.c b/arch/mips/sgi-ip27/ip27-smp.c index f15fc93d6b35..ba5cdebeaf0d 100644 --- a/arch/mips/sgi-ip27/ip27-smp.c +++ b/arch/mips/sgi-ip27/ip27-smp.c | |||
| @@ -176,11 +176,14 @@ static void ip27_send_ipi_mask(cpumask_t mask, unsigned int action) | |||
| 176 | static void __cpuinit ip27_init_secondary(void) | 176 | static void __cpuinit ip27_init_secondary(void) |
| 177 | { | 177 | { |
| 178 | per_cpu_init(); | 178 | per_cpu_init(); |
| 179 | local_irq_enable(); | ||
| 180 | } | 179 | } |
| 181 | 180 | ||
| 182 | static void __cpuinit ip27_smp_finish(void) | 181 | static void __cpuinit ip27_smp_finish(void) |
| 183 | { | 182 | { |
| 183 | extern void hub_rt_clock_event_init(void); | ||
| 184 | |||
| 185 | hub_rt_clock_event_init(); | ||
| 186 | local_irq_enable(); | ||
| 184 | } | 187 | } |
| 185 | 188 | ||
| 186 | static void __init ip27_cpus_done(void) | 189 | static void __init ip27_cpus_done(void) |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index 9cebc9e7da63..8b4e854af925 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
| @@ -160,10 +160,13 @@ static void rt_set_mode(enum clock_event_mode mode, | |||
| 160 | 160 | ||
| 161 | int rt_timer_irq; | 161 | int rt_timer_irq; |
| 162 | 162 | ||
| 163 | static DEFINE_PER_CPU(struct clock_event_device, hub_rt_clockevent); | ||
| 164 | static DEFINE_PER_CPU(char [11], hub_rt_name); | ||
| 165 | |||
| 163 | static irqreturn_t hub_rt_counter_handler(int irq, void *dev_id) | 166 | static irqreturn_t hub_rt_counter_handler(int irq, void *dev_id) |
| 164 | { | 167 | { |
| 165 | struct clock_event_device *cd = dev_id; | ||
| 166 | unsigned int cpu = smp_processor_id(); | 168 | unsigned int cpu = smp_processor_id(); |
| 169 | struct clock_event_device *cd = &per_cpu(hub_rt_clockevent, cpu); | ||
| 167 | int slice = cputoslice(cpu); | 170 | int slice = cputoslice(cpu); |
| 168 | 171 | ||
| 169 | /* | 172 | /* |
| @@ -192,10 +195,7 @@ struct irqaction hub_rt_irqaction = { | |||
| 192 | #define NSEC_PER_CYCLE 800 | 195 | #define NSEC_PER_CYCLE 800 |
| 193 | #define CYCLES_PER_SEC (NSEC_PER_SEC / NSEC_PER_CYCLE) | 196 | #define CYCLES_PER_SEC (NSEC_PER_SEC / NSEC_PER_CYCLE) |
| 194 | 197 | ||
| 195 | static DEFINE_PER_CPU(struct clock_event_device, hub_rt_clockevent); | 198 | void __cpuinit hub_rt_clock_event_init(void) |
| 196 | static DEFINE_PER_CPU(char [11], hub_rt_name); | ||
| 197 | |||
| 198 | static void __cpuinit hub_rt_clock_event_init(void) | ||
| 199 | { | 199 | { |
| 200 | unsigned int cpu = smp_processor_id(); | 200 | unsigned int cpu = smp_processor_id(); |
| 201 | struct clock_event_device *cd = &per_cpu(hub_rt_clockevent, cpu); | 201 | struct clock_event_device *cd = &per_cpu(hub_rt_clockevent, cpu); |
| @@ -203,17 +203,16 @@ static void __cpuinit hub_rt_clock_event_init(void) | |||
| 203 | int irq = rt_timer_irq; | 203 | int irq = rt_timer_irq; |
| 204 | 204 | ||
| 205 | sprintf(name, "hub-rt %d", cpu); | 205 | sprintf(name, "hub-rt %d", cpu); |
| 206 | cd->name = "HUB-RT", | 206 | cd->name = name; |
| 207 | cd->features = CLOCK_EVT_FEAT_ONESHOT, | 207 | cd->features = CLOCK_EVT_FEAT_ONESHOT; |
| 208 | clockevent_set_clock(cd, CYCLES_PER_SEC); | 208 | clockevent_set_clock(cd, CYCLES_PER_SEC); |
| 209 | cd->max_delta_ns = clockevent_delta2ns(0xfffffffffffff, cd); | 209 | cd->max_delta_ns = clockevent_delta2ns(0xfffffffffffff, cd); |
| 210 | cd->min_delta_ns = clockevent_delta2ns(0x300, cd); | 210 | cd->min_delta_ns = clockevent_delta2ns(0x300, cd); |
| 211 | cd->rating = 200, | 211 | cd->rating = 200; |
| 212 | cd->irq = irq, | 212 | cd->irq = irq; |
| 213 | cd->cpumask = cpumask_of_cpu(cpu), | 213 | cd->cpumask = cpumask_of_cpu(cpu); |
| 214 | cd->rating = 300, | 214 | cd->set_next_event = rt_next_event; |
| 215 | cd->set_next_event = rt_next_event, | 215 | cd->set_mode = rt_set_mode; |
| 216 | cd->set_mode = rt_set_mode, | ||
| 217 | clockevents_register_device(cd); | 216 | clockevents_register_device(cd); |
| 218 | } | 217 | } |
| 219 | 218 | ||
| @@ -261,6 +260,7 @@ void __init plat_time_init(void) | |||
| 261 | { | 260 | { |
| 262 | hub_rt_clocksource_init(); | 261 | hub_rt_clocksource_init(); |
| 263 | hub_rt_clock_event_global_init(); | 262 | hub_rt_clock_event_global_init(); |
| 263 | hub_rt_clock_event_init(); | ||
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | void __cpuinit cpu_time_init(void) | 266 | void __cpuinit cpu_time_init(void) |
| @@ -281,7 +281,6 @@ void __cpuinit cpu_time_init(void) | |||
| 281 | 281 | ||
| 282 | printk("CPU %d clock is %dMHz.\n", smp_processor_id(), cpu->cpu_speed); | 282 | printk("CPU %d clock is %dMHz.\n", smp_processor_id(), cpu->cpu_speed); |
| 283 | 283 | ||
| 284 | hub_rt_clock_event_init(); | ||
| 285 | set_c0_status(SRB_TIMOCLK); | 284 | set_c0_status(SRB_TIMOCLK); |
| 286 | } | 285 | } |
| 287 | 286 | ||
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts index 08a780d89807..fa9b6bbeb5af 100644 --- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts +++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts | |||
| @@ -251,14 +251,14 @@ | |||
| 251 | dma@c300 { | 251 | dma@c300 { |
| 252 | #address-cells = <1>; | 252 | #address-cells = <1>; |
| 253 | #size-cells = <1>; | 253 | #size-cells = <1>; |
| 254 | compatible = "fsl,mpc8610-dma", "fsl,mpc8540-dma"; | 254 | compatible = "fsl,mpc8610-dma", "fsl,eloplus-dma"; |
| 255 | cell-index = <1>; | 255 | cell-index = <1>; |
| 256 | reg = <0xc300 0x4>; /* DMA general status register */ | 256 | reg = <0xc300 0x4>; /* DMA general status register */ |
| 257 | ranges = <0x0 0xc100 0x200>; | 257 | ranges = <0x0 0xc100 0x200>; |
| 258 | 258 | ||
| 259 | dma-channel@0 { | 259 | dma-channel@0 { |
| 260 | compatible = "fsl,mpc8610-dma-channel", | 260 | compatible = "fsl,mpc8610-dma-channel", |
| 261 | "fsl,mpc8540-dma-channel"; | 261 | "fsl,eloplus-dma-channel"; |
| 262 | cell-index = <0>; | 262 | cell-index = <0>; |
| 263 | reg = <0x0 0x80>; | 263 | reg = <0x0 0x80>; |
| 264 | interrupt-parent = <&mpic>; | 264 | interrupt-parent = <&mpic>; |
| @@ -266,7 +266,7 @@ | |||
| 266 | }; | 266 | }; |
| 267 | dma-channel@1 { | 267 | dma-channel@1 { |
| 268 | compatible = "fsl,mpc8610-dma-channel", | 268 | compatible = "fsl,mpc8610-dma-channel", |
| 269 | "fsl,mpc8540-dma-channel"; | 269 | "fsl,eloplus-dma-channel"; |
| 270 | cell-index = <1>; | 270 | cell-index = <1>; |
| 271 | reg = <0x80 0x80>; | 271 | reg = <0x80 0x80>; |
| 272 | interrupt-parent = <&mpic>; | 272 | interrupt-parent = <&mpic>; |
| @@ -274,7 +274,7 @@ | |||
| 274 | }; | 274 | }; |
| 275 | dma-channel@2 { | 275 | dma-channel@2 { |
| 276 | compatible = "fsl,mpc8610-dma-channel", | 276 | compatible = "fsl,mpc8610-dma-channel", |
| 277 | "fsl,mpc8540-dma-channel"; | 277 | "fsl,eloplus-dma-channel"; |
| 278 | cell-index = <2>; | 278 | cell-index = <2>; |
| 279 | reg = <0x100 0x80>; | 279 | reg = <0x100 0x80>; |
| 280 | interrupt-parent = <&mpic>; | 280 | interrupt-parent = <&mpic>; |
| @@ -282,7 +282,7 @@ | |||
| 282 | }; | 282 | }; |
| 283 | dma-channel@3 { | 283 | dma-channel@3 { |
| 284 | compatible = "fsl,mpc8610-dma-channel", | 284 | compatible = "fsl,mpc8610-dma-channel", |
| 285 | "fsl,mpc8540-dma-channel"; | 285 | "fsl,eloplus-dma-channel"; |
| 286 | cell-index = <3>; | 286 | cell-index = <3>; |
| 287 | reg = <0x180 0x80>; | 287 | reg = <0x180 0x80>; |
| 288 | interrupt-parent = <&mpic>; | 288 | interrupt-parent = <&mpic>; |
diff --git a/arch/powerpc/configs/pasemi_defconfig b/arch/powerpc/configs/pasemi_defconfig index 09f306248f2e..199e5f59d7a6 100644 --- a/arch/powerpc/configs/pasemi_defconfig +++ b/arch/powerpc/configs/pasemi_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.25-rc6 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Tue Mar 25 10:25:48 2008 | 4 | # Tue May 27 16:08:06 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_PPC64=y | 6 | CONFIG_PPC64=y |
| 7 | 7 | ||
| @@ -29,6 +29,9 @@ CONFIG_GENERIC_CLOCKEVENTS=y | |||
| 29 | CONFIG_GENERIC_HARDIRQS=y | 29 | CONFIG_GENERIC_HARDIRQS=y |
| 30 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y | 30 | CONFIG_HAVE_SETUP_PER_CPU_AREA=y |
| 31 | CONFIG_IRQ_PER_CPU=y | 31 | CONFIG_IRQ_PER_CPU=y |
| 32 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 33 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 34 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 32 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y | 35 | CONFIG_RWSEM_XCHGADD_ALGORITHM=y |
| 33 | CONFIG_ARCH_HAS_ILOG2_U32=y | 36 | CONFIG_ARCH_HAS_ILOG2_U32=y |
| 34 | CONFIG_ARCH_HAS_ILOG2_U64=y | 37 | CONFIG_ARCH_HAS_ILOG2_U64=y |
| @@ -87,6 +90,7 @@ CONFIG_INITRAMFS_SOURCE="" | |||
| 87 | CONFIG_SYSCTL=y | 90 | CONFIG_SYSCTL=y |
| 88 | # CONFIG_EMBEDDED is not set | 91 | # CONFIG_EMBEDDED is not set |
| 89 | CONFIG_SYSCTL_SYSCALL=y | 92 | CONFIG_SYSCTL_SYSCALL=y |
| 93 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
| 90 | CONFIG_KALLSYMS=y | 94 | CONFIG_KALLSYMS=y |
| 91 | # CONFIG_KALLSYMS_ALL is not set | 95 | # CONFIG_KALLSYMS_ALL is not set |
| 92 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | 96 | # CONFIG_KALLSYMS_EXTRA_PASS is not set |
| @@ -115,12 +119,14 @@ CONFIG_HAVE_OPROFILE=y | |||
| 115 | # CONFIG_KPROBES is not set | 119 | # CONFIG_KPROBES is not set |
| 116 | CONFIG_HAVE_KPROBES=y | 120 | CONFIG_HAVE_KPROBES=y |
| 117 | CONFIG_HAVE_KRETPROBES=y | 121 | CONFIG_HAVE_KRETPROBES=y |
| 122 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 118 | CONFIG_PROC_PAGE_MONITOR=y | 123 | CONFIG_PROC_PAGE_MONITOR=y |
| 119 | CONFIG_SLABINFO=y | 124 | CONFIG_SLABINFO=y |
| 120 | CONFIG_RT_MUTEXES=y | 125 | CONFIG_RT_MUTEXES=y |
| 121 | # CONFIG_TINY_SHMEM is not set | 126 | # CONFIG_TINY_SHMEM is not set |
| 122 | CONFIG_BASE_SMALL=0 | 127 | CONFIG_BASE_SMALL=0 |
| 123 | CONFIG_MODULES=y | 128 | CONFIG_MODULES=y |
| 129 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 124 | CONFIG_MODULE_UNLOAD=y | 130 | CONFIG_MODULE_UNLOAD=y |
| 125 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 131 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 126 | # CONFIG_MODVERSIONS is not set | 132 | # CONFIG_MODVERSIONS is not set |
| @@ -167,11 +173,11 @@ CONFIG_PPC_PASEMI=y | |||
| 167 | CONFIG_PPC_PASEMI_IOMMU=y | 173 | CONFIG_PPC_PASEMI_IOMMU=y |
| 168 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set | 174 | # CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE is not set |
| 169 | CONFIG_PPC_PASEMI_MDIO=y | 175 | CONFIG_PPC_PASEMI_MDIO=y |
| 170 | # CONFIG_PPC_CELLEB is not set | ||
| 171 | # CONFIG_PPC_PS3 is not set | 176 | # CONFIG_PPC_PS3 is not set |
| 172 | # CONFIG_PPC_CELL is not set | 177 | # CONFIG_PPC_CELL is not set |
| 173 | # CONFIG_PPC_CELL_NATIVE is not set | 178 | # CONFIG_PPC_CELL_NATIVE is not set |
| 174 | # CONFIG_PPC_IBM_CELL_BLADE is not set | 179 | # CONFIG_PPC_IBM_CELL_BLADE is not set |
| 180 | # CONFIG_PPC_CELLEB is not set | ||
| 175 | # CONFIG_PQ2ADS is not set | 181 | # CONFIG_PQ2ADS is not set |
| 176 | CONFIG_PPC_NATIVE=y | 182 | CONFIG_PPC_NATIVE=y |
| 177 | # CONFIG_IPIC is not set | 183 | # CONFIG_IPIC is not set |
| @@ -192,6 +198,7 @@ CONFIG_CPU_FREQ_DEBUG=y | |||
| 192 | CONFIG_CPU_FREQ_STAT=y | 198 | CONFIG_CPU_FREQ_STAT=y |
| 193 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 199 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
| 194 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 200 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y |
| 201 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 195 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 202 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 196 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | 203 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set |
| 197 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | 204 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set |
| @@ -226,7 +233,6 @@ CONFIG_PREEMPT_NONE=y | |||
| 226 | CONFIG_BINFMT_ELF=y | 233 | CONFIG_BINFMT_ELF=y |
| 227 | CONFIG_COMPAT_BINFMT_ELF=y | 234 | CONFIG_COMPAT_BINFMT_ELF=y |
| 228 | # CONFIG_BINFMT_MISC is not set | 235 | # CONFIG_BINFMT_MISC is not set |
| 229 | CONFIG_FORCE_MAX_ZONEORDER=9 | ||
| 230 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y | 236 | CONFIG_HUGETLB_PAGE_SIZE_VARIABLE=y |
| 231 | CONFIG_IOMMU_VMERGE=y | 237 | CONFIG_IOMMU_VMERGE=y |
| 232 | CONFIG_IOMMU_HELPER=y | 238 | CONFIG_IOMMU_HELPER=y |
| @@ -249,12 +255,14 @@ CONFIG_FLATMEM=y | |||
| 249 | CONFIG_FLAT_NODE_MEM_MAP=y | 255 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 250 | # CONFIG_SPARSEMEM_STATIC is not set | 256 | # CONFIG_SPARSEMEM_STATIC is not set |
| 251 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y | 257 | CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y |
| 258 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 252 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 259 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 253 | CONFIG_RESOURCES_64BIT=y | 260 | CONFIG_RESOURCES_64BIT=y |
| 254 | CONFIG_ZONE_DMA_FLAG=1 | 261 | CONFIG_ZONE_DMA_FLAG=1 |
| 255 | CONFIG_BOUNCE=y | 262 | CONFIG_BOUNCE=y |
| 256 | CONFIG_PPC_HAS_HASH_64K=y | 263 | CONFIG_PPC_HAS_HASH_64K=y |
| 257 | CONFIG_PPC_64K_PAGES=y | 264 | CONFIG_PPC_64K_PAGES=y |
| 265 | CONFIG_FORCE_MAX_ZONEORDER=9 | ||
| 258 | # CONFIG_PPC_SUBPAGE_PROT is not set | 266 | # CONFIG_PPC_SUBPAGE_PROT is not set |
| 259 | # CONFIG_SCHED_SMT is not set | 267 | # CONFIG_SCHED_SMT is not set |
| 260 | CONFIG_PROC_DEVICETREE=y | 268 | CONFIG_PROC_DEVICETREE=y |
| @@ -290,9 +298,12 @@ CONFIG_CARDBUS=y | |||
| 290 | # CONFIG_YENTA is not set | 298 | # CONFIG_YENTA is not set |
| 291 | # CONFIG_PD6729 is not set | 299 | # CONFIG_PD6729 is not set |
| 292 | # CONFIG_I82092 is not set | 300 | # CONFIG_I82092 is not set |
| 293 | # CONFIG_ELECTRA_CF is not set | 301 | CONFIG_ELECTRA_CF=y |
| 294 | # CONFIG_HOTPLUG_PCI is not set | 302 | # CONFIG_HOTPLUG_PCI is not set |
| 303 | # CONFIG_HAS_RAPIDIO is not set | ||
| 304 | CONFIG_PAGE_OFFSET=0xc000000000000000 | ||
| 295 | CONFIG_KERNEL_START=0xc000000000000000 | 305 | CONFIG_KERNEL_START=0xc000000000000000 |
| 306 | CONFIG_PHYSICAL_START=0x00000000 | ||
| 296 | 307 | ||
| 297 | # | 308 | # |
| 298 | # Networking | 309 | # Networking |
| @@ -341,8 +352,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 341 | CONFIG_DEFAULT_TCP_CONG="cubic" | 352 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 342 | # CONFIG_TCP_MD5SIG is not set | 353 | # CONFIG_TCP_MD5SIG is not set |
| 343 | # CONFIG_IPV6 is not set | 354 | # CONFIG_IPV6 is not set |
| 344 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 345 | # CONFIG_INET6_TUNNEL is not set | ||
| 346 | # CONFIG_NETWORK_SECMARK is not set | 355 | # CONFIG_NETWORK_SECMARK is not set |
| 347 | # CONFIG_NETFILTER is not set | 356 | # CONFIG_NETFILTER is not set |
| 348 | # CONFIG_IP_DCCP is not set | 357 | # CONFIG_IP_DCCP is not set |
| @@ -473,6 +482,7 @@ CONFIG_MTD_NAND_PASEMI=y | |||
| 473 | # | 482 | # |
| 474 | # CONFIG_MTD_UBI is not set | 483 | # CONFIG_MTD_UBI is not set |
| 475 | CONFIG_OF_DEVICE=y | 484 | CONFIG_OF_DEVICE=y |
| 485 | CONFIG_OF_I2C=y | ||
| 476 | # CONFIG_PARPORT is not set | 486 | # CONFIG_PARPORT is not set |
| 477 | CONFIG_BLK_DEV=y | 487 | CONFIG_BLK_DEV=y |
| 478 | # CONFIG_BLK_DEV_FD is not set | 488 | # CONFIG_BLK_DEV_FD is not set |
| @@ -520,7 +530,6 @@ CONFIG_IDE_PROC_FS=y | |||
| 520 | # | 530 | # |
| 521 | # IDE chipset support/bugfixes | 531 | # IDE chipset support/bugfixes |
| 522 | # | 532 | # |
| 523 | # CONFIG_IDE_GENERIC is not set | ||
| 524 | # CONFIG_BLK_DEV_PLATFORM is not set | 533 | # CONFIG_BLK_DEV_PLATFORM is not set |
| 525 | 534 | ||
| 526 | # | 535 | # |
| @@ -554,7 +563,7 @@ CONFIG_IDE_PROC_FS=y | |||
| 554 | # CONFIG_BLK_DEV_VIA82CXXX is not set | 563 | # CONFIG_BLK_DEV_VIA82CXXX is not set |
| 555 | # CONFIG_BLK_DEV_TC86C001 is not set | 564 | # CONFIG_BLK_DEV_TC86C001 is not set |
| 556 | # CONFIG_BLK_DEV_IDEDMA is not set | 565 | # CONFIG_BLK_DEV_IDEDMA is not set |
| 557 | CONFIG_IDE_ARCH_OBSOLETE_INIT=y | 566 | # CONFIG_BLK_DEV_HD_ONLY is not set |
| 558 | # CONFIG_BLK_DEV_HD is not set | 567 | # CONFIG_BLK_DEV_HD is not set |
| 559 | 568 | ||
| 560 | # | 569 | # |
| @@ -632,7 +641,10 @@ CONFIG_SCSI_LOWLEVEL=y | |||
| 632 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set | 641 | # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set |
| 633 | CONFIG_ATA=y | 642 | CONFIG_ATA=y |
| 634 | # CONFIG_ATA_NONSTANDARD is not set | 643 | # CONFIG_ATA_NONSTANDARD is not set |
| 644 | CONFIG_SATA_PMP=y | ||
| 635 | # CONFIG_SATA_AHCI is not set | 645 | # CONFIG_SATA_AHCI is not set |
| 646 | CONFIG_SATA_SIL24=y | ||
| 647 | CONFIG_ATA_SFF=y | ||
| 636 | # CONFIG_SATA_SVW is not set | 648 | # CONFIG_SATA_SVW is not set |
| 637 | # CONFIG_ATA_PIIX is not set | 649 | # CONFIG_ATA_PIIX is not set |
| 638 | CONFIG_SATA_MV=y | 650 | CONFIG_SATA_MV=y |
| @@ -642,7 +654,6 @@ CONFIG_SATA_MV=y | |||
| 642 | # CONFIG_SATA_PROMISE is not set | 654 | # CONFIG_SATA_PROMISE is not set |
| 643 | # CONFIG_SATA_SX4 is not set | 655 | # CONFIG_SATA_SX4 is not set |
| 644 | # CONFIG_SATA_SIL is not set | 656 | # CONFIG_SATA_SIL is not set |
| 645 | CONFIG_SATA_SIL24=y | ||
| 646 | # CONFIG_SATA_SIS is not set | 657 | # CONFIG_SATA_SIS is not set |
| 647 | # CONFIG_SATA_ULI is not set | 658 | # CONFIG_SATA_ULI is not set |
| 648 | # CONFIG_SATA_VIA is not set | 659 | # CONFIG_SATA_VIA is not set |
| @@ -689,6 +700,7 @@ CONFIG_PATA_PCMCIA=y | |||
| 689 | # CONFIG_PATA_WINBOND is not set | 700 | # CONFIG_PATA_WINBOND is not set |
| 690 | CONFIG_PATA_PLATFORM=y | 701 | CONFIG_PATA_PLATFORM=y |
| 691 | CONFIG_PATA_OF_PLATFORM=y | 702 | CONFIG_PATA_OF_PLATFORM=y |
| 703 | # CONFIG_PATA_SCH is not set | ||
| 692 | CONFIG_MD=y | 704 | CONFIG_MD=y |
| 693 | CONFIG_BLK_DEV_MD=y | 705 | CONFIG_BLK_DEV_MD=y |
| 694 | CONFIG_MD_LINEAR=y | 706 | CONFIG_MD_LINEAR=y |
| @@ -791,7 +803,6 @@ CONFIG_E1000_NAPI=y | |||
| 791 | # CONFIG_SIS190 is not set | 803 | # CONFIG_SIS190 is not set |
| 792 | # CONFIG_SKGE is not set | 804 | # CONFIG_SKGE is not set |
| 793 | # CONFIG_SKY2 is not set | 805 | # CONFIG_SKY2 is not set |
| 794 | # CONFIG_SK98LIN is not set | ||
| 795 | # CONFIG_VIA_VELOCITY is not set | 806 | # CONFIG_VIA_VELOCITY is not set |
| 796 | CONFIG_TIGON3=y | 807 | CONFIG_TIGON3=y |
| 797 | # CONFIG_BNX2 is not set | 808 | # CONFIG_BNX2 is not set |
| @@ -810,6 +821,7 @@ CONFIG_PASEMI_MAC=y | |||
| 810 | # CONFIG_MLX4_CORE is not set | 821 | # CONFIG_MLX4_CORE is not set |
| 811 | # CONFIG_TEHUTI is not set | 822 | # CONFIG_TEHUTI is not set |
| 812 | # CONFIG_BNX2X is not set | 823 | # CONFIG_BNX2X is not set |
| 824 | # CONFIG_SFC is not set | ||
| 813 | # CONFIG_TR is not set | 825 | # CONFIG_TR is not set |
| 814 | 826 | ||
| 815 | # | 827 | # |
| @@ -817,6 +829,7 @@ CONFIG_PASEMI_MAC=y | |||
| 817 | # | 829 | # |
| 818 | # CONFIG_WLAN_PRE80211 is not set | 830 | # CONFIG_WLAN_PRE80211 is not set |
| 819 | # CONFIG_WLAN_80211 is not set | 831 | # CONFIG_WLAN_80211 is not set |
| 832 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 820 | 833 | ||
| 821 | # | 834 | # |
| 822 | # USB Network Adapters | 835 | # USB Network Adapters |
| @@ -890,6 +903,7 @@ CONFIG_VT=y | |||
| 890 | CONFIG_VT_CONSOLE=y | 903 | CONFIG_VT_CONSOLE=y |
| 891 | CONFIG_HW_CONSOLE=y | 904 | CONFIG_HW_CONSOLE=y |
| 892 | # CONFIG_VT_HW_CONSOLE_BINDING is not set | 905 | # CONFIG_VT_HW_CONSOLE_BINDING is not set |
| 906 | CONFIG_DEVKMEM=y | ||
| 893 | # CONFIG_SERIAL_NONSTANDARD is not set | 907 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 894 | # CONFIG_NOZOMI is not set | 908 | # CONFIG_NOZOMI is not set |
| 895 | 909 | ||
| @@ -917,7 +931,6 @@ CONFIG_LEGACY_PTY_COUNT=4 | |||
| 917 | # CONFIG_IPMI_HANDLER is not set | 931 | # CONFIG_IPMI_HANDLER is not set |
| 918 | CONFIG_HW_RANDOM=y | 932 | CONFIG_HW_RANDOM=y |
| 919 | CONFIG_HW_RANDOM_PASEMI=y | 933 | CONFIG_HW_RANDOM_PASEMI=y |
| 920 | # CONFIG_GEN_RTC is not set | ||
| 921 | # CONFIG_R3964 is not set | 934 | # CONFIG_R3964 is not set |
| 922 | # CONFIG_APPLICOM is not set | 935 | # CONFIG_APPLICOM is not set |
| 923 | 936 | ||
| @@ -936,13 +949,7 @@ CONFIG_DEVPORT=y | |||
| 936 | CONFIG_I2C=y | 949 | CONFIG_I2C=y |
| 937 | CONFIG_I2C_BOARDINFO=y | 950 | CONFIG_I2C_BOARDINFO=y |
| 938 | CONFIG_I2C_CHARDEV=y | 951 | CONFIG_I2C_CHARDEV=y |
| 939 | |||
| 940 | # | ||
| 941 | # I2C Algorithms | ||
| 942 | # | ||
| 943 | CONFIG_I2C_ALGOBIT=y | 952 | CONFIG_I2C_ALGOBIT=y |
| 944 | CONFIG_I2C_ALGOPCF=y | ||
| 945 | CONFIG_I2C_ALGOPCA=y | ||
| 946 | 953 | ||
| 947 | # | 954 | # |
| 948 | # I2C Hardware Bus support | 955 | # I2C Hardware Bus support |
| @@ -971,6 +978,7 @@ CONFIG_I2C_PASEMI=y | |||
| 971 | # CONFIG_I2C_VIA is not set | 978 | # CONFIG_I2C_VIA is not set |
| 972 | # CONFIG_I2C_VIAPRO is not set | 979 | # CONFIG_I2C_VIAPRO is not set |
| 973 | # CONFIG_I2C_VOODOO3 is not set | 980 | # CONFIG_I2C_VOODOO3 is not set |
| 981 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 974 | 982 | ||
| 975 | # | 983 | # |
| 976 | # Miscellaneous I2C Chip support | 984 | # Miscellaneous I2C Chip support |
| @@ -980,19 +988,13 @@ CONFIG_SENSORS_EEPROM=y | |||
| 980 | # CONFIG_SENSORS_PCF8574 is not set | 988 | # CONFIG_SENSORS_PCF8574 is not set |
| 981 | # CONFIG_PCF8575 is not set | 989 | # CONFIG_PCF8575 is not set |
| 982 | # CONFIG_SENSORS_PCF8591 is not set | 990 | # CONFIG_SENSORS_PCF8591 is not set |
| 983 | # CONFIG_TPS65010 is not set | ||
| 984 | # CONFIG_SENSORS_MAX6875 is not set | 991 | # CONFIG_SENSORS_MAX6875 is not set |
| 985 | # CONFIG_SENSORS_TSL2550 is not set | 992 | # CONFIG_SENSORS_TSL2550 is not set |
| 986 | # CONFIG_I2C_DEBUG_CORE is not set | 993 | # CONFIG_I2C_DEBUG_CORE is not set |
| 987 | # CONFIG_I2C_DEBUG_ALGO is not set | 994 | # CONFIG_I2C_DEBUG_ALGO is not set |
| 988 | # CONFIG_I2C_DEBUG_BUS is not set | 995 | # CONFIG_I2C_DEBUG_BUS is not set |
| 989 | # CONFIG_I2C_DEBUG_CHIP is not set | 996 | # CONFIG_I2C_DEBUG_CHIP is not set |
| 990 | |||
| 991 | # | ||
| 992 | # SPI support | ||
| 993 | # | ||
| 994 | # CONFIG_SPI is not set | 997 | # CONFIG_SPI is not set |
| 995 | # CONFIG_SPI_MASTER is not set | ||
| 996 | # CONFIG_W1 is not set | 998 | # CONFIG_W1 is not set |
| 997 | # CONFIG_POWER_SUPPLY is not set | 999 | # CONFIG_POWER_SUPPLY is not set |
| 998 | CONFIG_HWMON=y | 1000 | CONFIG_HWMON=y |
| @@ -1062,12 +1064,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 1062 | # Multifunction device drivers | 1064 | # Multifunction device drivers |
| 1063 | # | 1065 | # |
| 1064 | # CONFIG_MFD_SM501 is not set | 1066 | # CONFIG_MFD_SM501 is not set |
| 1067 | # CONFIG_HTC_PASIC3 is not set | ||
| 1065 | 1068 | ||
| 1066 | # | 1069 | # |
| 1067 | # Multimedia devices | 1070 | # Multimedia devices |
| 1068 | # | 1071 | # |
| 1072 | |||
| 1073 | # | ||
| 1074 | # Multimedia core support | ||
| 1075 | # | ||
| 1069 | # CONFIG_VIDEO_DEV is not set | 1076 | # CONFIG_VIDEO_DEV is not set |
| 1070 | # CONFIG_DVB_CORE is not set | 1077 | # CONFIG_DVB_CORE is not set |
| 1078 | # CONFIG_VIDEO_MEDIA is not set | ||
| 1079 | |||
| 1080 | # | ||
| 1081 | # Multimedia drivers | ||
| 1082 | # | ||
| 1071 | CONFIG_DAB=y | 1083 | CONFIG_DAB=y |
| 1072 | # CONFIG_USB_DABUSB is not set | 1084 | # CONFIG_USB_DABUSB is not set |
| 1073 | 1085 | ||
| @@ -1094,8 +1106,8 @@ CONFIG_FB_CFB_IMAGEBLIT=y | |||
| 1094 | # CONFIG_FB_SYS_FILLRECT is not set | 1106 | # CONFIG_FB_SYS_FILLRECT is not set |
| 1095 | # CONFIG_FB_SYS_COPYAREA is not set | 1107 | # CONFIG_FB_SYS_COPYAREA is not set |
| 1096 | # CONFIG_FB_SYS_IMAGEBLIT is not set | 1108 | # CONFIG_FB_SYS_IMAGEBLIT is not set |
| 1109 | # CONFIG_FB_FOREIGN_ENDIAN is not set | ||
| 1097 | # CONFIG_FB_SYS_FOPS is not set | 1110 | # CONFIG_FB_SYS_FOPS is not set |
| 1098 | CONFIG_FB_DEFERRED_IO=y | ||
| 1099 | # CONFIG_FB_SVGALIB is not set | 1111 | # CONFIG_FB_SVGALIB is not set |
| 1100 | CONFIG_FB_MACMODES=y | 1112 | CONFIG_FB_MACMODES=y |
| 1101 | CONFIG_FB_BACKLIGHT=y | 1113 | CONFIG_FB_BACKLIGHT=y |
| @@ -1213,6 +1225,7 @@ CONFIG_SND_VERBOSE_PROCFS=y | |||
| 1213 | # CONFIG_SND_AU8810 is not set | 1225 | # CONFIG_SND_AU8810 is not set |
| 1214 | # CONFIG_SND_AU8820 is not set | 1226 | # CONFIG_SND_AU8820 is not set |
| 1215 | # CONFIG_SND_AU8830 is not set | 1227 | # CONFIG_SND_AU8830 is not set |
| 1228 | # CONFIG_SND_AW2 is not set | ||
| 1216 | # CONFIG_SND_AZT3328 is not set | 1229 | # CONFIG_SND_AZT3328 is not set |
| 1217 | # CONFIG_SND_BT87X is not set | 1230 | # CONFIG_SND_BT87X is not set |
| 1218 | # CONFIG_SND_CA0106 is not set | 1231 | # CONFIG_SND_CA0106 is not set |
| @@ -1292,11 +1305,11 @@ CONFIG_SND_USB_USX2Y=y | |||
| 1292 | # CONFIG_SND_SOC is not set | 1305 | # CONFIG_SND_SOC is not set |
| 1293 | 1306 | ||
| 1294 | # | 1307 | # |
| 1295 | # SoC Audio support for SuperH | 1308 | # ALSA SoC audio for Freescale SOCs |
| 1296 | # | 1309 | # |
| 1297 | 1310 | ||
| 1298 | # | 1311 | # |
| 1299 | # ALSA SoC audio for Freescale SOCs | 1312 | # SoC Audio for the Texas Instruments OMAP |
| 1300 | # | 1313 | # |
| 1301 | 1314 | ||
| 1302 | # | 1315 | # |
| @@ -1334,11 +1347,13 @@ CONFIG_USB_DEVICEFS=y | |||
| 1334 | # | 1347 | # |
| 1335 | # USB Host Controller Drivers | 1348 | # USB Host Controller Drivers |
| 1336 | # | 1349 | # |
| 1350 | # CONFIG_USB_C67X00_HCD is not set | ||
| 1337 | CONFIG_USB_EHCI_HCD=y | 1351 | CONFIG_USB_EHCI_HCD=y |
| 1338 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set | 1352 | # CONFIG_USB_EHCI_ROOT_HUB_TT is not set |
| 1339 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set | 1353 | # CONFIG_USB_EHCI_TT_NEWSCHED is not set |
| 1340 | CONFIG_USB_EHCI_HCD_PPC_OF=y | 1354 | CONFIG_USB_EHCI_HCD_PPC_OF=y |
| 1341 | # CONFIG_USB_ISP116X_HCD is not set | 1355 | # CONFIG_USB_ISP116X_HCD is not set |
| 1356 | # CONFIG_USB_ISP1760_HCD is not set | ||
| 1342 | CONFIG_USB_OHCI_HCD=y | 1357 | CONFIG_USB_OHCI_HCD=y |
| 1343 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set | 1358 | # CONFIG_USB_OHCI_HCD_PPC_OF is not set |
| 1344 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set | 1359 | # CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set |
| @@ -1354,6 +1369,7 @@ CONFIG_USB_SL811_HCD=y | |||
| 1354 | # | 1369 | # |
| 1355 | # CONFIG_USB_ACM is not set | 1370 | # CONFIG_USB_ACM is not set |
| 1356 | # CONFIG_USB_PRINTER is not set | 1371 | # CONFIG_USB_PRINTER is not set |
| 1372 | # CONFIG_USB_WDM is not set | ||
| 1357 | 1373 | ||
| 1358 | # | 1374 | # |
| 1359 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 1375 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| @@ -1375,6 +1391,7 @@ CONFIG_USB_STORAGE=y | |||
| 1375 | # CONFIG_USB_STORAGE_ALAUDA is not set | 1391 | # CONFIG_USB_STORAGE_ALAUDA is not set |
| 1376 | # CONFIG_USB_STORAGE_ONETOUCH is not set | 1392 | # CONFIG_USB_STORAGE_ONETOUCH is not set |
| 1377 | # CONFIG_USB_STORAGE_KARMA is not set | 1393 | # CONFIG_USB_STORAGE_KARMA is not set |
| 1394 | # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set | ||
| 1378 | CONFIG_USB_LIBUSUAL=y | 1395 | CONFIG_USB_LIBUSUAL=y |
| 1379 | 1396 | ||
| 1380 | # | 1397 | # |
| @@ -1416,6 +1433,7 @@ CONFIG_USB_LIBUSUAL=y | |||
| 1416 | # CONFIG_MMC is not set | 1433 | # CONFIG_MMC is not set |
| 1417 | # CONFIG_MEMSTICK is not set | 1434 | # CONFIG_MEMSTICK is not set |
| 1418 | # CONFIG_NEW_LEDS is not set | 1435 | # CONFIG_NEW_LEDS is not set |
| 1436 | # CONFIG_ACCESSIBILITY is not set | ||
| 1419 | # CONFIG_INFINIBAND is not set | 1437 | # CONFIG_INFINIBAND is not set |
| 1420 | CONFIG_EDAC=y | 1438 | CONFIG_EDAC=y |
| 1421 | 1439 | ||
| @@ -1475,10 +1493,6 @@ CONFIG_RTC_DRV_DS1307=y | |||
| 1475 | # on-CPU RTC drivers | 1493 | # on-CPU RTC drivers |
| 1476 | # | 1494 | # |
| 1477 | # CONFIG_DMADEVICES is not set | 1495 | # CONFIG_DMADEVICES is not set |
| 1478 | |||
| 1479 | # | ||
| 1480 | # Userspace I/O | ||
| 1481 | # | ||
| 1482 | # CONFIG_UIO is not set | 1496 | # CONFIG_UIO is not set |
| 1483 | 1497 | ||
| 1484 | # | 1498 | # |
| @@ -1576,12 +1590,10 @@ CONFIG_NFS_FS=y | |||
| 1576 | CONFIG_NFS_V3=y | 1590 | CONFIG_NFS_V3=y |
| 1577 | # CONFIG_NFS_V3_ACL is not set | 1591 | # CONFIG_NFS_V3_ACL is not set |
| 1578 | # CONFIG_NFS_V4 is not set | 1592 | # CONFIG_NFS_V4 is not set |
| 1579 | # CONFIG_NFS_DIRECTIO is not set | ||
| 1580 | CONFIG_NFSD=y | 1593 | CONFIG_NFSD=y |
| 1581 | CONFIG_NFSD_V3=y | 1594 | CONFIG_NFSD_V3=y |
| 1582 | # CONFIG_NFSD_V3_ACL is not set | 1595 | # CONFIG_NFSD_V3_ACL is not set |
| 1583 | CONFIG_NFSD_V4=y | 1596 | CONFIG_NFSD_V4=y |
| 1584 | CONFIG_NFSD_TCP=y | ||
| 1585 | CONFIG_ROOT_NFS=y | 1597 | CONFIG_ROOT_NFS=y |
| 1586 | CONFIG_LOCKD=y | 1598 | CONFIG_LOCKD=y |
| 1587 | CONFIG_LOCKD_V4=y | 1599 | CONFIG_LOCKD_V4=y |
| @@ -1665,9 +1677,10 @@ CONFIG_NLS_ISO8859_1=y | |||
| 1665 | # Library routines | 1677 | # Library routines |
| 1666 | # | 1678 | # |
| 1667 | CONFIG_BITREVERSE=y | 1679 | CONFIG_BITREVERSE=y |
| 1680 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 1668 | CONFIG_CRC_CCITT=y | 1681 | CONFIG_CRC_CCITT=y |
| 1669 | # CONFIG_CRC16 is not set | 1682 | # CONFIG_CRC16 is not set |
| 1670 | # CONFIG_CRC_ITU_T is not set | 1683 | CONFIG_CRC_ITU_T=y |
| 1671 | CONFIG_CRC32=y | 1684 | CONFIG_CRC32=y |
| 1672 | # CONFIG_CRC7 is not set | 1685 | # CONFIG_CRC7 is not set |
| 1673 | CONFIG_LIBCRC32C=m | 1686 | CONFIG_LIBCRC32C=m |
| @@ -1677,6 +1690,7 @@ CONFIG_PLIST=y | |||
| 1677 | CONFIG_HAS_IOMEM=y | 1690 | CONFIG_HAS_IOMEM=y |
| 1678 | CONFIG_HAS_IOPORT=y | 1691 | CONFIG_HAS_IOPORT=y |
| 1679 | CONFIG_HAS_DMA=y | 1692 | CONFIG_HAS_DMA=y |
| 1693 | CONFIG_HAVE_LMB=y | ||
| 1680 | 1694 | ||
| 1681 | # | 1695 | # |
| 1682 | # Kernel hacking | 1696 | # Kernel hacking |
| @@ -1684,6 +1698,7 @@ CONFIG_HAS_DMA=y | |||
| 1684 | # CONFIG_PRINTK_TIME is not set | 1698 | # CONFIG_PRINTK_TIME is not set |
| 1685 | CONFIG_ENABLE_WARN_DEPRECATED=y | 1699 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 1686 | CONFIG_ENABLE_MUST_CHECK=y | 1700 | CONFIG_ENABLE_MUST_CHECK=y |
| 1701 | CONFIG_FRAME_WARN=2048 | ||
| 1687 | CONFIG_MAGIC_SYSRQ=y | 1702 | CONFIG_MAGIC_SYSRQ=y |
| 1688 | # CONFIG_UNUSED_SYMBOLS is not set | 1703 | # CONFIG_UNUSED_SYMBOLS is not set |
| 1689 | # CONFIG_DEBUG_FS is not set | 1704 | # CONFIG_DEBUG_FS is not set |
| @@ -1694,18 +1709,23 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 1694 | # CONFIG_SCHED_DEBUG is not set | 1709 | # CONFIG_SCHED_DEBUG is not set |
| 1695 | # CONFIG_SCHEDSTATS is not set | 1710 | # CONFIG_SCHEDSTATS is not set |
| 1696 | # CONFIG_TIMER_STATS is not set | 1711 | # CONFIG_TIMER_STATS is not set |
| 1712 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 1697 | # CONFIG_SLUB_DEBUG_ON is not set | 1713 | # CONFIG_SLUB_DEBUG_ON is not set |
| 1698 | # CONFIG_SLUB_STATS is not set | 1714 | # CONFIG_SLUB_STATS is not set |
| 1699 | # CONFIG_DEBUG_RT_MUTEXES is not set | 1715 | # CONFIG_DEBUG_RT_MUTEXES is not set |
| 1700 | # CONFIG_RT_MUTEX_TESTER is not set | 1716 | # CONFIG_RT_MUTEX_TESTER is not set |
| 1701 | # CONFIG_DEBUG_SPINLOCK is not set | 1717 | # CONFIG_DEBUG_SPINLOCK is not set |
| 1702 | # CONFIG_DEBUG_MUTEXES is not set | 1718 | # CONFIG_DEBUG_MUTEXES is not set |
| 1719 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 1720 | # CONFIG_PROVE_LOCKING is not set | ||
| 1721 | # CONFIG_LOCK_STAT is not set | ||
| 1703 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set | 1722 | # CONFIG_DEBUG_SPINLOCK_SLEEP is not set |
| 1704 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 1723 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 1705 | # CONFIG_DEBUG_KOBJECT is not set | 1724 | # CONFIG_DEBUG_KOBJECT is not set |
| 1706 | CONFIG_DEBUG_BUGVERBOSE=y | 1725 | CONFIG_DEBUG_BUGVERBOSE=y |
| 1707 | # CONFIG_DEBUG_INFO is not set | 1726 | # CONFIG_DEBUG_INFO is not set |
| 1708 | # CONFIG_DEBUG_VM is not set | 1727 | # CONFIG_DEBUG_VM is not set |
| 1728 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 1709 | # CONFIG_DEBUG_LIST is not set | 1729 | # CONFIG_DEBUG_LIST is not set |
| 1710 | # CONFIG_DEBUG_SG is not set | 1730 | # CONFIG_DEBUG_SG is not set |
| 1711 | # CONFIG_BOOT_PRINTK_DELAY is not set | 1731 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| @@ -1735,53 +1755,83 @@ CONFIG_ASYNC_CORE=y | |||
| 1735 | CONFIG_ASYNC_MEMCPY=y | 1755 | CONFIG_ASYNC_MEMCPY=y |
| 1736 | CONFIG_ASYNC_XOR=y | 1756 | CONFIG_ASYNC_XOR=y |
| 1737 | CONFIG_CRYPTO=y | 1757 | CONFIG_CRYPTO=y |
| 1758 | |||
| 1759 | # | ||
| 1760 | # Crypto core or helper | ||
| 1761 | # | ||
| 1738 | CONFIG_CRYPTO_ALGAPI=y | 1762 | CONFIG_CRYPTO_ALGAPI=y |
| 1739 | CONFIG_CRYPTO_AEAD=y | 1763 | CONFIG_CRYPTO_AEAD=y |
| 1740 | CONFIG_CRYPTO_BLKCIPHER=y | 1764 | CONFIG_CRYPTO_BLKCIPHER=y |
| 1741 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1742 | CONFIG_CRYPTO_HASH=y | 1765 | CONFIG_CRYPTO_HASH=y |
| 1743 | CONFIG_CRYPTO_MANAGER=y | 1766 | CONFIG_CRYPTO_MANAGER=y |
| 1767 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 1768 | # CONFIG_CRYPTO_NULL is not set | ||
| 1769 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1770 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1771 | # CONFIG_CRYPTO_TEST is not set | ||
| 1772 | |||
| 1773 | # | ||
| 1774 | # Authenticated Encryption with Associated Data | ||
| 1775 | # | ||
| 1776 | # CONFIG_CRYPTO_CCM is not set | ||
| 1777 | # CONFIG_CRYPTO_GCM is not set | ||
| 1778 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 1779 | |||
| 1780 | # | ||
| 1781 | # Block modes | ||
| 1782 | # | ||
| 1783 | CONFIG_CRYPTO_CBC=y | ||
| 1784 | # CONFIG_CRYPTO_CTR is not set | ||
| 1785 | # CONFIG_CRYPTO_CTS is not set | ||
| 1786 | # CONFIG_CRYPTO_ECB is not set | ||
| 1787 | # CONFIG_CRYPTO_LRW is not set | ||
| 1788 | # CONFIG_CRYPTO_PCBC is not set | ||
| 1789 | # CONFIG_CRYPTO_XTS is not set | ||
| 1790 | |||
| 1791 | # | ||
| 1792 | # Hash modes | ||
| 1793 | # | ||
| 1744 | CONFIG_CRYPTO_HMAC=y | 1794 | CONFIG_CRYPTO_HMAC=y |
| 1745 | # CONFIG_CRYPTO_XCBC is not set | 1795 | # CONFIG_CRYPTO_XCBC is not set |
| 1746 | # CONFIG_CRYPTO_NULL is not set | 1796 | |
| 1797 | # | ||
| 1798 | # Digest | ||
| 1799 | # | ||
| 1800 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1747 | CONFIG_CRYPTO_MD4=y | 1801 | CONFIG_CRYPTO_MD4=y |
| 1748 | CONFIG_CRYPTO_MD5=y | 1802 | CONFIG_CRYPTO_MD5=y |
| 1803 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1749 | CONFIG_CRYPTO_SHA1=y | 1804 | CONFIG_CRYPTO_SHA1=y |
| 1750 | CONFIG_CRYPTO_SHA256=y | 1805 | CONFIG_CRYPTO_SHA256=y |
| 1751 | CONFIG_CRYPTO_SHA512=y | 1806 | CONFIG_CRYPTO_SHA512=y |
| 1752 | # CONFIG_CRYPTO_WP512 is not set | ||
| 1753 | # CONFIG_CRYPTO_TGR192 is not set | 1807 | # CONFIG_CRYPTO_TGR192 is not set |
| 1754 | # CONFIG_CRYPTO_GF128MUL is not set | 1808 | # CONFIG_CRYPTO_WP512 is not set |
| 1755 | # CONFIG_CRYPTO_ECB is not set | 1809 | |
| 1756 | CONFIG_CRYPTO_CBC=y | 1810 | # |
| 1757 | # CONFIG_CRYPTO_PCBC is not set | 1811 | # Ciphers |
| 1758 | # CONFIG_CRYPTO_LRW is not set | 1812 | # |
| 1759 | # CONFIG_CRYPTO_XTS is not set | ||
| 1760 | # CONFIG_CRYPTO_CTR is not set | ||
| 1761 | # CONFIG_CRYPTO_GCM is not set | ||
| 1762 | # CONFIG_CRYPTO_CCM is not set | ||
| 1763 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 1764 | CONFIG_CRYPTO_DES=y | ||
| 1765 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 1766 | CONFIG_CRYPTO_BLOWFISH=y | ||
| 1767 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1768 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1769 | CONFIG_CRYPTO_AES=y | 1813 | CONFIG_CRYPTO_AES=y |
| 1814 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1815 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 1816 | CONFIG_CRYPTO_BLOWFISH=y | ||
| 1817 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1770 | # CONFIG_CRYPTO_CAST5 is not set | 1818 | # CONFIG_CRYPTO_CAST5 is not set |
| 1771 | # CONFIG_CRYPTO_CAST6 is not set | 1819 | # CONFIG_CRYPTO_CAST6 is not set |
| 1772 | # CONFIG_CRYPTO_TEA is not set | 1820 | CONFIG_CRYPTO_DES=y |
| 1773 | # CONFIG_CRYPTO_ARC4 is not set | 1821 | # CONFIG_CRYPTO_FCRYPT is not set |
| 1774 | # CONFIG_CRYPTO_KHAZAD is not set | 1822 | # CONFIG_CRYPTO_KHAZAD is not set |
| 1775 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 1776 | # CONFIG_CRYPTO_SEED is not set | ||
| 1777 | # CONFIG_CRYPTO_SALSA20 is not set | 1823 | # CONFIG_CRYPTO_SALSA20 is not set |
| 1824 | # CONFIG_CRYPTO_SEED is not set | ||
| 1825 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 1826 | # CONFIG_CRYPTO_TEA is not set | ||
| 1827 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 1828 | |||
| 1829 | # | ||
| 1830 | # Compression | ||
| 1831 | # | ||
| 1778 | # CONFIG_CRYPTO_DEFLATE is not set | 1832 | # CONFIG_CRYPTO_DEFLATE is not set |
| 1779 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 1780 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 1781 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 1782 | # CONFIG_CRYPTO_TEST is not set | ||
| 1783 | CONFIG_CRYPTO_AUTHENC=y | ||
| 1784 | # CONFIG_CRYPTO_LZO is not set | 1833 | # CONFIG_CRYPTO_LZO is not set |
| 1785 | CONFIG_CRYPTO_HW=y | 1834 | CONFIG_CRYPTO_HW=y |
| 1786 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set | 1835 | # CONFIG_CRYPTO_DEV_HIFN_795X is not set |
| 1787 | # CONFIG_PPC_CLOCK is not set | 1836 | # CONFIG_PPC_CLOCK is not set |
| 1837 | # CONFIG_VIRTUALIZATION is not set | ||
diff --git a/arch/powerpc/platforms/52xx/mpc52xx_gpio.c b/arch/powerpc/platforms/52xx/mpc52xx_gpio.c index 48da5dfe4856..8a455ebce98d 100644 --- a/arch/powerpc/platforms/52xx/mpc52xx_gpio.c +++ b/arch/powerpc/platforms/52xx/mpc52xx_gpio.c | |||
| @@ -100,7 +100,7 @@ static int mpc52xx_wkup_gpio_dir_in(struct gpio_chip *gc, unsigned int gpio) | |||
| 100 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); | 100 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); |
| 101 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, | 101 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, |
| 102 | struct mpc52xx_gpiochip, mmchip); | 102 | struct mpc52xx_gpiochip, mmchip); |
| 103 | struct mpc52xx_gpio_wkup *regs = mm_gc->regs; | 103 | struct mpc52xx_gpio_wkup __iomem *regs = mm_gc->regs; |
| 104 | unsigned long flags; | 104 | unsigned long flags; |
| 105 | 105 | ||
| 106 | spin_lock_irqsave(&gpio_lock, flags); | 106 | spin_lock_irqsave(&gpio_lock, flags); |
| @@ -122,7 +122,7 @@ static int | |||
| 122 | mpc52xx_wkup_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) | 122 | mpc52xx_wkup_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) |
| 123 | { | 123 | { |
| 124 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); | 124 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); |
| 125 | struct mpc52xx_gpio_wkup *regs = mm_gc->regs; | 125 | struct mpc52xx_gpio_wkup __iomem *regs = mm_gc->regs; |
| 126 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, | 126 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, |
| 127 | struct mpc52xx_gpiochip, mmchip); | 127 | struct mpc52xx_gpiochip, mmchip); |
| 128 | unsigned long flags; | 128 | unsigned long flags; |
| @@ -150,7 +150,7 @@ static int __devinit mpc52xx_wkup_gpiochip_probe(struct of_device *ofdev, | |||
| 150 | const struct of_device_id *match) | 150 | const struct of_device_id *match) |
| 151 | { | 151 | { |
| 152 | struct mpc52xx_gpiochip *chip; | 152 | struct mpc52xx_gpiochip *chip; |
| 153 | struct mpc52xx_gpio_wkup *regs; | 153 | struct mpc52xx_gpio_wkup __iomem *regs; |
| 154 | struct of_gpio_chip *ofchip; | 154 | struct of_gpio_chip *ofchip; |
| 155 | int ret; | 155 | int ret; |
| 156 | 156 | ||
| @@ -260,7 +260,7 @@ static int mpc52xx_simple_gpio_dir_in(struct gpio_chip *gc, unsigned int gpio) | |||
| 260 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); | 260 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); |
| 261 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, | 261 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, |
| 262 | struct mpc52xx_gpiochip, mmchip); | 262 | struct mpc52xx_gpiochip, mmchip); |
| 263 | struct mpc52xx_gpio *regs = mm_gc->regs; | 263 | struct mpc52xx_gpio __iomem *regs = mm_gc->regs; |
| 264 | unsigned long flags; | 264 | unsigned long flags; |
| 265 | 265 | ||
| 266 | spin_lock_irqsave(&gpio_lock, flags); | 266 | spin_lock_irqsave(&gpio_lock, flags); |
| @@ -284,7 +284,7 @@ mpc52xx_simple_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val) | |||
| 284 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); | 284 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); |
| 285 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, | 285 | struct mpc52xx_gpiochip *chip = container_of(mm_gc, |
| 286 | struct mpc52xx_gpiochip, mmchip); | 286 | struct mpc52xx_gpiochip, mmchip); |
| 287 | struct mpc52xx_gpio *regs = mm_gc->regs; | 287 | struct mpc52xx_gpio __iomem *regs = mm_gc->regs; |
| 288 | unsigned long flags; | 288 | unsigned long flags; |
| 289 | 289 | ||
| 290 | spin_lock_irqsave(&gpio_lock, flags); | 290 | spin_lock_irqsave(&gpio_lock, flags); |
| @@ -312,7 +312,7 @@ static int __devinit mpc52xx_simple_gpiochip_probe(struct of_device *ofdev, | |||
| 312 | { | 312 | { |
| 313 | struct mpc52xx_gpiochip *chip; | 313 | struct mpc52xx_gpiochip *chip; |
| 314 | struct of_gpio_chip *ofchip; | 314 | struct of_gpio_chip *ofchip; |
| 315 | struct mpc52xx_gpio *regs; | 315 | struct mpc52xx_gpio __iomem *regs; |
| 316 | int ret; | 316 | int ret; |
| 317 | 317 | ||
| 318 | chip = kzalloc(sizeof(*chip), GFP_KERNEL); | 318 | chip = kzalloc(sizeof(*chip), GFP_KERNEL); |
| @@ -387,7 +387,7 @@ mpc52xx_gpt_gpio_set(struct gpio_chip *gc, unsigned int gpio, int val) | |||
| 387 | static int mpc52xx_gpt_gpio_dir_in(struct gpio_chip *gc, unsigned int gpio) | 387 | static int mpc52xx_gpt_gpio_dir_in(struct gpio_chip *gc, unsigned int gpio) |
| 388 | { | 388 | { |
| 389 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); | 389 | struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc); |
| 390 | struct mpc52xx_gpt *regs = mm_gc->regs; | 390 | struct mpc52xx_gpt __iomem *regs = mm_gc->regs; |
| 391 | 391 | ||
| 392 | out_be32(®s->mode, 0x04); | 392 | out_be32(®s->mode, 0x04); |
| 393 | 393 | ||
diff --git a/arch/powerpc/platforms/cell/celleb_scc_pciex.c b/arch/powerpc/platforms/cell/celleb_scc_pciex.c index 31da84c458d2..0e04f8fb152a 100644 --- a/arch/powerpc/platforms/cell/celleb_scc_pciex.c +++ b/arch/powerpc/platforms/cell/celleb_scc_pciex.c | |||
| @@ -217,7 +217,7 @@ static u##size scc_pciex_in##name(unsigned long port) \ | |||
| 217 | static void scc_pciex_ins##name(unsigned long p, void *b, unsigned long c) \ | 217 | static void scc_pciex_ins##name(unsigned long p, void *b, unsigned long c) \ |
| 218 | { \ | 218 | { \ |
| 219 | struct iowa_bus *bus = iowa_pio_find_bus(p); \ | 219 | struct iowa_bus *bus = iowa_pio_find_bus(p); \ |
| 220 | u##size *dst = b; \ | 220 | __le##size *dst = b; \ |
| 221 | for (; c != 0; c--, dst++) \ | 221 | for (; c != 0; c--, dst++) \ |
| 222 | *dst = cpu_to_le##size(__scc_pciex_in##name(bus->phb, p)); \ | 222 | *dst = cpu_to_le##size(__scc_pciex_in##name(bus->phb, p)); \ |
| 223 | scc_pciex_io_flush(bus); \ | 223 | scc_pciex_io_flush(bus); \ |
| @@ -231,10 +231,11 @@ static void scc_pciex_outs##name(unsigned long p, const void *b, \ | |||
| 231 | unsigned long c) \ | 231 | unsigned long c) \ |
| 232 | { \ | 232 | { \ |
| 233 | struct iowa_bus *bus = iowa_pio_find_bus(p); \ | 233 | struct iowa_bus *bus = iowa_pio_find_bus(p); \ |
| 234 | const u##size *src = b; \ | 234 | const __le##size *src = b; \ |
| 235 | for (; c != 0; c--, src++) \ | 235 | for (; c != 0; c--, src++) \ |
| 236 | __scc_pciex_out##name(bus->phb, le##size##_to_cpu(*src), p); \ | 236 | __scc_pciex_out##name(bus->phb, le##size##_to_cpu(*src), p); \ |
| 237 | } | 237 | } |
| 238 | #define __le8 u8 | ||
| 238 | #define cpu_to_le8(x) (x) | 239 | #define cpu_to_le8(x) (x) |
| 239 | #define le8_to_cpu(x) (x) | 240 | #define le8_to_cpu(x) (x) |
| 240 | PCIEX_PIO_FUNC(8, b) | 241 | PCIEX_PIO_FUNC(8, b) |
diff --git a/arch/powerpc/sysdev/fsl_soc.c b/arch/powerpc/sysdev/fsl_soc.c index 3a7054e2bb75..019657c110b6 100644 --- a/arch/powerpc/sysdev/fsl_soc.c +++ b/arch/powerpc/sysdev/fsl_soc.c | |||
| @@ -432,7 +432,7 @@ static struct i2c_driver_device i2c_devices[] __initdata = { | |||
| 432 | {"dallas,ds1339", "ds1339"}, | 432 | {"dallas,ds1339", "ds1339"}, |
| 433 | {"dallas,ds1340", "ds1340"}, | 433 | {"dallas,ds1340", "ds1340"}, |
| 434 | {"stm,m41t00", "m41t00"}, | 434 | {"stm,m41t00", "m41t00"}, |
| 435 | {"dallas,ds1374", "rtc-ds1374"}, | 435 | {"dallas,ds1374", "ds1374"}, |
| 436 | }; | 436 | }; |
| 437 | 437 | ||
| 438 | static int __init of_find_i2c_driver(struct device_node *node, | 438 | static int __init of_find_i2c_driver(struct device_node *node, |
diff --git a/arch/ppc/kernel/ppc_ksyms.c b/arch/ppc/kernel/ppc_ksyms.c index 602c268fc8a2..5d529bcbeee9 100644 --- a/arch/ppc/kernel/ppc_ksyms.c +++ b/arch/ppc/kernel/ppc_ksyms.c | |||
| @@ -60,8 +60,10 @@ long long __ashrdi3(long long, int); | |||
| 60 | long long __ashldi3(long long, int); | 60 | long long __ashldi3(long long, int); |
| 61 | long long __lshrdi3(long long, int); | 61 | long long __lshrdi3(long long, int); |
| 62 | 62 | ||
| 63 | EXPORT_SYMBOL(empty_zero_page); | ||
| 63 | EXPORT_SYMBOL(clear_pages); | 64 | EXPORT_SYMBOL(clear_pages); |
| 64 | EXPORT_SYMBOL(clear_user_page); | 65 | EXPORT_SYMBOL(clear_user_page); |
| 66 | EXPORT_SYMBOL(copy_page); | ||
| 65 | EXPORT_SYMBOL(transfer_to_handler); | 67 | EXPORT_SYMBOL(transfer_to_handler); |
| 66 | EXPORT_SYMBOL(do_IRQ); | 68 | EXPORT_SYMBOL(do_IRQ); |
| 67 | EXPORT_SYMBOL(machine_check_exception); | 69 | EXPORT_SYMBOL(machine_check_exception); |
diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig index 1d035082e78e..93acb3c1859d 100644 --- a/arch/s390/Kconfig +++ b/arch/s390/Kconfig | |||
| @@ -308,6 +308,9 @@ config ARCH_SPARSEMEM_ENABLE | |||
| 308 | config ARCH_SPARSEMEM_DEFAULT | 308 | config ARCH_SPARSEMEM_DEFAULT |
| 309 | def_bool y | 309 | def_bool y |
| 310 | 310 | ||
| 311 | config ARCH_SELECT_MEMORY_MODEL | ||
| 312 | def_bool y | ||
| 313 | |||
| 311 | source "mm/Kconfig" | 314 | source "mm/Kconfig" |
| 312 | 315 | ||
| 313 | comment "I/O subsystem configuration" | 316 | comment "I/O subsystem configuration" |
diff --git a/arch/s390/appldata/appldata_base.c b/arch/s390/appldata/appldata_base.c index 655d52543e2d..ad40729bec3d 100644 --- a/arch/s390/appldata/appldata_base.c +++ b/arch/s390/appldata/appldata_base.c | |||
| @@ -130,6 +130,7 @@ static void appldata_work_fn(struct work_struct *work) | |||
| 130 | 130 | ||
| 131 | P_DEBUG(" -= Work Queue =-\n"); | 131 | P_DEBUG(" -= Work Queue =-\n"); |
| 132 | i = 0; | 132 | i = 0; |
| 133 | get_online_cpus(); | ||
| 133 | spin_lock(&appldata_ops_lock); | 134 | spin_lock(&appldata_ops_lock); |
| 134 | list_for_each(lh, &appldata_ops_list) { | 135 | list_for_each(lh, &appldata_ops_list) { |
| 135 | ops = list_entry(lh, struct appldata_ops, list); | 136 | ops = list_entry(lh, struct appldata_ops, list); |
| @@ -140,6 +141,7 @@ static void appldata_work_fn(struct work_struct *work) | |||
| 140 | } | 141 | } |
| 141 | } | 142 | } |
| 142 | spin_unlock(&appldata_ops_lock); | 143 | spin_unlock(&appldata_ops_lock); |
| 144 | put_online_cpus(); | ||
| 143 | } | 145 | } |
| 144 | 146 | ||
| 145 | /* | 147 | /* |
| @@ -266,12 +268,14 @@ appldata_timer_handler(ctl_table *ctl, int write, struct file *filp, | |||
| 266 | len = *lenp; | 268 | len = *lenp; |
| 267 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) | 269 | if (copy_from_user(buf, buffer, len > sizeof(buf) ? sizeof(buf) : len)) |
| 268 | return -EFAULT; | 270 | return -EFAULT; |
| 271 | get_online_cpus(); | ||
| 269 | spin_lock(&appldata_timer_lock); | 272 | spin_lock(&appldata_timer_lock); |
| 270 | if (buf[0] == '1') | 273 | if (buf[0] == '1') |
| 271 | __appldata_vtimer_setup(APPLDATA_ADD_TIMER); | 274 | __appldata_vtimer_setup(APPLDATA_ADD_TIMER); |
| 272 | else if (buf[0] == '0') | 275 | else if (buf[0] == '0') |
| 273 | __appldata_vtimer_setup(APPLDATA_DEL_TIMER); | 276 | __appldata_vtimer_setup(APPLDATA_DEL_TIMER); |
| 274 | spin_unlock(&appldata_timer_lock); | 277 | spin_unlock(&appldata_timer_lock); |
| 278 | put_online_cpus(); | ||
| 275 | out: | 279 | out: |
| 276 | *lenp = len; | 280 | *lenp = len; |
| 277 | *ppos += len; | 281 | *ppos += len; |
| @@ -314,10 +318,12 @@ appldata_interval_handler(ctl_table *ctl, int write, struct file *filp, | |||
| 314 | return -EINVAL; | 318 | return -EINVAL; |
| 315 | } | 319 | } |
| 316 | 320 | ||
| 321 | get_online_cpus(); | ||
| 317 | spin_lock(&appldata_timer_lock); | 322 | spin_lock(&appldata_timer_lock); |
| 318 | appldata_interval = interval; | 323 | appldata_interval = interval; |
| 319 | __appldata_vtimer_setup(APPLDATA_MOD_TIMER); | 324 | __appldata_vtimer_setup(APPLDATA_MOD_TIMER); |
| 320 | spin_unlock(&appldata_timer_lock); | 325 | spin_unlock(&appldata_timer_lock); |
| 326 | put_online_cpus(); | ||
| 321 | 327 | ||
| 322 | P_INFO("Monitoring CPU interval set to %u milliseconds.\n", | 328 | P_INFO("Monitoring CPU interval set to %u milliseconds.\n", |
| 323 | interval); | 329 | interval); |
| @@ -556,8 +562,10 @@ static int __init appldata_init(void) | |||
| 556 | return -ENOMEM; | 562 | return -ENOMEM; |
| 557 | } | 563 | } |
| 558 | 564 | ||
| 565 | get_online_cpus(); | ||
| 559 | for_each_online_cpu(i) | 566 | for_each_online_cpu(i) |
| 560 | appldata_online_cpu(i); | 567 | appldata_online_cpu(i); |
| 568 | put_online_cpus(); | ||
| 561 | 569 | ||
| 562 | /* Register cpu hotplug notifier */ | 570 | /* Register cpu hotplug notifier */ |
| 563 | register_hotcpu_notifier(&appldata_nb); | 571 | register_hotcpu_notifier(&appldata_nb); |
diff --git a/arch/s390/defconfig b/arch/s390/defconfig index aa341d0ea1e6..c5cdb975d590 100644 --- a/arch/s390/defconfig +++ b/arch/s390/defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.25 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Wed Apr 30 11:07:45 2008 | 4 | # Fri May 30 09:49:33 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_SCHED_MC=y | 6 | CONFIG_SCHED_MC=y |
| 7 | CONFIG_MMU=y | 7 | CONFIG_MMU=y |
| @@ -103,6 +103,7 @@ CONFIG_RT_MUTEXES=y | |||
| 103 | # CONFIG_TINY_SHMEM is not set | 103 | # CONFIG_TINY_SHMEM is not set |
| 104 | CONFIG_BASE_SMALL=0 | 104 | CONFIG_BASE_SMALL=0 |
| 105 | CONFIG_MODULES=y | 105 | CONFIG_MODULES=y |
| 106 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 106 | CONFIG_MODULE_UNLOAD=y | 107 | CONFIG_MODULE_UNLOAD=y |
| 107 | # CONFIG_MODULE_FORCE_UNLOAD is not set | 108 | # CONFIG_MODULE_FORCE_UNLOAD is not set |
| 108 | CONFIG_MODVERSIONS=y | 109 | CONFIG_MODVERSIONS=y |
| @@ -173,6 +174,7 @@ CONFIG_PREEMPT=y | |||
| 173 | # CONFIG_PREEMPT_RCU is not set | 174 | # CONFIG_PREEMPT_RCU is not set |
| 174 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 175 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
| 175 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 176 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
| 177 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 176 | CONFIG_SELECT_MEMORY_MODEL=y | 178 | CONFIG_SELECT_MEMORY_MODEL=y |
| 177 | # CONFIG_FLATMEM_MANUAL is not set | 179 | # CONFIG_FLATMEM_MANUAL is not set |
| 178 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 180 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
| @@ -210,6 +212,7 @@ CONFIG_FORCE_MAX_ZONEORDER=9 | |||
| 210 | CONFIG_PFAULT=y | 212 | CONFIG_PFAULT=y |
| 211 | # CONFIG_SHARED_KERNEL is not set | 213 | # CONFIG_SHARED_KERNEL is not set |
| 212 | # CONFIG_CMM is not set | 214 | # CONFIG_CMM is not set |
| 215 | # CONFIG_PAGE_STATES is not set | ||
| 213 | CONFIG_VIRT_TIMER=y | 216 | CONFIG_VIRT_TIMER=y |
| 214 | CONFIG_VIRT_CPU_ACCOUNTING=y | 217 | CONFIG_VIRT_CPU_ACCOUNTING=y |
| 215 | # CONFIG_APPLDATA_BASE is not set | 218 | # CONFIG_APPLDATA_BASE is not set |
| @@ -620,6 +623,7 @@ CONFIG_S390_VMUR=m | |||
| 620 | # | 623 | # |
| 621 | # CONFIG_MEMSTICK is not set | 624 | # CONFIG_MEMSTICK is not set |
| 622 | # CONFIG_NEW_LEDS is not set | 625 | # CONFIG_NEW_LEDS is not set |
| 626 | CONFIG_ACCESSIBILITY=y | ||
| 623 | 627 | ||
| 624 | # | 628 | # |
| 625 | # File systems | 629 | # File systems |
| @@ -754,11 +758,12 @@ CONFIG_FRAME_WARN=2048 | |||
| 754 | CONFIG_MAGIC_SYSRQ=y | 758 | CONFIG_MAGIC_SYSRQ=y |
| 755 | # CONFIG_UNUSED_SYMBOLS is not set | 759 | # CONFIG_UNUSED_SYMBOLS is not set |
| 756 | CONFIG_DEBUG_FS=y | 760 | CONFIG_DEBUG_FS=y |
| 757 | CONFIG_HEADERS_CHECK=y | 761 | # CONFIG_HEADERS_CHECK is not set |
| 758 | CONFIG_DEBUG_KERNEL=y | 762 | CONFIG_DEBUG_KERNEL=y |
| 759 | # CONFIG_SCHED_DEBUG is not set | 763 | # CONFIG_SCHED_DEBUG is not set |
| 760 | # CONFIG_SCHEDSTATS is not set | 764 | # CONFIG_SCHEDSTATS is not set |
| 761 | # CONFIG_TIMER_STATS is not set | 765 | # CONFIG_TIMER_STATS is not set |
| 766 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 762 | # CONFIG_DEBUG_SLAB is not set | 767 | # CONFIG_DEBUG_SLAB is not set |
| 763 | CONFIG_DEBUG_PREEMPT=y | 768 | CONFIG_DEBUG_PREEMPT=y |
| 764 | # CONFIG_DEBUG_RT_MUTEXES is not set | 769 | # CONFIG_DEBUG_RT_MUTEXES is not set |
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c index c14a336f6300..d2f270c995d9 100644 --- a/arch/s390/kernel/dis.c +++ b/arch/s390/kernel/dis.c | |||
| @@ -208,7 +208,7 @@ static const unsigned char formats[][7] = { | |||
| 208 | [INSTR_RRF_F0FF] = { 0xff, F_16,F_24,F_28,0,0,0 }, /* e.g. madbr */ | 208 | [INSTR_RRF_F0FF] = { 0xff, F_16,F_24,F_28,0,0,0 }, /* e.g. madbr */ |
| 209 | [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 },/* e.g. didbr */ | 209 | [INSTR_RRF_FUFF] = { 0xff, F_24,F_16,F_28,U4_20,0,0 },/* e.g. didbr */ |
| 210 | [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 },/* e.g. .insn */ | 210 | [INSTR_RRF_RURR] = { 0xff, R_24,R_28,R_16,U4_20,0,0 },/* e.g. .insn */ |
| 211 | [INSTR_RRF_R0RR] = { 0xff, R_24,R_28,R_16,0,0,0 }, /* e.g. idte */ | 211 | [INSTR_RRF_R0RR] = { 0xff, R_24,R_16,R_28,0,0,0 }, /* e.g. idte */ |
| 212 | [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, /* e.g. fixr */ | 212 | [INSTR_RRF_U0FF] = { 0xff, F_24,U4_16,F_28,0,0,0 }, /* e.g. fixr */ |
| 213 | [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, /* e.g. cfebr */ | 213 | [INSTR_RRF_U0RF] = { 0xff, R_24,U4_16,F_28,0,0,0 }, /* e.g. cfebr */ |
| 214 | [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, /* e.g. sske */ | 214 | [INSTR_RRF_M0RR] = { 0xff, R_24,R_28,M_16,0,0,0 }, /* e.g. sske */ |
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 1f4228948dc4..42b1d12ebb10 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
| @@ -1089,7 +1089,7 @@ out: | |||
| 1089 | 1089 | ||
| 1090 | #ifdef CONFIG_HOTPLUG_CPU | 1090 | #ifdef CONFIG_HOTPLUG_CPU |
| 1091 | 1091 | ||
| 1092 | int smp_rescan_cpus(void) | 1092 | int __ref smp_rescan_cpus(void) |
| 1093 | { | 1093 | { |
| 1094 | cpumask_t newcpus; | 1094 | cpumask_t newcpus; |
| 1095 | int cpu; | 1095 | int cpu; |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 29f3a63806b9..05598649b326 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
| @@ -44,37 +44,34 @@ char empty_zero_page[PAGE_SIZE] __attribute__((__aligned__(PAGE_SIZE))); | |||
| 44 | 44 | ||
| 45 | void show_mem(void) | 45 | void show_mem(void) |
| 46 | { | 46 | { |
| 47 | int i, total = 0, reserved = 0; | 47 | unsigned long i, total = 0, reserved = 0; |
| 48 | int shared = 0, cached = 0; | 48 | unsigned long shared = 0, cached = 0; |
| 49 | unsigned long flags; | ||
| 49 | struct page *page; | 50 | struct page *page; |
| 51 | pg_data_t *pgdat; | ||
| 50 | 52 | ||
| 51 | printk("Mem-info:\n"); | 53 | printk("Mem-info:\n"); |
| 52 | show_free_areas(); | 54 | show_free_areas(); |
| 53 | i = max_mapnr; | 55 | for_each_online_pgdat(pgdat) { |
| 54 | while (i-- > 0) { | 56 | pgdat_resize_lock(pgdat, &flags); |
| 55 | if (!pfn_valid(i)) | 57 | for (i = 0; i < pgdat->node_spanned_pages; i++) { |
| 56 | continue; | 58 | if (!pfn_valid(pgdat->node_start_pfn + i)) |
| 57 | page = pfn_to_page(i); | 59 | continue; |
| 58 | total++; | 60 | page = pfn_to_page(pgdat->node_start_pfn + i); |
| 59 | if (PageReserved(page)) | 61 | total++; |
| 60 | reserved++; | 62 | if (PageReserved(page)) |
| 61 | else if (PageSwapCache(page)) | 63 | reserved++; |
| 62 | cached++; | 64 | else if (PageSwapCache(page)) |
| 63 | else if (page_count(page)) | 65 | cached++; |
| 64 | shared += page_count(page) - 1; | 66 | else if (page_count(page)) |
| 67 | shared += page_count(page) - 1; | ||
| 68 | } | ||
| 69 | pgdat_resize_unlock(pgdat, &flags); | ||
| 65 | } | 70 | } |
| 66 | printk("%d pages of RAM\n", total); | 71 | printk("%ld pages of RAM\n", total); |
| 67 | printk("%d reserved pages\n", reserved); | 72 | printk("%ld reserved pages\n", reserved); |
| 68 | printk("%d pages shared\n", shared); | 73 | printk("%ld pages shared\n", shared); |
| 69 | printk("%d pages swap cached\n", cached); | 74 | printk("%ld pages swap cached\n", cached); |
| 70 | |||
| 71 | printk("%lu pages dirty\n", global_page_state(NR_FILE_DIRTY)); | ||
| 72 | printk("%lu pages writeback\n", global_page_state(NR_WRITEBACK)); | ||
| 73 | printk("%lu pages mapped\n", global_page_state(NR_FILE_MAPPED)); | ||
| 74 | printk("%lu pages slab\n", | ||
| 75 | global_page_state(NR_SLAB_RECLAIMABLE) + | ||
| 76 | global_page_state(NR_SLAB_UNRECLAIMABLE)); | ||
| 77 | printk("%lu pages pagetables\n", global_page_state(NR_PAGETABLE)); | ||
| 78 | } | 75 | } |
| 79 | 76 | ||
| 80 | /* | 77 | /* |
diff --git a/arch/s390/mm/vmem.c b/arch/s390/mm/vmem.c index ea2804808f39..f591188fa2c0 100644 --- a/arch/s390/mm/vmem.c +++ b/arch/s390/mm/vmem.c | |||
| @@ -27,12 +27,19 @@ struct memory_segment { | |||
| 27 | 27 | ||
| 28 | static LIST_HEAD(mem_segs); | 28 | static LIST_HEAD(mem_segs); |
| 29 | 29 | ||
| 30 | static pud_t *vmem_pud_alloc(void) | 30 | static void __ref *vmem_alloc_pages(unsigned int order) |
| 31 | { | ||
| 32 | if (slab_is_available()) | ||
| 33 | return (void *)__get_free_pages(GFP_KERNEL, order); | ||
| 34 | return alloc_bootmem_pages((1 << order) * PAGE_SIZE); | ||
| 35 | } | ||
| 36 | |||
| 37 | static inline pud_t *vmem_pud_alloc(void) | ||
| 31 | { | 38 | { |
| 32 | pud_t *pud = NULL; | 39 | pud_t *pud = NULL; |
| 33 | 40 | ||
| 34 | #ifdef CONFIG_64BIT | 41 | #ifdef CONFIG_64BIT |
| 35 | pud = vmemmap_alloc_block(PAGE_SIZE * 4, 0); | 42 | pud = vmem_alloc_pages(2); |
| 36 | if (!pud) | 43 | if (!pud) |
| 37 | return NULL; | 44 | return NULL; |
| 38 | clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); | 45 | clear_table((unsigned long *) pud, _REGION3_ENTRY_EMPTY, PAGE_SIZE * 4); |
| @@ -40,12 +47,12 @@ static pud_t *vmem_pud_alloc(void) | |||
| 40 | return pud; | 47 | return pud; |
| 41 | } | 48 | } |
| 42 | 49 | ||
| 43 | static pmd_t *vmem_pmd_alloc(void) | 50 | static inline pmd_t *vmem_pmd_alloc(void) |
| 44 | { | 51 | { |
| 45 | pmd_t *pmd = NULL; | 52 | pmd_t *pmd = NULL; |
| 46 | 53 | ||
| 47 | #ifdef CONFIG_64BIT | 54 | #ifdef CONFIG_64BIT |
| 48 | pmd = vmemmap_alloc_block(PAGE_SIZE * 4, 0); | 55 | pmd = vmem_alloc_pages(2); |
| 49 | if (!pmd) | 56 | if (!pmd) |
| 50 | return NULL; | 57 | return NULL; |
| 51 | clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); | 58 | clear_table((unsigned long *) pmd, _SEGMENT_ENTRY_EMPTY, PAGE_SIZE * 4); |
| @@ -207,13 +214,14 @@ int __meminit vmemmap_populate(struct page *start, unsigned long nr, int node) | |||
| 207 | if (pte_none(*pt_dir)) { | 214 | if (pte_none(*pt_dir)) { |
| 208 | unsigned long new_page; | 215 | unsigned long new_page; |
| 209 | 216 | ||
| 210 | new_page =__pa(vmemmap_alloc_block(PAGE_SIZE, 0)); | 217 | new_page =__pa(vmem_alloc_pages(0)); |
| 211 | if (!new_page) | 218 | if (!new_page) |
| 212 | goto out; | 219 | goto out; |
| 213 | pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL); | 220 | pte = pfn_pte(new_page >> PAGE_SHIFT, PAGE_KERNEL); |
| 214 | *pt_dir = pte; | 221 | *pt_dir = pte; |
| 215 | } | 222 | } |
| 216 | } | 223 | } |
| 224 | memset(start, 0, nr * sizeof(struct page)); | ||
| 217 | ret = 0; | 225 | ret = 0; |
| 218 | out: | 226 | out: |
| 219 | flush_tlb_kernel_range(start_addr, end_addr); | 227 | flush_tlb_kernel_range(start_addr, end_addr); |
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig index 8a68160079a9..9a854c8e5274 100644 --- a/arch/sh/Kconfig +++ b/arch/sh/Kconfig | |||
| @@ -281,7 +281,6 @@ config CPU_SUBTYPE_SH7723 | |||
| 281 | select CPU_SH4A | 281 | select CPU_SH4A |
| 282 | select CPU_SHX2 | 282 | select CPU_SHX2 |
| 283 | select ARCH_SPARSEMEM_ENABLE | 283 | select ARCH_SPARSEMEM_ENABLE |
| 284 | select SYS_SUPPORTS_NUMA | ||
| 285 | help | 284 | help |
| 286 | Select SH7723 if you have an SH-MobileR2 CPU. | 285 | Select SH7723 if you have an SH-MobileR2 CPU. |
| 287 | 286 | ||
diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug index 0d2ef1e9a6fd..0f4549860226 100644 --- a/arch/sh/Kconfig.debug +++ b/arch/sh/Kconfig.debug | |||
| @@ -81,7 +81,7 @@ config DEBUG_STACK_USAGE | |||
| 81 | 81 | ||
| 82 | config 4KSTACKS | 82 | config 4KSTACKS |
| 83 | bool "Use 4Kb for kernel stacks instead of 8Kb" | 83 | bool "Use 4Kb for kernel stacks instead of 8Kb" |
| 84 | depends on DEBUG_KERNEL | 84 | depends on DEBUG_KERNEL && (MMU || BROKEN) |
| 85 | help | 85 | help |
| 86 | If you say Y here the kernel will use a 4Kb stacksize for the | 86 | If you say Y here the kernel will use a 4Kb stacksize for the |
| 87 | kernel stack attached to each process/thread. This facilitates | 87 | kernel stack attached to each process/thread. This facilitates |
diff --git a/arch/sh/boards/renesas/rts7751r2d/setup.c b/arch/sh/boards/renesas/rts7751r2d/setup.c index 452d0d6459a4..2308e8753bcd 100644 --- a/arch/sh/boards/renesas/rts7751r2d/setup.c +++ b/arch/sh/boards/renesas/rts7751r2d/setup.c | |||
| @@ -11,7 +11,6 @@ | |||
| 11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
| 12 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
| 13 | #include <linux/ata_platform.h> | 13 | #include <linux/ata_platform.h> |
| 14 | #include <linux/serial_8250.h> | ||
| 15 | #include <linux/sm501.h> | 14 | #include <linux/sm501.h> |
| 16 | #include <linux/sm501-regs.h> | 15 | #include <linux/sm501-regs.h> |
| 17 | #include <linux/pm.h> | 16 | #include <linux/pm.h> |
| @@ -109,27 +108,6 @@ static struct platform_device heartbeat_device = { | |||
| 109 | .resource = heartbeat_resources, | 108 | .resource = heartbeat_resources, |
| 110 | }; | 109 | }; |
| 111 | 110 | ||
| 112 | static struct plat_serial8250_port uart_platform_data[] = { | ||
| 113 | { | ||
| 114 | .membase = (void __iomem *)0xb3e30000, | ||
| 115 | .mapbase = 0xb3e30000, | ||
| 116 | .iotype = UPIO_MEM, | ||
| 117 | .irq = IRQ_VOYAGER, | ||
| 118 | .flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ, | ||
| 119 | .regshift = 2, | ||
| 120 | .uartclk = (9600 * 16), | ||
| 121 | }, | ||
| 122 | { 0 }, | ||
| 123 | }; | ||
| 124 | |||
| 125 | static struct platform_device uart_device = { | ||
| 126 | .name = "serial8250", | ||
| 127 | .id = PLAT8250_DEV_PLATFORM, | ||
| 128 | .dev = { | ||
| 129 | .platform_data = uart_platform_data, | ||
| 130 | }, | ||
| 131 | }; | ||
| 132 | |||
| 133 | static struct resource sm501_resources[] = { | 111 | static struct resource sm501_resources[] = { |
| 134 | [0] = { | 112 | [0] = { |
| 135 | .start = 0x10000000, | 113 | .start = 0x10000000, |
| @@ -185,11 +163,7 @@ static struct sm501_platdata_fb sm501_fb_pdata = { | |||
| 185 | }; | 163 | }; |
| 186 | 164 | ||
| 187 | static struct sm501_initdata sm501_initdata = { | 165 | static struct sm501_initdata sm501_initdata = { |
| 188 | .gpio_high = { | 166 | .devices = SM501_USE_USB_HOST | SM501_USE_UART0, |
| 189 | .set = 0x00001fe0, | ||
| 190 | .mask = 0x0, | ||
| 191 | }, | ||
| 192 | .devices = SM501_USE_USB_HOST, | ||
| 193 | }; | 167 | }; |
| 194 | 168 | ||
| 195 | static struct sm501_platdata sm501_platform_data = { | 169 | static struct sm501_platdata sm501_platform_data = { |
| @@ -208,7 +182,6 @@ static struct platform_device sm501_device = { | |||
| 208 | }; | 182 | }; |
| 209 | 183 | ||
| 210 | static struct platform_device *rts7751r2d_devices[] __initdata = { | 184 | static struct platform_device *rts7751r2d_devices[] __initdata = { |
| 211 | &uart_device, | ||
| 212 | &sm501_device, | 185 | &sm501_device, |
| 213 | &heartbeat_device, | 186 | &heartbeat_device, |
| 214 | &spi_sh_sci_device, | 187 | &spi_sh_sci_device, |
| @@ -272,16 +245,6 @@ static void __init rts7751r2d_setup(char **cmdline_p) | |||
| 272 | 245 | ||
| 273 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_DRAM_CONTROL; | 246 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_DRAM_CONTROL; |
| 274 | writel(readl(sm501_reg) | 0x00f107c0, sm501_reg); | 247 | writel(readl(sm501_reg) | 0x00f107c0, sm501_reg); |
| 275 | |||
| 276 | /* | ||
| 277 | * Power Mode Gate - Enable UART0 | ||
| 278 | */ | ||
| 279 | |||
| 280 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_POWER_MODE_0_GATE; | ||
| 281 | writel(readl(sm501_reg) | (1 << SM501_GATE_UART0), sm501_reg); | ||
| 282 | |||
| 283 | sm501_reg = (void __iomem *)0xb3e00000 + SM501_POWER_MODE_1_GATE; | ||
| 284 | writel(readl(sm501_reg) | (1 << SM501_GATE_UART0), sm501_reg); | ||
| 285 | } | 248 | } |
| 286 | 249 | ||
| 287 | /* | 250 | /* |
diff --git a/arch/sh/configs/migor_defconfig b/arch/sh/configs/migor_defconfig index ee5900817f8f..287408b2ace6 100644 --- a/arch/sh/configs/migor_defconfig +++ b/arch/sh/configs/migor_defconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.24 | 3 | # Linux kernel version: 2.6.26-rc3 |
| 4 | # Wed Feb 6 21:52:20 2008 | 4 | # Thu May 22 14:30:07 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
| 7 | CONFIG_SUPERH32=y | 7 | CONFIG_SUPERH32=y |
| @@ -20,6 +20,7 @@ CONFIG_LOCKDEP_SUPPORT=y | |||
| 20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 20 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 21 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 22 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 22 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
| 23 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
| 23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 24 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 24 | 25 | ||
| 25 | # | 26 | # |
| @@ -36,18 +37,16 @@ CONFIG_SYSVIPC_SYSCTL=y | |||
| 36 | # CONFIG_POSIX_MQUEUE is not set | 37 | # CONFIG_POSIX_MQUEUE is not set |
| 37 | # CONFIG_BSD_PROCESS_ACCT is not set | 38 | # CONFIG_BSD_PROCESS_ACCT is not set |
| 38 | # CONFIG_TASKSTATS is not set | 39 | # CONFIG_TASKSTATS is not set |
| 39 | # CONFIG_USER_NS is not set | ||
| 40 | # CONFIG_PID_NS is not set | ||
| 41 | # CONFIG_AUDIT is not set | 40 | # CONFIG_AUDIT is not set |
| 42 | CONFIG_IKCONFIG=y | 41 | CONFIG_IKCONFIG=y |
| 43 | CONFIG_IKCONFIG_PROC=y | 42 | CONFIG_IKCONFIG_PROC=y |
| 44 | CONFIG_LOG_BUF_SHIFT=14 | 43 | CONFIG_LOG_BUF_SHIFT=14 |
| 45 | # CONFIG_CGROUPS is not set | 44 | # CONFIG_CGROUPS is not set |
| 46 | CONFIG_FAIR_GROUP_SCHED=y | 45 | # CONFIG_GROUP_SCHED is not set |
| 47 | CONFIG_FAIR_USER_SCHED=y | ||
| 48 | # CONFIG_FAIR_CGROUP_SCHED is not set | ||
| 49 | CONFIG_SYSFS_DEPRECATED=y | 46 | CONFIG_SYSFS_DEPRECATED=y |
| 47 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 50 | # CONFIG_RELAY is not set | 48 | # CONFIG_RELAY is not set |
| 49 | # CONFIG_NAMESPACES is not set | ||
| 51 | CONFIG_BLK_DEV_INITRD=y | 50 | CONFIG_BLK_DEV_INITRD=y |
| 52 | CONFIG_INITRAMFS_SOURCE="" | 51 | CONFIG_INITRAMFS_SOURCE="" |
| 53 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set | 52 | # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set |
| @@ -61,11 +60,13 @@ CONFIG_HOTPLUG=y | |||
| 61 | CONFIG_PRINTK=y | 60 | CONFIG_PRINTK=y |
| 62 | CONFIG_BUG=y | 61 | CONFIG_BUG=y |
| 63 | CONFIG_ELF_CORE=y | 62 | CONFIG_ELF_CORE=y |
| 63 | CONFIG_COMPAT_BRK=y | ||
| 64 | CONFIG_BASE_FULL=y | 64 | CONFIG_BASE_FULL=y |
| 65 | CONFIG_FUTEX=y | 65 | CONFIG_FUTEX=y |
| 66 | CONFIG_ANON_INODES=y | 66 | CONFIG_ANON_INODES=y |
| 67 | CONFIG_EPOLL=y | 67 | CONFIG_EPOLL=y |
| 68 | CONFIG_SIGNALFD=y | 68 | CONFIG_SIGNALFD=y |
| 69 | CONFIG_TIMERFD=y | ||
| 69 | CONFIG_EVENTFD=y | 70 | CONFIG_EVENTFD=y |
| 70 | CONFIG_SHMEM=y | 71 | CONFIG_SHMEM=y |
| 71 | CONFIG_VM_EVENT_COUNTERS=y | 72 | CONFIG_VM_EVENT_COUNTERS=y |
| @@ -77,11 +78,15 @@ CONFIG_PROFILING=y | |||
| 77 | CONFIG_OPROFILE=y | 78 | CONFIG_OPROFILE=y |
| 78 | CONFIG_HAVE_OPROFILE=y | 79 | CONFIG_HAVE_OPROFILE=y |
| 79 | # CONFIG_HAVE_KPROBES is not set | 80 | # CONFIG_HAVE_KPROBES is not set |
| 81 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 82 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 83 | CONFIG_PROC_PAGE_MONITOR=y | ||
| 80 | CONFIG_SLABINFO=y | 84 | CONFIG_SLABINFO=y |
| 81 | CONFIG_RT_MUTEXES=y | 85 | CONFIG_RT_MUTEXES=y |
| 82 | # CONFIG_TINY_SHMEM is not set | 86 | # CONFIG_TINY_SHMEM is not set |
| 83 | CONFIG_BASE_SMALL=0 | 87 | CONFIG_BASE_SMALL=0 |
| 84 | CONFIG_MODULES=y | 88 | CONFIG_MODULES=y |
| 89 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 85 | # CONFIG_MODULE_UNLOAD is not set | 90 | # CONFIG_MODULE_UNLOAD is not set |
| 86 | # CONFIG_MODVERSIONS is not set | 91 | # CONFIG_MODVERSIONS is not set |
| 87 | # CONFIG_MODULE_SRCVERSION_ALL is not set | 92 | # CONFIG_MODULE_SRCVERSION_ALL is not set |
| @@ -105,7 +110,6 @@ CONFIG_DEFAULT_AS=y | |||
| 105 | # CONFIG_DEFAULT_NOOP is not set | 110 | # CONFIG_DEFAULT_NOOP is not set |
| 106 | CONFIG_DEFAULT_IOSCHED="anticipatory" | 111 | CONFIG_DEFAULT_IOSCHED="anticipatory" |
| 107 | CONFIG_CLASSIC_RCU=y | 112 | CONFIG_CLASSIC_RCU=y |
| 108 | # CONFIG_PREEMPT_RCU is not set | ||
| 109 | 113 | ||
| 110 | # | 114 | # |
| 111 | # System type | 115 | # System type |
| @@ -118,6 +122,7 @@ CONFIG_CPU_SHX2=y | |||
| 118 | # CONFIG_CPU_SUBTYPE_SH7203 is not set | 122 | # CONFIG_CPU_SUBTYPE_SH7203 is not set |
| 119 | # CONFIG_CPU_SUBTYPE_SH7206 is not set | 123 | # CONFIG_CPU_SUBTYPE_SH7206 is not set |
| 120 | # CONFIG_CPU_SUBTYPE_SH7263 is not set | 124 | # CONFIG_CPU_SUBTYPE_SH7263 is not set |
| 125 | # CONFIG_CPU_SUBTYPE_MXG is not set | ||
| 121 | # CONFIG_CPU_SUBTYPE_SH7705 is not set | 126 | # CONFIG_CPU_SUBTYPE_SH7705 is not set |
| 122 | # CONFIG_CPU_SUBTYPE_SH7706 is not set | 127 | # CONFIG_CPU_SUBTYPE_SH7706 is not set |
| 123 | # CONFIG_CPU_SUBTYPE_SH7707 is not set | 128 | # CONFIG_CPU_SUBTYPE_SH7707 is not set |
| @@ -135,6 +140,7 @@ CONFIG_CPU_SHX2=y | |||
| 135 | # CONFIG_CPU_SUBTYPE_SH7751R is not set | 140 | # CONFIG_CPU_SUBTYPE_SH7751R is not set |
| 136 | # CONFIG_CPU_SUBTYPE_SH7760 is not set | 141 | # CONFIG_CPU_SUBTYPE_SH7760 is not set |
| 137 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set | 142 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set |
| 143 | # CONFIG_CPU_SUBTYPE_SH7723 is not set | ||
| 138 | # CONFIG_CPU_SUBTYPE_SH7763 is not set | 144 | # CONFIG_CPU_SUBTYPE_SH7763 is not set |
| 139 | # CONFIG_CPU_SUBTYPE_SH7770 is not set | 145 | # CONFIG_CPU_SUBTYPE_SH7770 is not set |
| 140 | # CONFIG_CPU_SUBTYPE_SH7780 is not set | 146 | # CONFIG_CPU_SUBTYPE_SH7780 is not set |
| @@ -142,6 +148,7 @@ CONFIG_CPU_SHX2=y | |||
| 142 | # CONFIG_CPU_SUBTYPE_SHX3 is not set | 148 | # CONFIG_CPU_SUBTYPE_SHX3 is not set |
| 143 | # CONFIG_CPU_SUBTYPE_SH7343 is not set | 149 | # CONFIG_CPU_SUBTYPE_SH7343 is not set |
| 144 | CONFIG_CPU_SUBTYPE_SH7722=y | 150 | CONFIG_CPU_SUBTYPE_SH7722=y |
| 151 | # CONFIG_CPU_SUBTYPE_SH7366 is not set | ||
| 145 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set | 152 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set |
| 146 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set | 153 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set |
| 147 | 154 | ||
| @@ -255,7 +262,6 @@ CONFIG_HZ=250 | |||
| 255 | CONFIG_PREEMPT_NONE=y | 262 | CONFIG_PREEMPT_NONE=y |
| 256 | # CONFIG_PREEMPT_VOLUNTARY is not set | 263 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 257 | # CONFIG_PREEMPT is not set | 264 | # CONFIG_PREEMPT is not set |
| 258 | CONFIG_RCU_TRACE=y | ||
| 259 | CONFIG_GUSA=y | 265 | CONFIG_GUSA=y |
| 260 | 266 | ||
| 261 | # | 267 | # |
| @@ -323,8 +329,6 @@ CONFIG_TCP_CONG_CUBIC=y | |||
| 323 | CONFIG_DEFAULT_TCP_CONG="cubic" | 329 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 324 | # CONFIG_TCP_MD5SIG is not set | 330 | # CONFIG_TCP_MD5SIG is not set |
| 325 | # CONFIG_IPV6 is not set | 331 | # CONFIG_IPV6 is not set |
| 326 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 327 | # CONFIG_INET6_TUNNEL is not set | ||
| 328 | # CONFIG_NETWORK_SECMARK is not set | 332 | # CONFIG_NETWORK_SECMARK is not set |
| 329 | # CONFIG_NETFILTER is not set | 333 | # CONFIG_NETFILTER is not set |
| 330 | # CONFIG_IP_DCCP is not set | 334 | # CONFIG_IP_DCCP is not set |
| @@ -376,7 +380,90 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y | |||
| 376 | CONFIG_FW_LOADER=m | 380 | CONFIG_FW_LOADER=m |
| 377 | # CONFIG_SYS_HYPERVISOR is not set | 381 | # CONFIG_SYS_HYPERVISOR is not set |
| 378 | # CONFIG_CONNECTOR is not set | 382 | # CONFIG_CONNECTOR is not set |
| 379 | # CONFIG_MTD is not set | 383 | CONFIG_MTD=y |
| 384 | # CONFIG_MTD_DEBUG is not set | ||
| 385 | CONFIG_MTD_CONCAT=y | ||
| 386 | CONFIG_MTD_PARTITIONS=y | ||
| 387 | # CONFIG_MTD_REDBOOT_PARTS is not set | ||
| 388 | CONFIG_MTD_CMDLINE_PARTS=y | ||
| 389 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 390 | |||
| 391 | # | ||
| 392 | # User Modules And Translation Layers | ||
| 393 | # | ||
| 394 | CONFIG_MTD_CHAR=y | ||
| 395 | CONFIG_MTD_BLKDEVS=y | ||
| 396 | CONFIG_MTD_BLOCK=y | ||
| 397 | # CONFIG_FTL is not set | ||
| 398 | # CONFIG_NFTL is not set | ||
| 399 | # CONFIG_INFTL is not set | ||
| 400 | # CONFIG_RFD_FTL is not set | ||
| 401 | # CONFIG_SSFDC is not set | ||
| 402 | # CONFIG_MTD_OOPS is not set | ||
| 403 | |||
| 404 | # | ||
| 405 | # RAM/ROM/Flash chip drivers | ||
| 406 | # | ||
| 407 | CONFIG_MTD_CFI=y | ||
| 408 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 409 | CONFIG_MTD_GEN_PROBE=y | ||
| 410 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 411 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 412 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 413 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 414 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 415 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 416 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 417 | CONFIG_MTD_CFI_I1=y | ||
| 418 | CONFIG_MTD_CFI_I2=y | ||
| 419 | # CONFIG_MTD_CFI_I4 is not set | ||
| 420 | # CONFIG_MTD_CFI_I8 is not set | ||
| 421 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 422 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 423 | # CONFIG_MTD_CFI_STAA is not set | ||
| 424 | CONFIG_MTD_CFI_UTIL=y | ||
| 425 | # CONFIG_MTD_RAM is not set | ||
| 426 | # CONFIG_MTD_ROM is not set | ||
| 427 | # CONFIG_MTD_ABSENT is not set | ||
| 428 | |||
| 429 | # | ||
| 430 | # Mapping drivers for chip access | ||
| 431 | # | ||
| 432 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 433 | CONFIG_MTD_PHYSMAP=y | ||
| 434 | CONFIG_MTD_PHYSMAP_START=0xffffffff | ||
| 435 | CONFIG_MTD_PHYSMAP_LEN=0 | ||
| 436 | CONFIG_MTD_PHYSMAP_BANKWIDTH=0 | ||
| 437 | # CONFIG_MTD_PLATRAM is not set | ||
| 438 | |||
| 439 | # | ||
| 440 | # Self-contained MTD device drivers | ||
| 441 | # | ||
| 442 | # CONFIG_MTD_SLRAM is not set | ||
| 443 | # CONFIG_MTD_PHRAM is not set | ||
| 444 | # CONFIG_MTD_MTDRAM is not set | ||
| 445 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 446 | |||
| 447 | # | ||
| 448 | # Disk-On-Chip Device Drivers | ||
| 449 | # | ||
| 450 | # CONFIG_MTD_DOC2000 is not set | ||
| 451 | # CONFIG_MTD_DOC2001 is not set | ||
| 452 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 453 | CONFIG_MTD_NAND=y | ||
| 454 | # CONFIG_MTD_NAND_VERIFY_WRITE is not set | ||
| 455 | # CONFIG_MTD_NAND_ECC_SMC is not set | ||
| 456 | # CONFIG_MTD_NAND_MUSEUM_IDS is not set | ||
| 457 | CONFIG_MTD_NAND_IDS=y | ||
| 458 | # CONFIG_MTD_NAND_DISKONCHIP is not set | ||
| 459 | # CONFIG_MTD_NAND_NANDSIM is not set | ||
| 460 | CONFIG_MTD_NAND_PLATFORM=y | ||
| 461 | # CONFIG_MTD_ONENAND is not set | ||
| 462 | |||
| 463 | # | ||
| 464 | # UBI - Unsorted block images | ||
| 465 | # | ||
| 466 | # CONFIG_MTD_UBI is not set | ||
| 380 | # CONFIG_PARPORT is not set | 467 | # CONFIG_PARPORT is not set |
| 381 | CONFIG_BLK_DEV=y | 468 | CONFIG_BLK_DEV=y |
| 382 | # CONFIG_BLK_DEV_COW_COMMON is not set | 469 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| @@ -385,11 +472,13 @@ CONFIG_BLK_DEV=y | |||
| 385 | CONFIG_BLK_DEV_RAM=y | 472 | CONFIG_BLK_DEV_RAM=y |
| 386 | CONFIG_BLK_DEV_RAM_COUNT=16 | 473 | CONFIG_BLK_DEV_RAM_COUNT=16 |
| 387 | CONFIG_BLK_DEV_RAM_SIZE=4096 | 474 | CONFIG_BLK_DEV_RAM_SIZE=4096 |
| 388 | CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024 | 475 | # CONFIG_BLK_DEV_XIP is not set |
| 389 | # CONFIG_CDROM_PKTCDVD is not set | 476 | # CONFIG_CDROM_PKTCDVD is not set |
| 390 | # CONFIG_ATA_OVER_ETH is not set | 477 | # CONFIG_ATA_OVER_ETH is not set |
| 391 | CONFIG_MISC_DEVICES=y | 478 | CONFIG_MISC_DEVICES=y |
| 392 | # CONFIG_EEPROM_93CX6 is not set | 479 | # CONFIG_EEPROM_93CX6 is not set |
| 480 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 481 | CONFIG_HAVE_IDE=y | ||
| 393 | # CONFIG_IDE is not set | 482 | # CONFIG_IDE is not set |
| 394 | 483 | ||
| 395 | # | 484 | # |
| @@ -461,6 +550,7 @@ CONFIG_SMC91X=y | |||
| 461 | # | 550 | # |
| 462 | # CONFIG_WLAN_PRE80211 is not set | 551 | # CONFIG_WLAN_PRE80211 is not set |
| 463 | # CONFIG_WLAN_80211 is not set | 552 | # CONFIG_WLAN_80211 is not set |
| 553 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 464 | # CONFIG_WAN is not set | 554 | # CONFIG_WAN is not set |
| 465 | # CONFIG_PPP is not set | 555 | # CONFIG_PPP is not set |
| 466 | # CONFIG_SLIP is not set | 556 | # CONFIG_SLIP is not set |
| @@ -482,13 +572,20 @@ CONFIG_INPUT=y | |||
| 482 | # | 572 | # |
| 483 | # CONFIG_INPUT_MOUSEDEV is not set | 573 | # CONFIG_INPUT_MOUSEDEV is not set |
| 484 | # CONFIG_INPUT_JOYDEV is not set | 574 | # CONFIG_INPUT_JOYDEV is not set |
| 485 | # CONFIG_INPUT_EVDEV is not set | 575 | CONFIG_INPUT_EVDEV=y |
| 486 | # CONFIG_INPUT_EVBUG is not set | 576 | # CONFIG_INPUT_EVBUG is not set |
| 487 | 577 | ||
| 488 | # | 578 | # |
| 489 | # Input Device Drivers | 579 | # Input Device Drivers |
| 490 | # | 580 | # |
| 491 | # CONFIG_INPUT_KEYBOARD is not set | 581 | CONFIG_INPUT_KEYBOARD=y |
| 582 | # CONFIG_KEYBOARD_ATKBD is not set | ||
| 583 | # CONFIG_KEYBOARD_SUNKBD is not set | ||
| 584 | # CONFIG_KEYBOARD_LKKBD is not set | ||
| 585 | # CONFIG_KEYBOARD_XTKBD is not set | ||
| 586 | # CONFIG_KEYBOARD_NEWTON is not set | ||
| 587 | # CONFIG_KEYBOARD_STOWAWAY is not set | ||
| 588 | CONFIG_KEYBOARD_SH_KEYSC=y | ||
| 492 | # CONFIG_INPUT_MOUSE is not set | 589 | # CONFIG_INPUT_MOUSE is not set |
| 493 | # CONFIG_INPUT_JOYSTICK is not set | 590 | # CONFIG_INPUT_JOYSTICK is not set |
| 494 | # CONFIG_INPUT_TABLET is not set | 591 | # CONFIG_INPUT_TABLET is not set |
| @@ -508,6 +605,7 @@ CONFIG_VT=y | |||
| 508 | CONFIG_VT_CONSOLE=y | 605 | CONFIG_VT_CONSOLE=y |
| 509 | CONFIG_HW_CONSOLE=y | 606 | CONFIG_HW_CONSOLE=y |
| 510 | CONFIG_VT_HW_CONSOLE_BINDING=y | 607 | CONFIG_VT_HW_CONSOLE_BINDING=y |
| 608 | CONFIG_DEVKMEM=y | ||
| 511 | # CONFIG_SERIAL_NONSTANDARD is not set | 609 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 512 | 610 | ||
| 513 | # | 611 | # |
| @@ -531,16 +629,40 @@ CONFIG_HW_RANDOM=y | |||
| 531 | # CONFIG_R3964 is not set | 629 | # CONFIG_R3964 is not set |
| 532 | # CONFIG_RAW_DRIVER is not set | 630 | # CONFIG_RAW_DRIVER is not set |
| 533 | # CONFIG_TCG_TPM is not set | 631 | # CONFIG_TCG_TPM is not set |
| 534 | # CONFIG_I2C is not set | 632 | CONFIG_I2C=y |
| 535 | 633 | CONFIG_I2C_BOARDINFO=y | |
| 536 | # | 634 | # CONFIG_I2C_CHARDEV is not set |
| 537 | # SPI support | 635 | |
| 538 | # | 636 | # |
| 637 | # I2C Hardware Bus support | ||
| 638 | # | ||
| 639 | # CONFIG_I2C_OCORES is not set | ||
| 640 | # CONFIG_I2C_PARPORT_LIGHT is not set | ||
| 641 | # CONFIG_I2C_SIMTEC is not set | ||
| 642 | # CONFIG_I2C_TAOS_EVM is not set | ||
| 643 | # CONFIG_I2C_STUB is not set | ||
| 644 | # CONFIG_I2C_PCA_PLATFORM is not set | ||
| 645 | CONFIG_I2C_SH_MOBILE=y | ||
| 646 | |||
| 647 | # | ||
| 648 | # Miscellaneous I2C Chip support | ||
| 649 | # | ||
| 650 | # CONFIG_DS1682 is not set | ||
| 651 | # CONFIG_SENSORS_EEPROM is not set | ||
| 652 | # CONFIG_SENSORS_PCF8574 is not set | ||
| 653 | # CONFIG_PCF8575 is not set | ||
| 654 | # CONFIG_SENSORS_PCF8591 is not set | ||
| 655 | # CONFIG_SENSORS_MAX6875 is not set | ||
| 656 | # CONFIG_SENSORS_TSL2550 is not set | ||
| 657 | # CONFIG_I2C_DEBUG_CORE is not set | ||
| 658 | # CONFIG_I2C_DEBUG_ALGO is not set | ||
| 659 | # CONFIG_I2C_DEBUG_BUS is not set | ||
| 660 | # CONFIG_I2C_DEBUG_CHIP is not set | ||
| 539 | # CONFIG_SPI is not set | 661 | # CONFIG_SPI is not set |
| 540 | # CONFIG_SPI_MASTER is not set | ||
| 541 | # CONFIG_W1 is not set | 662 | # CONFIG_W1 is not set |
| 542 | # CONFIG_POWER_SUPPLY is not set | 663 | # CONFIG_POWER_SUPPLY is not set |
| 543 | # CONFIG_HWMON is not set | 664 | # CONFIG_HWMON is not set |
| 665 | # CONFIG_THERMAL is not set | ||
| 544 | # CONFIG_WATCHDOG is not set | 666 | # CONFIG_WATCHDOG is not set |
| 545 | 667 | ||
| 546 | # | 668 | # |
| @@ -553,12 +675,22 @@ CONFIG_SSB_POSSIBLE=y | |||
| 553 | # Multifunction device drivers | 675 | # Multifunction device drivers |
| 554 | # | 676 | # |
| 555 | # CONFIG_MFD_SM501 is not set | 677 | # CONFIG_MFD_SM501 is not set |
| 678 | # CONFIG_HTC_PASIC3 is not set | ||
| 556 | 679 | ||
| 557 | # | 680 | # |
| 558 | # Multimedia devices | 681 | # Multimedia devices |
| 559 | # | 682 | # |
| 683 | |||
| 684 | # | ||
| 685 | # Multimedia core support | ||
| 686 | # | ||
| 560 | # CONFIG_VIDEO_DEV is not set | 687 | # CONFIG_VIDEO_DEV is not set |
| 561 | # CONFIG_DVB_CORE is not set | 688 | # CONFIG_DVB_CORE is not set |
| 689 | # CONFIG_VIDEO_MEDIA is not set | ||
| 690 | |||
| 691 | # | ||
| 692 | # Multimedia drivers | ||
| 693 | # | ||
| 562 | # CONFIG_DAB is not set | 694 | # CONFIG_DAB is not set |
| 563 | 695 | ||
| 564 | # | 696 | # |
| @@ -592,6 +724,8 @@ CONFIG_USB_ARCH_HAS_HCD=y | |||
| 592 | # CONFIG_USB_ARCH_HAS_OHCI is not set | 724 | # CONFIG_USB_ARCH_HAS_OHCI is not set |
| 593 | # CONFIG_USB_ARCH_HAS_EHCI is not set | 725 | # CONFIG_USB_ARCH_HAS_EHCI is not set |
| 594 | # CONFIG_USB is not set | 726 | # CONFIG_USB is not set |
| 727 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 728 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 595 | 729 | ||
| 596 | # | 730 | # |
| 597 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | 731 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' |
| @@ -608,6 +742,7 @@ CONFIG_USB_GADGET_SELECTED=y | |||
| 608 | CONFIG_USB_GADGET_M66592=y | 742 | CONFIG_USB_GADGET_M66592=y |
| 609 | CONFIG_USB_M66592=y | 743 | CONFIG_USB_M66592=y |
| 610 | CONFIG_SUPERH_BUILT_IN_M66592=y | 744 | CONFIG_SUPERH_BUILT_IN_M66592=y |
| 745 | # CONFIG_USB_GADGET_PXA27X is not set | ||
| 611 | # CONFIG_USB_GADGET_GOKU is not set | 746 | # CONFIG_USB_GADGET_GOKU is not set |
| 612 | # CONFIG_USB_GADGET_LH7A40X is not set | 747 | # CONFIG_USB_GADGET_LH7A40X is not set |
| 613 | # CONFIG_USB_GADGET_OMAP is not set | 748 | # CONFIG_USB_GADGET_OMAP is not set |
| @@ -623,7 +758,9 @@ CONFIG_USB_G_SERIAL=y | |||
| 623 | # CONFIG_USB_MIDI_GADGET is not set | 758 | # CONFIG_USB_MIDI_GADGET is not set |
| 624 | # CONFIG_USB_G_PRINTER is not set | 759 | # CONFIG_USB_G_PRINTER is not set |
| 625 | # CONFIG_MMC is not set | 760 | # CONFIG_MMC is not set |
| 761 | # CONFIG_MEMSTICK is not set | ||
| 626 | # CONFIG_NEW_LEDS is not set | 762 | # CONFIG_NEW_LEDS is not set |
| 763 | # CONFIG_ACCESSIBILITY is not set | ||
| 627 | CONFIG_RTC_LIB=y | 764 | CONFIG_RTC_LIB=y |
| 628 | CONFIG_RTC_CLASS=y | 765 | CONFIG_RTC_CLASS=y |
| 629 | CONFIG_RTC_HCTOSYS=y | 766 | CONFIG_RTC_HCTOSYS=y |
| @@ -640,15 +777,31 @@ CONFIG_RTC_INTF_DEV=y | |||
| 640 | # CONFIG_RTC_DRV_TEST is not set | 777 | # CONFIG_RTC_DRV_TEST is not set |
| 641 | 778 | ||
| 642 | # | 779 | # |
| 780 | # I2C RTC drivers | ||
| 781 | # | ||
| 782 | # CONFIG_RTC_DRV_DS1307 is not set | ||
| 783 | # CONFIG_RTC_DRV_DS1374 is not set | ||
| 784 | # CONFIG_RTC_DRV_DS1672 is not set | ||
| 785 | # CONFIG_RTC_DRV_MAX6900 is not set | ||
| 786 | CONFIG_RTC_DRV_RS5C372=y | ||
| 787 | # CONFIG_RTC_DRV_ISL1208 is not set | ||
| 788 | # CONFIG_RTC_DRV_X1205 is not set | ||
| 789 | # CONFIG_RTC_DRV_PCF8563 is not set | ||
| 790 | # CONFIG_RTC_DRV_PCF8583 is not set | ||
| 791 | # CONFIG_RTC_DRV_M41T80 is not set | ||
| 792 | # CONFIG_RTC_DRV_S35390A is not set | ||
| 793 | |||
| 794 | # | ||
| 643 | # SPI RTC drivers | 795 | # SPI RTC drivers |
| 644 | # | 796 | # |
| 645 | 797 | ||
| 646 | # | 798 | # |
| 647 | # Platform RTC drivers | 799 | # Platform RTC drivers |
| 648 | # | 800 | # |
| 801 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 649 | # CONFIG_RTC_DRV_DS1553 is not set | 802 | # CONFIG_RTC_DRV_DS1553 is not set |
| 650 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 651 | # CONFIG_RTC_DRV_DS1742 is not set | 803 | # CONFIG_RTC_DRV_DS1742 is not set |
| 804 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 652 | # CONFIG_RTC_DRV_M48T86 is not set | 805 | # CONFIG_RTC_DRV_M48T86 is not set |
| 653 | # CONFIG_RTC_DRV_M48T59 is not set | 806 | # CONFIG_RTC_DRV_M48T59 is not set |
| 654 | # CONFIG_RTC_DRV_V3020 is not set | 807 | # CONFIG_RTC_DRV_V3020 is not set |
| @@ -657,10 +810,6 @@ CONFIG_RTC_INTF_DEV=y | |||
| 657 | # on-CPU RTC drivers | 810 | # on-CPU RTC drivers |
| 658 | # | 811 | # |
| 659 | CONFIG_RTC_DRV_SH=y | 812 | CONFIG_RTC_DRV_SH=y |
| 660 | |||
| 661 | # | ||
| 662 | # Userspace I/O | ||
| 663 | # | ||
| 664 | # CONFIG_UIO is not set | 813 | # CONFIG_UIO is not set |
| 665 | 814 | ||
| 666 | # | 815 | # |
| @@ -673,13 +822,10 @@ CONFIG_RTC_DRV_SH=y | |||
| 673 | # CONFIG_JFS_FS is not set | 822 | # CONFIG_JFS_FS is not set |
| 674 | # CONFIG_FS_POSIX_ACL is not set | 823 | # CONFIG_FS_POSIX_ACL is not set |
| 675 | # CONFIG_XFS_FS is not set | 824 | # CONFIG_XFS_FS is not set |
| 676 | # CONFIG_GFS2_FS is not set | ||
| 677 | # CONFIG_OCFS2_FS is not set | 825 | # CONFIG_OCFS2_FS is not set |
| 678 | # CONFIG_MINIX_FS is not set | 826 | # CONFIG_DNOTIFY is not set |
| 679 | # CONFIG_ROMFS_FS is not set | ||
| 680 | # CONFIG_INOTIFY is not set | 827 | # CONFIG_INOTIFY is not set |
| 681 | # CONFIG_QUOTA is not set | 828 | # CONFIG_QUOTA is not set |
| 682 | # CONFIG_DNOTIFY is not set | ||
| 683 | # CONFIG_AUTOFS_FS is not set | 829 | # CONFIG_AUTOFS_FS is not set |
| 684 | # CONFIG_AUTOFS4_FS is not set | 830 | # CONFIG_AUTOFS4_FS is not set |
| 685 | # CONFIG_FUSE_FS is not set | 831 | # CONFIG_FUSE_FS is not set |
| @@ -720,10 +866,13 @@ CONFIG_TMPFS=y | |||
| 720 | # CONFIG_BEFS_FS is not set | 866 | # CONFIG_BEFS_FS is not set |
| 721 | # CONFIG_BFS_FS is not set | 867 | # CONFIG_BFS_FS is not set |
| 722 | # CONFIG_EFS_FS is not set | 868 | # CONFIG_EFS_FS is not set |
| 869 | # CONFIG_JFFS2_FS is not set | ||
| 723 | # CONFIG_CRAMFS is not set | 870 | # CONFIG_CRAMFS is not set |
| 724 | # CONFIG_VXFS_FS is not set | 871 | # CONFIG_VXFS_FS is not set |
| 872 | # CONFIG_MINIX_FS is not set | ||
| 725 | # CONFIG_HPFS_FS is not set | 873 | # CONFIG_HPFS_FS is not set |
| 726 | # CONFIG_QNX4FS_FS is not set | 874 | # CONFIG_QNX4FS_FS is not set |
| 875 | # CONFIG_ROMFS_FS is not set | ||
| 727 | # CONFIG_SYSV_FS is not set | 876 | # CONFIG_SYSV_FS is not set |
| 728 | # CONFIG_UFS_FS is not set | 877 | # CONFIG_UFS_FS is not set |
| 729 | # CONFIG_NETWORK_FILESYSTEMS is not set | 878 | # CONFIG_NETWORK_FILESYSTEMS is not set |
| @@ -743,6 +892,7 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y | |||
| 743 | # CONFIG_PRINTK_TIME is not set | 892 | # CONFIG_PRINTK_TIME is not set |
| 744 | CONFIG_ENABLE_WARN_DEPRECATED=y | 893 | CONFIG_ENABLE_WARN_DEPRECATED=y |
| 745 | CONFIG_ENABLE_MUST_CHECK=y | 894 | CONFIG_ENABLE_MUST_CHECK=y |
| 895 | CONFIG_FRAME_WARN=1024 | ||
| 746 | # CONFIG_MAGIC_SYSRQ is not set | 896 | # CONFIG_MAGIC_SYSRQ is not set |
| 747 | # CONFIG_UNUSED_SYMBOLS is not set | 897 | # CONFIG_UNUSED_SYMBOLS is not set |
| 748 | CONFIG_DEBUG_FS=y | 898 | CONFIG_DEBUG_FS=y |
| @@ -763,48 +913,77 @@ CONFIG_EARLY_PRINTK=y | |||
| 763 | # CONFIG_SECURITY is not set | 913 | # CONFIG_SECURITY is not set |
| 764 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | 914 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set |
| 765 | CONFIG_CRYPTO=y | 915 | CONFIG_CRYPTO=y |
| 766 | # CONFIG_CRYPTO_SEQIV is not set | 916 | |
| 917 | # | ||
| 918 | # Crypto core or helper | ||
| 919 | # | ||
| 767 | # CONFIG_CRYPTO_MANAGER is not set | 920 | # CONFIG_CRYPTO_MANAGER is not set |
| 921 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 922 | # CONFIG_CRYPTO_NULL is not set | ||
| 923 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 924 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 925 | # CONFIG_CRYPTO_TEST is not set | ||
| 926 | |||
| 927 | # | ||
| 928 | # Authenticated Encryption with Associated Data | ||
| 929 | # | ||
| 930 | # CONFIG_CRYPTO_CCM is not set | ||
| 931 | # CONFIG_CRYPTO_GCM is not set | ||
| 932 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 933 | |||
| 934 | # | ||
| 935 | # Block modes | ||
| 936 | # | ||
| 937 | # CONFIG_CRYPTO_CBC is not set | ||
| 938 | # CONFIG_CRYPTO_CTR is not set | ||
| 939 | # CONFIG_CRYPTO_CTS is not set | ||
| 940 | # CONFIG_CRYPTO_ECB is not set | ||
| 941 | # CONFIG_CRYPTO_LRW is not set | ||
| 942 | # CONFIG_CRYPTO_PCBC is not set | ||
| 943 | # CONFIG_CRYPTO_XTS is not set | ||
| 944 | |||
| 945 | # | ||
| 946 | # Hash modes | ||
| 947 | # | ||
| 768 | # CONFIG_CRYPTO_HMAC is not set | 948 | # CONFIG_CRYPTO_HMAC is not set |
| 769 | # CONFIG_CRYPTO_XCBC is not set | 949 | # CONFIG_CRYPTO_XCBC is not set |
| 770 | # CONFIG_CRYPTO_NULL is not set | 950 | |
| 951 | # | ||
| 952 | # Digest | ||
| 953 | # | ||
| 954 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 771 | # CONFIG_CRYPTO_MD4 is not set | 955 | # CONFIG_CRYPTO_MD4 is not set |
| 772 | # CONFIG_CRYPTO_MD5 is not set | 956 | # CONFIG_CRYPTO_MD5 is not set |
| 957 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 773 | # CONFIG_CRYPTO_SHA1 is not set | 958 | # CONFIG_CRYPTO_SHA1 is not set |
| 774 | # CONFIG_CRYPTO_SHA256 is not set | 959 | # CONFIG_CRYPTO_SHA256 is not set |
| 775 | # CONFIG_CRYPTO_SHA512 is not set | 960 | # CONFIG_CRYPTO_SHA512 is not set |
| 776 | # CONFIG_CRYPTO_WP512 is not set | ||
| 777 | # CONFIG_CRYPTO_TGR192 is not set | 961 | # CONFIG_CRYPTO_TGR192 is not set |
| 778 | # CONFIG_CRYPTO_GF128MUL is not set | 962 | # CONFIG_CRYPTO_WP512 is not set |
| 779 | # CONFIG_CRYPTO_ECB is not set | 963 | |
| 780 | # CONFIG_CRYPTO_CBC is not set | 964 | # |
| 781 | # CONFIG_CRYPTO_PCBC is not set | 965 | # Ciphers |
| 782 | # CONFIG_CRYPTO_LRW is not set | 966 | # |
| 783 | # CONFIG_CRYPTO_XTS is not set | ||
| 784 | # CONFIG_CRYPTO_CTR is not set | ||
| 785 | # CONFIG_CRYPTO_GCM is not set | ||
| 786 | # CONFIG_CRYPTO_CCM is not set | ||
| 787 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 788 | # CONFIG_CRYPTO_DES is not set | ||
| 789 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 790 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 791 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 792 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 793 | # CONFIG_CRYPTO_AES is not set | 967 | # CONFIG_CRYPTO_AES is not set |
| 968 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 969 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 970 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 971 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 794 | # CONFIG_CRYPTO_CAST5 is not set | 972 | # CONFIG_CRYPTO_CAST5 is not set |
| 795 | # CONFIG_CRYPTO_CAST6 is not set | 973 | # CONFIG_CRYPTO_CAST6 is not set |
| 796 | # CONFIG_CRYPTO_TEA is not set | 974 | # CONFIG_CRYPTO_DES is not set |
| 797 | # CONFIG_CRYPTO_ARC4 is not set | 975 | # CONFIG_CRYPTO_FCRYPT is not set |
| 798 | # CONFIG_CRYPTO_KHAZAD is not set | 976 | # CONFIG_CRYPTO_KHAZAD is not set |
| 799 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 800 | # CONFIG_CRYPTO_SEED is not set | ||
| 801 | # CONFIG_CRYPTO_SALSA20 is not set | 977 | # CONFIG_CRYPTO_SALSA20 is not set |
| 978 | # CONFIG_CRYPTO_SEED is not set | ||
| 979 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 980 | # CONFIG_CRYPTO_TEA is not set | ||
| 981 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 982 | |||
| 983 | # | ||
| 984 | # Compression | ||
| 985 | # | ||
| 802 | # CONFIG_CRYPTO_DEFLATE is not set | 986 | # CONFIG_CRYPTO_DEFLATE is not set |
| 803 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 804 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 805 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 806 | # CONFIG_CRYPTO_TEST is not set | ||
| 807 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 808 | # CONFIG_CRYPTO_LZO is not set | 987 | # CONFIG_CRYPTO_LZO is not set |
| 809 | CONFIG_CRYPTO_HW=y | 988 | CONFIG_CRYPTO_HW=y |
| 810 | 989 | ||
| @@ -812,6 +991,7 @@ CONFIG_CRYPTO_HW=y | |||
| 812 | # Library routines | 991 | # Library routines |
| 813 | # | 992 | # |
| 814 | CONFIG_BITREVERSE=y | 993 | CONFIG_BITREVERSE=y |
| 994 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 815 | # CONFIG_CRC_CCITT is not set | 995 | # CONFIG_CRC_CCITT is not set |
| 816 | # CONFIG_CRC16 is not set | 996 | # CONFIG_CRC16 is not set |
| 817 | # CONFIG_CRC_ITU_T is not set | 997 | # CONFIG_CRC_ITU_T is not set |
diff --git a/arch/sh/configs/rsk7203_defconfig b/arch/sh/configs/rsk7203_defconfig new file mode 100644 index 000000000000..a0ebd439cbd2 --- /dev/null +++ b/arch/sh/configs/rsk7203_defconfig | |||
| @@ -0,0 +1,841 @@ | |||
| 1 | # | ||
| 2 | # Automatically generated make config: don't edit | ||
| 3 | # Linux kernel version: 2.6.26-rc4 | ||
| 4 | # Tue Jun 3 13:02:42 2008 | ||
| 5 | # | ||
| 6 | CONFIG_SUPERH=y | ||
| 7 | CONFIG_SUPERH32=y | ||
| 8 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | ||
| 9 | CONFIG_GENERIC_BUG=y | ||
| 10 | CONFIG_GENERIC_FIND_NEXT_BIT=y | ||
| 11 | CONFIG_GENERIC_HWEIGHT=y | ||
| 12 | CONFIG_GENERIC_HARDIRQS=y | ||
| 13 | CONFIG_GENERIC_IRQ_PROBE=y | ||
| 14 | CONFIG_GENERIC_CALIBRATE_DELAY=y | ||
| 15 | # CONFIG_GENERIC_TIME is not set | ||
| 16 | # CONFIG_GENERIC_CLOCKEVENTS is not set | ||
| 17 | CONFIG_STACKTRACE_SUPPORT=y | ||
| 18 | CONFIG_LOCKDEP_SUPPORT=y | ||
| 19 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | ||
| 20 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | ||
| 21 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | ||
| 22 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
| 23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | ||
| 24 | |||
| 25 | # | ||
| 26 | # General setup | ||
| 27 | # | ||
| 28 | CONFIG_EXPERIMENTAL=y | ||
| 29 | CONFIG_BROKEN_ON_SMP=y | ||
| 30 | CONFIG_INIT_ENV_ARG_LIMIT=32 | ||
| 31 | CONFIG_LOCALVERSION="" | ||
| 32 | # CONFIG_LOCALVERSION_AUTO is not set | ||
| 33 | CONFIG_SYSVIPC=y | ||
| 34 | CONFIG_SYSVIPC_SYSCTL=y | ||
| 35 | CONFIG_POSIX_MQUEUE=y | ||
| 36 | # CONFIG_BSD_PROCESS_ACCT is not set | ||
| 37 | # CONFIG_TASKSTATS is not set | ||
| 38 | # CONFIG_AUDIT is not set | ||
| 39 | # CONFIG_IKCONFIG is not set | ||
| 40 | CONFIG_LOG_BUF_SHIFT=14 | ||
| 41 | # CONFIG_CGROUPS is not set | ||
| 42 | CONFIG_GROUP_SCHED=y | ||
| 43 | CONFIG_FAIR_GROUP_SCHED=y | ||
| 44 | # CONFIG_RT_GROUP_SCHED is not set | ||
| 45 | CONFIG_USER_SCHED=y | ||
| 46 | # CONFIG_CGROUP_SCHED is not set | ||
| 47 | CONFIG_SYSFS_DEPRECATED=y | ||
| 48 | CONFIG_SYSFS_DEPRECATED_V2=y | ||
| 49 | # CONFIG_RELAY is not set | ||
| 50 | # CONFIG_NAMESPACES is not set | ||
| 51 | CONFIG_BLK_DEV_INITRD=y | ||
| 52 | CONFIG_INITRAMFS_SOURCE="" | ||
| 53 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | ||
| 54 | CONFIG_SYSCTL=y | ||
| 55 | CONFIG_EMBEDDED=y | ||
| 56 | CONFIG_UID16=y | ||
| 57 | CONFIG_SYSCTL_SYSCALL=y | ||
| 58 | CONFIG_SYSCTL_SYSCALL_CHECK=y | ||
| 59 | CONFIG_KALLSYMS=y | ||
| 60 | CONFIG_KALLSYMS_ALL=y | ||
| 61 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 62 | CONFIG_HOTPLUG=y | ||
| 63 | CONFIG_PRINTK=y | ||
| 64 | CONFIG_BUG=y | ||
| 65 | CONFIG_ELF_CORE=y | ||
| 66 | CONFIG_COMPAT_BRK=y | ||
| 67 | CONFIG_BASE_FULL=y | ||
| 68 | CONFIG_FUTEX=y | ||
| 69 | CONFIG_ANON_INODES=y | ||
| 70 | CONFIG_EPOLL=y | ||
| 71 | CONFIG_SIGNALFD=y | ||
| 72 | CONFIG_TIMERFD=y | ||
| 73 | CONFIG_EVENTFD=y | ||
| 74 | CONFIG_VM_EVENT_COUNTERS=y | ||
| 75 | CONFIG_SLAB=y | ||
| 76 | # CONFIG_SLUB is not set | ||
| 77 | # CONFIG_SLOB is not set | ||
| 78 | CONFIG_PROFILING=y | ||
| 79 | # CONFIG_MARKERS is not set | ||
| 80 | CONFIG_OPROFILE=y | ||
| 81 | CONFIG_HAVE_OPROFILE=y | ||
| 82 | # CONFIG_HAVE_KPROBES is not set | ||
| 83 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 84 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 85 | CONFIG_SLABINFO=y | ||
| 86 | CONFIG_RT_MUTEXES=y | ||
| 87 | CONFIG_TINY_SHMEM=y | ||
| 88 | CONFIG_BASE_SMALL=0 | ||
| 89 | # CONFIG_MODULES is not set | ||
| 90 | CONFIG_BLOCK=y | ||
| 91 | # CONFIG_LBD is not set | ||
| 92 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 93 | # CONFIG_LSF is not set | ||
| 94 | # CONFIG_BLK_DEV_BSG is not set | ||
| 95 | |||
| 96 | # | ||
| 97 | # IO Schedulers | ||
| 98 | # | ||
| 99 | CONFIG_IOSCHED_NOOP=y | ||
| 100 | # CONFIG_IOSCHED_AS is not set | ||
| 101 | # CONFIG_IOSCHED_DEADLINE is not set | ||
| 102 | # CONFIG_IOSCHED_CFQ is not set | ||
| 103 | # CONFIG_DEFAULT_AS is not set | ||
| 104 | # CONFIG_DEFAULT_DEADLINE is not set | ||
| 105 | # CONFIG_DEFAULT_CFQ is not set | ||
| 106 | CONFIG_DEFAULT_NOOP=y | ||
| 107 | CONFIG_DEFAULT_IOSCHED="noop" | ||
| 108 | CONFIG_CLASSIC_RCU=y | ||
| 109 | |||
| 110 | # | ||
| 111 | # System type | ||
| 112 | # | ||
| 113 | CONFIG_CPU_SH2=y | ||
| 114 | CONFIG_CPU_SH2A=y | ||
| 115 | # CONFIG_CPU_SUBTYPE_SH7619 is not set | ||
| 116 | CONFIG_CPU_SUBTYPE_SH7203=y | ||
| 117 | # CONFIG_CPU_SUBTYPE_SH7206 is not set | ||
| 118 | # CONFIG_CPU_SUBTYPE_SH7263 is not set | ||
| 119 | # CONFIG_CPU_SUBTYPE_MXG is not set | ||
| 120 | # CONFIG_CPU_SUBTYPE_SH7705 is not set | ||
| 121 | # CONFIG_CPU_SUBTYPE_SH7706 is not set | ||
| 122 | # CONFIG_CPU_SUBTYPE_SH7707 is not set | ||
| 123 | # CONFIG_CPU_SUBTYPE_SH7708 is not set | ||
| 124 | # CONFIG_CPU_SUBTYPE_SH7709 is not set | ||
| 125 | # CONFIG_CPU_SUBTYPE_SH7710 is not set | ||
| 126 | # CONFIG_CPU_SUBTYPE_SH7712 is not set | ||
| 127 | # CONFIG_CPU_SUBTYPE_SH7720 is not set | ||
| 128 | # CONFIG_CPU_SUBTYPE_SH7721 is not set | ||
| 129 | # CONFIG_CPU_SUBTYPE_SH7750 is not set | ||
| 130 | # CONFIG_CPU_SUBTYPE_SH7091 is not set | ||
| 131 | # CONFIG_CPU_SUBTYPE_SH7750R is not set | ||
| 132 | # CONFIG_CPU_SUBTYPE_SH7750S is not set | ||
| 133 | # CONFIG_CPU_SUBTYPE_SH7751 is not set | ||
| 134 | # CONFIG_CPU_SUBTYPE_SH7751R is not set | ||
| 135 | # CONFIG_CPU_SUBTYPE_SH7760 is not set | ||
| 136 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set | ||
| 137 | # CONFIG_CPU_SUBTYPE_SH7723 is not set | ||
| 138 | # CONFIG_CPU_SUBTYPE_SH7763 is not set | ||
| 139 | # CONFIG_CPU_SUBTYPE_SH7770 is not set | ||
| 140 | # CONFIG_CPU_SUBTYPE_SH7780 is not set | ||
| 141 | # CONFIG_CPU_SUBTYPE_SH7785 is not set | ||
| 142 | # CONFIG_CPU_SUBTYPE_SHX3 is not set | ||
| 143 | # CONFIG_CPU_SUBTYPE_SH7343 is not set | ||
| 144 | # CONFIG_CPU_SUBTYPE_SH7722 is not set | ||
| 145 | # CONFIG_CPU_SUBTYPE_SH7366 is not set | ||
| 146 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set | ||
| 147 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set | ||
| 148 | |||
| 149 | # | ||
| 150 | # Memory management options | ||
| 151 | # | ||
| 152 | CONFIG_QUICKLIST=y | ||
| 153 | CONFIG_PAGE_OFFSET=0x00000000 | ||
| 154 | CONFIG_MEMORY_START=0x0c000000 | ||
| 155 | CONFIG_MEMORY_SIZE=0x01000000 | ||
| 156 | CONFIG_29BIT=y | ||
| 157 | CONFIG_ARCH_FLATMEM_ENABLE=y | ||
| 158 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | ||
| 159 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | ||
| 160 | CONFIG_MAX_ACTIVE_REGIONS=1 | ||
| 161 | CONFIG_ARCH_POPULATES_NODE_MAP=y | ||
| 162 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | ||
| 163 | CONFIG_PAGE_SIZE_4KB=y | ||
| 164 | # CONFIG_PAGE_SIZE_8KB is not set | ||
| 165 | # CONFIG_PAGE_SIZE_64KB is not set | ||
| 166 | CONFIG_SELECT_MEMORY_MODEL=y | ||
| 167 | CONFIG_FLATMEM_MANUAL=y | ||
| 168 | # CONFIG_DISCONTIGMEM_MANUAL is not set | ||
| 169 | # CONFIG_SPARSEMEM_MANUAL is not set | ||
| 170 | CONFIG_FLATMEM=y | ||
| 171 | CONFIG_FLAT_NODE_MEM_MAP=y | ||
| 172 | CONFIG_SPARSEMEM_STATIC=y | ||
| 173 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
| 174 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 175 | CONFIG_SPLIT_PTLOCK_CPUS=4 | ||
| 176 | # CONFIG_RESOURCES_64BIT is not set | ||
| 177 | CONFIG_ZONE_DMA_FLAG=0 | ||
| 178 | CONFIG_NR_QUICK=2 | ||
| 179 | |||
| 180 | # | ||
| 181 | # Cache configuration | ||
| 182 | # | ||
| 183 | # CONFIG_SH_DIRECT_MAPPED is not set | ||
| 184 | CONFIG_CACHE_WRITEBACK=y | ||
| 185 | # CONFIG_CACHE_WRITETHROUGH is not set | ||
| 186 | # CONFIG_CACHE_OFF is not set | ||
| 187 | |||
| 188 | # | ||
| 189 | # Processor features | ||
| 190 | # | ||
| 191 | # CONFIG_CPU_LITTLE_ENDIAN is not set | ||
| 192 | CONFIG_CPU_BIG_ENDIAN=y | ||
| 193 | CONFIG_SH_FPU=y | ||
| 194 | CONFIG_CPU_HAS_FPU=y | ||
| 195 | |||
| 196 | # | ||
| 197 | # Board support | ||
| 198 | # | ||
| 199 | |||
| 200 | # | ||
| 201 | # Timer and clock configuration | ||
| 202 | # | ||
| 203 | CONFIG_SH_CMT=y | ||
| 204 | # CONFIG_SH_MTU2 is not set | ||
| 205 | CONFIG_SH_TIMER_IRQ=142 | ||
| 206 | CONFIG_SH_PCLK_FREQ=16670800 | ||
| 207 | CONFIG_SH_CLK_MD=0 | ||
| 208 | # CONFIG_TICK_ONESHOT is not set | ||
| 209 | |||
| 210 | # | ||
| 211 | # CPU Frequency scaling | ||
| 212 | # | ||
| 213 | CONFIG_CPU_FREQ=y | ||
| 214 | CONFIG_CPU_FREQ_TABLE=y | ||
| 215 | # CONFIG_CPU_FREQ_DEBUG is not set | ||
| 216 | CONFIG_CPU_FREQ_STAT=y | ||
| 217 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | ||
| 218 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | ||
| 219 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 220 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | ||
| 221 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | ||
| 222 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
| 223 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | ||
| 224 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | ||
| 225 | # CONFIG_CPU_FREQ_GOV_USERSPACE is not set | ||
| 226 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set | ||
| 227 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | ||
| 228 | CONFIG_SH_CPU_FREQ=y | ||
| 229 | |||
| 230 | # | ||
| 231 | # DMA support | ||
| 232 | # | ||
| 233 | |||
| 234 | # | ||
| 235 | # Companion Chips | ||
| 236 | # | ||
| 237 | |||
| 238 | # | ||
| 239 | # Additional SuperH Device Drivers | ||
| 240 | # | ||
| 241 | CONFIG_HEARTBEAT=y | ||
| 242 | # CONFIG_PUSH_SWITCH is not set | ||
| 243 | |||
| 244 | # | ||
| 245 | # Kernel features | ||
| 246 | # | ||
| 247 | # CONFIG_HZ_100 is not set | ||
| 248 | # CONFIG_HZ_250 is not set | ||
| 249 | # CONFIG_HZ_300 is not set | ||
| 250 | CONFIG_HZ_1000=y | ||
| 251 | CONFIG_HZ=1000 | ||
| 252 | # CONFIG_SCHED_HRTICK is not set | ||
| 253 | # CONFIG_KEXEC is not set | ||
| 254 | # CONFIG_CRASH_DUMP is not set | ||
| 255 | CONFIG_PREEMPT_NONE=y | ||
| 256 | # CONFIG_PREEMPT_VOLUNTARY is not set | ||
| 257 | # CONFIG_PREEMPT is not set | ||
| 258 | CONFIG_GUSA=y | ||
| 259 | |||
| 260 | # | ||
| 261 | # Boot options | ||
| 262 | # | ||
| 263 | CONFIG_ZERO_PAGE_OFFSET=0x00001000 | ||
| 264 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | ||
| 265 | CONFIG_CMDLINE_BOOL=y | ||
| 266 | CONFIG_CMDLINE="console=ttySC0,115200 earlyprintk=serial ignore_loglevel" | ||
| 267 | |||
| 268 | # | ||
| 269 | # Bus options | ||
| 270 | # | ||
| 271 | # CONFIG_ARCH_SUPPORTS_MSI is not set | ||
| 272 | # CONFIG_PCCARD is not set | ||
| 273 | |||
| 274 | # | ||
| 275 | # Executable file formats | ||
| 276 | # | ||
| 277 | CONFIG_BINFMT_FLAT=y | ||
| 278 | CONFIG_BINFMT_ZFLAT=y | ||
| 279 | CONFIG_BINFMT_SHARED_FLAT=y | ||
| 280 | # CONFIG_BINFMT_MISC is not set | ||
| 281 | |||
| 282 | # | ||
| 283 | # Networking | ||
| 284 | # | ||
| 285 | CONFIG_NET=y | ||
| 286 | |||
| 287 | # | ||
| 288 | # Networking options | ||
| 289 | # | ||
| 290 | # CONFIG_PACKET is not set | ||
| 291 | # CONFIG_UNIX is not set | ||
| 292 | # CONFIG_NET_KEY is not set | ||
| 293 | CONFIG_INET=y | ||
| 294 | # CONFIG_IP_MULTICAST is not set | ||
| 295 | # CONFIG_IP_ADVANCED_ROUTER is not set | ||
| 296 | CONFIG_IP_FIB_HASH=y | ||
| 297 | CONFIG_IP_PNP=y | ||
| 298 | CONFIG_IP_PNP_DHCP=y | ||
| 299 | # CONFIG_IP_PNP_BOOTP is not set | ||
| 300 | # CONFIG_IP_PNP_RARP is not set | ||
| 301 | # CONFIG_NET_IPIP is not set | ||
| 302 | # CONFIG_NET_IPGRE is not set | ||
| 303 | # CONFIG_ARPD is not set | ||
| 304 | # CONFIG_SYN_COOKIES is not set | ||
| 305 | # CONFIG_INET_AH is not set | ||
| 306 | # CONFIG_INET_ESP is not set | ||
| 307 | # CONFIG_INET_IPCOMP is not set | ||
| 308 | # CONFIG_INET_XFRM_TUNNEL is not set | ||
| 309 | # CONFIG_INET_TUNNEL is not set | ||
| 310 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | ||
| 311 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | ||
| 312 | # CONFIG_INET_XFRM_MODE_BEET is not set | ||
| 313 | # CONFIG_INET_LRO is not set | ||
| 314 | # CONFIG_INET_DIAG is not set | ||
| 315 | # CONFIG_TCP_CONG_ADVANCED is not set | ||
| 316 | CONFIG_TCP_CONG_CUBIC=y | ||
| 317 | CONFIG_DEFAULT_TCP_CONG="cubic" | ||
| 318 | # CONFIG_TCP_MD5SIG is not set | ||
| 319 | # CONFIG_IPV6 is not set | ||
| 320 | # CONFIG_NETWORK_SECMARK is not set | ||
| 321 | # CONFIG_NETFILTER is not set | ||
| 322 | # CONFIG_IP_DCCP is not set | ||
| 323 | # CONFIG_IP_SCTP is not set | ||
| 324 | # CONFIG_TIPC is not set | ||
| 325 | # CONFIG_ATM is not set | ||
| 326 | # CONFIG_BRIDGE is not set | ||
| 327 | # CONFIG_VLAN_8021Q is not set | ||
| 328 | # CONFIG_DECNET is not set | ||
| 329 | # CONFIG_LLC2 is not set | ||
| 330 | # CONFIG_IPX is not set | ||
| 331 | # CONFIG_ATALK is not set | ||
| 332 | # CONFIG_X25 is not set | ||
| 333 | # CONFIG_LAPB is not set | ||
| 334 | # CONFIG_ECONET is not set | ||
| 335 | # CONFIG_WAN_ROUTER is not set | ||
| 336 | # CONFIG_NET_SCHED is not set | ||
| 337 | |||
| 338 | # | ||
| 339 | # Network testing | ||
| 340 | # | ||
| 341 | # CONFIG_NET_PKTGEN is not set | ||
| 342 | # CONFIG_HAMRADIO is not set | ||
| 343 | # CONFIG_CAN is not set | ||
| 344 | # CONFIG_IRDA is not set | ||
| 345 | # CONFIG_BT is not set | ||
| 346 | # CONFIG_AF_RXRPC is not set | ||
| 347 | |||
| 348 | # | ||
| 349 | # Wireless | ||
| 350 | # | ||
| 351 | # CONFIG_CFG80211 is not set | ||
| 352 | # CONFIG_WIRELESS_EXT is not set | ||
| 353 | # CONFIG_MAC80211 is not set | ||
| 354 | # CONFIG_IEEE80211 is not set | ||
| 355 | # CONFIG_RFKILL is not set | ||
| 356 | # CONFIG_NET_9P is not set | ||
| 357 | |||
| 358 | # | ||
| 359 | # Device Drivers | ||
| 360 | # | ||
| 361 | |||
| 362 | # | ||
| 363 | # Generic Driver Options | ||
| 364 | # | ||
| 365 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 366 | # CONFIG_STANDALONE is not set | ||
| 367 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | ||
| 368 | # CONFIG_FW_LOADER is not set | ||
| 369 | # CONFIG_DEBUG_DRIVER is not set | ||
| 370 | # CONFIG_DEBUG_DEVRES is not set | ||
| 371 | # CONFIG_SYS_HYPERVISOR is not set | ||
| 372 | # CONFIG_CONNECTOR is not set | ||
| 373 | CONFIG_MTD=y | ||
| 374 | # CONFIG_MTD_DEBUG is not set | ||
| 375 | CONFIG_MTD_CONCAT=y | ||
| 376 | CONFIG_MTD_PARTITIONS=y | ||
| 377 | CONFIG_MTD_REDBOOT_PARTS=y | ||
| 378 | CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||
| 379 | # CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set | ||
| 380 | # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set | ||
| 381 | # CONFIG_MTD_CMDLINE_PARTS is not set | ||
| 382 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 383 | |||
| 384 | # | ||
| 385 | # User Modules And Translation Layers | ||
| 386 | # | ||
| 387 | CONFIG_MTD_CHAR=y | ||
| 388 | CONFIG_MTD_BLKDEVS=y | ||
| 389 | CONFIG_MTD_BLOCK=y | ||
| 390 | # CONFIG_FTL is not set | ||
| 391 | # CONFIG_NFTL is not set | ||
| 392 | # CONFIG_INFTL is not set | ||
| 393 | # CONFIG_RFD_FTL is not set | ||
| 394 | # CONFIG_SSFDC is not set | ||
| 395 | # CONFIG_MTD_OOPS is not set | ||
| 396 | |||
| 397 | # | ||
| 398 | # RAM/ROM/Flash chip drivers | ||
| 399 | # | ||
| 400 | CONFIG_MTD_CFI=y | ||
| 401 | # CONFIG_MTD_JEDECPROBE is not set | ||
| 402 | CONFIG_MTD_GEN_PROBE=y | ||
| 403 | # CONFIG_MTD_CFI_ADV_OPTIONS is not set | ||
| 404 | CONFIG_MTD_MAP_BANK_WIDTH_1=y | ||
| 405 | CONFIG_MTD_MAP_BANK_WIDTH_2=y | ||
| 406 | CONFIG_MTD_MAP_BANK_WIDTH_4=y | ||
| 407 | # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set | ||
| 408 | # CONFIG_MTD_MAP_BANK_WIDTH_16 is not set | ||
| 409 | # CONFIG_MTD_MAP_BANK_WIDTH_32 is not set | ||
| 410 | CONFIG_MTD_CFI_I1=y | ||
| 411 | CONFIG_MTD_CFI_I2=y | ||
| 412 | # CONFIG_MTD_CFI_I4 is not set | ||
| 413 | # CONFIG_MTD_CFI_I8 is not set | ||
| 414 | # CONFIG_MTD_CFI_INTELEXT is not set | ||
| 415 | CONFIG_MTD_CFI_AMDSTD=y | ||
| 416 | # CONFIG_MTD_CFI_STAA is not set | ||
| 417 | CONFIG_MTD_CFI_UTIL=y | ||
| 418 | # CONFIG_MTD_RAM is not set | ||
| 419 | # CONFIG_MTD_ROM is not set | ||
| 420 | # CONFIG_MTD_ABSENT is not set | ||
| 421 | |||
| 422 | # | ||
| 423 | # Mapping drivers for chip access | ||
| 424 | # | ||
| 425 | # CONFIG_MTD_COMPLEX_MAPPINGS is not set | ||
| 426 | CONFIG_MTD_PHYSMAP=y | ||
| 427 | CONFIG_MTD_PHYSMAP_START=0x20000000 | ||
| 428 | CONFIG_MTD_PHYSMAP_LEN=0x01000000 | ||
| 429 | CONFIG_MTD_PHYSMAP_BANKWIDTH=4 | ||
| 430 | # CONFIG_MTD_UCLINUX is not set | ||
| 431 | # CONFIG_MTD_PLATRAM is not set | ||
| 432 | |||
| 433 | # | ||
| 434 | # Self-contained MTD device drivers | ||
| 435 | # | ||
| 436 | # CONFIG_MTD_SLRAM is not set | ||
| 437 | # CONFIG_MTD_PHRAM is not set | ||
| 438 | # CONFIG_MTD_MTDRAM is not set | ||
| 439 | # CONFIG_MTD_BLOCK2MTD is not set | ||
| 440 | |||
| 441 | # | ||
| 442 | # Disk-On-Chip Device Drivers | ||
| 443 | # | ||
| 444 | # CONFIG_MTD_DOC2000 is not set | ||
| 445 | # CONFIG_MTD_DOC2001 is not set | ||
| 446 | # CONFIG_MTD_DOC2001PLUS is not set | ||
| 447 | # CONFIG_MTD_NAND is not set | ||
| 448 | # CONFIG_MTD_ONENAND is not set | ||
| 449 | |||
| 450 | # | ||
| 451 | # UBI - Unsorted block images | ||
| 452 | # | ||
| 453 | # CONFIG_MTD_UBI is not set | ||
| 454 | # CONFIG_PARPORT is not set | ||
| 455 | CONFIG_BLK_DEV=y | ||
| 456 | # CONFIG_BLK_DEV_COW_COMMON is not set | ||
| 457 | # CONFIG_BLK_DEV_LOOP is not set | ||
| 458 | # CONFIG_BLK_DEV_NBD is not set | ||
| 459 | # CONFIG_BLK_DEV_RAM is not set | ||
| 460 | # CONFIG_CDROM_PKTCDVD is not set | ||
| 461 | # CONFIG_ATA_OVER_ETH is not set | ||
| 462 | CONFIG_MISC_DEVICES=y | ||
| 463 | # CONFIG_EEPROM_93CX6 is not set | ||
| 464 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 465 | CONFIG_HAVE_IDE=y | ||
| 466 | # CONFIG_IDE is not set | ||
| 467 | |||
| 468 | # | ||
| 469 | # SCSI device support | ||
| 470 | # | ||
| 471 | # CONFIG_RAID_ATTRS is not set | ||
| 472 | # CONFIG_SCSI is not set | ||
| 473 | # CONFIG_SCSI_DMA is not set | ||
| 474 | # CONFIG_SCSI_NETLINK is not set | ||
| 475 | # CONFIG_ATA is not set | ||
| 476 | # CONFIG_MD is not set | ||
| 477 | CONFIG_NETDEVICES=y | ||
| 478 | # CONFIG_NETDEVICES_MULTIQUEUE is not set | ||
| 479 | # CONFIG_DUMMY is not set | ||
| 480 | # CONFIG_BONDING is not set | ||
| 481 | # CONFIG_MACVLAN is not set | ||
| 482 | # CONFIG_EQUALIZER is not set | ||
| 483 | # CONFIG_TUN is not set | ||
| 484 | # CONFIG_VETH is not set | ||
| 485 | # CONFIG_PHYLIB is not set | ||
| 486 | CONFIG_NET_ETHERNET=y | ||
| 487 | CONFIG_MII=y | ||
| 488 | # CONFIG_AX88796 is not set | ||
| 489 | # CONFIG_STNIC is not set | ||
| 490 | CONFIG_SMC91X=y | ||
| 491 | # CONFIG_IBM_NEW_EMAC_ZMII is not set | ||
| 492 | # CONFIG_IBM_NEW_EMAC_RGMII is not set | ||
| 493 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 494 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 495 | # CONFIG_B44 is not set | ||
| 496 | CONFIG_NETDEV_1000=y | ||
| 497 | # CONFIG_E1000E_ENABLED is not set | ||
| 498 | CONFIG_NETDEV_10000=y | ||
| 499 | |||
| 500 | # | ||
| 501 | # Wireless LAN | ||
| 502 | # | ||
| 503 | # CONFIG_WLAN_PRE80211 is not set | ||
| 504 | # CONFIG_WLAN_80211 is not set | ||
| 505 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 506 | # CONFIG_WAN is not set | ||
| 507 | # CONFIG_PPP is not set | ||
| 508 | # CONFIG_SLIP is not set | ||
| 509 | # CONFIG_NETCONSOLE is not set | ||
| 510 | # CONFIG_NETPOLL is not set | ||
| 511 | # CONFIG_NET_POLL_CONTROLLER is not set | ||
| 512 | # CONFIG_ISDN is not set | ||
| 513 | # CONFIG_PHONE is not set | ||
| 514 | |||
| 515 | # | ||
| 516 | # Input device support | ||
| 517 | # | ||
| 518 | CONFIG_INPUT=y | ||
| 519 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 520 | # CONFIG_INPUT_POLLDEV is not set | ||
| 521 | |||
| 522 | # | ||
| 523 | # Userland interfaces | ||
| 524 | # | ||
| 525 | # CONFIG_INPUT_MOUSEDEV is not set | ||
| 526 | # CONFIG_INPUT_JOYDEV is not set | ||
| 527 | # CONFIG_INPUT_EVDEV is not set | ||
| 528 | # CONFIG_INPUT_EVBUG is not set | ||
| 529 | |||
| 530 | # | ||
| 531 | # Input Device Drivers | ||
| 532 | # | ||
| 533 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 534 | # CONFIG_INPUT_MOUSE is not set | ||
| 535 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 536 | # CONFIG_INPUT_TABLET is not set | ||
| 537 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 538 | # CONFIG_INPUT_MISC is not set | ||
| 539 | |||
| 540 | # | ||
| 541 | # Hardware I/O ports | ||
| 542 | # | ||
| 543 | # CONFIG_SERIO is not set | ||
| 544 | # CONFIG_GAMEPORT is not set | ||
| 545 | |||
| 546 | # | ||
| 547 | # Character devices | ||
| 548 | # | ||
| 549 | # CONFIG_VT is not set | ||
| 550 | CONFIG_DEVKMEM=y | ||
| 551 | # CONFIG_SERIAL_NONSTANDARD is not set | ||
| 552 | |||
| 553 | # | ||
| 554 | # Serial drivers | ||
| 555 | # | ||
| 556 | # CONFIG_SERIAL_8250 is not set | ||
| 557 | |||
| 558 | # | ||
| 559 | # Non-8250 serial port support | ||
| 560 | # | ||
| 561 | CONFIG_SERIAL_SH_SCI=y | ||
| 562 | CONFIG_SERIAL_SH_SCI_NR_UARTS=4 | ||
| 563 | CONFIG_SERIAL_SH_SCI_CONSOLE=y | ||
| 564 | CONFIG_SERIAL_CORE=y | ||
| 565 | CONFIG_SERIAL_CORE_CONSOLE=y | ||
| 566 | # CONFIG_UNIX98_PTYS is not set | ||
| 567 | # CONFIG_LEGACY_PTYS is not set | ||
| 568 | # CONFIG_IPMI_HANDLER is not set | ||
| 569 | # CONFIG_HW_RANDOM is not set | ||
| 570 | # CONFIG_R3964 is not set | ||
| 571 | # CONFIG_RAW_DRIVER is not set | ||
| 572 | # CONFIG_TCG_TPM is not set | ||
| 573 | # CONFIG_I2C is not set | ||
| 574 | # CONFIG_SPI is not set | ||
| 575 | # CONFIG_W1 is not set | ||
| 576 | # CONFIG_POWER_SUPPLY is not set | ||
| 577 | # CONFIG_HWMON is not set | ||
| 578 | CONFIG_THERMAL=y | ||
| 579 | # CONFIG_WATCHDOG is not set | ||
| 580 | |||
| 581 | # | ||
| 582 | # Sonics Silicon Backplane | ||
| 583 | # | ||
| 584 | CONFIG_SSB_POSSIBLE=y | ||
| 585 | # CONFIG_SSB is not set | ||
| 586 | |||
| 587 | # | ||
| 588 | # Multifunction device drivers | ||
| 589 | # | ||
| 590 | # CONFIG_MFD_SM501 is not set | ||
| 591 | # CONFIG_HTC_PASIC3 is not set | ||
| 592 | |||
| 593 | # | ||
| 594 | # Multimedia devices | ||
| 595 | # | ||
| 596 | |||
| 597 | # | ||
| 598 | # Multimedia core support | ||
| 599 | # | ||
| 600 | # CONFIG_VIDEO_DEV is not set | ||
| 601 | # CONFIG_DVB_CORE is not set | ||
| 602 | # CONFIG_VIDEO_MEDIA is not set | ||
| 603 | |||
| 604 | # | ||
| 605 | # Multimedia drivers | ||
| 606 | # | ||
| 607 | CONFIG_DAB=y | ||
| 608 | |||
| 609 | # | ||
| 610 | # Graphics support | ||
| 611 | # | ||
| 612 | # CONFIG_VGASTATE is not set | ||
| 613 | CONFIG_VIDEO_OUTPUT_CONTROL=y | ||
| 614 | # CONFIG_FB is not set | ||
| 615 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | ||
| 616 | |||
| 617 | # | ||
| 618 | # Display device support | ||
| 619 | # | ||
| 620 | # CONFIG_DISPLAY_SUPPORT is not set | ||
| 621 | |||
| 622 | # | ||
| 623 | # Sound | ||
| 624 | # | ||
| 625 | # CONFIG_SOUND is not set | ||
| 626 | CONFIG_HID_SUPPORT=y | ||
| 627 | CONFIG_HID=y | ||
| 628 | # CONFIG_HID_DEBUG is not set | ||
| 629 | # CONFIG_HIDRAW is not set | ||
| 630 | CONFIG_USB_SUPPORT=y | ||
| 631 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 632 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
| 633 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
| 634 | # CONFIG_USB is not set | ||
| 635 | # CONFIG_USB_OTG_WHITELIST is not set | ||
| 636 | # CONFIG_USB_OTG_BLACKLIST_HUB is not set | ||
| 637 | |||
| 638 | # | ||
| 639 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 640 | # | ||
| 641 | # CONFIG_USB_GADGET is not set | ||
| 642 | # CONFIG_MMC is not set | ||
| 643 | # CONFIG_MEMSTICK is not set | ||
| 644 | # CONFIG_NEW_LEDS is not set | ||
| 645 | # CONFIG_ACCESSIBILITY is not set | ||
| 646 | CONFIG_RTC_LIB=y | ||
| 647 | CONFIG_RTC_CLASS=y | ||
| 648 | CONFIG_RTC_HCTOSYS=y | ||
| 649 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
| 650 | # CONFIG_RTC_DEBUG is not set | ||
| 651 | |||
| 652 | # | ||
| 653 | # RTC interfaces | ||
| 654 | # | ||
| 655 | CONFIG_RTC_INTF_SYSFS=y | ||
| 656 | CONFIG_RTC_INTF_PROC=y | ||
| 657 | CONFIG_RTC_INTF_DEV=y | ||
| 658 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 659 | # CONFIG_RTC_DRV_TEST is not set | ||
| 660 | |||
| 661 | # | ||
| 662 | # SPI RTC drivers | ||
| 663 | # | ||
| 664 | |||
| 665 | # | ||
| 666 | # Platform RTC drivers | ||
| 667 | # | ||
| 668 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 669 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 670 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 671 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 672 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 673 | # CONFIG_RTC_DRV_M48T59 is not set | ||
| 674 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 675 | |||
| 676 | # | ||
| 677 | # on-CPU RTC drivers | ||
| 678 | # | ||
| 679 | CONFIG_RTC_DRV_SH=y | ||
| 680 | # CONFIG_UIO is not set | ||
| 681 | |||
| 682 | # | ||
| 683 | # File systems | ||
| 684 | # | ||
| 685 | # CONFIG_EXT2_FS is not set | ||
| 686 | # CONFIG_EXT3_FS is not set | ||
| 687 | # CONFIG_EXT4DEV_FS is not set | ||
| 688 | # CONFIG_REISERFS_FS is not set | ||
| 689 | # CONFIG_JFS_FS is not set | ||
| 690 | # CONFIG_FS_POSIX_ACL is not set | ||
| 691 | # CONFIG_XFS_FS is not set | ||
| 692 | # CONFIG_OCFS2_FS is not set | ||
| 693 | # CONFIG_DNOTIFY is not set | ||
| 694 | # CONFIG_INOTIFY is not set | ||
| 695 | # CONFIG_QUOTA is not set | ||
| 696 | # CONFIG_AUTOFS_FS is not set | ||
| 697 | # CONFIG_AUTOFS4_FS is not set | ||
| 698 | # CONFIG_FUSE_FS is not set | ||
| 699 | |||
| 700 | # | ||
| 701 | # CD-ROM/DVD Filesystems | ||
| 702 | # | ||
| 703 | # CONFIG_ISO9660_FS is not set | ||
| 704 | # CONFIG_UDF_FS is not set | ||
| 705 | |||
| 706 | # | ||
| 707 | # DOS/FAT/NT Filesystems | ||
| 708 | # | ||
| 709 | # CONFIG_MSDOS_FS is not set | ||
| 710 | # CONFIG_VFAT_FS is not set | ||
| 711 | # CONFIG_NTFS_FS is not set | ||
| 712 | |||
| 713 | # | ||
| 714 | # Pseudo filesystems | ||
| 715 | # | ||
| 716 | CONFIG_PROC_FS=y | ||
| 717 | CONFIG_PROC_SYSCTL=y | ||
| 718 | CONFIG_SYSFS=y | ||
| 719 | # CONFIG_TMPFS is not set | ||
| 720 | # CONFIG_HUGETLB_PAGE is not set | ||
| 721 | # CONFIG_CONFIGFS_FS is not set | ||
| 722 | |||
| 723 | # | ||
| 724 | # Miscellaneous filesystems | ||
| 725 | # | ||
| 726 | # CONFIG_ADFS_FS is not set | ||
| 727 | # CONFIG_AFFS_FS is not set | ||
| 728 | # CONFIG_HFS_FS is not set | ||
| 729 | # CONFIG_HFSPLUS_FS is not set | ||
| 730 | # CONFIG_BEFS_FS is not set | ||
| 731 | # CONFIG_BFS_FS is not set | ||
| 732 | # CONFIG_EFS_FS is not set | ||
| 733 | # CONFIG_JFFS2_FS is not set | ||
| 734 | # CONFIG_CRAMFS is not set | ||
| 735 | # CONFIG_VXFS_FS is not set | ||
| 736 | # CONFIG_MINIX_FS is not set | ||
| 737 | # CONFIG_HPFS_FS is not set | ||
| 738 | # CONFIG_QNX4FS_FS is not set | ||
| 739 | CONFIG_ROMFS_FS=y | ||
| 740 | # CONFIG_SYSV_FS is not set | ||
| 741 | # CONFIG_UFS_FS is not set | ||
| 742 | CONFIG_NETWORK_FILESYSTEMS=y | ||
| 743 | CONFIG_NFS_FS=y | ||
| 744 | # CONFIG_NFS_V3 is not set | ||
| 745 | # CONFIG_NFS_V4 is not set | ||
| 746 | # CONFIG_NFSD is not set | ||
| 747 | CONFIG_ROOT_NFS=y | ||
| 748 | CONFIG_LOCKD=y | ||
| 749 | CONFIG_NFS_COMMON=y | ||
| 750 | CONFIG_SUNRPC=y | ||
| 751 | # CONFIG_SUNRPC_BIND34 is not set | ||
| 752 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 753 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 754 | # CONFIG_SMB_FS is not set | ||
| 755 | # CONFIG_CIFS is not set | ||
| 756 | # CONFIG_NCP_FS is not set | ||
| 757 | # CONFIG_CODA_FS is not set | ||
| 758 | # CONFIG_AFS_FS is not set | ||
| 759 | |||
| 760 | # | ||
| 761 | # Partition Types | ||
| 762 | # | ||
| 763 | # CONFIG_PARTITION_ADVANCED is not set | ||
| 764 | CONFIG_MSDOS_PARTITION=y | ||
| 765 | # CONFIG_NLS is not set | ||
| 766 | # CONFIG_DLM is not set | ||
| 767 | |||
| 768 | # | ||
| 769 | # Kernel hacking | ||
| 770 | # | ||
| 771 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | ||
| 772 | # CONFIG_PRINTK_TIME is not set | ||
| 773 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
| 774 | # CONFIG_ENABLE_MUST_CHECK is not set | ||
| 775 | CONFIG_FRAME_WARN=1024 | ||
| 776 | CONFIG_MAGIC_SYSRQ=y | ||
| 777 | # CONFIG_UNUSED_SYMBOLS is not set | ||
| 778 | # CONFIG_DEBUG_FS is not set | ||
| 779 | # CONFIG_HEADERS_CHECK is not set | ||
| 780 | CONFIG_DEBUG_KERNEL=y | ||
| 781 | CONFIG_DEBUG_SHIRQ=y | ||
| 782 | CONFIG_DETECT_SOFTLOCKUP=y | ||
| 783 | CONFIG_SCHED_DEBUG=y | ||
| 784 | # CONFIG_SCHEDSTATS is not set | ||
| 785 | # CONFIG_TIMER_STATS is not set | ||
| 786 | # CONFIG_DEBUG_OBJECTS is not set | ||
| 787 | # CONFIG_DEBUG_SLAB is not set | ||
| 788 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 789 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 790 | # CONFIG_DEBUG_SPINLOCK is not set | ||
| 791 | CONFIG_DEBUG_MUTEXES=y | ||
| 792 | # CONFIG_DEBUG_LOCK_ALLOC is not set | ||
| 793 | # CONFIG_PROVE_LOCKING is not set | ||
| 794 | # CONFIG_LOCK_STAT is not set | ||
| 795 | CONFIG_DEBUG_SPINLOCK_SLEEP=y | ||
| 796 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | ||
| 797 | # CONFIG_DEBUG_KOBJECT is not set | ||
| 798 | CONFIG_DEBUG_BUGVERBOSE=y | ||
| 799 | CONFIG_DEBUG_INFO=y | ||
| 800 | # CONFIG_DEBUG_VM is not set | ||
| 801 | # CONFIG_DEBUG_WRITECOUNT is not set | ||
| 802 | # CONFIG_DEBUG_LIST is not set | ||
| 803 | # CONFIG_DEBUG_SG is not set | ||
| 804 | CONFIG_FRAME_POINTER=y | ||
| 805 | # CONFIG_BOOT_PRINTK_DELAY is not set | ||
| 806 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 807 | # CONFIG_FAULT_INJECTION is not set | ||
| 808 | # CONFIG_SAMPLES is not set | ||
| 809 | # CONFIG_SH_STANDARD_BIOS is not set | ||
| 810 | CONFIG_EARLY_SCIF_CONSOLE=y | ||
| 811 | CONFIG_EARLY_SCIF_CONSOLE_PORT=0xfffe8000 | ||
| 812 | CONFIG_EARLY_PRINTK=y | ||
| 813 | CONFIG_DEBUG_BOOTMEM=y | ||
| 814 | CONFIG_DEBUG_STACKOVERFLOW=y | ||
| 815 | CONFIG_DEBUG_STACK_USAGE=y | ||
| 816 | # CONFIG_IRQSTACKS is not set | ||
| 817 | |||
| 818 | # | ||
| 819 | # Security options | ||
| 820 | # | ||
| 821 | # CONFIG_KEYS is not set | ||
| 822 | # CONFIG_SECURITY is not set | ||
| 823 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 824 | # CONFIG_CRYPTO is not set | ||
| 825 | |||
| 826 | # | ||
| 827 | # Library routines | ||
| 828 | # | ||
| 829 | CONFIG_BITREVERSE=y | ||
| 830 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set | ||
| 831 | # CONFIG_CRC_CCITT is not set | ||
| 832 | # CONFIG_CRC16 is not set | ||
| 833 | # CONFIG_CRC_ITU_T is not set | ||
| 834 | CONFIG_CRC32=y | ||
| 835 | # CONFIG_CRC7 is not set | ||
| 836 | # CONFIG_LIBCRC32C is not set | ||
| 837 | CONFIG_ZLIB_INFLATE=y | ||
| 838 | CONFIG_PLIST=y | ||
| 839 | CONFIG_HAS_IOMEM=y | ||
| 840 | CONFIG_HAS_IOPORT=y | ||
| 841 | CONFIG_HAS_DMA=y | ||
diff --git a/arch/sh/configs/se7206_defconfig b/arch/sh/configs/se7206_defconfig index 0d0cda908270..6b34baa26eae 100644 --- a/arch/sh/configs/se7206_defconfig +++ b/arch/sh/configs/se7206_defconfig | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | # | 1 | # |
| 2 | # Automatically generated make config: don't edit | 2 | # Automatically generated make config: don't edit |
| 3 | # Linux kernel version: 2.6.23-rc4 | 3 | # Linux kernel version: 2.6.26-rc4 |
| 4 | # Thu Sep 13 16:40:16 2007 | 4 | # Tue Jun 3 20:27:08 2008 |
| 5 | # | 5 | # |
| 6 | CONFIG_SUPERH=y | 6 | CONFIG_SUPERH=y |
| 7 | CONFIG_SUPERH32=y | ||
| 7 | CONFIG_RWSEM_GENERIC_SPINLOCK=y | 8 | CONFIG_RWSEM_GENERIC_SPINLOCK=y |
| 8 | CONFIG_GENERIC_BUG=y | 9 | CONFIG_GENERIC_BUG=y |
| 9 | CONFIG_GENERIC_FIND_NEXT_BIT=y | 10 | CONFIG_GENERIC_FIND_NEXT_BIT=y |
| @@ -18,6 +19,7 @@ CONFIG_LOCKDEP_SUPPORT=y | |||
| 18 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set | 19 | # CONFIG_ARCH_HAS_ILOG2_U32 is not set |
| 19 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set | 20 | # CONFIG_ARCH_HAS_ILOG2_U64 is not set |
| 20 | CONFIG_ARCH_NO_VIRT_TO_BUS=y | 21 | CONFIG_ARCH_NO_VIRT_TO_BUS=y |
| 22 | CONFIG_ARCH_SUPPORTS_AOUT=y | ||
| 21 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | 23 | CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" |
| 22 | 24 | ||
| 23 | # | 25 | # |
| @@ -25,47 +27,82 @@ CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" | |||
| 25 | # | 27 | # |
| 26 | CONFIG_EXPERIMENTAL=y | 28 | CONFIG_EXPERIMENTAL=y |
| 27 | CONFIG_BROKEN_ON_SMP=y | 29 | CONFIG_BROKEN_ON_SMP=y |
| 30 | CONFIG_LOCK_KERNEL=y | ||
| 28 | CONFIG_INIT_ENV_ARG_LIMIT=32 | 31 | CONFIG_INIT_ENV_ARG_LIMIT=32 |
| 29 | CONFIG_LOCALVERSION="" | 32 | CONFIG_LOCALVERSION="" |
| 30 | # CONFIG_LOCALVERSION_AUTO is not set | 33 | CONFIG_LOCALVERSION_AUTO=y |
| 31 | # CONFIG_SYSVIPC is not set | 34 | CONFIG_SYSVIPC=y |
| 32 | # CONFIG_POSIX_MQUEUE is not set | 35 | CONFIG_SYSVIPC_SYSCTL=y |
| 33 | # CONFIG_BSD_PROCESS_ACCT is not set | 36 | CONFIG_POSIX_MQUEUE=y |
| 37 | CONFIG_BSD_PROCESS_ACCT=y | ||
| 38 | # CONFIG_BSD_PROCESS_ACCT_V3 is not set | ||
| 34 | # CONFIG_TASKSTATS is not set | 39 | # CONFIG_TASKSTATS is not set |
| 35 | # CONFIG_USER_NS is not set | 40 | CONFIG_AUDIT=y |
| 36 | # CONFIG_AUDIT is not set | 41 | CONFIG_AUDITSYSCALL=y |
| 37 | # CONFIG_IKCONFIG is not set | 42 | # CONFIG_IKCONFIG is not set |
| 38 | CONFIG_LOG_BUF_SHIFT=14 | 43 | CONFIG_LOG_BUF_SHIFT=14 |
| 39 | CONFIG_SYSFS_DEPRECATED=y | 44 | CONFIG_CGROUPS=y |
| 40 | # CONFIG_RELAY is not set | 45 | CONFIG_CGROUP_DEBUG=y |
| 41 | # CONFIG_BLK_DEV_INITRD is not set | 46 | CONFIG_CGROUP_NS=y |
| 47 | CONFIG_CGROUP_DEVICE=y | ||
| 48 | # CONFIG_GROUP_SCHED is not set | ||
| 49 | CONFIG_CGROUP_CPUACCT=y | ||
| 50 | CONFIG_RESOURCE_COUNTERS=y | ||
| 51 | CONFIG_MM_OWNER=y | ||
| 52 | CONFIG_CGROUP_MEM_RES_CTLR=y | ||
| 53 | # CONFIG_SYSFS_DEPRECATED_V2 is not set | ||
| 54 | CONFIG_RELAY=y | ||
| 55 | CONFIG_NAMESPACES=y | ||
| 56 | CONFIG_UTS_NS=y | ||
| 57 | CONFIG_IPC_NS=y | ||
| 58 | CONFIG_USER_NS=y | ||
| 59 | CONFIG_PID_NS=y | ||
| 60 | CONFIG_BLK_DEV_INITRD=y | ||
| 61 | CONFIG_INITRAMFS_SOURCE="" | ||
| 42 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y | 62 | CONFIG_CC_OPTIMIZE_FOR_SIZE=y |
| 43 | CONFIG_SYSCTL=y | 63 | CONFIG_SYSCTL=y |
| 44 | CONFIG_EMBEDDED=y | 64 | CONFIG_EMBEDDED=y |
| 45 | # CONFIG_UID16 is not set | 65 | # CONFIG_UID16 is not set |
| 46 | # CONFIG_SYSCTL_SYSCALL is not set | 66 | # CONFIG_SYSCTL_SYSCALL is not set |
| 47 | # CONFIG_KALLSYMS is not set | 67 | CONFIG_KALLSYMS=y |
| 48 | # CONFIG_HOTPLUG is not set | 68 | CONFIG_KALLSYMS_ALL=y |
| 69 | # CONFIG_KALLSYMS_EXTRA_PASS is not set | ||
| 70 | CONFIG_HOTPLUG=y | ||
| 49 | CONFIG_PRINTK=y | 71 | CONFIG_PRINTK=y |
| 50 | CONFIG_BUG=y | 72 | CONFIG_BUG=y |
| 51 | # CONFIG_ELF_CORE is not set | 73 | # CONFIG_ELF_CORE is not set |
| 52 | # CONFIG_BASE_FULL is not set | 74 | # CONFIG_COMPAT_BRK is not set |
| 53 | # CONFIG_FUTEX is not set | 75 | CONFIG_BASE_FULL=y |
| 76 | CONFIG_FUTEX=y | ||
| 54 | CONFIG_ANON_INODES=y | 77 | CONFIG_ANON_INODES=y |
| 55 | # CONFIG_EPOLL is not set | 78 | CONFIG_EPOLL=y |
| 56 | CONFIG_SIGNALFD=y | 79 | CONFIG_SIGNALFD=y |
| 57 | CONFIG_TIMERFD=y | 80 | CONFIG_TIMERFD=y |
| 58 | CONFIG_EVENTFD=y | 81 | CONFIG_EVENTFD=y |
| 59 | # CONFIG_VM_EVENT_COUNTERS is not set | 82 | CONFIG_VM_EVENT_COUNTERS=y |
| 60 | CONFIG_SLUB_DEBUG=y | ||
| 61 | # CONFIG_SLAB is not set | 83 | # CONFIG_SLAB is not set |
| 62 | CONFIG_SLUB=y | 84 | # CONFIG_SLUB is not set |
| 63 | # CONFIG_SLOB is not set | 85 | CONFIG_SLOB=y |
| 86 | CONFIG_PROFILING=y | ||
| 87 | # CONFIG_MARKERS is not set | ||
| 88 | CONFIG_OPROFILE=y | ||
| 89 | CONFIG_HAVE_OPROFILE=y | ||
| 90 | # CONFIG_HAVE_KPROBES is not set | ||
| 91 | # CONFIG_HAVE_KRETPROBES is not set | ||
| 92 | # CONFIG_HAVE_DMA_ATTRS is not set | ||
| 93 | CONFIG_RT_MUTEXES=y | ||
| 64 | CONFIG_TINY_SHMEM=y | 94 | CONFIG_TINY_SHMEM=y |
| 65 | CONFIG_BASE_SMALL=1 | 95 | CONFIG_BASE_SMALL=0 |
| 66 | # CONFIG_MODULES is not set | 96 | CONFIG_MODULES=y |
| 97 | # CONFIG_MODULE_FORCE_LOAD is not set | ||
| 98 | CONFIG_MODULE_UNLOAD=y | ||
| 99 | # CONFIG_MODULE_FORCE_UNLOAD is not set | ||
| 100 | # CONFIG_MODVERSIONS is not set | ||
| 101 | # CONFIG_MODULE_SRCVERSION_ALL is not set | ||
| 102 | # CONFIG_KMOD is not set | ||
| 67 | CONFIG_BLOCK=y | 103 | CONFIG_BLOCK=y |
| 68 | # CONFIG_LBD is not set | 104 | # CONFIG_LBD is not set |
| 105 | # CONFIG_BLK_DEV_IO_TRACE is not set | ||
| 69 | # CONFIG_LSF is not set | 106 | # CONFIG_LSF is not set |
| 70 | # CONFIG_BLK_DEV_BSG is not set | 107 | # CONFIG_BLK_DEV_BSG is not set |
| 71 | 108 | ||
| @@ -81,6 +118,7 @@ CONFIG_IOSCHED_NOOP=y | |||
| 81 | # CONFIG_DEFAULT_CFQ is not set | 118 | # CONFIG_DEFAULT_CFQ is not set |
| 82 | CONFIG_DEFAULT_NOOP=y | 119 | CONFIG_DEFAULT_NOOP=y |
| 83 | CONFIG_DEFAULT_IOSCHED="noop" | 120 | CONFIG_DEFAULT_IOSCHED="noop" |
| 121 | # CONFIG_CLASSIC_RCU is not set | ||
| 84 | 122 | ||
| 85 | # | 123 | # |
| 86 | # System type | 124 | # System type |
| @@ -88,7 +126,10 @@ CONFIG_DEFAULT_IOSCHED="noop" | |||
| 88 | CONFIG_CPU_SH2=y | 126 | CONFIG_CPU_SH2=y |
| 89 | CONFIG_CPU_SH2A=y | 127 | CONFIG_CPU_SH2A=y |
| 90 | # CONFIG_CPU_SUBTYPE_SH7619 is not set | 128 | # CONFIG_CPU_SUBTYPE_SH7619 is not set |
| 129 | # CONFIG_CPU_SUBTYPE_SH7203 is not set | ||
| 91 | CONFIG_CPU_SUBTYPE_SH7206=y | 130 | CONFIG_CPU_SUBTYPE_SH7206=y |
| 131 | # CONFIG_CPU_SUBTYPE_SH7263 is not set | ||
| 132 | # CONFIG_CPU_SUBTYPE_MXG is not set | ||
| 92 | # CONFIG_CPU_SUBTYPE_SH7705 is not set | 133 | # CONFIG_CPU_SUBTYPE_SH7705 is not set |
| 93 | # CONFIG_CPU_SUBTYPE_SH7706 is not set | 134 | # CONFIG_CPU_SUBTYPE_SH7706 is not set |
| 94 | # CONFIG_CPU_SUBTYPE_SH7707 is not set | 135 | # CONFIG_CPU_SUBTYPE_SH7707 is not set |
| @@ -97,6 +138,7 @@ CONFIG_CPU_SUBTYPE_SH7206=y | |||
| 97 | # CONFIG_CPU_SUBTYPE_SH7710 is not set | 138 | # CONFIG_CPU_SUBTYPE_SH7710 is not set |
| 98 | # CONFIG_CPU_SUBTYPE_SH7712 is not set | 139 | # CONFIG_CPU_SUBTYPE_SH7712 is not set |
| 99 | # CONFIG_CPU_SUBTYPE_SH7720 is not set | 140 | # CONFIG_CPU_SUBTYPE_SH7720 is not set |
| 141 | # CONFIG_CPU_SUBTYPE_SH7721 is not set | ||
| 100 | # CONFIG_CPU_SUBTYPE_SH7750 is not set | 142 | # CONFIG_CPU_SUBTYPE_SH7750 is not set |
| 101 | # CONFIG_CPU_SUBTYPE_SH7091 is not set | 143 | # CONFIG_CPU_SUBTYPE_SH7091 is not set |
| 102 | # CONFIG_CPU_SUBTYPE_SH7750R is not set | 144 | # CONFIG_CPU_SUBTYPE_SH7750R is not set |
| @@ -105,14 +147,17 @@ CONFIG_CPU_SUBTYPE_SH7206=y | |||
| 105 | # CONFIG_CPU_SUBTYPE_SH7751R is not set | 147 | # CONFIG_CPU_SUBTYPE_SH7751R is not set |
| 106 | # CONFIG_CPU_SUBTYPE_SH7760 is not set | 148 | # CONFIG_CPU_SUBTYPE_SH7760 is not set |
| 107 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set | 149 | # CONFIG_CPU_SUBTYPE_SH4_202 is not set |
| 108 | # CONFIG_CPU_SUBTYPE_ST40STB1 is not set | 150 | # CONFIG_CPU_SUBTYPE_SH7723 is not set |
| 109 | # CONFIG_CPU_SUBTYPE_ST40GX1 is not set | 151 | # CONFIG_CPU_SUBTYPE_SH7763 is not set |
| 110 | # CONFIG_CPU_SUBTYPE_SH7770 is not set | 152 | # CONFIG_CPU_SUBTYPE_SH7770 is not set |
| 111 | # CONFIG_CPU_SUBTYPE_SH7780 is not set | 153 | # CONFIG_CPU_SUBTYPE_SH7780 is not set |
| 112 | # CONFIG_CPU_SUBTYPE_SH7785 is not set | 154 | # CONFIG_CPU_SUBTYPE_SH7785 is not set |
| 113 | # CONFIG_CPU_SUBTYPE_SHX3 is not set | 155 | # CONFIG_CPU_SUBTYPE_SHX3 is not set |
| 114 | # CONFIG_CPU_SUBTYPE_SH7343 is not set | 156 | # CONFIG_CPU_SUBTYPE_SH7343 is not set |
| 115 | # CONFIG_CPU_SUBTYPE_SH7722 is not set | 157 | # CONFIG_CPU_SUBTYPE_SH7722 is not set |
| 158 | # CONFIG_CPU_SUBTYPE_SH7366 is not set | ||
| 159 | # CONFIG_CPU_SUBTYPE_SH5_101 is not set | ||
| 160 | # CONFIG_CPU_SUBTYPE_SH5_103 is not set | ||
| 116 | 161 | ||
| 117 | # | 162 | # |
| 118 | # Memory management options | 163 | # Memory management options |
| @@ -121,23 +166,25 @@ CONFIG_QUICKLIST=y | |||
| 121 | CONFIG_PAGE_OFFSET=0x00000000 | 166 | CONFIG_PAGE_OFFSET=0x00000000 |
| 122 | CONFIG_MEMORY_START=0x0c000000 | 167 | CONFIG_MEMORY_START=0x0c000000 |
| 123 | CONFIG_MEMORY_SIZE=0x04000000 | 168 | CONFIG_MEMORY_SIZE=0x04000000 |
| 169 | CONFIG_29BIT=y | ||
| 124 | CONFIG_ARCH_FLATMEM_ENABLE=y | 170 | CONFIG_ARCH_FLATMEM_ENABLE=y |
| 125 | CONFIG_ARCH_SPARSEMEM_ENABLE=y | 171 | CONFIG_ARCH_SPARSEMEM_ENABLE=y |
| 126 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y | 172 | CONFIG_ARCH_SPARSEMEM_DEFAULT=y |
| 127 | CONFIG_MAX_ACTIVE_REGIONS=1 | 173 | CONFIG_MAX_ACTIVE_REGIONS=1 |
| 128 | CONFIG_ARCH_POPULATES_NODE_MAP=y | 174 | CONFIG_ARCH_POPULATES_NODE_MAP=y |
| 129 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y | 175 | CONFIG_ARCH_SELECT_MEMORY_MODEL=y |
| 130 | CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y | ||
| 131 | CONFIG_PAGE_SIZE_4KB=y | 176 | CONFIG_PAGE_SIZE_4KB=y |
| 132 | # CONFIG_PAGE_SIZE_8KB is not set | 177 | # CONFIG_PAGE_SIZE_8KB is not set |
| 133 | # CONFIG_PAGE_SIZE_64KB is not set | 178 | # CONFIG_PAGE_SIZE_64KB is not set |
| 134 | CONFIG_SELECT_MEMORY_MODEL=y | 179 | CONFIG_SELECT_MEMORY_MODEL=y |
| 135 | # CONFIG_FLATMEM_MANUAL is not set | 180 | CONFIG_FLATMEM_MANUAL=y |
| 136 | # CONFIG_DISCONTIGMEM_MANUAL is not set | 181 | # CONFIG_DISCONTIGMEM_MANUAL is not set |
| 137 | CONFIG_SPARSEMEM_MANUAL=y | 182 | # CONFIG_SPARSEMEM_MANUAL is not set |
| 138 | CONFIG_SPARSEMEM=y | 183 | CONFIG_FLATMEM=y |
| 139 | CONFIG_HAVE_MEMORY_PRESENT=y | 184 | CONFIG_FLAT_NODE_MEM_MAP=y |
| 140 | CONFIG_SPARSEMEM_STATIC=y | 185 | CONFIG_SPARSEMEM_STATIC=y |
| 186 | # CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set | ||
| 187 | CONFIG_PAGEFLAGS_EXTENDED=y | ||
| 141 | CONFIG_SPLIT_PTLOCK_CPUS=4 | 188 | CONFIG_SPLIT_PTLOCK_CPUS=4 |
| 142 | # CONFIG_RESOURCES_64BIT is not set | 189 | # CONFIG_RESOURCES_64BIT is not set |
| 143 | CONFIG_ZONE_DMA_FLAG=0 | 190 | CONFIG_ZONE_DMA_FLAG=0 |
| @@ -183,13 +230,16 @@ CONFIG_CPU_FREQ_TABLE=y | |||
| 183 | CONFIG_CPU_FREQ_STAT=y | 230 | CONFIG_CPU_FREQ_STAT=y |
| 184 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set | 231 | # CONFIG_CPU_FREQ_STAT_DETAILS is not set |
| 185 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y | 232 | CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y |
| 233 | # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set | ||
| 186 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set | 234 | # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set |
| 235 | # CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set | ||
| 236 | # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set | ||
| 187 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y | 237 | CONFIG_CPU_FREQ_GOV_PERFORMANCE=y |
| 188 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set | 238 | # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set |
| 189 | # CONFIG_CPU_FREQ_GOV_USERSPACE is not set | 239 | # CONFIG_CPU_FREQ_GOV_USERSPACE is not set |
| 190 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set | 240 | # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set |
| 191 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set | 241 | # CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set |
| 192 | # CONFIG_SH_CPU_FREQ is not set | 242 | CONFIG_SH_CPU_FREQ=y |
| 193 | 243 | ||
| 194 | # | 244 | # |
| 195 | # DMA support | 245 | # DMA support |
| @@ -213,11 +263,15 @@ CONFIG_HEARTBEAT=y | |||
| 213 | # CONFIG_HZ_300 is not set | 263 | # CONFIG_HZ_300 is not set |
| 214 | CONFIG_HZ_1000=y | 264 | CONFIG_HZ_1000=y |
| 215 | CONFIG_HZ=1000 | 265 | CONFIG_HZ=1000 |
| 216 | # CONFIG_KEXEC is not set | 266 | # CONFIG_SCHED_HRTICK is not set |
| 267 | CONFIG_KEXEC=y | ||
| 217 | # CONFIG_CRASH_DUMP is not set | 268 | # CONFIG_CRASH_DUMP is not set |
| 218 | CONFIG_PREEMPT_NONE=y | 269 | # CONFIG_PREEMPT_NONE is not set |
| 219 | # CONFIG_PREEMPT_VOLUNTARY is not set | 270 | # CONFIG_PREEMPT_VOLUNTARY is not set |
| 220 | # CONFIG_PREEMPT is not set | 271 | CONFIG_PREEMPT=y |
| 272 | CONFIG_PREEMPT_RCU=y | ||
| 273 | CONFIG_RCU_TRACE=y | ||
| 274 | CONFIG_GUSA=y | ||
| 221 | 275 | ||
| 222 | # | 276 | # |
| 223 | # Boot options | 277 | # Boot options |
| @@ -225,25 +279,25 @@ CONFIG_PREEMPT_NONE=y | |||
| 225 | CONFIG_ZERO_PAGE_OFFSET=0x00001000 | 279 | CONFIG_ZERO_PAGE_OFFSET=0x00001000 |
| 226 | CONFIG_BOOT_LINK_OFFSET=0x00800000 | 280 | CONFIG_BOOT_LINK_OFFSET=0x00800000 |
| 227 | CONFIG_CMDLINE_BOOL=y | 281 | CONFIG_CMDLINE_BOOL=y |
| 228 | CONFIG_CMDLINE="console=ttySC3,115200 earlyprintk=serial ignore_loglevel" | 282 | CONFIG_CMDLINE="console=ttySC3,115200 ignore_loglevel earlyprintk=serial" |
| 229 | 283 | ||
| 230 | # | 284 | # |
| 231 | # Bus options | 285 | # Bus options |
| 232 | # | 286 | # |
| 233 | # CONFIG_CF_ENABLER is not set | 287 | CONFIG_CF_ENABLER=y |
| 288 | # CONFIG_CF_AREA5 is not set | ||
| 289 | CONFIG_CF_AREA6=y | ||
| 290 | CONFIG_CF_BASE_ADDR=0xb8000000 | ||
| 234 | # CONFIG_ARCH_SUPPORTS_MSI is not set | 291 | # CONFIG_ARCH_SUPPORTS_MSI is not set |
| 235 | 292 | # CONFIG_PCCARD is not set | |
| 236 | # | ||
| 237 | # PCCARD (PCMCIA/CardBus) support | ||
| 238 | # | ||
| 239 | 293 | ||
| 240 | # | 294 | # |
| 241 | # Executable file formats | 295 | # Executable file formats |
| 242 | # | 296 | # |
| 243 | CONFIG_BINFMT_FLAT=y | 297 | CONFIG_BINFMT_FLAT=y |
| 244 | CONFIG_BINFMT_ZFLAT=y | 298 | CONFIG_BINFMT_ZFLAT=y |
| 245 | # CONFIG_BINFMT_SHARED_FLAT is not set | 299 | CONFIG_BINFMT_SHARED_FLAT=y |
| 246 | # CONFIG_BINFMT_MISC is not set | 300 | CONFIG_BINFMT_MISC=y |
| 247 | 301 | ||
| 248 | # | 302 | # |
| 249 | # Networking | 303 | # Networking |
| @@ -253,14 +307,24 @@ CONFIG_NET=y | |||
| 253 | # | 307 | # |
| 254 | # Networking options | 308 | # Networking options |
| 255 | # | 309 | # |
| 256 | # CONFIG_PACKET is not set | 310 | CONFIG_PACKET=y |
| 257 | # CONFIG_UNIX is not set | 311 | # CONFIG_PACKET_MMAP is not set |
| 258 | # CONFIG_NET_KEY is not set | 312 | CONFIG_UNIX=y |
| 313 | CONFIG_XFRM=y | ||
| 314 | # CONFIG_XFRM_USER is not set | ||
| 315 | # CONFIG_XFRM_SUB_POLICY is not set | ||
| 316 | # CONFIG_XFRM_MIGRATE is not set | ||
| 317 | # CONFIG_XFRM_STATISTICS is not set | ||
| 318 | CONFIG_NET_KEY=y | ||
| 319 | # CONFIG_NET_KEY_MIGRATE is not set | ||
| 259 | CONFIG_INET=y | 320 | CONFIG_INET=y |
| 260 | # CONFIG_IP_MULTICAST is not set | 321 | # CONFIG_IP_MULTICAST is not set |
| 261 | # CONFIG_IP_ADVANCED_ROUTER is not set | 322 | # CONFIG_IP_ADVANCED_ROUTER is not set |
| 262 | CONFIG_IP_FIB_HASH=y | 323 | CONFIG_IP_FIB_HASH=y |
| 263 | # CONFIG_IP_PNP is not set | 324 | CONFIG_IP_PNP=y |
| 325 | CONFIG_IP_PNP_DHCP=y | ||
| 326 | # CONFIG_IP_PNP_BOOTP is not set | ||
| 327 | # CONFIG_IP_PNP_RARP is not set | ||
| 264 | # CONFIG_NET_IPIP is not set | 328 | # CONFIG_NET_IPIP is not set |
| 265 | # CONFIG_NET_IPGRE is not set | 329 | # CONFIG_NET_IPGRE is not set |
| 266 | # CONFIG_ARPD is not set | 330 | # CONFIG_ARPD is not set |
| @@ -273,14 +337,13 @@ CONFIG_IP_FIB_HASH=y | |||
| 273 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set | 337 | # CONFIG_INET_XFRM_MODE_TRANSPORT is not set |
| 274 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set | 338 | # CONFIG_INET_XFRM_MODE_TUNNEL is not set |
| 275 | # CONFIG_INET_XFRM_MODE_BEET is not set | 339 | # CONFIG_INET_XFRM_MODE_BEET is not set |
| 340 | # CONFIG_INET_LRO is not set | ||
| 276 | # CONFIG_INET_DIAG is not set | 341 | # CONFIG_INET_DIAG is not set |
| 277 | # CONFIG_TCP_CONG_ADVANCED is not set | 342 | # CONFIG_TCP_CONG_ADVANCED is not set |
| 278 | CONFIG_TCP_CONG_CUBIC=y | 343 | CONFIG_TCP_CONG_CUBIC=y |
| 279 | CONFIG_DEFAULT_TCP_CONG="cubic" | 344 | CONFIG_DEFAULT_TCP_CONG="cubic" |
| 280 | # CONFIG_TCP_MD5SIG is not set | 345 | # CONFIG_TCP_MD5SIG is not set |
| 281 | # CONFIG_IPV6 is not set | 346 | # CONFIG_IPV6 is not set |
| 282 | # CONFIG_INET6_XFRM_TUNNEL is not set | ||
| 283 | # CONFIG_INET6_TUNNEL is not set | ||
| 284 | # CONFIG_NETWORK_SECMARK is not set | 347 | # CONFIG_NETWORK_SECMARK is not set |
| 285 | # CONFIG_NETFILTER is not set | 348 | # CONFIG_NETFILTER is not set |
| 286 | # CONFIG_IP_DCCP is not set | 349 | # CONFIG_IP_DCCP is not set |
| @@ -297,10 +360,6 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 297 | # CONFIG_LAPB is not set | 360 | # CONFIG_LAPB is not set |
| 298 | # CONFIG_ECONET is not set | 361 | # CONFIG_ECONET is not set |
| 299 | # CONFIG_WAN_ROUTER is not set | 362 | # CONFIG_WAN_ROUTER is not set |
| 300 | |||
| 301 | # | ||
| 302 | # QoS and/or fair queueing | ||
| 303 | # | ||
| 304 | # CONFIG_NET_SCHED is not set | 363 | # CONFIG_NET_SCHED is not set |
| 305 | 364 | ||
| 306 | # | 365 | # |
| @@ -308,6 +367,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 308 | # | 367 | # |
| 309 | # CONFIG_NET_PKTGEN is not set | 368 | # CONFIG_NET_PKTGEN is not set |
| 310 | # CONFIG_HAMRADIO is not set | 369 | # CONFIG_HAMRADIO is not set |
| 370 | # CONFIG_CAN is not set | ||
| 311 | # CONFIG_IRDA is not set | 371 | # CONFIG_IRDA is not set |
| 312 | # CONFIG_BT is not set | 372 | # CONFIG_BT is not set |
| 313 | # CONFIG_AF_RXRPC is not set | 373 | # CONFIG_AF_RXRPC is not set |
| @@ -329,8 +389,10 @@ CONFIG_DEFAULT_TCP_CONG="cubic" | |||
| 329 | # | 389 | # |
| 330 | # Generic Driver Options | 390 | # Generic Driver Options |
| 331 | # | 391 | # |
| 392 | CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" | ||
| 332 | # CONFIG_STANDALONE is not set | 393 | # CONFIG_STANDALONE is not set |
| 333 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set | 394 | # CONFIG_PREVENT_FIRMWARE_BUILD is not set |
| 395 | # CONFIG_FW_LOADER is not set | ||
| 334 | # CONFIG_DEBUG_DRIVER is not set | 396 | # CONFIG_DEBUG_DRIVER is not set |
| 335 | # CONFIG_DEBUG_DEVRES is not set | 397 | # CONFIG_DEBUG_DEVRES is not set |
| 336 | # CONFIG_SYS_HYPERVISOR is not set | 398 | # CONFIG_SYS_HYPERVISOR is not set |
| @@ -339,11 +401,9 @@ CONFIG_MTD=y | |||
| 339 | # CONFIG_MTD_DEBUG is not set | 401 | # CONFIG_MTD_DEBUG is not set |
| 340 | CONFIG_MTD_CONCAT=y | 402 | CONFIG_MTD_CONCAT=y |
| 341 | CONFIG_MTD_PARTITIONS=y | 403 | CONFIG_MTD_PARTITIONS=y |
| 342 | CONFIG_MTD_REDBOOT_PARTS=y | 404 | # CONFIG_MTD_REDBOOT_PARTS is not set |
| 343 | CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 | ||
| 344 | # CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set | ||
| 345 | # CONFIG_MTD_REDBOOT_PARTS_READONLY is not set | ||
| 346 | # CONFIG_MTD_CMDLINE_PARTS is not set | 405 | # CONFIG_MTD_CMDLINE_PARTS is not set |
| 406 | # CONFIG_MTD_AR7_PARTS is not set | ||
| 347 | 407 | ||
| 348 | # | 408 | # |
| 349 | # User Modules And Translation Layers | 409 | # User Modules And Translation Layers |
| @@ -356,6 +416,7 @@ CONFIG_MTD_BLOCK=y | |||
| 356 | # CONFIG_INFTL is not set | 416 | # CONFIG_INFTL is not set |
| 357 | # CONFIG_RFD_FTL is not set | 417 | # CONFIG_RFD_FTL is not set |
| 358 | # CONFIG_SSFDC is not set | 418 | # CONFIG_SSFDC is not set |
| 419 | # CONFIG_MTD_OOPS is not set | ||
| 359 | 420 | ||
| 360 | # | 421 | # |
| 361 | # RAM/ROM/Flash chip drivers | 422 | # RAM/ROM/Flash chip drivers |
| @@ -390,7 +451,6 @@ CONFIG_MTD_PHYSMAP=y | |||
| 390 | CONFIG_MTD_PHYSMAP_START=0x20000000 | 451 | CONFIG_MTD_PHYSMAP_START=0x20000000 |
| 391 | CONFIG_MTD_PHYSMAP_LEN=0x01000000 | 452 | CONFIG_MTD_PHYSMAP_LEN=0x01000000 |
| 392 | CONFIG_MTD_PHYSMAP_BANKWIDTH=4 | 453 | CONFIG_MTD_PHYSMAP_BANKWIDTH=4 |
| 393 | # CONFIG_MTD_SOLUTIONENGINE is not set | ||
| 394 | # CONFIG_MTD_UCLINUX is not set | 454 | # CONFIG_MTD_UCLINUX is not set |
| 395 | # CONFIG_MTD_PLATRAM is not set | 455 | # CONFIG_MTD_PLATRAM is not set |
| 396 | 456 | ||
| @@ -418,13 +478,19 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=4 | |||
| 418 | # CONFIG_PARPORT is not set | 478 | # CONFIG_PARPORT is not set |
| 419 | CONFIG_BLK_DEV=y | 479 | CONFIG_BLK_DEV=y |
| 420 | # CONFIG_BLK_DEV_COW_COMMON is not set | 480 | # CONFIG_BLK_DEV_COW_COMMON is not set |
| 421 | # CONFIG_BLK_DEV_LOOP is not set | 481 | CONFIG_BLK_DEV_LOOP=y |
| 482 | # CONFIG_BLK_DEV_CRYPTOLOOP is not set | ||
| 422 | # CONFIG_BLK_DEV_NBD is not set | 483 | # CONFIG_BLK_DEV_NBD is not set |
| 423 | # CONFIG_BLK_DEV_RAM is not set | 484 | CONFIG_BLK_DEV_RAM=y |
| 485 | CONFIG_BLK_DEV_RAM_COUNT=16 | ||
| 486 | CONFIG_BLK_DEV_RAM_SIZE=4096 | ||
| 487 | # CONFIG_BLK_DEV_XIP is not set | ||
| 424 | # CONFIG_CDROM_PKTCDVD is not set | 488 | # CONFIG_CDROM_PKTCDVD is not set |
| 425 | # CONFIG_ATA_OVER_ETH is not set | 489 | # CONFIG_ATA_OVER_ETH is not set |
| 426 | CONFIG_MISC_DEVICES=y | 490 | CONFIG_MISC_DEVICES=y |
| 427 | # CONFIG_EEPROM_93CX6 is not set | 491 | CONFIG_EEPROM_93CX6=y |
| 492 | # CONFIG_ENCLOSURE_SERVICES is not set | ||
| 493 | CONFIG_HAVE_IDE=y | ||
| 428 | # CONFIG_IDE is not set | 494 | # CONFIG_IDE is not set |
| 429 | 495 | ||
| 430 | # | 496 | # |
| @@ -443,23 +509,30 @@ CONFIG_NETDEVICES=y | |||
| 443 | # CONFIG_MACVLAN is not set | 509 | # CONFIG_MACVLAN is not set |
| 444 | # CONFIG_EQUALIZER is not set | 510 | # CONFIG_EQUALIZER is not set |
| 445 | # CONFIG_TUN is not set | 511 | # CONFIG_TUN is not set |
| 512 | # CONFIG_VETH is not set | ||
| 446 | # CONFIG_PHYLIB is not set | 513 | # CONFIG_PHYLIB is not set |
| 447 | CONFIG_NET_ETHERNET=y | 514 | CONFIG_NET_ETHERNET=y |
| 448 | CONFIG_MII=y | 515 | CONFIG_MII=y |
| 516 | # CONFIG_AX88796 is not set | ||
| 449 | # CONFIG_STNIC is not set | 517 | # CONFIG_STNIC is not set |
| 450 | CONFIG_SMC91X=y | 518 | CONFIG_SMC91X=y |
| 451 | CONFIG_NETDEV_1000=y | 519 | # CONFIG_IBM_NEW_EMAC_ZMII is not set |
| 452 | CONFIG_NETDEV_10000=y | 520 | # CONFIG_IBM_NEW_EMAC_RGMII is not set |
| 521 | # CONFIG_IBM_NEW_EMAC_TAH is not set | ||
| 522 | # CONFIG_IBM_NEW_EMAC_EMAC4 is not set | ||
| 523 | # CONFIG_B44 is not set | ||
| 524 | # CONFIG_NETDEV_1000 is not set | ||
| 525 | # CONFIG_NETDEV_10000 is not set | ||
| 453 | 526 | ||
| 454 | # | 527 | # |
| 455 | # Wireless LAN | 528 | # Wireless LAN |
| 456 | # | 529 | # |
| 457 | # CONFIG_WLAN_PRE80211 is not set | 530 | # CONFIG_WLAN_PRE80211 is not set |
| 458 | # CONFIG_WLAN_80211 is not set | 531 | # CONFIG_WLAN_80211 is not set |
| 532 | # CONFIG_IWLWIFI_LEDS is not set | ||
| 459 | # CONFIG_WAN is not set | 533 | # CONFIG_WAN is not set |
| 460 | # CONFIG_PPP is not set | 534 | # CONFIG_PPP is not set |
| 461 | # CONFIG_SLIP is not set | 535 | # CONFIG_SLIP is not set |
| 462 | # CONFIG_SHAPER is not set | ||
| 463 | # CONFIG_NETCONSOLE is not set | 536 | # CONFIG_NETCONSOLE is not set |
| 464 | # CONFIG_NETPOLL is not set | 537 | # CONFIG_NETPOLL is not set |
| 465 | # CONFIG_NET_POLL_CONTROLLER is not set | 538 | # CONFIG_NET_POLL_CONTROLLER is not set |
| @@ -469,28 +542,7 @@ CONFIG_NETDEV_10000=y | |||
| 469 | # | 542 | # |
| 470 | # Input device support | 543 | # Input device support |
| 471 | # | 544 | # |
| 472 | CONFIG_INPUT=y | 545 | # CONFIG_INPUT is not set |
| 473 | # CONFIG_INPUT_FF_MEMLESS is not set | ||
| 474 | # CONFIG_INPUT_POLLDEV is not set | ||
| 475 | |||
| 476 | # | ||
| 477 | # Userland interfaces | ||
| 478 | # | ||
| 479 | # CONFIG_INPUT_MOUSEDEV is not set | ||
| 480 | # CONFIG_INPUT_JOYDEV is not set | ||
| 481 | # CONFIG_INPUT_TSDEV is not set | ||
| 482 | # CONFIG_INPUT_EVDEV is not set | ||
| 483 | # CONFIG_INPUT_EVBUG is not set | ||
| 484 | |||
| 485 | # | ||
| 486 | # Input Device Drivers | ||
| 487 | # | ||
| 488 | # CONFIG_INPUT_KEYBOARD is not set | ||
| 489 | # CONFIG_INPUT_MOUSE is not set | ||
| 490 | # CONFIG_INPUT_JOYSTICK is not set | ||
| 491 | # CONFIG_INPUT_TABLET is not set | ||
| 492 | # CONFIG_INPUT_TOUCHSCREEN is not set | ||
| 493 | # CONFIG_INPUT_MISC is not set | ||
| 494 | 546 | ||
| 495 | # | 547 | # |
| 496 | # Hardware I/O ports | 548 | # Hardware I/O ports |
| @@ -502,6 +554,7 @@ CONFIG_INPUT=y | |||
| 502 | # Character devices | 554 | # Character devices |
| 503 | # | 555 | # |
| 504 | # CONFIG_VT is not set | 556 | # CONFIG_VT is not set |
| 557 | # CONFIG_DEVKMEM is not set | ||
| 505 | # CONFIG_SERIAL_NONSTANDARD is not set | 558 | # CONFIG_SERIAL_NONSTANDARD is not set |
| 506 | 559 | ||
| 507 | # | 560 | # |
| @@ -520,106 +573,119 @@ CONFIG_SERIAL_CORE_CONSOLE=y | |||
| 520 | # CONFIG_UNIX98_PTYS is not set | 573 | # CONFIG_UNIX98_PTYS is not set |
| 521 | # CONFIG_LEGACY_PTYS is not set | 574 | # CONFIG_LEGACY_PTYS is not set |
| 522 | # CONFIG_IPMI_HANDLER is not set | 575 | # CONFIG_IPMI_HANDLER is not set |
| 523 | # CONFIG_WATCHDOG is not set | ||
| 524 | # CONFIG_HW_RANDOM is not set | 576 | # CONFIG_HW_RANDOM is not set |
| 525 | # CONFIG_R3964 is not set | 577 | # CONFIG_R3964 is not set |
| 526 | # CONFIG_RAW_DRIVER is not set | 578 | # CONFIG_RAW_DRIVER is not set |
| 527 | # CONFIG_TCG_TPM is not set | 579 | # CONFIG_TCG_TPM is not set |
| 528 | # CONFIG_I2C is not set | 580 | # CONFIG_I2C is not set |
| 529 | |||
| 530 | # | ||
| 531 | # SPI support | ||
| 532 | # | ||
| 533 | # CONFIG_SPI is not set | 581 | # CONFIG_SPI is not set |
| 534 | # CONFIG_SPI_MASTER is not set | ||
| 535 | # CONFIG_W1 is not set | 582 | # CONFIG_W1 is not set |
| 536 | # CONFIG_POWER_SUPPLY is not set | 583 | # CONFIG_POWER_SUPPLY is not set |
| 537 | # CONFIG_HWMON is not set | 584 | # CONFIG_HWMON is not set |
| 585 | # CONFIG_THERMAL is not set | ||
| 586 | # CONFIG_WATCHDOG is not set | ||
| 587 | |||
| 588 | # | ||
| 589 | # Sonics Silicon Backplane | ||
| 590 | # | ||
| 591 | CONFIG_SSB_POSSIBLE=y | ||
| 592 | # CONFIG_SSB is not set | ||
| 538 | 593 | ||
| 539 | # | 594 | # |
| 540 | # Multifunction device drivers | 595 | # Multifunction device drivers |
| 541 | # | 596 | # |
| 542 | # CONFIG_MFD_SM501 is not set | 597 | # CONFIG_MFD_SM501 is not set |
| 598 | # CONFIG_HTC_PASIC3 is not set | ||
| 543 | 599 | ||
| 544 | # | 600 | # |
| 545 | # Multimedia devices | 601 | # Multimedia devices |
| 546 | # | 602 | # |
| 603 | |||
| 604 | # | ||
| 605 | # Multimedia core support | ||
| 606 | # | ||
| 547 | # CONFIG_VIDEO_DEV is not set | 607 | # CONFIG_VIDEO_DEV is not set |
| 548 | # CONFIG_DVB_CORE is not set | 608 | # CONFIG_DVB_CORE is not set |
| 549 | CONFIG_DAB=y | 609 | # CONFIG_VIDEO_MEDIA is not set |
| 610 | |||
| 611 | # | ||
| 612 | # Multimedia drivers | ||
| 613 | # | ||
| 614 | # CONFIG_DAB is not set | ||
| 550 | 615 | ||
| 551 | # | 616 | # |
| 552 | # Graphics support | 617 | # Graphics support |
| 553 | # | 618 | # |
| 619 | # CONFIG_VGASTATE is not set | ||
| 620 | # CONFIG_VIDEO_OUTPUT_CONTROL is not set | ||
| 621 | # CONFIG_FB is not set | ||
| 554 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set | 622 | # CONFIG_BACKLIGHT_LCD_SUPPORT is not set |
| 555 | 623 | ||
| 556 | # | 624 | # |
| 557 | # Display device support | 625 | # Display device support |
| 558 | # | 626 | # |
| 559 | # CONFIG_DISPLAY_SUPPORT is not set | 627 | # CONFIG_DISPLAY_SUPPORT is not set |
| 560 | # CONFIG_VGASTATE is not set | ||
| 561 | CONFIG_VIDEO_OUTPUT_CONTROL=y | ||
| 562 | # CONFIG_FB is not set | ||
| 563 | 628 | ||
| 564 | # | 629 | # |
| 565 | # Sound | 630 | # Sound |
| 566 | # | 631 | # |
| 567 | # CONFIG_SOUND is not set | 632 | # CONFIG_SOUND is not set |
| 568 | CONFIG_HID_SUPPORT=y | 633 | # CONFIG_USB_SUPPORT is not set |
| 569 | CONFIG_HID=y | ||
| 570 | # CONFIG_HID_DEBUG is not set | ||
| 571 | CONFIG_USB_SUPPORT=y | ||
| 572 | CONFIG_USB_ARCH_HAS_HCD=y | ||
| 573 | # CONFIG_USB_ARCH_HAS_OHCI is not set | ||
| 574 | # CONFIG_USB_ARCH_HAS_EHCI is not set | ||
| 575 | # CONFIG_USB is not set | ||
| 576 | |||
| 577 | # | ||
| 578 | # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' | ||
| 579 | # | ||
| 580 | |||
| 581 | # | ||
| 582 | # USB Gadget Support | ||
| 583 | # | ||
| 584 | # CONFIG_USB_GADGET is not set | ||
| 585 | # CONFIG_MMC is not set | 634 | # CONFIG_MMC is not set |
| 635 | # CONFIG_MEMSTICK is not set | ||
| 586 | # CONFIG_NEW_LEDS is not set | 636 | # CONFIG_NEW_LEDS is not set |
| 587 | # CONFIG_RTC_CLASS is not set | 637 | # CONFIG_ACCESSIBILITY is not set |
| 638 | CONFIG_RTC_LIB=y | ||
| 639 | CONFIG_RTC_CLASS=y | ||
| 640 | CONFIG_RTC_HCTOSYS=y | ||
| 641 | CONFIG_RTC_HCTOSYS_DEVICE="rtc0" | ||
| 642 | # CONFIG_RTC_DEBUG is not set | ||
| 588 | 643 | ||
| 589 | # | 644 | # |
| 590 | # DMA Engine support | 645 | # RTC interfaces |
| 591 | # | 646 | # |
| 592 | # CONFIG_DMA_ENGINE is not set | 647 | CONFIG_RTC_INTF_SYSFS=y |
| 648 | CONFIG_RTC_INTF_PROC=y | ||
| 649 | CONFIG_RTC_INTF_DEV=y | ||
| 650 | # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set | ||
| 651 | # CONFIG_RTC_DRV_TEST is not set | ||
| 593 | 652 | ||
| 594 | # | 653 | # |
| 595 | # DMA Clients | 654 | # SPI RTC drivers |
| 596 | # | 655 | # |
| 597 | 656 | ||
| 598 | # | 657 | # |
| 599 | # DMA Devices | 658 | # Platform RTC drivers |
| 600 | # | 659 | # |
| 660 | # CONFIG_RTC_DRV_DS1511 is not set | ||
| 661 | # CONFIG_RTC_DRV_DS1553 is not set | ||
| 662 | # CONFIG_RTC_DRV_DS1742 is not set | ||
| 663 | # CONFIG_RTC_DRV_STK17TA8 is not set | ||
| 664 | # CONFIG_RTC_DRV_M48T86 is not set | ||
| 665 | # CONFIG_RTC_DRV_M48T59 is not set | ||
| 666 | # CONFIG_RTC_DRV_V3020 is not set | ||
| 601 | 667 | ||
| 602 | # | 668 | # |
| 603 | # Userspace I/O | 669 | # on-CPU RTC drivers |
| 604 | # | 670 | # |
| 671 | CONFIG_RTC_DRV_SH=y | ||
| 605 | # CONFIG_UIO is not set | 672 | # CONFIG_UIO is not set |
| 606 | 673 | ||
| 607 | # | 674 | # |
| 608 | # File systems | 675 | # File systems |
| 609 | # | 676 | # |
| 610 | # CONFIG_EXT2_FS is not set | 677 | CONFIG_EXT2_FS=y |
| 678 | # CONFIG_EXT2_FS_XATTR is not set | ||
| 611 | # CONFIG_EXT3_FS is not set | 679 | # CONFIG_EXT3_FS is not set |
| 612 | # CONFIG_EXT4DEV_FS is not set | 680 | # CONFIG_EXT4DEV_FS is not set |
| 613 | # CONFIG_REISERFS_FS is not set | 681 | # CONFIG_REISERFS_FS is not set |
| 614 | # CONFIG_JFS_FS is not set | 682 | # CONFIG_JFS_FS is not set |
| 615 | # CONFIG_FS_POSIX_ACL is not set | 683 | # CONFIG_FS_POSIX_ACL is not set |
| 616 | # CONFIG_XFS_FS is not set | 684 | # CONFIG_XFS_FS is not set |
| 617 | # CONFIG_GFS2_FS is not set | 685 | # CONFIG_OCFS2_FS is not set |
| 618 | # CONFIG_MINIX_FS is not set | 686 | # CONFIG_DNOTIFY is not set |
| 619 | CONFIG_ROMFS_FS=y | ||
| 620 | # CONFIG_INOTIFY is not set | 687 | # CONFIG_INOTIFY is not set |
| 621 | # CONFIG_QUOTA is not set | 688 | # CONFIG_QUOTA is not set |
| 622 | # CONFIG_DNOTIFY is not set | ||
| 623 | # CONFIG_AUTOFS_FS is not set | 689 | # CONFIG_AUTOFS_FS is not set |
| 624 | # CONFIG_AUTOFS4_FS is not set | 690 | # CONFIG_AUTOFS4_FS is not set |
| 625 | # CONFIG_FUSE_FS is not set | 691 | # CONFIG_FUSE_FS is not set |
| @@ -642,10 +708,11 @@ CONFIG_ROMFS_FS=y | |||
| 642 | # | 708 | # |
| 643 | CONFIG_PROC_FS=y | 709 | CONFIG_PROC_FS=y |
| 644 | CONFIG_PROC_SYSCTL=y | 710 | CONFIG_PROC_SYSCTL=y |
| 645 | # CONFIG_SYSFS is not set | 711 | CONFIG_SYSFS=y |
| 646 | # CONFIG_TMPFS is not set | 712 | CONFIG_TMPFS=y |
| 713 | # CONFIG_TMPFS_POSIX_ACL is not set | ||
| 647 | # CONFIG_HUGETLB_PAGE is not set | 714 | # CONFIG_HUGETLB_PAGE is not set |
| 648 | CONFIG_RAMFS=y | 715 | CONFIG_CONFIGFS_FS=y |
| 649 | 716 | ||
| 650 | # | 717 | # |
| 651 | # Miscellaneous filesystems | 718 | # Miscellaneous filesystems |
| @@ -658,18 +725,28 @@ CONFIG_RAMFS=y | |||
| 658 | # CONFIG_BFS_FS is not set | 725 | # CONFIG_BFS_FS is not set |
| 659 | # CONFIG_EFS_FS is not set | 726 | # CONFIG_EFS_FS is not set |
| 660 | # CONFIG_JFFS2_FS is not set | 727 | # CONFIG_JFFS2_FS is not set |
| 661 | # CONFIG_CRAMFS is not set | 728 | CONFIG_CRAMFS=y |
| 662 | # CONFIG_VXFS_FS is not set | 729 | # CONFIG_VXFS_FS is not set |
| 730 | # CONFIG_MINIX_FS is not set | ||
| 663 | # CONFIG_HPFS_FS is not set | 731 | # CONFIG_HPFS_FS is not set |
| 664 | # CONFIG_QNX4FS_FS is not set | 732 | # CONFIG_QNX4FS_FS is not set |
| 733 | CONFIG_ROMFS_FS=y | ||
| 665 | # CONFIG_SYSV_FS is not set | 734 | # CONFIG_SYSV_FS is not set |
| 666 | # CONFIG_UFS_FS is not set | 735 | # CONFIG_UFS_FS is not set |
| 667 | 736 | CONFIG_NETWORK_FILESYSTEMS=y | |
| 668 | # | 737 | CONFIG_NFS_FS=y |
| 669 | # Network File Systems | 738 | CONFIG_NFS_V3=y |
| 670 | # | 739 | # CONFIG_NFS_V3_ACL is not set |
| 671 | # CONFIG_NFS_FS is not set | 740 | # CONFIG_NFS_V4 is not set |
| 672 | # CONFIG_NFSD is not set | 741 | # CONFIG_NFSD is not set |
| 742 | CONFIG_ROOT_NFS=y | ||
| 743 | CONFIG_LOCKD=y | ||
| 744 | CONFIG_LOCKD_V4=y | ||
| 745 | CONFIG_NFS_COMMON=y | ||
| 746 | CONFIG_SUNRPC=y | ||
| 747 | # CONFIG_SUNRPC_BIND34 is not set | ||
| 748 | # CONFIG_RPCSEC_GSS_KRB5 is not set | ||
| 749 | # CONFIG_RPCSEC_GSS_SPKM3 is not set | ||
| 673 | # CONFIG_SMB_FS is not set | 750 | # CONFIG_SMB_FS is not set |
| 674 | # CONFIG_CIFS is not set | 751 | # CONFIG_CIFS is not set |
| 675 | # CONFIG_NCP_FS is not set | 752 | # CONFIG_NCP_FS is not set |
| @@ -681,30 +758,20 @@ CONFIG_RAMFS=y | |||
| 681 | # | 758 | # |
| 682 | # CONFIG_PARTITION_ADVANCED is not set | 759 | # CONFIG_PARTITION_ADVANCED is not set |
| 683 | CONFIG_MSDOS_PARTITION=y | 760 | CONFIG_MSDOS_PARTITION=y |
| 684 | |||
| 685 | # | ||
| 686 | # Native Language Support | ||
| 687 | # | ||
| 688 | # CONFIG_NLS is not set | 761 | # CONFIG_NLS is not set |
| 689 | 762 | # CONFIG_DLM is not set | |
| 690 | # | ||
| 691 | # Distributed Lock Manager | ||
| 692 | # | ||
| 693 | |||
| 694 | # | ||
| 695 | # Profiling support | ||
| 696 | # | ||
| 697 | CONFIG_PROFILING=y | ||
| 698 | # CONFIG_OPROFILE is not set | ||
| 699 | 763 | ||
| 700 | # | 764 | # |
| 701 | # Kernel hacking | 765 | # Kernel hacking |
| 702 | # | 766 | # |
| 703 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y | 767 | CONFIG_TRACE_IRQFLAGS_SUPPORT=y |
| 704 | # CONFIG_PRINTK_TIME is not set | 768 | # CONFIG_PRINTK_TIME is not set |
| 769 | CONFIG_ENABLE_WARN_DEPRECATED=y | ||
| 705 | # CONFIG_ENABLE_MUST_CHECK is not set | 770 | # CONFIG_ENABLE_MUST_CHECK is not set |
| 771 | CONFIG_FRAME_WARN=1024 | ||
| 706 | # CONFIG_MAGIC_SYSRQ is not set | 772 | # CONFIG_MAGIC_SYSRQ is not set |
| 707 | # CONFIG_UNUSED_SYMBOLS is not set | 773 | # CONFIG_UNUSED_SYMBOLS is not set |
| 774 | CONFIG_DEBUG_FS=y | ||
| 708 | # CONFIG_HEADERS_CHECK is not set | 775 | # CONFIG_HEADERS_CHECK is not set |
| 709 | CONFIG_DEBUG_KERNEL=y | 776 | CONFIG_DEBUG_KERNEL=y |
| 710 | # CONFIG_DEBUG_SHIRQ is not set | 777 | # CONFIG_DEBUG_SHIRQ is not set |
| @@ -712,7 +779,10 @@ CONFIG_DETECT_SOFTLOCKUP=y | |||
| 712 | CONFIG_SCHED_DEBUG=y | 779 | CONFIG_SCHED_DEBUG=y |
| 713 | # CONFIG_SCHEDSTATS is not set | 780 | # CONFIG_SCHEDSTATS is not set |
| 714 | # CONFIG_TIMER_STATS is not set | 781 | # CONFIG_TIMER_STATS is not set |
| 715 | CONFIG_SLUB_DEBUG_ON=y | 782 | # CONFIG_DEBUG_OBJECTS is not set |
| 783 | CONFIG_DEBUG_PREEMPT=y | ||
| 784 | # CONFIG_DEBUG_RT_MUTEXES is not set | ||
| 785 | # CONFIG_RT_MUTEX_TESTER is not set | ||
| 716 | # CONFIG_DEBUG_SPINLOCK is not set | 786 | # CONFIG_DEBUG_SPINLOCK is not set |
| 717 | # CONFIG_DEBUG_MUTEXES is not set | 787 | # CONFIG_DEBUG_MUTEXES is not set |
| 718 | # CONFIG_DEBUG_LOCK_ALLOC is not set | 788 | # CONFIG_DEBUG_LOCK_ALLOC is not set |
| @@ -722,38 +792,123 @@ CONFIG_DEBUG_SPINLOCK_SLEEP=y | |||
| 722 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set | 792 | # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set |
| 723 | # CONFIG_DEBUG_KOBJECT is not set | 793 | # CONFIG_DEBUG_KOBJECT is not set |
| 724 | CONFIG_DEBUG_BUGVERBOSE=y | 794 | CONFIG_DEBUG_BUGVERBOSE=y |
| 725 | CONFIG_DEBUG_INFO=y | 795 | # CONFIG_DEBUG_INFO is not set |
| 726 | # CONFIG_DEBUG_VM is not set | 796 | CONFIG_DEBUG_VM=y |
| 727 | # CONFIG_DEBUG_LIST is not set | 797 | # CONFIG_DEBUG_WRITECOUNT is not set |
| 798 | CONFIG_DEBUG_LIST=y | ||
| 799 | # CONFIG_DEBUG_SG is not set | ||
| 728 | CONFIG_FRAME_POINTER=y | 800 | CONFIG_FRAME_POINTER=y |
| 729 | CONFIG_FORCED_INLINING=y | 801 | # CONFIG_BOOT_PRINTK_DELAY is not set |
| 802 | # CONFIG_RCU_TORTURE_TEST is not set | ||
| 803 | # CONFIG_BACKTRACE_SELF_TEST is not set | ||
| 730 | # CONFIG_FAULT_INJECTION is not set | 804 | # CONFIG_FAULT_INJECTION is not set |
| 805 | # CONFIG_SAMPLES is not set | ||
| 731 | # CONFIG_SH_STANDARD_BIOS is not set | 806 | # CONFIG_SH_STANDARD_BIOS is not set |
| 732 | CONFIG_EARLY_SCIF_CONSOLE=y | 807 | # CONFIG_EARLY_SCIF_CONSOLE is not set |
| 733 | CONFIG_EARLY_SCIF_CONSOLE_PORT=0xfffe9800 | ||
| 734 | CONFIG_EARLY_PRINTK=y | ||
| 735 | # CONFIG_DEBUG_BOOTMEM is not set | 808 | # CONFIG_DEBUG_BOOTMEM is not set |
| 736 | CONFIG_DEBUG_STACKOVERFLOW=y | 809 | CONFIG_DEBUG_STACKOVERFLOW=y |
| 737 | CONFIG_DEBUG_STACK_USAGE=y | 810 | CONFIG_DEBUG_STACK_USAGE=y |
| 738 | # CONFIG_4KSTACKS is not set | 811 | # CONFIG_IRQSTACKS is not set |
| 739 | 812 | ||
| 740 | # | 813 | # |
| 741 | # Security options | 814 | # Security options |
| 742 | # | 815 | # |
| 743 | # CONFIG_KEYS is not set | 816 | # CONFIG_KEYS is not set |
| 744 | # CONFIG_CRYPTO is not set | 817 | # CONFIG_SECURITY is not set |
| 818 | # CONFIG_SECURITY_FILE_CAPABILITIES is not set | ||
| 819 | CONFIG_CRYPTO=y | ||
| 820 | |||
| 821 | # | ||
| 822 | # Crypto core or helper | ||
| 823 | # | ||
| 824 | CONFIG_CRYPTO_ALGAPI=y | ||
| 825 | # CONFIG_CRYPTO_MANAGER is not set | ||
| 826 | # CONFIG_CRYPTO_GF128MUL is not set | ||
| 827 | # CONFIG_CRYPTO_NULL is not set | ||
| 828 | # CONFIG_CRYPTO_CRYPTD is not set | ||
| 829 | # CONFIG_CRYPTO_AUTHENC is not set | ||
| 830 | # CONFIG_CRYPTO_TEST is not set | ||
| 831 | |||
| 832 | # | ||
| 833 | # Authenticated Encryption with Associated Data | ||
| 834 | # | ||
| 835 | # CONFIG_CRYPTO_CCM is not set | ||
| 836 | # CONFIG_CRYPTO_GCM is not set | ||
| 837 | # CONFIG_CRYPTO_SEQIV is not set | ||
| 838 | |||
| 839 | # | ||
| 840 | # Block modes | ||
| 841 | # | ||
| 842 | # CONFIG_CRYPTO_CBC is not set | ||
| 843 | # CONFIG_CRYPTO_CTR is not set | ||
| 844 | # CONFIG_CRYPTO_CTS is not set | ||
| 845 | # CONFIG_CRYPTO_ECB is not set | ||
| 846 | # CONFIG_CRYPTO_LRW is not set | ||
| 847 | # CONFIG_CRYPTO_PCBC is not set | ||
| 848 | # CONFIG_CRYPTO_XTS is not set | ||
| 849 | |||
| 850 | # | ||
| 851 | # Hash modes | ||
| 852 | # | ||
| 853 | # CONFIG_CRYPTO_HMAC is not set | ||
| 854 | # CONFIG_CRYPTO_XCBC is not set | ||
| 855 | |||
| 856 | # | ||
| 857 | # Digest | ||
| 858 | # | ||
| 859 | # CONFIG_CRYPTO_CRC32C is not set | ||
| 860 | # CONFIG_CRYPTO_MD4 is not set | ||
| 861 | # CONFIG_CRYPTO_MD5 is not set | ||
| 862 | # CONFIG_CRYPTO_MICHAEL_MIC is not set | ||
| 863 | # CONFIG_CRYPTO_SHA1 is not set | ||
| 864 | # CONFIG_CRYPTO_SHA256 is not set | ||
| 865 | # CONFIG_CRYPTO_SHA512 is not set | ||
| 866 | # CONFIG_CRYPTO_TGR192 is not set | ||
| 867 | # CONFIG_CRYPTO_WP512 is not set | ||
| 868 | |||
| 869 | # | ||
| 870 | # Ciphers | ||
| 871 | # | ||
| 872 | # CONFIG_CRYPTO_AES is not set | ||
| 873 | # CONFIG_CRYPTO_ANUBIS is not set | ||
| 874 | # CONFIG_CRYPTO_ARC4 is not set | ||
| 875 | # CONFIG_CRYPTO_BLOWFISH is not set | ||
| 876 | # CONFIG_CRYPTO_CAMELLIA is not set | ||
| 877 | # CONFIG_CRYPTO_CAST5 is not set | ||
| 878 | # CONFIG_CRYPTO_CAST6 is not set | ||
| 879 | # CONFIG_CRYPTO_DES is not set | ||
| 880 | # CONFIG_CRYPTO_FCRYPT is not set | ||
| 881 | # CONFIG_CRYPTO_KHAZAD is not set | ||
| 882 | # CONFIG_CRYPTO_SALSA20 is not set | ||
| 883 | # CONFIG_CRYPTO_SEED is not set | ||
| 884 | # CONFIG_CRYPTO_SERPENT is not set | ||
| 885 | # CONFIG_CRYPTO_TEA is not set | ||
| 886 | # CONFIG_CRYPTO_TWOFISH is not set | ||
| 887 | |||
| 888 | # | ||
| 889 | # Compression | ||
| 890 | # | ||
| 891 | CONFIG_CRYPTO_DEFLATE=y | ||
| 892 | CONFIG_CRYPTO_LZO=y | ||
| 893 | # CONFIG_CRYPTO_HW is not set | ||
| 745 | 894 | ||
| 746 | # | 895 | # |
| 747 | # Library routines | 896 | # Library routines |
| 748 | # | 897 | # |
| 749 | CONFIG_BITREVERSE=y | 898 | CONFIG_BITREVERSE=y |
| 750 | # CONFIG_CRC_CCITT is not set | 899 | # CONFIG_GENERIC_FIND_FIRST_BIT is not set |
| 751 | # CONFIG_CRC16 is not set | 900 | CONFIG_CRC_CCITT=y |
| 752 | # CONFIG_CRC_ITU_T is not set | 901 | CONFIG_CRC16=y |
| 902 | CONFIG_CRC_ITU_T=y | ||
| 753 | CONFIG_CRC32=y | 903 | CONFIG_CRC32=y |
| 754 | # CONFIG_CRC7 is not set | 904 | CONFIG_CRC7=y |
| 755 | # CONFIG_LIBCRC32C is not set | 905 | CONFIG_LIBCRC32C=y |
| 906 | CONFIG_AUDIT_GENERIC=y | ||
| 756 | CONFIG_ZLIB_INFLATE=y | 907 | CONFIG_ZLIB_INFLATE=y |
| 908 | CONFIG_ZLIB_DEFLATE=y | ||
| 909 | CONFIG_LZO_COMPRESS=y | ||
| 910 | CONFIG_LZO_DECOMPRESS=y | ||
| 911 | CONFIG_PLIST=y | ||
| 757 | CONFIG_HAS_IOMEM=y | 912 | CONFIG_HAS_IOMEM=y |
| 758 | CONFIG_HAS_IOPORT=y | 913 | CONFIG_HAS_IOPORT=y |
| 759 | CONFIG_HAS_DMA=y | 914 | CONFIG_HAS_DMA=y |
diff --git a/arch/sh/kernel/cpu/irq/intc-sh5.c b/arch/sh/kernel/cpu/irq/intc-sh5.c index de45c6a3e33b..79baa47af977 100644 --- a/arch/sh/kernel/cpu/irq/intc-sh5.c +++ b/arch/sh/kernel/cpu/irq/intc-sh5.c | |||
| @@ -242,6 +242,7 @@ void __init plat_irq_setup(void) | |||
| 242 | reg += 8; | 242 | reg += 8; |
| 243 | } | 243 | } |
| 244 | } | 244 | } |
| 245 | } | ||
| 245 | #endif | 246 | #endif |
| 246 | 247 | ||
| 247 | /* | 248 | /* |
diff --git a/arch/sh/kernel/cpu/sh4/probe.c b/arch/sh/kernel/cpu/sh4/probe.c index ebceb0dadff5..be4926969181 100644 --- a/arch/sh/kernel/cpu/sh4/probe.c +++ b/arch/sh/kernel/cpu/sh4/probe.c | |||
| @@ -132,6 +132,7 @@ int __init detect_cpu_and_cache_system(void) | |||
| 132 | 132 | ||
| 133 | switch (prr) { | 133 | switch (prr) { |
| 134 | case 0x50: | 134 | case 0x50: |
| 135 | case 0x51: | ||
| 135 | boot_cpu_data.type = CPU_SH7723; | 136 | boot_cpu_data.type = CPU_SH7723; |
| 136 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_L2_CACHE; | 137 | boot_cpu_data.flags |= CPU_HAS_FPU | CPU_HAS_L2_CACHE; |
| 137 | break; | 138 | break; |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c index 069314037049..62ebccf18b3c 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7722.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7722.c | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | static struct resource usbf_resources[] = { | 17 | static struct resource usbf_resources[] = { |
| 18 | [0] = { | 18 | [0] = { |
| 19 | .name = "USBF", | 19 | .name = "m66592_udc", |
| 20 | .start = 0x04480000, | 20 | .start = 0x04480000, |
| 21 | .end = 0x044800FF, | 21 | .end = 0x044800FF, |
| 22 | .flags = IORESOURCE_MEM, | 22 | .flags = IORESOURCE_MEM, |
diff --git a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c index 16925cf28db8..566ce79b9abf 100644 --- a/arch/sh/kernel/cpu/sh4a/setup-sh7723.c +++ b/arch/sh/kernel/cpu/sh4a/setup-sh7723.c | |||
| @@ -153,7 +153,7 @@ static struct intc_vect vectors[] __initdata = { | |||
| 153 | INTC_VECT(VIO_VOUI,0x8E0), | 153 | INTC_VECT(VIO_VOUI,0x8E0), |
| 154 | 154 | ||
| 155 | INTC_VECT(SCIFA_SCIFA0,0x900), | 155 | INTC_VECT(SCIFA_SCIFA0,0x900), |
| 156 | INTC_VECT(VPU_VPUI,0x920), | 156 | INTC_VECT(VPU_VPUI,0x980), |
| 157 | INTC_VECT(TPU_TPUI,0x9A0), | 157 | INTC_VECT(TPU_TPUI,0x9A0), |
| 158 | INTC_VECT(ADC_ADI,0x9E0), | 158 | INTC_VECT(ADC_ADI,0x9E0), |
| 159 | INTC_VECT(USB_USI0,0xA20), | 159 | INTC_VECT(USB_USI0,0xA20), |
| @@ -292,9 +292,3 @@ void __init plat_irq_setup(void) | |||
| 292 | { | 292 | { |
| 293 | register_intc_controller(&intc_desc); | 293 | register_intc_controller(&intc_desc); |
| 294 | } | 294 | } |
| 295 | |||
| 296 | void __init plat_mem_setup(void) | ||
| 297 | { | ||
| 298 | /* Register the URAM space as Node 1 */ | ||
| 299 | setup_bootmem_node(1, 0x055f0000, 0x05610000); | ||
| 300 | } | ||
diff --git a/arch/sh/kernel/module.c b/arch/sh/kernel/module.c index b3d0a03b4c76..5482e65375a9 100644 --- a/arch/sh/kernel/module.c +++ b/arch/sh/kernel/module.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/fs.h> | 30 | #include <linux/fs.h> |
| 31 | #include <linux/string.h> | 31 | #include <linux/string.h> |
| 32 | #include <linux/kernel.h> | 32 | #include <linux/kernel.h> |
| 33 | #include <asm/unaligned.h> | ||
| 33 | 34 | ||
| 34 | void *module_alloc(unsigned long size) | 35 | void *module_alloc(unsigned long size) |
| 35 | { | 36 | { |
| @@ -56,34 +57,6 @@ int module_frob_arch_sections(Elf_Ehdr *hdr, | |||
| 56 | return 0; | 57 | return 0; |
| 57 | } | 58 | } |
| 58 | 59 | ||
| 59 | #ifdef CONFIG_SUPERH32 | ||
| 60 | #define COPY_UNALIGNED_WORD(sw, tw, align) \ | ||
| 61 | { \ | ||
| 62 | void *__s = &(sw), *__t = &(tw); \ | ||
| 63 | unsigned short *__s2 = __s, *__t2 = __t; \ | ||
| 64 | unsigned char *__s1 = __s, *__t1 = __t; \ | ||
| 65 | switch ((align)) \ | ||
| 66 | { \ | ||
| 67 | case 0: \ | ||
| 68 | *(unsigned long *) __t = *(unsigned long *) __s; \ | ||
| 69 | break; \ | ||
| 70 | case 2: \ | ||
| 71 | *__t2++ = *__s2++; \ | ||
| 72 | *__t2 = *__s2; \ | ||
| 73 | break; \ | ||
| 74 | default: \ | ||
| 75 | *__t1++ = *__s1++; \ | ||
| 76 | *__t1++ = *__s1++; \ | ||
| 77 | *__t1++ = *__s1++; \ | ||
| 78 | *__t1 = *__s1; \ | ||
| 79 | break; \ | ||
| 80 | } \ | ||
| 81 | } | ||
| 82 | #else | ||
| 83 | /* One thing SHmedia doesn't screw up! */ | ||
| 84 | #define COPY_UNALIGNED_WORD(sw, tw, align) { (tw) = (sw); } | ||
| 85 | #endif | ||
| 86 | |||
| 87 | int apply_relocate_add(Elf32_Shdr *sechdrs, | 60 | int apply_relocate_add(Elf32_Shdr *sechdrs, |
| 88 | const char *strtab, | 61 | const char *strtab, |
| 89 | unsigned int symindex, | 62 | unsigned int symindex, |
| @@ -96,7 +69,6 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
| 96 | Elf32_Addr relocation; | 69 | Elf32_Addr relocation; |
| 97 | uint32_t *location; | 70 | uint32_t *location; |
| 98 | uint32_t value; | 71 | uint32_t value; |
| 99 | int align; | ||
| 100 | 72 | ||
| 101 | pr_debug("Applying relocate section %u to %u\n", relsec, | 73 | pr_debug("Applying relocate section %u to %u\n", relsec, |
| 102 | sechdrs[relsec].sh_info); | 74 | sechdrs[relsec].sh_info); |
| @@ -109,7 +81,6 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
| 109 | sym = (Elf32_Sym *)sechdrs[symindex].sh_addr | 81 | sym = (Elf32_Sym *)sechdrs[symindex].sh_addr |
| 110 | + ELF32_R_SYM(rel[i].r_info); | 82 | + ELF32_R_SYM(rel[i].r_info); |
| 111 | relocation = sym->st_value + rel[i].r_addend; | 83 | relocation = sym->st_value + rel[i].r_addend; |
| 112 | align = (int)location & 3; | ||
| 113 | 84 | ||
| 114 | #ifdef CONFIG_SUPERH64 | 85 | #ifdef CONFIG_SUPERH64 |
| 115 | /* For text addresses, bit2 of the st_other field indicates | 86 | /* For text addresses, bit2 of the st_other field indicates |
| @@ -122,15 +93,15 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, | |||
| 122 | 93 | ||
| 123 | switch (ELF32_R_TYPE(rel[i].r_info)) { | 94 | switch (ELF32_R_TYPE(rel[i].r_info)) { |
| 124 | case R_SH_DIR32: | 95 | case R_SH_DIR32: |
| 125 | COPY_UNALIGNED_WORD (*location, value, align); | 96 | value = get_unaligned(location); |
| 126 | value += relocation; | 97 | value += relocation; |
| 127 | COPY_UNALIGNED_WORD (value, *location, align); | 98 | put_unaligned(value, location); |
| 128 | break; | 99 | break; |
| 129 | case R_SH_REL32: | 100 | case R_SH_REL32: |
| 130 | relocation = (relocation - (Elf32_Addr) location); | 101 | relocation = (relocation - (Elf32_Addr) location); |
| 131 | COPY_UNALIGNED_WORD (*location, value, align); | 102 | value = get_unaligned(location); |
| 132 | value += relocation; | 103 | value += relocation; |
| 133 | COPY_UNALIGNED_WORD (value, *location, align); | 104 | put_unaligned(value, location); |
| 134 | break; | 105 | break; |
| 135 | case R_SH_IMM_LOW16: | 106 | case R_SH_IMM_LOW16: |
| 136 | *location = (*location & ~0x3fffc00) | | 107 | *location = (*location & ~0x3fffc00) | |
diff --git a/arch/sparc/kernel/led.c b/arch/sparc/kernel/led.c index 59e9344e7a0d..adaaed4ea2fb 100644 --- a/arch/sparc/kernel/led.c +++ b/arch/sparc/kernel/led.c | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #include <linux/module.h> | 2 | #include <linux/module.h> |
| 3 | #include <linux/init.h> | 3 | #include <linux/init.h> |
| 4 | #include <linux/proc_fs.h> | 4 | #include <linux/proc_fs.h> |
| 5 | #include <linux/seq_file.h> | ||
| 5 | #include <linux/string.h> | 6 | #include <linux/string.h> |
| 6 | #include <linux/jiffies.h> | 7 | #include <linux/jiffies.h> |
| 7 | #include <linux/timer.h> | 8 | #include <linux/timer.h> |
| @@ -45,21 +46,22 @@ static void led_blink(unsigned long timeout) | |||
| 45 | add_timer(&led_blink_timer); | 46 | add_timer(&led_blink_timer); |
| 46 | } | 47 | } |
| 47 | 48 | ||
| 48 | static int led_read_proc(char *buf, char **start, off_t offset, int count, | 49 | static int led_proc_show(struct seq_file *m, void *v) |
| 49 | int *eof, void *data) | ||
| 50 | { | 50 | { |
| 51 | int len = 0; | ||
| 52 | |||
| 53 | if (get_auxio() & AUXIO_LED) | 51 | if (get_auxio() & AUXIO_LED) |
| 54 | len = sprintf(buf, "on\n"); | 52 | seq_puts(m, "on\n"); |
| 55 | else | 53 | else |
| 56 | len = sprintf(buf, "off\n"); | 54 | seq_puts(m, "off\n"); |
| 55 | return 0; | ||
| 56 | } | ||
| 57 | 57 | ||
| 58 | return len; | 58 | static int led_proc_open(struct inode *inode, struct file *file) |
| 59 | { | ||
| 60 | return single_open(file, led_proc_show, NULL); | ||
| 59 | } | 61 | } |
| 60 | 62 | ||
| 61 | static int led_write_proc(struct file *file, const char __user *buffer, | 63 | static ssize_t led_proc_write(struct file *file, const char __user *buffer, |
| 62 | unsigned long count, void *data) | 64 | size_t count, loff_t *ppos) |
| 63 | { | 65 | { |
| 64 | char *buf = NULL; | 66 | char *buf = NULL; |
| 65 | 67 | ||
| @@ -103,6 +105,15 @@ static int led_write_proc(struct file *file, const char __user *buffer, | |||
| 103 | return count; | 105 | return count; |
| 104 | } | 106 | } |
| 105 | 107 | ||
| 108 | static const struct file_operations led_proc_fops = { | ||
| 109 | .owner = THIS_MODULE, | ||
| 110 | .open = led_proc_open, | ||
| 111 | .read = seq_read, | ||
| 112 | .llseek = seq_lseek, | ||
| 113 | .release = single_release, | ||
| 114 | .write = led_proc_write, | ||
| 115 | }; | ||
| 116 | |||
| 106 | static struct proc_dir_entry *led; | 117 | static struct proc_dir_entry *led; |
| 107 | 118 | ||
| 108 | #define LED_VERSION "0.1" | 119 | #define LED_VERSION "0.1" |
| @@ -112,12 +123,9 @@ static int __init led_init(void) | |||
| 112 | init_timer(&led_blink_timer); | 123 | init_timer(&led_blink_timer); |
| 113 | led_blink_timer.function = led_blink; | 124 | led_blink_timer.function = led_blink; |
| 114 | 125 | ||
| 115 | led = create_proc_entry("led", 0, NULL); | 126 | led = proc_create("led", 0, NULL, &led_proc_fops); |
| 116 | if (!led) | 127 | if (!led) |
| 117 | return -ENOMEM; | 128 | return -ENOMEM; |
| 118 | |||
| 119 | led->read_proc = led_read_proc; /* reader function */ | ||
| 120 | led->write_proc = led_write_proc; /* writer function */ | ||
| 121 | led->owner = THIS_MODULE; | 129 | led->owner = THIS_MODULE; |
| 122 | 130 | ||
| 123 | printk(KERN_INFO | 131 | printk(KERN_INFO |
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index 44ad1607be2d..b58fb8941d8d 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c | |||
| @@ -49,7 +49,6 @@ | |||
| 49 | #include "irq_user.h" | 49 | #include "irq_user.h" |
| 50 | #include "irq_kern.h" | 50 | #include "irq_kern.h" |
| 51 | #include "ubd_user.h" | 51 | #include "ubd_user.h" |
| 52 | #include "kern_util.h" | ||
| 53 | #include "os.h" | 52 | #include "os.h" |
| 54 | #include "mem.h" | 53 | #include "mem.h" |
| 55 | #include "mem_kern.h" | 54 | #include "mem_kern.h" |
diff --git a/arch/um/include/os.h b/arch/um/include/os.h index e2716ac8889a..db5be46e3e18 100644 --- a/arch/um/include/os.h +++ b/arch/um/include/os.h | |||
| @@ -299,6 +299,6 @@ extern int os_arch_prctl(int pid, int code, unsigned long *addr); | |||
| 299 | extern int get_pty(void); | 299 | extern int get_pty(void); |
| 300 | 300 | ||
| 301 | /* sys-$ARCH/task_size.c */ | 301 | /* sys-$ARCH/task_size.c */ |
| 302 | extern unsigned long os_get_task_size(void); | 302 | extern unsigned long os_get_top_address(void); |
| 303 | 303 | ||
| 304 | #endif | 304 | #endif |
diff --git a/arch/um/kernel/um_arch.c b/arch/um/kernel/um_arch.c index 9db85b2ce698..8d84250324b3 100644 --- a/arch/um/kernel/um_arch.c +++ b/arch/um/kernel/um_arch.c | |||
| @@ -274,7 +274,7 @@ int __init linux_main(int argc, char **argv) | |||
| 274 | if (have_root == 0) | 274 | if (have_root == 0) |
| 275 | add_arg(DEFAULT_COMMAND_LINE); | 275 | add_arg(DEFAULT_COMMAND_LINE); |
| 276 | 276 | ||
| 277 | host_task_size = os_get_task_size(); | 277 | host_task_size = os_get_top_address(); |
| 278 | /* | 278 | /* |
| 279 | * TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps | 279 | * TASK_SIZE needs to be PGDIR_SIZE aligned or else exit_mmap craps |
| 280 | * out | 280 | * out |
diff --git a/arch/um/os-Linux/helper.c b/arch/um/os-Linux/helper.c index 74ca7aabf4e1..30860b89ec58 100644 --- a/arch/um/os-Linux/helper.c +++ b/arch/um/os-Linux/helper.c | |||
| @@ -7,6 +7,7 @@ | |||
| 7 | #include <unistd.h> | 7 | #include <unistd.h> |
| 8 | #include <errno.h> | 8 | #include <errno.h> |
| 9 | #include <sched.h> | 9 | #include <sched.h> |
| 10 | #include <linux/limits.h> | ||
| 10 | #include <sys/socket.h> | 11 | #include <sys/socket.h> |
| 11 | #include <sys/wait.h> | 12 | #include <sys/wait.h> |
| 12 | #include "kern_constants.h" | 13 | #include "kern_constants.h" |
diff --git a/arch/um/os-Linux/skas/process.c b/arch/um/os-Linux/skas/process.c index 6be028ca1817..172ad8f72e12 100644 --- a/arch/um/os-Linux/skas/process.c +++ b/arch/um/os-Linux/skas/process.c | |||
| @@ -55,7 +55,7 @@ static int ptrace_dump_regs(int pid) | |||
| 55 | * Signals that are OK to receive in the stub - we'll just continue it. | 55 | * Signals that are OK to receive in the stub - we'll just continue it. |
| 56 | * SIGWINCH will happen when UML is inside a detached screen. | 56 | * SIGWINCH will happen when UML is inside a detached screen. |
| 57 | */ | 57 | */ |
| 58 | #define STUB_SIG_MASK (1 << SIGVTALRM) | 58 | #define STUB_SIG_MASK ((1 << SIGVTALRM) | (1 << SIGWINCH)) |
| 59 | 59 | ||
| 60 | /* Signals that the stub will finish with - anything else is an error */ | 60 | /* Signals that the stub will finish with - anything else is an error */ |
| 61 | #define STUB_DONE_MASK (1 << SIGTRAP) | 61 | #define STUB_DONE_MASK (1 << SIGTRAP) |
diff --git a/arch/um/os-Linux/sys-i386/task_size.c b/arch/um/os-Linux/sys-i386/task_size.c index ccb49b0aff59..be04c1e183bf 100644 --- a/arch/um/os-Linux/sys-i386/task_size.c +++ b/arch/um/os-Linux/sys-i386/task_size.c | |||
| @@ -63,7 +63,7 @@ static int page_ok(unsigned long page) | |||
| 63 | return ok; | 63 | return ok; |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | unsigned long os_get_task_size(void) | 66 | unsigned long os_get_top_address(void) |
| 67 | { | 67 | { |
| 68 | struct sigaction sa, old; | 68 | struct sigaction sa, old; |
| 69 | unsigned long bottom = 0; | 69 | unsigned long bottom = 0; |
| @@ -76,9 +76,9 @@ unsigned long os_get_task_size(void) | |||
| 76 | * hosts, but shouldn't hurt otherwise. | 76 | * hosts, but shouldn't hurt otherwise. |
| 77 | */ | 77 | */ |
| 78 | unsigned long top = 0xffffd000 >> UM_KERN_PAGE_SHIFT; | 78 | unsigned long top = 0xffffd000 >> UM_KERN_PAGE_SHIFT; |
| 79 | unsigned long test; | 79 | unsigned long test, original; |
| 80 | 80 | ||
| 81 | printf("Locating the top of the address space ... "); | 81 | printf("Locating the bottom of the address space ... "); |
| 82 | fflush(stdout); | 82 | fflush(stdout); |
| 83 | 83 | ||
| 84 | /* | 84 | /* |
| @@ -89,16 +89,31 @@ unsigned long os_get_task_size(void) | |||
| 89 | sigemptyset(&sa.sa_mask); | 89 | sigemptyset(&sa.sa_mask); |
| 90 | sa.sa_flags = SA_NODEFER; | 90 | sa.sa_flags = SA_NODEFER; |
| 91 | if (sigaction(SIGSEGV, &sa, &old)) { | 91 | if (sigaction(SIGSEGV, &sa, &old)) { |
| 92 | perror("os_get_task_size"); | 92 | perror("os_get_top_address"); |
| 93 | exit(1); | 93 | exit(1); |
| 94 | } | 94 | } |
| 95 | 95 | ||
| 96 | if (!page_ok(bottom)) { | 96 | /* Manually scan the address space, bottom-up, until we find |
| 97 | fprintf(stderr, "Address 0x%x no good?\n", | 97 | * the first valid page (or run out of them). |
| 98 | bottom << UM_KERN_PAGE_SHIFT); | 98 | */ |
| 99 | for (bottom = 0; bottom < top; bottom++) { | ||
| 100 | if (page_ok(bottom)) | ||
| 101 | break; | ||
| 102 | } | ||
| 103 | |||
| 104 | /* If we've got this far, we ran out of pages. */ | ||
| 105 | if (bottom == top) { | ||
| 106 | fprintf(stderr, "Unable to determine bottom of address " | ||
| 107 | "space.\n"); | ||
| 99 | exit(1); | 108 | exit(1); |
| 100 | } | 109 | } |
| 101 | 110 | ||
| 111 | printf("0x%x\n", bottom << UM_KERN_PAGE_SHIFT); | ||
| 112 | printf("Locating the top of the address space ... "); | ||
| 113 | fflush(stdout); | ||
| 114 | |||
| 115 | original = bottom; | ||
| 116 | |||
| 102 | /* This could happen with a 4G/4G split */ | 117 | /* This could happen with a 4G/4G split */ |
| 103 | if (page_ok(top)) | 118 | if (page_ok(top)) |
| 104 | goto out; | 119 | goto out; |
| @@ -114,7 +129,7 @@ unsigned long os_get_task_size(void) | |||
| 114 | out: | 129 | out: |
| 115 | /* Restore the old SIGSEGV handling */ | 130 | /* Restore the old SIGSEGV handling */ |
| 116 | if (sigaction(SIGSEGV, &old, NULL)) { | 131 | if (sigaction(SIGSEGV, &old, NULL)) { |
| 117 | perror("os_get_task_size"); | 132 | perror("os_get_top_address"); |
| 118 | exit(1); | 133 | exit(1); |
| 119 | } | 134 | } |
| 120 | top <<= UM_KERN_PAGE_SHIFT; | 135 | top <<= UM_KERN_PAGE_SHIFT; |
diff --git a/arch/um/os-Linux/sys-x86_64/task_size.c b/arch/um/os-Linux/sys-x86_64/task_size.c index fad6f57f8ee3..26a0dd1f349c 100644 --- a/arch/um/os-Linux/sys-x86_64/task_size.c +++ b/arch/um/os-Linux/sys-x86_64/task_size.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | unsigned long os_get_task_size(unsigned long shift) | 1 | unsigned long os_get_top_address(unsigned long shift) |
| 2 | { | 2 | { |
| 3 | /* The old value of CONFIG_TOP_ADDR */ | 3 | /* The old value of CONFIG_TOP_ADDR */ |
| 4 | return 0x7fc0000000; | 4 | return 0x7fc0000000; |
diff --git a/arch/um/os-Linux/time.c b/arch/um/os-Linux/time.c index bee98f466d66..dec5678fc17f 100644 --- a/arch/um/os-Linux/time.c +++ b/arch/um/os-Linux/time.c | |||
| @@ -106,6 +106,10 @@ static void deliver_alarm(void) | |||
| 106 | unsigned long long this_tick = os_nsecs(); | 106 | unsigned long long this_tick = os_nsecs(); |
| 107 | int one_tick = UM_NSEC_PER_SEC / UM_HZ; | 107 | int one_tick = UM_NSEC_PER_SEC / UM_HZ; |
| 108 | 108 | ||
| 109 | /* Protection against the host's time going backwards */ | ||
| 110 | if ((last_tick != 0) && (this_tick < last_tick)) | ||
| 111 | this_tick = last_tick; | ||
| 112 | |||
| 109 | if (last_tick == 0) | 113 | if (last_tick == 0) |
| 110 | last_tick = this_tick - one_tick; | 114 | last_tick = this_tick - one_tick; |
| 111 | 115 | ||
| @@ -148,6 +152,9 @@ static int after_sleep_interval(struct timespec *ts) | |||
| 148 | start_usecs = usec; | 152 | start_usecs = usec; |
| 149 | 153 | ||
| 150 | start_usecs -= skew / UM_NSEC_PER_USEC; | 154 | start_usecs -= skew / UM_NSEC_PER_USEC; |
| 155 | if (start_usecs < 0) | ||
| 156 | start_usecs = 0; | ||
| 157 | |||
| 151 | tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC, | 158 | tv = ((struct timeval) { .tv_sec = start_usecs / UM_USEC_PER_SEC, |
| 152 | .tv_usec = start_usecs % UM_USEC_PER_SEC }); | 159 | .tv_usec = start_usecs % UM_USEC_PER_SEC }); |
| 153 | interval = ((struct itimerval) { { 0, usec }, tv }); | 160 | interval = ((struct itimerval) { { 0, usec }, tv }); |
diff --git a/arch/um/sys-x86_64/ksyms.c b/arch/um/sys-x86_64/ksyms.c index 6604673a849d..1db2fce00948 100644 --- a/arch/um/sys-x86_64/ksyms.c +++ b/arch/um/sys-x86_64/ksyms.c | |||
| @@ -3,5 +3,9 @@ | |||
| 3 | #include <asm/checksum.h> | 3 | #include <asm/checksum.h> |
| 4 | 4 | ||
| 5 | /*XXX: we need them because they would be exported by x86_64 */ | 5 | /*XXX: we need them because they would be exported by x86_64 */ |
| 6 | #if (__GNUC__ == 4 && __GNUC_MINOR__ >= 3) || __GNUC__ > 4 | ||
| 7 | EXPORT_SYMBOL(memcpy); | ||
| 8 | #else | ||
| 6 | EXPORT_SYMBOL(__memcpy); | 9 | EXPORT_SYMBOL(__memcpy); |
| 10 | #endif | ||
| 7 | EXPORT_SYMBOL(csum_partial); | 11 | EXPORT_SYMBOL(csum_partial); |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index fe361ae7ef2f..52e18e6d2ba0 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig | |||
| @@ -26,17 +26,10 @@ config X86 | |||
| 26 | select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) | 26 | select HAVE_KVM if ((X86_32 && !X86_VOYAGER && !X86_VISWS && !X86_NUMAQ) || X86_64) |
| 27 | select HAVE_ARCH_KGDB if !X86_VOYAGER | 27 | select HAVE_ARCH_KGDB if !X86_VOYAGER |
| 28 | 28 | ||
| 29 | config DEFCONFIG_LIST | 29 | config ARCH_DEFCONFIG |
| 30 | string | 30 | string |
| 31 | depends on X86_32 | 31 | default "arch/x86/configs/i386_defconfig" if X86_32 |
| 32 | option defconfig_list | 32 | default "arch/x86/configs/x86_64_defconfig" if X86_64 |
| 33 | default "arch/x86/configs/i386_defconfig" | ||
| 34 | |||
| 35 | config DEFCONFIG_LIST | ||
| 36 | string | ||
| 37 | depends on X86_64 | ||
| 38 | option defconfig_list | ||
| 39 | default "arch/x86/configs/x86_64_defconfig" | ||
| 40 | 33 | ||
| 41 | 34 | ||
| 42 | config GENERIC_LOCKBREAK | 35 | config GENERIC_LOCKBREAK |
| @@ -1515,13 +1508,13 @@ config PCI_GOMMCONFIG | |||
| 1515 | config PCI_GODIRECT | 1508 | config PCI_GODIRECT |
| 1516 | bool "Direct" | 1509 | bool "Direct" |
| 1517 | 1510 | ||
| 1518 | config PCI_GOANY | ||
| 1519 | bool "Any" | ||
| 1520 | |||
| 1521 | config PCI_GOOLPC | 1511 | config PCI_GOOLPC |
| 1522 | bool "OLPC" | 1512 | bool "OLPC" |
| 1523 | depends on OLPC | 1513 | depends on OLPC |
| 1524 | 1514 | ||
| 1515 | config PCI_GOANY | ||
| 1516 | bool "Any" | ||
| 1517 | |||
| 1525 | endchoice | 1518 | endchoice |
| 1526 | 1519 | ||
| 1527 | config PCI_BIOS | 1520 | config PCI_BIOS |
| @@ -1538,9 +1531,8 @@ config PCI_MMCONFIG | |||
| 1538 | depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY) | 1531 | depends on X86_32 && PCI && ACPI && (PCI_GOMMCONFIG || PCI_GOANY) |
| 1539 | 1532 | ||
| 1540 | config PCI_OLPC | 1533 | config PCI_OLPC |
| 1541 | bool | 1534 | def_bool y |
| 1542 | depends on PCI && PCI_GOOLPC | 1535 | depends on PCI && OLPC && (PCI_GOOLPC || PCI_GOANY) |
| 1543 | default y | ||
| 1544 | 1536 | ||
| 1545 | config PCI_DOMAINS | 1537 | config PCI_DOMAINS |
| 1546 | def_bool y | 1538 | def_bool y |
diff --git a/arch/x86/Kconfig.debug b/arch/x86/Kconfig.debug index ac1e31ba4795..18363374d51a 100644 --- a/arch/x86/Kconfig.debug +++ b/arch/x86/Kconfig.debug | |||
| @@ -6,15 +6,19 @@ config TRACE_IRQFLAGS_SUPPORT | |||
| 6 | source "lib/Kconfig.debug" | 6 | source "lib/Kconfig.debug" |
| 7 | 7 | ||
| 8 | config NONPROMISC_DEVMEM | 8 | config NONPROMISC_DEVMEM |
| 9 | bool "Disable promiscuous /dev/mem" | 9 | bool "Filter access to /dev/mem" |
| 10 | help | 10 | help |
| 11 | The /dev/mem file by default only allows userspace access to PCI | 11 | If this option is left off, you allow userspace access to all |
| 12 | space and the BIOS code and data regions. This is sufficient for | 12 | of memory, including kernel and userspace memory. Accidental |
| 13 | dosemu and X and all common users of /dev/mem. With this config | 13 | access to this is obviously disastrous, but specific access can |
| 14 | option, you allow userspace access to all of memory, including | 14 | be used by people debugging the kernel. |
| 15 | kernel and userspace memory. Accidental access to this is | 15 | |
| 16 | obviously disasterous, but specific access can be used by people | 16 | If this option is switched on, the /dev/mem file only allows |
| 17 | debugging the kernel. | 17 | userspace access to PCI space and the BIOS code and data regions. |
| 18 | This is sufficient for dosemu and X and all common users of | ||
| 19 | /dev/mem. | ||
| 20 | |||
| 21 | If in doubt, say Y. | ||
| 18 | 22 | ||
| 19 | config EARLY_PRINTK | 23 | config EARLY_PRINTK |
| 20 | bool "Early printk" if EMBEDDED | 24 | bool "Early printk" if EMBEDDED |
diff --git a/arch/x86/kernel/acpi/boot.c b/arch/x86/kernel/acpi/boot.c index c49ebcc6c41e..33c5216fd3e1 100644 --- a/arch/x86/kernel/acpi/boot.c +++ b/arch/x86/kernel/acpi/boot.c | |||
| @@ -242,12 +242,19 @@ static int __init acpi_parse_madt(struct acpi_table_header *table) | |||
| 242 | 242 | ||
| 243 | static void __cpuinit acpi_register_lapic(int id, u8 enabled) | 243 | static void __cpuinit acpi_register_lapic(int id, u8 enabled) |
| 244 | { | 244 | { |
| 245 | unsigned int ver = 0; | ||
| 246 | |||
| 245 | if (!enabled) { | 247 | if (!enabled) { |
| 246 | ++disabled_cpus; | 248 | ++disabled_cpus; |
| 247 | return; | 249 | return; |
| 248 | } | 250 | } |
| 249 | 251 | ||
| 250 | generic_processor_info(id, 0); | 252 | #ifdef CONFIG_X86_32 |
| 253 | if (boot_cpu_physical_apicid != -1U) | ||
| 254 | ver = apic_version[boot_cpu_physical_apicid]; | ||
| 255 | #endif | ||
| 256 | |||
| 257 | generic_processor_info(id, ver); | ||
| 251 | } | 258 | } |
| 252 | 259 | ||
| 253 | static int __init | 260 | static int __init |
| @@ -767,8 +774,13 @@ static void __init acpi_register_lapic_address(unsigned long address) | |||
| 767 | mp_lapic_addr = address; | 774 | mp_lapic_addr = address; |
| 768 | 775 | ||
| 769 | set_fixmap_nocache(FIX_APIC_BASE, address); | 776 | set_fixmap_nocache(FIX_APIC_BASE, address); |
| 770 | if (boot_cpu_physical_apicid == -1U) | 777 | if (boot_cpu_physical_apicid == -1U) { |
| 771 | boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id()); | 778 | boot_cpu_physical_apicid = GET_APIC_ID(read_apic_id()); |
| 779 | #ifdef CONFIG_X86_32 | ||
| 780 | apic_version[boot_cpu_physical_apicid] = | ||
| 781 | GET_APIC_VERSION(apic_read(APIC_LVR)); | ||
| 782 | #endif | ||
| 783 | } | ||
| 772 | } | 784 | } |
| 773 | 785 | ||
| 774 | static int __init early_acpi_parse_madt_lapic_addr_ovr(void) | 786 | static int __init early_acpi_parse_madt_lapic_addr_ovr(void) |
diff --git a/arch/x86/kernel/i387.c b/arch/x86/kernel/i387.c index e03cc952f233..eb9ddd8efb82 100644 --- a/arch/x86/kernel/i387.c +++ b/arch/x86/kernel/i387.c | |||
| @@ -56,6 +56,11 @@ void __cpuinit mxcsr_feature_mask_init(void) | |||
| 56 | 56 | ||
| 57 | void __init init_thread_xstate(void) | 57 | void __init init_thread_xstate(void) |
| 58 | { | 58 | { |
| 59 | if (!HAVE_HWFP) { | ||
| 60 | xstate_size = sizeof(struct i387_soft_struct); | ||
| 61 | return; | ||
| 62 | } | ||
| 63 | |||
| 59 | if (cpu_has_fxsr) | 64 | if (cpu_has_fxsr) |
| 60 | xstate_size = sizeof(struct i387_fxsave_struct); | 65 | xstate_size = sizeof(struct i387_fxsave_struct); |
| 61 | #ifdef CONFIG_X86_32 | 66 | #ifdef CONFIG_X86_32 |
| @@ -94,7 +99,7 @@ void __cpuinit fpu_init(void) | |||
| 94 | int init_fpu(struct task_struct *tsk) | 99 | int init_fpu(struct task_struct *tsk) |
| 95 | { | 100 | { |
| 96 | if (tsk_used_math(tsk)) { | 101 | if (tsk_used_math(tsk)) { |
| 97 | if (tsk == current) | 102 | if (HAVE_HWFP && tsk == current) |
| 98 | unlazy_fpu(tsk); | 103 | unlazy_fpu(tsk); |
| 99 | return 0; | 104 | return 0; |
| 100 | } | 105 | } |
| @@ -109,6 +114,15 @@ int init_fpu(struct task_struct *tsk) | |||
| 109 | return -ENOMEM; | 114 | return -ENOMEM; |
| 110 | } | 115 | } |
| 111 | 116 | ||
| 117 | #ifdef CONFIG_X86_32 | ||
| 118 | if (!HAVE_HWFP) { | ||
| 119 | memset(tsk->thread.xstate, 0, xstate_size); | ||
| 120 | finit(); | ||
| 121 | set_stopped_child_used_math(tsk); | ||
| 122 | return 0; | ||
| 123 | } | ||
| 124 | #endif | ||
| 125 | |||
| 112 | if (cpu_has_fxsr) { | 126 | if (cpu_has_fxsr) { |
| 113 | struct i387_fxsave_struct *fx = &tsk->thread.xstate->fxsave; | 127 | struct i387_fxsave_struct *fx = &tsk->thread.xstate->fxsave; |
| 114 | 128 | ||
| @@ -330,13 +344,13 @@ int fpregs_get(struct task_struct *target, const struct user_regset *regset, | |||
| 330 | struct user_i387_ia32_struct env; | 344 | struct user_i387_ia32_struct env; |
| 331 | int ret; | 345 | int ret; |
| 332 | 346 | ||
| 333 | if (!HAVE_HWFP) | ||
| 334 | return fpregs_soft_get(target, regset, pos, count, kbuf, ubuf); | ||
| 335 | |||
| 336 | ret = init_fpu(target); | 347 | ret = init_fpu(target); |
| 337 | if (ret) | 348 | if (ret) |
| 338 | return ret; | 349 | return ret; |
| 339 | 350 | ||
| 351 | if (!HAVE_HWFP) | ||
| 352 | return fpregs_soft_get(target, regset, pos, count, kbuf, ubuf); | ||
| 353 | |||
| 340 | if (!cpu_has_fxsr) { | 354 | if (!cpu_has_fxsr) { |
| 341 | return user_regset_copyout(&pos, &count, &kbuf, &ubuf, | 355 | return user_regset_copyout(&pos, &count, &kbuf, &ubuf, |
| 342 | &target->thread.xstate->fsave, 0, | 356 | &target->thread.xstate->fsave, 0, |
| @@ -360,15 +374,15 @@ int fpregs_set(struct task_struct *target, const struct user_regset *regset, | |||
| 360 | struct user_i387_ia32_struct env; | 374 | struct user_i387_ia32_struct env; |
| 361 | int ret; | 375 | int ret; |
| 362 | 376 | ||
| 363 | if (!HAVE_HWFP) | ||
| 364 | return fpregs_soft_set(target, regset, pos, count, kbuf, ubuf); | ||
| 365 | |||
| 366 | ret = init_fpu(target); | 377 | ret = init_fpu(target); |
| 367 | if (ret) | 378 | if (ret) |
| 368 | return ret; | 379 | return ret; |
| 369 | 380 | ||
| 370 | set_stopped_child_used_math(target); | 381 | set_stopped_child_used_math(target); |
| 371 | 382 | ||
| 383 | if (!HAVE_HWFP) | ||
| 384 | return fpregs_soft_set(target, regset, pos, count, kbuf, ubuf); | ||
| 385 | |||
| 372 | if (!cpu_has_fxsr) { | 386 | if (!cpu_has_fxsr) { |
| 373 | return user_regset_copyin(&pos, &count, &kbuf, &ubuf, | 387 | return user_regset_copyin(&pos, &count, &kbuf, &ubuf, |
| 374 | &target->thread.xstate->fsave, 0, -1); | 388 | &target->thread.xstate->fsave, 0, -1); |
| @@ -474,18 +488,18 @@ static int restore_i387_fxsave(struct _fpstate_ia32 __user *buf) | |||
| 474 | int restore_i387_ia32(struct _fpstate_ia32 __user *buf) | 488 | int restore_i387_ia32(struct _fpstate_ia32 __user *buf) |
| 475 | { | 489 | { |
| 476 | int err; | 490 | int err; |
| 491 | struct task_struct *tsk = current; | ||
| 477 | 492 | ||
| 478 | if (HAVE_HWFP) { | 493 | if (HAVE_HWFP) |
| 479 | struct task_struct *tsk = current; | ||
| 480 | |||
| 481 | clear_fpu(tsk); | 494 | clear_fpu(tsk); |
| 482 | 495 | ||
| 483 | if (!used_math()) { | 496 | if (!used_math()) { |
| 484 | err = init_fpu(tsk); | 497 | err = init_fpu(tsk); |
| 485 | if (err) | 498 | if (err) |
| 486 | return err; | 499 | return err; |
| 487 | } | 500 | } |
| 488 | 501 | ||
| 502 | if (HAVE_HWFP) { | ||
| 489 | if (cpu_has_fxsr) | 503 | if (cpu_has_fxsr) |
| 490 | err = restore_i387_fxsave(buf); | 504 | err = restore_i387_fxsave(buf); |
| 491 | else | 505 | else |
diff --git a/arch/x86/kernel/pci-gart_64.c b/arch/x86/kernel/pci-gart_64.c index c07455d1695f..aa8ec928caa8 100644 --- a/arch/x86/kernel/pci-gart_64.c +++ b/arch/x86/kernel/pci-gart_64.c | |||
| @@ -26,6 +26,7 @@ | |||
| 26 | #include <linux/kdebug.h> | 26 | #include <linux/kdebug.h> |
| 27 | #include <linux/scatterlist.h> | 27 | #include <linux/scatterlist.h> |
| 28 | #include <linux/iommu-helper.h> | 28 | #include <linux/iommu-helper.h> |
| 29 | #include <linux/sysdev.h> | ||
| 29 | #include <asm/atomic.h> | 30 | #include <asm/atomic.h> |
| 30 | #include <asm/io.h> | 31 | #include <asm/io.h> |
| 31 | #include <asm/mtrr.h> | 32 | #include <asm/mtrr.h> |
| @@ -548,6 +549,28 @@ static __init unsigned read_aperture(struct pci_dev *dev, u32 *size) | |||
| 548 | return aper_base; | 549 | return aper_base; |
| 549 | } | 550 | } |
| 550 | 551 | ||
| 552 | static int gart_resume(struct sys_device *dev) | ||
| 553 | { | ||
| 554 | return 0; | ||
| 555 | } | ||
| 556 | |||
| 557 | static int gart_suspend(struct sys_device *dev, pm_message_t state) | ||
| 558 | { | ||
| 559 | return -EINVAL; | ||
| 560 | } | ||
| 561 | |||
| 562 | static struct sysdev_class gart_sysdev_class = { | ||
| 563 | .name = "gart", | ||
| 564 | .suspend = gart_suspend, | ||
| 565 | .resume = gart_resume, | ||
| 566 | |||
| 567 | }; | ||
| 568 | |||
| 569 | static struct sys_device device_gart = { | ||
| 570 | .id = 0, | ||
| 571 | .cls = &gart_sysdev_class, | ||
| 572 | }; | ||
| 573 | |||
| 551 | /* | 574 | /* |
| 552 | * Private Northbridge GATT initialization in case we cannot use the | 575 | * Private Northbridge GATT initialization in case we cannot use the |
| 553 | * AGP driver for some reason. | 576 | * AGP driver for some reason. |
| @@ -558,7 +581,7 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
| 558 | unsigned aper_base, new_aper_base; | 581 | unsigned aper_base, new_aper_base; |
| 559 | struct pci_dev *dev; | 582 | struct pci_dev *dev; |
| 560 | void *gatt; | 583 | void *gatt; |
| 561 | int i; | 584 | int i, error; |
| 562 | 585 | ||
| 563 | printk(KERN_INFO "PCI-DMA: Disabling AGP.\n"); | 586 | printk(KERN_INFO "PCI-DMA: Disabling AGP.\n"); |
| 564 | aper_size = aper_base = info->aper_size = 0; | 587 | aper_size = aper_base = info->aper_size = 0; |
| @@ -606,6 +629,12 @@ static __init int init_k8_gatt(struct agp_kern_info *info) | |||
| 606 | 629 | ||
| 607 | pci_write_config_dword(dev, 0x90, ctl); | 630 | pci_write_config_dword(dev, 0x90, ctl); |
| 608 | } | 631 | } |
| 632 | |||
| 633 | error = sysdev_class_register(&gart_sysdev_class); | ||
| 634 | if (!error) | ||
| 635 | error = sysdev_register(&device_gart); | ||
| 636 | if (error) | ||
| 637 | panic("Could not register gart_sysdev -- would corrupt data on next suspend"); | ||
| 609 | flush_gart(); | 638 | flush_gart(); |
| 610 | 639 | ||
| 611 | printk(KERN_INFO "PCI-DMA: aperture base @ %x size %u KB\n", | 640 | printk(KERN_INFO "PCI-DMA: aperture base @ %x size %u KB\n", |
diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c index f8476dfbb60d..6d5483356e74 100644 --- a/arch/x86/kernel/process_32.c +++ b/arch/x86/kernel/process_32.c | |||
| @@ -649,8 +649,11 @@ struct task_struct * __switch_to(struct task_struct *prev_p, struct task_struct | |||
| 649 | /* If the task has used fpu the last 5 timeslices, just do a full | 649 | /* If the task has used fpu the last 5 timeslices, just do a full |
| 650 | * restore of the math state immediately to avoid the trap; the | 650 | * restore of the math state immediately to avoid the trap; the |
| 651 | * chances of needing FPU soon are obviously high now | 651 | * chances of needing FPU soon are obviously high now |
| 652 | * | ||
| 653 | * tsk_used_math() checks prevent calling math_state_restore(), | ||
| 654 | * which can sleep in the case of !tsk_used_math() | ||
| 652 | */ | 655 | */ |
| 653 | if (next_p->fpu_counter > 5) | 656 | if (tsk_used_math(next_p) && next_p->fpu_counter > 5) |
| 654 | math_state_restore(); | 657 | math_state_restore(); |
| 655 | 658 | ||
| 656 | /* | 659 | /* |
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c index e2319f39988b..ac54ff56df80 100644 --- a/arch/x86/kernel/process_64.c +++ b/arch/x86/kernel/process_64.c | |||
| @@ -658,8 +658,11 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p) | |||
| 658 | /* If the task has used fpu the last 5 timeslices, just do a full | 658 | /* If the task has used fpu the last 5 timeslices, just do a full |
| 659 | * restore of the math state immediately to avoid the trap; the | 659 | * restore of the math state immediately to avoid the trap; the |
| 660 | * chances of needing FPU soon are obviously high now | 660 | * chances of needing FPU soon are obviously high now |
| 661 | * | ||
| 662 | * tsk_used_math() checks prevent calling math_state_restore(), | ||
| 663 | * which can sleep in the case of !tsk_used_math() | ||
| 661 | */ | 664 | */ |
| 662 | if (next_p->fpu_counter>5) | 665 | if (tsk_used_math(next_p) && next_p->fpu_counter > 5) |
| 663 | math_state_restore(); | 666 | math_state_restore(); |
| 664 | return prev_p; | 667 | return prev_p; |
| 665 | } | 668 | } |
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 38988491c622..56078d61c793 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c | |||
| @@ -1190,6 +1190,7 @@ static void __init smp_cpu_index_default(void) | |||
| 1190 | */ | 1190 | */ |
| 1191 | void __init native_smp_prepare_cpus(unsigned int max_cpus) | 1191 | void __init native_smp_prepare_cpus(unsigned int max_cpus) |
| 1192 | { | 1192 | { |
| 1193 | preempt_disable(); | ||
| 1193 | nmi_watchdog_default(); | 1194 | nmi_watchdog_default(); |
| 1194 | smp_cpu_index_default(); | 1195 | smp_cpu_index_default(); |
| 1195 | current_cpu_data = boot_cpu_data; | 1196 | current_cpu_data = boot_cpu_data; |
| @@ -1206,7 +1207,7 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) | |||
| 1206 | if (smp_sanity_check(max_cpus) < 0) { | 1207 | if (smp_sanity_check(max_cpus) < 0) { |
| 1207 | printk(KERN_INFO "SMP disabled\n"); | 1208 | printk(KERN_INFO "SMP disabled\n"); |
| 1208 | disable_smp(); | 1209 | disable_smp(); |
| 1209 | return; | 1210 | goto out; |
| 1210 | } | 1211 | } |
| 1211 | 1212 | ||
| 1212 | preempt_disable(); | 1213 | preempt_disable(); |
| @@ -1246,6 +1247,8 @@ void __init native_smp_prepare_cpus(unsigned int max_cpus) | |||
| 1246 | printk(KERN_INFO "CPU%d: ", 0); | 1247 | printk(KERN_INFO "CPU%d: ", 0); |
| 1247 | print_cpu_info(&cpu_data(0)); | 1248 | print_cpu_info(&cpu_data(0)); |
| 1248 | setup_boot_clock(); | 1249 | setup_boot_clock(); |
| 1250 | out: | ||
| 1251 | preempt_enable(); | ||
| 1249 | } | 1252 | } |
| 1250 | /* | 1253 | /* |
| 1251 | * Early setup to make printk work. | 1254 | * Early setup to make printk work. |
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c index af65b2da3ba0..5c7e2fd52075 100644 --- a/arch/x86/lguest/boot.c +++ b/arch/x86/lguest/boot.c | |||
| @@ -582,8 +582,9 @@ static void __init lguest_init_IRQ(void) | |||
| 582 | int vector = FIRST_EXTERNAL_VECTOR + i; | 582 | int vector = FIRST_EXTERNAL_VECTOR + i; |
| 583 | if (vector != SYSCALL_VECTOR) { | 583 | if (vector != SYSCALL_VECTOR) { |
| 584 | set_intr_gate(vector, interrupt[i]); | 584 | set_intr_gate(vector, interrupt[i]); |
| 585 | set_irq_chip_and_handler(i, &lguest_irq_controller, | 585 | set_irq_chip_and_handler_name(i, &lguest_irq_controller, |
| 586 | handle_level_irq); | 586 | handle_level_irq, |
| 587 | "level"); | ||
| 587 | } | 588 | } |
| 588 | } | 589 | } |
| 589 | /* This call is required to set up for 4k stacks, where we have | 590 | /* This call is required to set up for 4k stacks, where we have |
diff --git a/arch/x86/lib/delay_32.c b/arch/x86/lib/delay_32.c index 4535e6d147ad..d710f2d167bb 100644 --- a/arch/x86/lib/delay_32.c +++ b/arch/x86/lib/delay_32.c | |||
| @@ -44,13 +44,36 @@ static void delay_loop(unsigned long loops) | |||
| 44 | static void delay_tsc(unsigned long loops) | 44 | static void delay_tsc(unsigned long loops) |
| 45 | { | 45 | { |
| 46 | unsigned long bclock, now; | 46 | unsigned long bclock, now; |
| 47 | int cpu; | ||
| 47 | 48 | ||
| 48 | preempt_disable(); /* TSC's are per-cpu */ | 49 | preempt_disable(); |
| 50 | cpu = smp_processor_id(); | ||
| 49 | rdtscl(bclock); | 51 | rdtscl(bclock); |
| 50 | do { | 52 | for (;;) { |
| 51 | rep_nop(); | ||
| 52 | rdtscl(now); | 53 | rdtscl(now); |
| 53 | } while ((now-bclock) < loops); | 54 | if ((now - bclock) >= loops) |
| 55 | break; | ||
| 56 | |||
| 57 | /* Allow RT tasks to run */ | ||
| 58 | preempt_enable(); | ||
| 59 | rep_nop(); | ||
| 60 | preempt_disable(); | ||
| 61 | |||
| 62 | /* | ||
| 63 | * It is possible that we moved to another CPU, and | ||
| 64 | * since TSC's are per-cpu we need to calculate | ||
| 65 | * that. The delay must guarantee that we wait "at | ||
| 66 | * least" the amount of time. Being moved to another | ||
| 67 | * CPU could make the wait longer but we just need to | ||
| 68 | * make sure we waited long enough. Rebalance the | ||
| 69 | * counter for this CPU. | ||
| 70 | */ | ||
| 71 | if (unlikely(cpu != smp_processor_id())) { | ||
| 72 | loops -= (now - bclock); | ||
| 73 | cpu = smp_processor_id(); | ||
| 74 | rdtscl(bclock); | ||
| 75 | } | ||
| 76 | } | ||
| 54 | preempt_enable(); | 77 | preempt_enable(); |
| 55 | } | 78 | } |
| 56 | 79 | ||
diff --git a/arch/x86/lib/delay_64.c b/arch/x86/lib/delay_64.c index bbc610518516..4c441be92641 100644 --- a/arch/x86/lib/delay_64.c +++ b/arch/x86/lib/delay_64.c | |||
| @@ -31,14 +31,36 @@ int __devinit read_current_timer(unsigned long *timer_value) | |||
| 31 | void __delay(unsigned long loops) | 31 | void __delay(unsigned long loops) |
| 32 | { | 32 | { |
| 33 | unsigned bclock, now; | 33 | unsigned bclock, now; |
| 34 | int cpu; | ||
| 34 | 35 | ||
| 35 | preempt_disable(); /* TSC's are pre-cpu */ | 36 | preempt_disable(); |
| 37 | cpu = smp_processor_id(); | ||
| 36 | rdtscl(bclock); | 38 | rdtscl(bclock); |
| 37 | do { | 39 | for (;;) { |
| 38 | rep_nop(); | ||
| 39 | rdtscl(now); | 40 | rdtscl(now); |
| 41 | if ((now - bclock) >= loops) | ||
| 42 | break; | ||
| 43 | |||
| 44 | /* Allow RT tasks to run */ | ||
| 45 | preempt_enable(); | ||
| 46 | rep_nop(); | ||
| 47 | preempt_disable(); | ||
| 48 | |||
| 49 | /* | ||
| 50 | * It is possible that we moved to another CPU, and | ||
| 51 | * since TSC's are per-cpu we need to calculate | ||
| 52 | * that. The delay must guarantee that we wait "at | ||
| 53 | * least" the amount of time. Being moved to another | ||
| 54 | * CPU could make the wait longer but we just need to | ||
| 55 | * make sure we waited long enough. Rebalance the | ||
| 56 | * counter for this CPU. | ||
| 57 | */ | ||
| 58 | if (unlikely(cpu != smp_processor_id())) { | ||
| 59 | loops -= (now - bclock); | ||
| 60 | cpu = smp_processor_id(); | ||
| 61 | rdtscl(bclock); | ||
| 62 | } | ||
| 40 | } | 63 | } |
| 41 | while ((now-bclock) < loops); | ||
| 42 | preempt_enable(); | 64 | preempt_enable(); |
| 43 | } | 65 | } |
| 44 | EXPORT_SYMBOL(__delay); | 66 | EXPORT_SYMBOL(__delay); |
diff --git a/arch/x86/math-emu/fpu_entry.c b/arch/x86/math-emu/fpu_entry.c index 6e38d877ea77..c7b06feb139b 100644 --- a/arch/x86/math-emu/fpu_entry.c +++ b/arch/x86/math-emu/fpu_entry.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <asm/uaccess.h> | 30 | #include <asm/uaccess.h> |
| 31 | #include <asm/desc.h> | 31 | #include <asm/desc.h> |
| 32 | #include <asm/user.h> | 32 | #include <asm/user.h> |
| 33 | #include <asm/i387.h> | ||
| 33 | 34 | ||
| 34 | #include "fpu_system.h" | 35 | #include "fpu_system.h" |
| 35 | #include "fpu_emu.h" | 36 | #include "fpu_emu.h" |
| @@ -146,6 +147,13 @@ asmlinkage void math_emulate(long arg) | |||
| 146 | unsigned long code_limit = 0; /* Initialized to stop compiler warnings */ | 147 | unsigned long code_limit = 0; /* Initialized to stop compiler warnings */ |
| 147 | struct desc_struct code_descriptor; | 148 | struct desc_struct code_descriptor; |
| 148 | 149 | ||
| 150 | if (!used_math()) { | ||
| 151 | if (init_fpu(current)) { | ||
| 152 | do_group_exit(SIGKILL); | ||
| 153 | return; | ||
| 154 | } | ||
| 155 | } | ||
| 156 | |||
| 149 | #ifdef RE_ENTRANT_CHECKING | 157 | #ifdef RE_ENTRANT_CHECKING |
| 150 | if (emulating) { | 158 | if (emulating) { |
| 151 | printk("ERROR: wm-FPU-emu is not RE-ENTRANT!\n"); | 159 | printk("ERROR: wm-FPU-emu is not RE-ENTRANT!\n"); |
| @@ -153,11 +161,6 @@ asmlinkage void math_emulate(long arg) | |||
| 153 | RE_ENTRANT_CHECK_ON; | 161 | RE_ENTRANT_CHECK_ON; |
| 154 | #endif /* RE_ENTRANT_CHECKING */ | 162 | #endif /* RE_ENTRANT_CHECKING */ |
| 155 | 163 | ||
| 156 | if (!used_math()) { | ||
| 157 | finit(); | ||
| 158 | set_used_math(); | ||
| 159 | } | ||
| 160 | |||
| 161 | SETUP_DATA_AREA(arg); | 164 | SETUP_DATA_AREA(arg); |
| 162 | 165 | ||
| 163 | FPU_ORIG_EIP = FPU_EIP; | 166 | FPU_ORIG_EIP = FPU_EIP; |
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 32ba13b0f818..156e6d7b0e32 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
| @@ -206,7 +206,7 @@ void __init cleanup_highmap(void) | |||
| 206 | pmd_t *last_pmd = pmd + PTRS_PER_PMD; | 206 | pmd_t *last_pmd = pmd + PTRS_PER_PMD; |
| 207 | 207 | ||
| 208 | for (; pmd < last_pmd; pmd++, vaddr += PMD_SIZE) { | 208 | for (; pmd < last_pmd; pmd++, vaddr += PMD_SIZE) { |
| 209 | if (!pmd_present(*pmd)) | 209 | if (pmd_none(*pmd)) |
| 210 | continue; | 210 | continue; |
| 211 | if (vaddr < (unsigned long) _text || vaddr > end) | 211 | if (vaddr < (unsigned long) _text || vaddr > end) |
| 212 | set_pmd(pmd, __pmd(0)); | 212 | set_pmd(pmd, __pmd(0)); |
| @@ -506,7 +506,7 @@ early_param("memtest", parse_memtest); | |||
| 506 | 506 | ||
| 507 | static void __init early_memtest(unsigned long start, unsigned long end) | 507 | static void __init early_memtest(unsigned long start, unsigned long end) |
| 508 | { | 508 | { |
| 509 | unsigned long t_start, t_size; | 509 | u64 t_start, t_size; |
| 510 | unsigned pattern; | 510 | unsigned pattern; |
| 511 | 511 | ||
| 512 | if (!memtest_pattern) | 512 | if (!memtest_pattern) |
| @@ -525,7 +525,7 @@ static void __init early_memtest(unsigned long start, unsigned long end) | |||
| 525 | if (t_start + t_size > end) | 525 | if (t_start + t_size > end) |
| 526 | t_size = end - t_start; | 526 | t_size = end - t_start; |
| 527 | 527 | ||
| 528 | printk(KERN_CONT "\n %016lx - %016lx pattern %d", | 528 | printk(KERN_CONT "\n %016llx - %016llx pattern %d", |
| 529 | t_start, t_start + t_size, pattern); | 529 | t_start, t_start + t_size, pattern); |
| 530 | 530 | ||
| 531 | memtest(t_start, t_size, pattern); | 531 | memtest(t_start, t_size, pattern); |
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 71bb3159031a..2b2bb3f9b683 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c | |||
| @@ -593,10 +593,11 @@ void __init early_iounmap(void *addr, unsigned long size) | |||
| 593 | unsigned long offset; | 593 | unsigned long offset; |
| 594 | unsigned int nrpages; | 594 | unsigned int nrpages; |
| 595 | enum fixed_addresses idx; | 595 | enum fixed_addresses idx; |
| 596 | unsigned int nesting; | 596 | int nesting; |
| 597 | 597 | ||
| 598 | nesting = --early_ioremap_nested; | 598 | nesting = --early_ioremap_nested; |
| 599 | WARN_ON(nesting < 0); | 599 | if (WARN_ON(nesting < 0)) |
| 600 | return; | ||
| 600 | 601 | ||
| 601 | if (early_ioremap_debug) { | 602 | if (early_ioremap_debug) { |
| 602 | printk(KERN_INFO "early_iounmap(%p, %08lx) [%d]\n", addr, | 603 | printk(KERN_INFO "early_iounmap(%p, %08lx) [%d]\n", addr, |
diff --git a/arch/x86/mm/pat.c b/arch/x86/mm/pat.c index de3a99812450..06b7a1c90fb8 100644 --- a/arch/x86/mm/pat.c +++ b/arch/x86/mm/pat.c | |||
| @@ -34,7 +34,7 @@ void __cpuinit pat_disable(char *reason) | |||
| 34 | printk(KERN_INFO "%s\n", reason); | 34 | printk(KERN_INFO "%s\n", reason); |
| 35 | } | 35 | } |
| 36 | 36 | ||
| 37 | static int nopat(char *str) | 37 | static int __init nopat(char *str) |
| 38 | { | 38 | { |
| 39 | pat_disable("PAT support disabled."); | 39 | pat_disable("PAT support disabled."); |
| 40 | return 0; | 40 | return 0; |
| @@ -151,32 +151,33 @@ static int pat_x_mtrr_type(u64 start, u64 end, unsigned long prot, | |||
| 151 | unsigned long pat_type; | 151 | unsigned long pat_type; |
| 152 | u8 mtrr_type; | 152 | u8 mtrr_type; |
| 153 | 153 | ||
| 154 | mtrr_type = mtrr_type_lookup(start, end); | ||
| 155 | if (mtrr_type == 0xFF) { /* MTRR not enabled */ | ||
| 156 | *ret_prot = prot; | ||
| 157 | return 0; | ||
| 158 | } | ||
| 159 | if (mtrr_type == 0xFE) { /* MTRR match error */ | ||
| 160 | *ret_prot = _PAGE_CACHE_UC; | ||
| 161 | return -1; | ||
| 162 | } | ||
| 163 | if (mtrr_type != MTRR_TYPE_UNCACHABLE && | ||
| 164 | mtrr_type != MTRR_TYPE_WRBACK && | ||
| 165 | mtrr_type != MTRR_TYPE_WRCOMB) { /* MTRR type unhandled */ | ||
| 166 | *ret_prot = _PAGE_CACHE_UC; | ||
| 167 | return -1; | ||
| 168 | } | ||
| 169 | |||
| 170 | pat_type = prot & _PAGE_CACHE_MASK; | 154 | pat_type = prot & _PAGE_CACHE_MASK; |
| 171 | prot &= (~_PAGE_CACHE_MASK); | 155 | prot &= (~_PAGE_CACHE_MASK); |
| 172 | 156 | ||
| 173 | /* Currently doing intersection by hand. Optimize it later. */ | 157 | /* |
| 158 | * We return the PAT request directly for types where PAT takes | ||
| 159 | * precedence with respect to MTRR and for UC_MINUS. | ||
| 160 | * Consistency checks with other PAT requests is done later | ||
| 161 | * while going through memtype list. | ||
| 162 | */ | ||
| 174 | if (pat_type == _PAGE_CACHE_WC) { | 163 | if (pat_type == _PAGE_CACHE_WC) { |
| 175 | *ret_prot = prot | _PAGE_CACHE_WC; | 164 | *ret_prot = prot | _PAGE_CACHE_WC; |
| 165 | return 0; | ||
| 176 | } else if (pat_type == _PAGE_CACHE_UC_MINUS) { | 166 | } else if (pat_type == _PAGE_CACHE_UC_MINUS) { |
| 177 | *ret_prot = prot | _PAGE_CACHE_UC_MINUS; | 167 | *ret_prot = prot | _PAGE_CACHE_UC_MINUS; |
| 178 | } else if (pat_type == _PAGE_CACHE_UC || | 168 | return 0; |
| 179 | mtrr_type == MTRR_TYPE_UNCACHABLE) { | 169 | } else if (pat_type == _PAGE_CACHE_UC) { |
| 170 | *ret_prot = prot | _PAGE_CACHE_UC; | ||
| 171 | return 0; | ||
| 172 | } | ||
| 173 | |||
| 174 | /* | ||
| 175 | * Look for MTRR hint to get the effective type in case where PAT | ||
| 176 | * request is for WB. | ||
| 177 | */ | ||
| 178 | mtrr_type = mtrr_type_lookup(start, end); | ||
| 179 | |||
| 180 | if (mtrr_type == MTRR_TYPE_UNCACHABLE) { | ||
| 180 | *ret_prot = prot | _PAGE_CACHE_UC; | 181 | *ret_prot = prot | _PAGE_CACHE_UC; |
| 181 | } else if (mtrr_type == MTRR_TYPE_WRCOMB) { | 182 | } else if (mtrr_type == MTRR_TYPE_WRCOMB) { |
| 182 | *ret_prot = prot | _PAGE_CACHE_WC; | 183 | *ret_prot = prot | _PAGE_CACHE_WC; |
| @@ -233,14 +234,12 @@ int reserve_memtype(u64 start, u64 end, unsigned long req_type, | |||
| 233 | 234 | ||
| 234 | if (req_type == -1) { | 235 | if (req_type == -1) { |
| 235 | /* | 236 | /* |
| 236 | * Special case where caller wants to inherit from mtrr or | 237 | * Call mtrr_lookup to get the type hint. This is an |
| 237 | * existing pat mapping, defaulting to UC_MINUS in case of | 238 | * optimization for /dev/mem mmap'ers into WB memory (BIOS |
| 238 | * no match. | 239 | * tools and ACPI tools). Use WB request for WB memory and use |
| 240 | * UC_MINUS otherwise. | ||
| 239 | */ | 241 | */ |
| 240 | u8 mtrr_type = mtrr_type_lookup(start, end); | 242 | u8 mtrr_type = mtrr_type_lookup(start, end); |
| 241 | if (mtrr_type == 0xFE) { /* MTRR match error */ | ||
| 242 | err = -1; | ||
| 243 | } | ||
| 244 | 243 | ||
| 245 | if (mtrr_type == MTRR_TYPE_WRBACK) { | 244 | if (mtrr_type == MTRR_TYPE_WRBACK) { |
| 246 | req_type = _PAGE_CACHE_WB; | 245 | req_type = _PAGE_CACHE_WB; |
diff --git a/arch/x86/pci/init.c b/arch/x86/pci/init.c index e70b9c57b88e..b821f4462d99 100644 --- a/arch/x86/pci/init.c +++ b/arch/x86/pci/init.c | |||
| @@ -15,7 +15,8 @@ static __init int pci_access_init(void) | |||
| 15 | pci_mmcfg_early_init(); | 15 | pci_mmcfg_early_init(); |
| 16 | 16 | ||
| 17 | #ifdef CONFIG_PCI_OLPC | 17 | #ifdef CONFIG_PCI_OLPC |
| 18 | pci_olpc_init(); | 18 | if (!pci_olpc_init()) |
| 19 | return 0; /* skip additional checks if it's an XO */ | ||
| 19 | #endif | 20 | #endif |
| 20 | #ifdef CONFIG_PCI_BIOS | 21 | #ifdef CONFIG_PCI_BIOS |
| 21 | pci_pcbios_init(); | 22 | pci_pcbios_init(); |
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index 0908fca901bf..ca8df9c260bc 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c | |||
| @@ -621,6 +621,13 @@ static __init int via_router_probe(struct irq_router *r, | |||
| 621 | */ | 621 | */ |
| 622 | device = PCI_DEVICE_ID_VIA_8235; | 622 | device = PCI_DEVICE_ID_VIA_8235; |
| 623 | break; | 623 | break; |
| 624 | case PCI_DEVICE_ID_VIA_8237: | ||
| 625 | /** | ||
| 626 | * Asus a7v600 bios wrongly reports 8237 | ||
| 627 | * as 586-compatible | ||
| 628 | */ | ||
| 629 | device = PCI_DEVICE_ID_VIA_8237; | ||
| 630 | break; | ||
| 624 | } | 631 | } |
| 625 | } | 632 | } |
| 626 | 633 | ||
diff --git a/arch/x86/pci/olpc.c b/arch/x86/pci/olpc.c index 5e7636558c02..e11e9e803d5f 100644 --- a/arch/x86/pci/olpc.c +++ b/arch/x86/pci/olpc.c | |||
| @@ -302,12 +302,13 @@ static struct pci_raw_ops pci_olpc_conf = { | |||
| 302 | .write = pci_olpc_write, | 302 | .write = pci_olpc_write, |
| 303 | }; | 303 | }; |
| 304 | 304 | ||
| 305 | void __init pci_olpc_init(void) | 305 | int __init pci_olpc_init(void) |
| 306 | { | 306 | { |
| 307 | if (!machine_is_olpc() || olpc_has_vsa()) | 307 | if (!machine_is_olpc() || olpc_has_vsa()) |
| 308 | return; | 308 | return -ENODEV; |
| 309 | 309 | ||
| 310 | printk(KERN_INFO "PCI: Using configuration type OLPC\n"); | 310 | printk(KERN_INFO "PCI: Using configuration type OLPC\n"); |
| 311 | raw_pci_ops = &pci_olpc_conf; | 311 | raw_pci_ops = &pci_olpc_conf; |
| 312 | is_lx = is_geode_lx(); | 312 | is_lx = is_geode_lx(); |
| 313 | return 0; | ||
| 313 | } | 314 | } |
diff --git a/arch/x86/pci/pci.h b/arch/x86/pci/pci.h index f3972b12c60a..720c4c554534 100644 --- a/arch/x86/pci/pci.h +++ b/arch/x86/pci/pci.h | |||
| @@ -101,7 +101,7 @@ extern struct pci_raw_ops pci_direct_conf1; | |||
| 101 | extern int pci_direct_probe(void); | 101 | extern int pci_direct_probe(void); |
| 102 | extern void pci_direct_init(int type); | 102 | extern void pci_direct_init(int type); |
| 103 | extern void pci_pcbios_init(void); | 103 | extern void pci_pcbios_init(void); |
| 104 | extern void pci_olpc_init(void); | 104 | extern int pci_olpc_init(void); |
| 105 | 105 | ||
| 106 | /* pci-mmconfig.c */ | 106 | /* pci-mmconfig.c */ |
| 107 | 107 | ||
diff --git a/block/blk-core.c b/block/blk-core.c index 6a9cc0d22a61..1905aaba49fb 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
| @@ -806,35 +806,32 @@ static struct request *get_request_wait(struct request_queue *q, int rw_flags, | |||
| 806 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | 806 | rq = get_request(q, rw_flags, bio, GFP_NOIO); |
| 807 | while (!rq) { | 807 | while (!rq) { |
| 808 | DEFINE_WAIT(wait); | 808 | DEFINE_WAIT(wait); |
| 809 | struct io_context *ioc; | ||
| 809 | struct request_list *rl = &q->rq; | 810 | struct request_list *rl = &q->rq; |
| 810 | 811 | ||
| 811 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, | 812 | prepare_to_wait_exclusive(&rl->wait[rw], &wait, |
| 812 | TASK_UNINTERRUPTIBLE); | 813 | TASK_UNINTERRUPTIBLE); |
| 813 | 814 | ||
| 814 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | 815 | blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); |
| 815 | |||
| 816 | if (!rq) { | ||
| 817 | struct io_context *ioc; | ||
| 818 | 816 | ||
| 819 | blk_add_trace_generic(q, bio, rw, BLK_TA_SLEEPRQ); | 817 | __generic_unplug_device(q); |
| 820 | 818 | spin_unlock_irq(q->queue_lock); | |
| 821 | __generic_unplug_device(q); | 819 | io_schedule(); |
| 822 | spin_unlock_irq(q->queue_lock); | ||
| 823 | io_schedule(); | ||
| 824 | 820 | ||
| 825 | /* | 821 | /* |
| 826 | * After sleeping, we become a "batching" process and | 822 | * After sleeping, we become a "batching" process and |
| 827 | * will be able to allocate at least one request, and | 823 | * will be able to allocate at least one request, and |
| 828 | * up to a big batch of them for a small period time. | 824 | * up to a big batch of them for a small period time. |
| 829 | * See ioc_batching, ioc_set_batching | 825 | * See ioc_batching, ioc_set_batching |
| 830 | */ | 826 | */ |
| 831 | ioc = current_io_context(GFP_NOIO, q->node); | 827 | ioc = current_io_context(GFP_NOIO, q->node); |
| 832 | ioc_set_batching(q, ioc); | 828 | ioc_set_batching(q, ioc); |
| 833 | 829 | ||
| 834 | spin_lock_irq(q->queue_lock); | 830 | spin_lock_irq(q->queue_lock); |
| 835 | } | ||
| 836 | finish_wait(&rl->wait[rw], &wait); | 831 | finish_wait(&rl->wait[rw], &wait); |
| 837 | } | 832 | |
| 833 | rq = get_request(q, rw_flags, bio, GFP_NOIO); | ||
| 834 | }; | ||
| 838 | 835 | ||
| 839 | return rq; | 836 | return rq; |
| 840 | } | 837 | } |
diff --git a/block/blktrace.c b/block/blktrace.c index b2cbb4e5d767..7ae87cc4a163 100644 --- a/block/blktrace.c +++ b/block/blktrace.c | |||
| @@ -75,6 +75,23 @@ static void trace_note_time(struct blk_trace *bt) | |||
| 75 | local_irq_restore(flags); | 75 | local_irq_restore(flags); |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | void __trace_note_message(struct blk_trace *bt, const char *fmt, ...) | ||
| 79 | { | ||
| 80 | int n; | ||
| 81 | va_list args; | ||
| 82 | char *buf; | ||
| 83 | |||
| 84 | preempt_disable(); | ||
| 85 | buf = per_cpu_ptr(bt->msg_data, smp_processor_id()); | ||
| 86 | va_start(args, fmt); | ||
| 87 | n = vscnprintf(buf, BLK_TN_MAX_MSG, fmt, args); | ||
| 88 | va_end(args); | ||
| 89 | |||
| 90 | trace_note(bt, 0, BLK_TN_MESSAGE, buf, n); | ||
| 91 | preempt_enable(); | ||
| 92 | } | ||
| 93 | EXPORT_SYMBOL_GPL(__trace_note_message); | ||
| 94 | |||
| 78 | static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector, | 95 | static int act_log_check(struct blk_trace *bt, u32 what, sector_t sector, |
| 79 | pid_t pid) | 96 | pid_t pid) |
| 80 | { | 97 | { |
| @@ -232,6 +249,7 @@ static void blk_trace_cleanup(struct blk_trace *bt) | |||
| 232 | debugfs_remove(bt->dropped_file); | 249 | debugfs_remove(bt->dropped_file); |
| 233 | blk_remove_tree(bt->dir); | 250 | blk_remove_tree(bt->dir); |
| 234 | free_percpu(bt->sequence); | 251 | free_percpu(bt->sequence); |
| 252 | free_percpu(bt->msg_data); | ||
| 235 | kfree(bt); | 253 | kfree(bt); |
| 236 | } | 254 | } |
| 237 | 255 | ||
| @@ -346,6 +364,10 @@ int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, | |||
| 346 | if (!bt->sequence) | 364 | if (!bt->sequence) |
| 347 | goto err; | 365 | goto err; |
| 348 | 366 | ||
| 367 | bt->msg_data = __alloc_percpu(BLK_TN_MAX_MSG); | ||
| 368 | if (!bt->msg_data) | ||
| 369 | goto err; | ||
| 370 | |||
| 349 | ret = -ENOENT; | 371 | ret = -ENOENT; |
| 350 | dir = blk_create_tree(buts->name); | 372 | dir = blk_create_tree(buts->name); |
| 351 | if (!dir) | 373 | if (!dir) |
| @@ -392,6 +414,7 @@ err: | |||
| 392 | if (bt->dropped_file) | 414 | if (bt->dropped_file) |
| 393 | debugfs_remove(bt->dropped_file); | 415 | debugfs_remove(bt->dropped_file); |
| 394 | free_percpu(bt->sequence); | 416 | free_percpu(bt->sequence); |
| 417 | free_percpu(bt->msg_data); | ||
| 395 | if (bt->rchan) | 418 | if (bt->rchan) |
| 396 | relay_close(bt->rchan); | 419 | relay_close(bt->rchan); |
| 397 | kfree(bt); | 420 | kfree(bt); |
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index b399c62936e0..d01b411c72f0 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
| @@ -124,6 +124,8 @@ struct cfq_data { | |||
| 124 | struct cfq_queue { | 124 | struct cfq_queue { |
| 125 | /* reference count */ | 125 | /* reference count */ |
| 126 | atomic_t ref; | 126 | atomic_t ref; |
| 127 | /* various state flags, see below */ | ||
| 128 | unsigned int flags; | ||
| 127 | /* parent cfq_data */ | 129 | /* parent cfq_data */ |
| 128 | struct cfq_data *cfqd; | 130 | struct cfq_data *cfqd; |
| 129 | /* service_tree member */ | 131 | /* service_tree member */ |
| @@ -138,14 +140,14 @@ struct cfq_queue { | |||
| 138 | int queued[2]; | 140 | int queued[2]; |
| 139 | /* currently allocated requests */ | 141 | /* currently allocated requests */ |
| 140 | int allocated[2]; | 142 | int allocated[2]; |
| 141 | /* pending metadata requests */ | ||
| 142 | int meta_pending; | ||
| 143 | /* fifo list of requests in sort_list */ | 143 | /* fifo list of requests in sort_list */ |
| 144 | struct list_head fifo; | 144 | struct list_head fifo; |
| 145 | 145 | ||
| 146 | unsigned long slice_end; | 146 | unsigned long slice_end; |
| 147 | long slice_resid; | 147 | long slice_resid; |
| 148 | 148 | ||
| 149 | /* pending metadata requests */ | ||
| 150 | int meta_pending; | ||
| 149 | /* number of requests that are on the dispatch list or inside driver */ | 151 | /* number of requests that are on the dispatch list or inside driver */ |
| 150 | int dispatched; | 152 | int dispatched; |
| 151 | 153 | ||
| @@ -153,8 +155,6 @@ struct cfq_queue { | |||
| 153 | unsigned short ioprio, org_ioprio; | 155 | unsigned short ioprio, org_ioprio; |
| 154 | unsigned short ioprio_class, org_ioprio_class; | 156 | unsigned short ioprio_class, org_ioprio_class; |
| 155 | 157 | ||
| 156 | /* various state flags, see below */ | ||
| 157 | unsigned int flags; | ||
| 158 | }; | 158 | }; |
| 159 | 159 | ||
| 160 | enum cfqq_state_flags { | 160 | enum cfqq_state_flags { |
| @@ -1142,6 +1142,9 @@ static void cfq_put_queue(struct cfq_queue *cfqq) | |||
| 1142 | kmem_cache_free(cfq_pool, cfqq); | 1142 | kmem_cache_free(cfq_pool, cfqq); |
| 1143 | } | 1143 | } |
| 1144 | 1144 | ||
| 1145 | /* | ||
| 1146 | * Must always be called with the rcu_read_lock() held | ||
| 1147 | */ | ||
| 1145 | static void | 1148 | static void |
| 1146 | __call_for_each_cic(struct io_context *ioc, | 1149 | __call_for_each_cic(struct io_context *ioc, |
| 1147 | void (*func)(struct io_context *, struct cfq_io_context *)) | 1150 | void (*func)(struct io_context *, struct cfq_io_context *)) |
| @@ -1197,6 +1200,11 @@ static void cic_free_func(struct io_context *ioc, struct cfq_io_context *cic) | |||
| 1197 | cfq_cic_free(cic); | 1200 | cfq_cic_free(cic); |
| 1198 | } | 1201 | } |
| 1199 | 1202 | ||
| 1203 | /* | ||
| 1204 | * Must be called with rcu_read_lock() held or preemption otherwise disabled. | ||
| 1205 | * Only two callers of this - ->dtor() which is called with the rcu_read_lock(), | ||
| 1206 | * and ->trim() which is called with the task lock held | ||
| 1207 | */ | ||
| 1200 | static void cfq_free_io_context(struct io_context *ioc) | 1208 | static void cfq_free_io_context(struct io_context *ioc) |
| 1201 | { | 1209 | { |
| 1202 | /* | 1210 | /* |
| @@ -1502,20 +1510,24 @@ static struct cfq_io_context * | |||
| 1502 | cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) | 1510 | cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) |
| 1503 | { | 1511 | { |
| 1504 | struct cfq_io_context *cic; | 1512 | struct cfq_io_context *cic; |
| 1513 | unsigned long flags; | ||
| 1505 | void *k; | 1514 | void *k; |
| 1506 | 1515 | ||
| 1507 | if (unlikely(!ioc)) | 1516 | if (unlikely(!ioc)) |
| 1508 | return NULL; | 1517 | return NULL; |
| 1509 | 1518 | ||
| 1519 | rcu_read_lock(); | ||
| 1520 | |||
| 1510 | /* | 1521 | /* |
| 1511 | * we maintain a last-hit cache, to avoid browsing over the tree | 1522 | * we maintain a last-hit cache, to avoid browsing over the tree |
| 1512 | */ | 1523 | */ |
| 1513 | cic = rcu_dereference(ioc->ioc_data); | 1524 | cic = rcu_dereference(ioc->ioc_data); |
| 1514 | if (cic && cic->key == cfqd) | 1525 | if (cic && cic->key == cfqd) { |
| 1526 | rcu_read_unlock(); | ||
| 1515 | return cic; | 1527 | return cic; |
| 1528 | } | ||
| 1516 | 1529 | ||
| 1517 | do { | 1530 | do { |
| 1518 | rcu_read_lock(); | ||
| 1519 | cic = radix_tree_lookup(&ioc->radix_root, (unsigned long) cfqd); | 1531 | cic = radix_tree_lookup(&ioc->radix_root, (unsigned long) cfqd); |
| 1520 | rcu_read_unlock(); | 1532 | rcu_read_unlock(); |
| 1521 | if (!cic) | 1533 | if (!cic) |
| @@ -1524,10 +1536,13 @@ cfq_cic_lookup(struct cfq_data *cfqd, struct io_context *ioc) | |||
| 1524 | k = cic->key; | 1536 | k = cic->key; |
| 1525 | if (unlikely(!k)) { | 1537 | if (unlikely(!k)) { |
| 1526 | cfq_drop_dead_cic(cfqd, ioc, cic); | 1538 | cfq_drop_dead_cic(cfqd, ioc, cic); |
| 1539 | rcu_read_lock(); | ||
| 1527 | continue; | 1540 | continue; |
| 1528 | } | 1541 | } |
| 1529 | 1542 | ||
| 1543 | spin_lock_irqsave(&ioc->lock, flags); | ||
| 1530 | rcu_assign_pointer(ioc->ioc_data, cic); | 1544 | rcu_assign_pointer(ioc->ioc_data, cic); |
| 1545 | spin_unlock_irqrestore(&ioc->lock, flags); | ||
| 1531 | break; | 1546 | break; |
| 1532 | } while (1); | 1547 | } while (1); |
| 1533 | 1548 | ||
| @@ -2134,6 +2149,10 @@ static void *cfq_init_queue(struct request_queue *q) | |||
| 2134 | 2149 | ||
| 2135 | static void cfq_slab_kill(void) | 2150 | static void cfq_slab_kill(void) |
| 2136 | { | 2151 | { |
| 2152 | /* | ||
| 2153 | * Caller already ensured that pending RCU callbacks are completed, | ||
| 2154 | * so we should have no busy allocations at this point. | ||
| 2155 | */ | ||
| 2137 | if (cfq_pool) | 2156 | if (cfq_pool) |
| 2138 | kmem_cache_destroy(cfq_pool); | 2157 | kmem_cache_destroy(cfq_pool); |
| 2139 | if (cfq_ioc_pool) | 2158 | if (cfq_ioc_pool) |
| @@ -2292,6 +2311,11 @@ static void __exit cfq_exit(void) | |||
| 2292 | ioc_gone = &all_gone; | 2311 | ioc_gone = &all_gone; |
| 2293 | /* ioc_gone's update must be visible before reading ioc_count */ | 2312 | /* ioc_gone's update must be visible before reading ioc_count */ |
| 2294 | smp_wmb(); | 2313 | smp_wmb(); |
| 2314 | |||
| 2315 | /* | ||
| 2316 | * this also protects us from entering cfq_slab_kill() with | ||
| 2317 | * pending RCU callbacks | ||
| 2318 | */ | ||
| 2295 | if (elv_ioc_count_read(ioc_count)) | 2319 | if (elv_ioc_count_read(ioc_count)) |
| 2296 | wait_for_completion(ioc_gone); | 2320 | wait_for_completion(ioc_gone); |
| 2297 | cfq_slab_kill(); | 2321 | cfq_slab_kill(); |
diff --git a/block/elevator.c b/block/elevator.c index 980f8ae147b4..902dd1344d56 100644 --- a/block/elevator.c +++ b/block/elevator.c | |||
| @@ -1110,6 +1110,8 @@ static int elevator_switch(struct request_queue *q, struct elevator_type *new_e) | |||
| 1110 | queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); | 1110 | queue_flag_clear(QUEUE_FLAG_ELVSWITCH, q); |
| 1111 | spin_unlock_irq(q->queue_lock); | 1111 | spin_unlock_irq(q->queue_lock); |
| 1112 | 1112 | ||
| 1113 | blk_add_trace_msg(q, "elv switch: %s", e->elevator_type->elevator_name); | ||
| 1114 | |||
| 1113 | return 1; | 1115 | return 1; |
| 1114 | 1116 | ||
| 1115 | fail_register: | 1117 | fail_register: |
diff --git a/crypto/cts.c b/crypto/cts.c index c4e70bfb4970..ccf9c5de3958 100644 --- a/crypto/cts.c +++ b/crypto/cts.c | |||
| @@ -89,6 +89,9 @@ static int cts_cbc_encrypt(struct crypto_cts_ctx *ctx, | |||
| 89 | if (lastn < 0) | 89 | if (lastn < 0) |
| 90 | return -EINVAL; | 90 | return -EINVAL; |
| 91 | 91 | ||
| 92 | sg_init_table(sgsrc, 1); | ||
| 93 | sg_init_table(sgdst, 1); | ||
| 94 | |||
| 92 | memset(s, 0, sizeof(s)); | 95 | memset(s, 0, sizeof(s)); |
| 93 | scatterwalk_map_and_copy(s, src, offset, nbytes, 0); | 96 | scatterwalk_map_and_copy(s, src, offset, nbytes, 0); |
| 94 | 97 | ||
| @@ -172,6 +175,9 @@ static int cts_cbc_decrypt(struct crypto_cts_ctx *ctx, | |||
| 172 | if (lastn < 0) | 175 | if (lastn < 0) |
| 173 | return -EINVAL; | 176 | return -EINVAL; |
| 174 | 177 | ||
| 178 | sg_init_table(sgsrc, 1); | ||
| 179 | sg_init_table(sgdst, 1); | ||
| 180 | |||
| 175 | scatterwalk_map_and_copy(s, src, offset, nbytes, 0); | 181 | scatterwalk_map_and_copy(s, src, offset, nbytes, 0); |
| 176 | 182 | ||
| 177 | lcldesc.tfm = ctx->child; | 183 | lcldesc.tfm = ctx->child; |
diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c index 97f83fb2ee2e..544b7d6c617c 100644 --- a/drivers/ata/ahci.c +++ b/drivers/ata/ahci.c | |||
| @@ -502,10 +502,10 @@ static const struct pci_device_id ahci_pci_tbl[] = { | |||
| 502 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ | 502 | { PCI_VDEVICE(NVIDIA, 0x0bcd), board_ahci }, /* MCP7B */ |
| 503 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ | 503 | { PCI_VDEVICE(NVIDIA, 0x0bce), board_ahci }, /* MCP7B */ |
| 504 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ | 504 | { PCI_VDEVICE(NVIDIA, 0x0bcf), board_ahci }, /* MCP7B */ |
| 505 | { PCI_VDEVICE(NVIDIA, 0x0bd0), board_ahci }, /* MCP7B */ | 505 | { PCI_VDEVICE(NVIDIA, 0x0bc4), board_ahci }, /* MCP7B */ |
| 506 | { PCI_VDEVICE(NVIDIA, 0x0bd1), board_ahci }, /* MCP7B */ | 506 | { PCI_VDEVICE(NVIDIA, 0x0bc5), board_ahci }, /* MCP7B */ |
| 507 | { PCI_VDEVICE(NVIDIA, 0x0bd2), board_ahci }, /* MCP7B */ | 507 | { PCI_VDEVICE(NVIDIA, 0x0bc6), board_ahci }, /* MCP7B */ |
| 508 | { PCI_VDEVICE(NVIDIA, 0x0bd3), board_ahci }, /* MCP7B */ | 508 | { PCI_VDEVICE(NVIDIA, 0x0bc7), board_ahci }, /* MCP7B */ |
| 509 | 509 | ||
| 510 | /* SiS */ | 510 | /* SiS */ |
| 511 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ | 511 | { PCI_VDEVICE(SI, 0x1184), board_ahci }, /* SiS 966 */ |
diff --git a/drivers/ata/ata_piix.c b/drivers/ata/ata_piix.c index a9027b8fbdd5..81b7ae376951 100644 --- a/drivers/ata/ata_piix.c +++ b/drivers/ata/ata_piix.c | |||
| @@ -247,10 +247,11 @@ static const struct pci_device_id piix_pci_tbl[] = { | |||
| 247 | { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | 247 | { 0x8086, 0x2820, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, |
| 248 | /* SATA Controller 2 IDE (ICH8) */ | 248 | /* SATA Controller 2 IDE (ICH8) */ |
| 249 | { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, | 249 | { 0x8086, 0x2825, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_2port_sata }, |
| 250 | /* Mobile SATA Controller IDE (ICH8M) */ | ||
| 251 | { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 252 | /* Mobile SATA Controller IDE (ICH8M), Apple */ | 250 | /* Mobile SATA Controller IDE (ICH8M), Apple */ |
| 253 | { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata }, | 251 | { 0x8086, 0x2828, 0x106b, 0x00a0, 0, 0, ich8m_apple_sata }, |
| 252 | { 0x8086, 0x2828, 0x106b, 0x00a1, 0, 0, ich8m_apple_sata }, | ||
| 253 | /* Mobile SATA Controller IDE (ICH8M) */ | ||
| 254 | { 0x8086, 0x2828, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | ||
| 254 | /* SATA Controller IDE (ICH9) */ | 255 | /* SATA Controller IDE (ICH9) */ |
| 255 | { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, | 256 | { 0x8086, 0x2920, PCI_ANY_ID, PCI_ANY_ID, 0, 0, ich8_sata }, |
| 256 | /* SATA Controller IDE (ICH9) */ | 257 | /* SATA Controller IDE (ICH9) */ |
| @@ -526,7 +527,7 @@ static struct ata_port_info piix_port_info[] = { | |||
| 526 | 527 | ||
| 527 | [ich8m_apple_sata] = | 528 | [ich8m_apple_sata] = |
| 528 | { | 529 | { |
| 529 | .flags = PIIX_SATA_FLAGS | PIIX_FLAG_SIDPR, | 530 | .flags = PIIX_SATA_FLAGS, |
| 530 | .pio_mask = 0x1f, /* pio0-4 */ | 531 | .pio_mask = 0x1f, /* pio0-4 */ |
| 531 | .mwdma_mask = 0x07, /* mwdma0-2 */ | 532 | .mwdma_mask = 0x07, /* mwdma0-2 */ |
| 532 | .udma_mask = ATA_UDMA6, | 533 | .udma_mask = ATA_UDMA6, |
| @@ -573,6 +574,8 @@ static const struct ich_laptop ich_laptop[] = { | |||
| 573 | { 0x27DF, 0x1043, 0x1267 }, /* ICH7 on Asus W5F */ | 574 | { 0x27DF, 0x1043, 0x1267 }, /* ICH7 on Asus W5F */ |
| 574 | { 0x27DF, 0x103C, 0x30A1 }, /* ICH7 on HP Compaq nc2400 */ | 575 | { 0x27DF, 0x103C, 0x30A1 }, /* ICH7 on HP Compaq nc2400 */ |
| 575 | { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on ACER Aspire 2023WLMi */ | 576 | { 0x24CA, 0x1025, 0x0061 }, /* ICH4 on ACER Aspire 2023WLMi */ |
| 577 | { 0x24CA, 0x1025, 0x003d }, /* ICH4 on ACER TM290 */ | ||
| 578 | { 0x266F, 0x1025, 0x0066 }, /* ICH6 on ACER Aspire 1694WLMi */ | ||
| 576 | { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */ | 579 | { 0x2653, 0x1043, 0x82D8 }, /* ICH6M on Asus Eee 701 */ |
| 577 | /* end marker */ | 580 | /* end marker */ |
| 578 | { 0, } | 581 | { 0, } |
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c index dbf6ca781f66..3ff8b14420d9 100644 --- a/drivers/ata/libata-acpi.c +++ b/drivers/ata/libata-acpi.c | |||
| @@ -118,12 +118,62 @@ static void ata_acpi_associate_ide_port(struct ata_port *ap) | |||
| 118 | ap->pflags |= ATA_PFLAG_INIT_GTM_VALID; | 118 | ap->pflags |= ATA_PFLAG_INIT_GTM_VALID; |
| 119 | } | 119 | } |
| 120 | 120 | ||
| 121 | static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device | 121 | static void ata_acpi_eject_device(acpi_handle handle) |
| 122 | *dev, u32 event) | 122 | { |
| 123 | struct acpi_object_list arg_list; | ||
| 124 | union acpi_object arg; | ||
| 125 | |||
| 126 | arg_list.count = 1; | ||
| 127 | arg_list.pointer = &arg; | ||
| 128 | arg.type = ACPI_TYPE_INTEGER; | ||
| 129 | arg.integer.value = 1; | ||
| 130 | |||
| 131 | if (ACPI_FAILURE(acpi_evaluate_object(handle, "_EJ0", | ||
| 132 | &arg_list, NULL))) | ||
| 133 | printk(KERN_ERR "Failed to evaluate _EJ0!\n"); | ||
| 134 | } | ||
| 135 | |||
| 136 | /* @ap and @dev are the same as ata_acpi_handle_hotplug() */ | ||
| 137 | static void ata_acpi_detach_device(struct ata_port *ap, struct ata_device *dev) | ||
| 138 | { | ||
| 139 | if (dev) | ||
| 140 | dev->flags |= ATA_DFLAG_DETACH; | ||
| 141 | else { | ||
| 142 | struct ata_link *tlink; | ||
| 143 | struct ata_device *tdev; | ||
| 144 | |||
| 145 | ata_port_for_each_link(tlink, ap) | ||
| 146 | ata_link_for_each_dev(tdev, tlink) | ||
| 147 | tdev->flags |= ATA_DFLAG_DETACH; | ||
| 148 | } | ||
| 149 | |||
| 150 | ata_port_schedule_eh(ap); | ||
| 151 | } | ||
| 152 | |||
| 153 | /** | ||
| 154 | * ata_acpi_handle_hotplug - ACPI event handler backend | ||
| 155 | * @ap: ATA port ACPI event occurred | ||
| 156 | * @dev: ATA device ACPI event occurred (can be NULL) | ||
| 157 | * @event: ACPI event which occurred | ||
| 158 | * @is_dock_event: boolean indicating whether the event was a dock one | ||
| 159 | * | ||
| 160 | * All ACPI bay / device realted events end up in this function. If | ||
| 161 | * the event is port-wide @dev is NULL. If the event is specific to a | ||
| 162 | * device, @dev points to it. | ||
| 163 | * | ||
| 164 | * Hotplug (as opposed to unplug) notification is always handled as | ||
| 165 | * port-wide while unplug only kills the target device on device-wide | ||
| 166 | * event. | ||
| 167 | * | ||
| 168 | * LOCKING: | ||
| 169 | * ACPI notify handler context. May sleep. | ||
| 170 | */ | ||
| 171 | static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device *dev, | ||
| 172 | u32 event, int is_dock_event) | ||
| 123 | { | 173 | { |
| 124 | char event_string[12]; | 174 | char event_string[12]; |
| 125 | char *envp[] = { event_string, NULL }; | 175 | char *envp[] = { event_string, NULL }; |
| 126 | struct ata_eh_info *ehi; | 176 | struct ata_eh_info *ehi = &ap->link.eh_info; |
| 127 | struct kobject *kobj = NULL; | 177 | struct kobject *kobj = NULL; |
| 128 | int wait = 0; | 178 | int wait = 0; |
| 129 | unsigned long flags; | 179 | unsigned long flags; |
| @@ -131,87 +181,100 @@ static void ata_acpi_handle_hotplug(struct ata_port *ap, struct ata_device | |||
| 131 | unsigned long sta; | 181 | unsigned long sta; |
| 132 | acpi_status status; | 182 | acpi_status status; |
| 133 | 183 | ||
| 134 | if (!ap) | 184 | if (dev) { |
| 135 | ap = dev->link->ap; | 185 | if (dev->sdev) |
| 136 | ehi = &ap->link.eh_info; | 186 | kobj = &dev->sdev->sdev_gendev.kobj; |
| 137 | |||
| 138 | spin_lock_irqsave(ap->lock, flags); | ||
| 139 | |||
| 140 | if (dev) | ||
| 141 | handle = dev->acpi_handle; | 187 | handle = dev->acpi_handle; |
| 142 | else | 188 | } else { |
| 189 | kobj = &ap->dev->kobj; | ||
| 143 | handle = ap->acpi_handle; | 190 | handle = ap->acpi_handle; |
| 191 | } | ||
| 144 | 192 | ||
| 145 | status = acpi_get_handle(handle, "_EJ0", &tmphandle); | 193 | status = acpi_get_handle(handle, "_EJ0", &tmphandle); |
| 146 | if (ACPI_FAILURE(status)) { | 194 | if (ACPI_FAILURE(status)) |
| 147 | /* This device is not ejectable */ | 195 | /* This device does not support hotplug */ |
| 148 | spin_unlock_irqrestore(ap->lock, flags); | ||
| 149 | return; | 196 | return; |
| 150 | } | ||
| 151 | 197 | ||
| 152 | status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); | 198 | spin_lock_irqsave(ap->lock, flags); |
| 153 | if (ACPI_FAILURE(status)) { | ||
| 154 | printk ("Unable to determine bay status\n"); | ||
| 155 | spin_unlock_irqrestore(ap->lock, flags); | ||
| 156 | return; | ||
| 157 | } | ||
| 158 | 199 | ||
| 159 | switch (event) { | 200 | switch (event) { |
| 160 | case ACPI_NOTIFY_BUS_CHECK: | 201 | case ACPI_NOTIFY_BUS_CHECK: |
| 161 | case ACPI_NOTIFY_DEVICE_CHECK: | 202 | case ACPI_NOTIFY_DEVICE_CHECK: |
| 162 | ata_ehi_push_desc(ehi, "ACPI event"); | 203 | ata_ehi_push_desc(ehi, "ACPI event"); |
| 163 | if (!sta) { | 204 | |
| 164 | /* Device has been unplugged */ | 205 | status = acpi_evaluate_integer(handle, "_STA", NULL, &sta); |
| 165 | if (dev) | 206 | if (ACPI_FAILURE(status)) { |
| 166 | dev->flags |= ATA_DFLAG_DETACH; | 207 | ata_port_printk(ap, KERN_ERR, |
| 167 | else { | 208 | "acpi: failed to determine bay status (0x%x)\n", |
| 168 | struct ata_link *tlink; | 209 | status); |
| 169 | struct ata_device *tdev; | 210 | break; |
| 170 | 211 | } | |
| 171 | ata_port_for_each_link(tlink, ap) { | 212 | |
| 172 | ata_link_for_each_dev(tdev, tlink) { | 213 | if (sta) { |
| 173 | tdev->flags |= | ||
| 174 | ATA_DFLAG_DETACH; | ||
| 175 | } | ||
| 176 | } | ||
| 177 | } | ||
| 178 | ata_port_schedule_eh(ap); | ||
| 179 | wait = 1; | ||
| 180 | } else { | ||
| 181 | ata_ehi_hotplugged(ehi); | 214 | ata_ehi_hotplugged(ehi); |
| 182 | ata_port_freeze(ap); | 215 | ata_port_freeze(ap); |
| 216 | } else { | ||
| 217 | /* The device has gone - unplug it */ | ||
| 218 | ata_acpi_detach_device(ap, dev); | ||
| 219 | wait = 1; | ||
| 183 | } | 220 | } |
| 221 | break; | ||
| 222 | case ACPI_NOTIFY_EJECT_REQUEST: | ||
| 223 | ata_ehi_push_desc(ehi, "ACPI event"); | ||
| 224 | |||
| 225 | if (!is_dock_event) | ||
| 226 | break; | ||
| 227 | |||
| 228 | /* undock event - immediate unplug */ | ||
| 229 | ata_acpi_detach_device(ap, dev); | ||
| 230 | wait = 1; | ||
| 231 | break; | ||
| 184 | } | 232 | } |
| 185 | 233 | ||
| 234 | /* make sure kobj doesn't go away while ap->lock is released */ | ||
| 235 | kobject_get(kobj); | ||
| 236 | |||
| 186 | spin_unlock_irqrestore(ap->lock, flags); | 237 | spin_unlock_irqrestore(ap->lock, flags); |
| 187 | 238 | ||
| 188 | if (wait) | 239 | if (wait) { |
| 189 | ata_port_wait_eh(ap); | 240 | ata_port_wait_eh(ap); |
| 241 | ata_acpi_eject_device(handle); | ||
| 242 | } | ||
| 190 | 243 | ||
| 191 | if (dev) { | 244 | if (kobj && !is_dock_event) { |
| 192 | if (dev->sdev) | ||
| 193 | kobj = &dev->sdev->sdev_gendev.kobj; | ||
| 194 | } else | ||
| 195 | kobj = &ap->dev->kobj; | ||
| 196 | |||
| 197 | if (kobj) { | ||
| 198 | sprintf(event_string, "BAY_EVENT=%d", event); | 245 | sprintf(event_string, "BAY_EVENT=%d", event); |
| 199 | kobject_uevent_env(kobj, KOBJ_CHANGE, envp); | 246 | kobject_uevent_env(kobj, KOBJ_CHANGE, envp); |
| 200 | } | 247 | } |
| 248 | |||
| 249 | kobject_put(kobj); | ||
| 250 | } | ||
| 251 | |||
| 252 | static void ata_acpi_dev_notify_dock(acpi_handle handle, u32 event, void *data) | ||
| 253 | { | ||
| 254 | struct ata_device *dev = data; | ||
| 255 | |||
| 256 | ata_acpi_handle_hotplug(dev->link->ap, dev, event, 1); | ||
| 257 | } | ||
| 258 | |||
| 259 | static void ata_acpi_ap_notify_dock(acpi_handle handle, u32 event, void *data) | ||
| 260 | { | ||
| 261 | struct ata_port *ap = data; | ||
| 262 | |||
| 263 | ata_acpi_handle_hotplug(ap, NULL, event, 1); | ||
| 201 | } | 264 | } |
| 202 | 265 | ||
| 203 | static void ata_acpi_dev_notify(acpi_handle handle, u32 event, void *data) | 266 | static void ata_acpi_dev_notify(acpi_handle handle, u32 event, void *data) |
| 204 | { | 267 | { |
| 205 | struct ata_device *dev = data; | 268 | struct ata_device *dev = data; |
| 206 | 269 | ||
| 207 | ata_acpi_handle_hotplug(NULL, dev, event); | 270 | ata_acpi_handle_hotplug(dev->link->ap, dev, event, 0); |
| 208 | } | 271 | } |
| 209 | 272 | ||
| 210 | static void ata_acpi_ap_notify(acpi_handle handle, u32 event, void *data) | 273 | static void ata_acpi_ap_notify(acpi_handle handle, u32 event, void *data) |
| 211 | { | 274 | { |
| 212 | struct ata_port *ap = data; | 275 | struct ata_port *ap = data; |
| 213 | 276 | ||
| 214 | ata_acpi_handle_hotplug(ap, NULL, event); | 277 | ata_acpi_handle_hotplug(ap, NULL, event, 0); |
| 215 | } | 278 | } |
| 216 | 279 | ||
| 217 | /** | 280 | /** |
| @@ -252,7 +315,7 @@ void ata_acpi_associate(struct ata_host *host) | |||
| 252 | ata_acpi_ap_notify, ap); | 315 | ata_acpi_ap_notify, ap); |
| 253 | /* we might be on a docking station */ | 316 | /* we might be on a docking station */ |
| 254 | register_hotplug_dock_device(ap->acpi_handle, | 317 | register_hotplug_dock_device(ap->acpi_handle, |
| 255 | ata_acpi_ap_notify, ap); | 318 | ata_acpi_ap_notify_dock, ap); |
| 256 | } | 319 | } |
| 257 | 320 | ||
| 258 | for (j = 0; j < ata_link_max_devices(&ap->link); j++) { | 321 | for (j = 0; j < ata_link_max_devices(&ap->link); j++) { |
| @@ -264,7 +327,7 @@ void ata_acpi_associate(struct ata_host *host) | |||
| 264 | ata_acpi_dev_notify, dev); | 327 | ata_acpi_dev_notify, dev); |
| 265 | /* we might be on a docking station */ | 328 | /* we might be on a docking station */ |
| 266 | register_hotplug_dock_device(dev->acpi_handle, | 329 | register_hotplug_dock_device(dev->acpi_handle, |
| 267 | ata_acpi_dev_notify, dev); | 330 | ata_acpi_dev_notify_dock, dev); |
| 268 | } | 331 | } |
| 269 | } | 332 | } |
| 270 | } | 333 | } |
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 3c89f205c83f..cc816ca623d3 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c | |||
| @@ -5403,7 +5403,7 @@ static void ata_host_stop(struct device *gendev, void *res) | |||
| 5403 | */ | 5403 | */ |
| 5404 | static void ata_finalize_port_ops(struct ata_port_operations *ops) | 5404 | static void ata_finalize_port_ops(struct ata_port_operations *ops) |
| 5405 | { | 5405 | { |
| 5406 | static spinlock_t lock = SPIN_LOCK_UNLOCKED; | 5406 | static DEFINE_SPINLOCK(lock); |
| 5407 | const struct ata_port_operations *cur; | 5407 | const struct ata_port_operations *cur; |
| 5408 | void **begin = (void **)ops; | 5408 | void **begin = (void **)ops; |
| 5409 | void **end = (void **)&ops->inherits; | 5409 | void **end = (void **)&ops->inherits; |
diff --git a/drivers/ata/libata-pmp.c b/drivers/ata/libata-pmp.c index 0f9386d4a5a0..7daf4c0f6216 100644 --- a/drivers/ata/libata-pmp.c +++ b/drivers/ata/libata-pmp.c | |||
| @@ -322,9 +322,12 @@ static void sata_pmp_quirks(struct ata_port *ap) | |||
| 322 | if (vendor == 0x1095 && devid == 0x3726) { | 322 | if (vendor == 0x1095 && devid == 0x3726) { |
| 323 | /* sil3726 quirks */ | 323 | /* sil3726 quirks */ |
| 324 | ata_port_for_each_link(link, ap) { | 324 | ata_port_for_each_link(link, ap) { |
| 325 | /* class code report is unreliable */ | 325 | /* Class code report is unreliable and SRST |
| 326 | * times out under certain configurations. | ||
| 327 | */ | ||
| 326 | if (link->pmp < 5) | 328 | if (link->pmp < 5) |
| 327 | link->flags |= ATA_LFLAG_ASSUME_ATA; | 329 | link->flags |= ATA_LFLAG_NO_SRST | |
| 330 | ATA_LFLAG_ASSUME_ATA; | ||
| 328 | 331 | ||
| 329 | /* port 5 is for SEMB device and it doesn't like SRST */ | 332 | /* port 5 is for SEMB device and it doesn't like SRST */ |
| 330 | if (link->pmp == 5) | 333 | if (link->pmp == 5) |
diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c index aeb6e01d82ce..2e6e1622dc6d 100644 --- a/drivers/ata/libata-scsi.c +++ b/drivers/ata/libata-scsi.c | |||
| @@ -1637,6 +1637,7 @@ defer: | |||
| 1637 | 1637 | ||
| 1638 | /** | 1638 | /** |
| 1639 | * ata_scsi_rbuf_get - Map response buffer. | 1639 | * ata_scsi_rbuf_get - Map response buffer. |
| 1640 | * @cmd: SCSI command containing buffer to be mapped. | ||
| 1640 | * @flags: unsigned long variable to store irq enable status | 1641 | * @flags: unsigned long variable to store irq enable status |
| 1641 | * @copy_in: copy in from user buffer | 1642 | * @copy_in: copy in from user buffer |
| 1642 | * | 1643 | * |
| @@ -1954,7 +1955,7 @@ static unsigned int ata_msense_ctl_mode(u8 *buf) | |||
| 1954 | 1955 | ||
| 1955 | /** | 1956 | /** |
| 1956 | * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page | 1957 | * ata_msense_rw_recovery - Simulate MODE SENSE r/w error recovery page |
| 1957 | * @bufp: output buffer | 1958 | * @buf: output buffer |
| 1958 | * | 1959 | * |
| 1959 | * Generate a generic MODE SENSE r/w error recovery page. | 1960 | * Generate a generic MODE SENSE r/w error recovery page. |
| 1960 | * | 1961 | * |
diff --git a/drivers/ata/libata-sff.c b/drivers/ata/libata-sff.c index 3c2d2289f85e..215d18672a5a 100644 --- a/drivers/ata/libata-sff.c +++ b/drivers/ata/libata-sff.c | |||
| @@ -247,7 +247,7 @@ u8 ata_sff_check_status(struct ata_port *ap) | |||
| 247 | * LOCKING: | 247 | * LOCKING: |
| 248 | * Inherited from caller. | 248 | * Inherited from caller. |
| 249 | */ | 249 | */ |
| 250 | u8 ata_sff_altstatus(struct ata_port *ap) | 250 | static u8 ata_sff_altstatus(struct ata_port *ap) |
| 251 | { | 251 | { |
| 252 | if (ap->ops->sff_check_altstatus) | 252 | if (ap->ops->sff_check_altstatus) |
| 253 | return ap->ops->sff_check_altstatus(ap); | 253 | return ap->ops->sff_check_altstatus(ap); |
| @@ -256,6 +256,93 @@ u8 ata_sff_altstatus(struct ata_port *ap) | |||
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | /** | 258 | /** |
| 259 | * ata_sff_irq_status - Check if the device is busy | ||
| 260 | * @ap: port where the device is | ||
| 261 | * | ||
| 262 | * Determine if the port is currently busy. Uses altstatus | ||
| 263 | * if available in order to avoid clearing shared IRQ status | ||
| 264 | * when finding an IRQ source. Non ctl capable devices don't | ||
| 265 | * share interrupt lines fortunately for us. | ||
| 266 | * | ||
| 267 | * LOCKING: | ||
| 268 | * Inherited from caller. | ||
| 269 | */ | ||
| 270 | static u8 ata_sff_irq_status(struct ata_port *ap) | ||
| 271 | { | ||
| 272 | u8 status; | ||
| 273 | |||
| 274 | if (ap->ops->sff_check_altstatus || ap->ioaddr.altstatus_addr) { | ||
| 275 | status = ata_sff_altstatus(ap); | ||
| 276 | /* Not us: We are busy */ | ||
| 277 | if (status & ATA_BUSY) | ||
| 278 | return status; | ||
| 279 | } | ||
| 280 | /* Clear INTRQ latch */ | ||
| 281 | status = ap->ops->sff_check_status(ap); | ||
| 282 | return status; | ||
| 283 | } | ||
| 284 | |||
| 285 | /** | ||
| 286 | * ata_sff_sync - Flush writes | ||
| 287 | * @ap: Port to wait for. | ||
| 288 | * | ||
| 289 | * CAUTION: | ||
| 290 | * If we have an mmio device with no ctl and no altstatus | ||
| 291 | * method this will fail. No such devices are known to exist. | ||
| 292 | * | ||
| 293 | * LOCKING: | ||
| 294 | * Inherited from caller. | ||
| 295 | */ | ||
| 296 | |||
| 297 | static void ata_sff_sync(struct ata_port *ap) | ||
| 298 | { | ||
| 299 | if (ap->ops->sff_check_altstatus) | ||
| 300 | ap->ops->sff_check_altstatus(ap); | ||
| 301 | else if (ap->ioaddr.altstatus_addr) | ||
| 302 | ioread8(ap->ioaddr.altstatus_addr); | ||
| 303 | } | ||
| 304 | |||
| 305 | /** | ||
| 306 | * ata_sff_pause - Flush writes and wait 400nS | ||
| 307 | * @ap: Port to pause for. | ||
| 308 | * | ||
| 309 | * CAUTION: | ||
| 310 | * If we have an mmio device with no ctl and no altstatus | ||
| 311 | * method this will fail. No such devices are known to exist. | ||
| 312 | * | ||
| 313 | * LOCKING: | ||
| 314 | * Inherited from caller. | ||
| 315 | */ | ||
| 316 | |||
| 317 | void ata_sff_pause(struct ata_port *ap) | ||
| 318 | { | ||
| 319 | ata_sff_sync(ap); | ||
| 320 | ndelay(400); | ||
| 321 | } | ||
| 322 | |||
| 323 | /** | ||
| 324 | * ata_sff_dma_pause - Pause before commencing DMA | ||
| 325 | * @ap: Port to pause for. | ||
| 326 | * | ||
| 327 | * Perform I/O fencing and ensure sufficient cycle delays occur | ||
| 328 | * for the HDMA1:0 transition | ||
| 329 | */ | ||
| 330 | |||
| 331 | void ata_sff_dma_pause(struct ata_port *ap) | ||
| 332 | { | ||
| 333 | if (ap->ops->sff_check_altstatus || ap->ioaddr.altstatus_addr) { | ||
| 334 | /* An altstatus read will cause the needed delay without | ||
| 335 | messing up the IRQ status */ | ||
| 336 | ata_sff_altstatus(ap); | ||
| 337 | return; | ||
| 338 | } | ||
| 339 | /* There are no DMA controllers without ctl. BUG here to ensure | ||
| 340 | we never violate the HDMA1:0 transition timing and risk | ||
| 341 | corruption. */ | ||
| 342 | BUG(); | ||
| 343 | } | ||
| 344 | |||
| 345 | /** | ||
| 259 | * ata_sff_busy_sleep - sleep until BSY clears, or timeout | 346 | * ata_sff_busy_sleep - sleep until BSY clears, or timeout |
| 260 | * @ap: port containing status register to be polled | 347 | * @ap: port containing status register to be polled |
| 261 | * @tmout_pat: impatience timeout | 348 | * @tmout_pat: impatience timeout |
| @@ -742,7 +829,7 @@ static void ata_pio_sectors(struct ata_queued_cmd *qc) | |||
| 742 | } else | 829 | } else |
| 743 | ata_pio_sector(qc); | 830 | ata_pio_sector(qc); |
| 744 | 831 | ||
| 745 | ata_sff_altstatus(qc->ap); /* flush */ | 832 | ata_sff_sync(qc->ap); /* flush */ |
| 746 | } | 833 | } |
| 747 | 834 | ||
| 748 | /** | 835 | /** |
| @@ -763,8 +850,9 @@ static void atapi_send_cdb(struct ata_port *ap, struct ata_queued_cmd *qc) | |||
| 763 | WARN_ON(qc->dev->cdb_len < 12); | 850 | WARN_ON(qc->dev->cdb_len < 12); |
| 764 | 851 | ||
| 765 | ap->ops->sff_data_xfer(qc->dev, qc->cdb, qc->dev->cdb_len, 1); | 852 | ap->ops->sff_data_xfer(qc->dev, qc->cdb, qc->dev->cdb_len, 1); |
| 766 | ata_sff_altstatus(ap); /* flush */ | 853 | ata_sff_sync(ap); |
| 767 | 854 | /* FIXME: If the CDB is for DMA do we need to do the transition delay | |
| 855 | or is bmdma_start guaranteed to do it ? */ | ||
| 768 | switch (qc->tf.protocol) { | 856 | switch (qc->tf.protocol) { |
| 769 | case ATAPI_PROT_PIO: | 857 | case ATAPI_PROT_PIO: |
| 770 | ap->hsm_task_state = HSM_ST; | 858 | ap->hsm_task_state = HSM_ST; |
| @@ -905,7 +993,7 @@ static void atapi_pio_bytes(struct ata_queued_cmd *qc) | |||
| 905 | 993 | ||
| 906 | if (unlikely(__atapi_pio_bytes(qc, bytes))) | 994 | if (unlikely(__atapi_pio_bytes(qc, bytes))) |
| 907 | goto err_out; | 995 | goto err_out; |
| 908 | ata_sff_altstatus(ap); /* flush */ | 996 | ata_sff_sync(ap); /* flush */ |
| 909 | 997 | ||
| 910 | return; | 998 | return; |
| 911 | 999 | ||
| @@ -1489,14 +1577,10 @@ inline unsigned int ata_sff_host_intr(struct ata_port *ap, | |||
| 1489 | goto idle_irq; | 1577 | goto idle_irq; |
| 1490 | } | 1578 | } |
| 1491 | 1579 | ||
| 1492 | /* check altstatus */ | ||
| 1493 | status = ata_sff_altstatus(ap); | ||
| 1494 | if (status & ATA_BUSY) | ||
| 1495 | goto idle_irq; | ||
| 1496 | 1580 | ||
| 1497 | /* check main status, clearing INTRQ */ | 1581 | /* check main status, clearing INTRQ if needed */ |
| 1498 | status = ap->ops->sff_check_status(ap); | 1582 | status = ata_sff_irq_status(ap); |
| 1499 | if (unlikely(status & ATA_BUSY)) | 1583 | if (status & ATA_BUSY) |
| 1500 | goto idle_irq; | 1584 | goto idle_irq; |
| 1501 | 1585 | ||
| 1502 | /* ack bmdma irq events */ | 1586 | /* ack bmdma irq events */ |
| @@ -2030,7 +2114,7 @@ void ata_sff_error_handler(struct ata_port *ap) | |||
| 2030 | ap->ops->bmdma_stop(qc); | 2114 | ap->ops->bmdma_stop(qc); |
| 2031 | } | 2115 | } |
| 2032 | 2116 | ||
| 2033 | ata_sff_altstatus(ap); | 2117 | ata_sff_sync(ap); /* FIXME: We don't need this */ |
| 2034 | ap->ops->sff_check_status(ap); | 2118 | ap->ops->sff_check_status(ap); |
| 2035 | ap->ops->sff_irq_clear(ap); | 2119 | ap->ops->sff_irq_clear(ap); |
| 2036 | 2120 | ||
| @@ -2203,7 +2287,7 @@ void ata_bmdma_stop(struct ata_queued_cmd *qc) | |||
| 2203 | mmio + ATA_DMA_CMD); | 2287 | mmio + ATA_DMA_CMD); |
| 2204 | 2288 | ||
| 2205 | /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ | 2289 | /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ |
| 2206 | ata_sff_altstatus(ap); /* dummy read */ | 2290 | ata_sff_dma_pause(ap); |
| 2207 | } | 2291 | } |
| 2208 | 2292 | ||
| 2209 | /** | 2293 | /** |
| @@ -2722,7 +2806,8 @@ EXPORT_SYMBOL_GPL(ata_sff_qc_prep); | |||
| 2722 | EXPORT_SYMBOL_GPL(ata_sff_dumb_qc_prep); | 2806 | EXPORT_SYMBOL_GPL(ata_sff_dumb_qc_prep); |
| 2723 | EXPORT_SYMBOL_GPL(ata_sff_dev_select); | 2807 | EXPORT_SYMBOL_GPL(ata_sff_dev_select); |
| 2724 | EXPORT_SYMBOL_GPL(ata_sff_check_status); | 2808 | EXPORT_SYMBOL_GPL(ata_sff_check_status); |
| 2725 | EXPORT_SYMBOL_GPL(ata_sff_altstatus); | 2809 | EXPORT_SYMBOL_GPL(ata_sff_dma_pause); |
| 2810 | EXPORT_SYMBOL_GPL(ata_sff_pause); | ||
| 2726 | EXPORT_SYMBOL_GPL(ata_sff_busy_sleep); | 2811 | EXPORT_SYMBOL_GPL(ata_sff_busy_sleep); |
| 2727 | EXPORT_SYMBOL_GPL(ata_sff_wait_ready); | 2812 | EXPORT_SYMBOL_GPL(ata_sff_wait_ready); |
| 2728 | EXPORT_SYMBOL_GPL(ata_sff_tf_load); | 2813 | EXPORT_SYMBOL_GPL(ata_sff_tf_load); |
diff --git a/drivers/ata/pata_icside.c b/drivers/ata/pata_icside.c index 17138436423d..cf9e9848f8b5 100644 --- a/drivers/ata/pata_icside.c +++ b/drivers/ata/pata_icside.c | |||
| @@ -270,7 +270,7 @@ static void pata_icside_bmdma_stop(struct ata_queued_cmd *qc) | |||
| 270 | disable_dma(state->dma); | 270 | disable_dma(state->dma); |
| 271 | 271 | ||
| 272 | /* see ata_bmdma_stop */ | 272 | /* see ata_bmdma_stop */ |
| 273 | ata_sff_altstatus(ap); | 273 | ata_sff_dma_pause(ap); |
| 274 | } | 274 | } |
| 275 | 275 | ||
| 276 | static u8 pata_icside_bmdma_status(struct ata_port *ap) | 276 | static u8 pata_icside_bmdma_status(struct ata_port *ap) |
diff --git a/drivers/ata/pata_rb532_cf.c b/drivers/ata/pata_rb532_cf.c index a108d259f19d..f8b3ffc8ae9e 100644 --- a/drivers/ata/pata_rb532_cf.c +++ b/drivers/ata/pata_rb532_cf.c | |||
| @@ -57,7 +57,9 @@ static inline void rb532_pata_finish_io(struct ata_port *ap) | |||
| 57 | struct ata_host *ah = ap->host; | 57 | struct ata_host *ah = ap->host; |
| 58 | struct rb532_cf_info *info = ah->private_data; | 58 | struct rb532_cf_info *info = ah->private_data; |
| 59 | 59 | ||
| 60 | ata_sff_altstatus(ap); | 60 | /* FIXME: Keep previous delay. If this is merely a fence then |
| 61 | ata_sff_sync might be sufficient. */ | ||
| 62 | ata_sff_dma_pause(ap); | ||
| 61 | ndelay(RB500_CF_IO_DELAY); | 63 | ndelay(RB500_CF_IO_DELAY); |
| 62 | 64 | ||
| 63 | set_irq_type(info->irq, IRQ_TYPE_LEVEL_HIGH); | 65 | set_irq_type(info->irq, IRQ_TYPE_LEVEL_HIGH); |
diff --git a/drivers/ata/pata_scc.c b/drivers/ata/pata_scc.c index e965b251ca24..bbf5aa345e68 100644 --- a/drivers/ata/pata_scc.c +++ b/drivers/ata/pata_scc.c | |||
| @@ -726,7 +726,7 @@ static void scc_bmdma_stop (struct ata_queued_cmd *qc) | |||
| 726 | in_be32(bmid_base + SCC_DMA_CMD) & ~ATA_DMA_START); | 726 | in_be32(bmid_base + SCC_DMA_CMD) & ~ATA_DMA_START); |
| 727 | 727 | ||
| 728 | /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ | 728 | /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */ |
| 729 | ata_sff_altstatus(ap); /* dummy read */ | 729 | ata_sff_dma_pause(ap); /* dummy read */ |
| 730 | } | 730 | } |
| 731 | 731 | ||
| 732 | /** | 732 | /** |
| @@ -747,7 +747,8 @@ static u8 scc_bmdma_status (struct ata_port *ap) | |||
| 747 | return host_stat; | 747 | return host_stat; |
| 748 | 748 | ||
| 749 | /* errata A252,A308 workaround: Step4 */ | 749 | /* errata A252,A308 workaround: Step4 */ |
| 750 | if ((ata_sff_altstatus(ap) & ATA_ERR) && (int_status & INTSTS_INTRQ)) | 750 | if ((scc_check_altstatus(ap) & ATA_ERR) |
| 751 | && (int_status & INTSTS_INTRQ)) | ||
| 751 | return (host_stat | ATA_DMA_INTR); | 752 | return (host_stat | ATA_DMA_INTR); |
| 752 | 753 | ||
| 753 | /* errata A308 workaround Step5 */ | 754 | /* errata A308 workaround Step5 */ |
diff --git a/drivers/ata/sata_fsl.c b/drivers/ata/sata_fsl.c index 853559e32315..3924e7209a44 100644 --- a/drivers/ata/sata_fsl.c +++ b/drivers/ata/sata_fsl.c | |||
| @@ -34,7 +34,7 @@ enum { | |||
| 34 | 34 | ||
| 35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 35 | SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
| 36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | | 36 | ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA | |
| 37 | ATA_FLAG_NCQ), | 37 | ATA_FLAG_PMP | ATA_FLAG_NCQ), |
| 38 | 38 | ||
| 39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, | 39 | SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH, |
| 40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ | 40 | SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */ |
| @@ -395,7 +395,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc) | |||
| 395 | cd = (struct command_desc *)pp->cmdentry + tag; | 395 | cd = (struct command_desc *)pp->cmdentry + tag; |
| 396 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; | 396 | cd_paddr = pp->cmdentry_paddr + tag * SATA_FSL_CMD_DESC_SIZE; |
| 397 | 397 | ||
| 398 | ata_tf_to_fis(&qc->tf, 0, 1, (u8 *) &cd->cfis); | 398 | ata_tf_to_fis(&qc->tf, qc->dev->link->pmp, 1, (u8 *) &cd->cfis); |
| 399 | 399 | ||
| 400 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", | 400 | VPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x\n", |
| 401 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); | 401 | cd->cfis[0], cd->cfis[1], cd->cfis[2]); |
| @@ -438,6 +438,8 @@ static unsigned int sata_fsl_qc_issue(struct ata_queued_cmd *qc) | |||
| 438 | ioread32(CA + hcr_base), | 438 | ioread32(CA + hcr_base), |
| 439 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); | 439 | ioread32(CE + hcr_base), ioread32(CC + hcr_base)); |
| 440 | 440 | ||
| 441 | iowrite32(qc->dev->link->pmp, CQPMP + hcr_base); | ||
| 442 | |||
| 441 | /* Simply queue command to the controller/device */ | 443 | /* Simply queue command to the controller/device */ |
| 442 | iowrite32(1 << tag, CQ + hcr_base); | 444 | iowrite32(1 << tag, CQ + hcr_base); |
| 443 | 445 | ||
| @@ -558,11 +560,36 @@ static void sata_fsl_thaw(struct ata_port *ap) | |||
| 558 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); | 560 | ioread32(hcr_base + HCONTROL), ioread32(hcr_base + HSTATUS)); |
| 559 | } | 561 | } |
| 560 | 562 | ||
| 563 | static void sata_fsl_pmp_attach(struct ata_port *ap) | ||
| 564 | { | ||
| 565 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
| 566 | void __iomem *hcr_base = host_priv->hcr_base; | ||
| 567 | u32 temp; | ||
| 568 | |||
| 569 | temp = ioread32(hcr_base + HCONTROL); | ||
| 570 | iowrite32((temp | HCONTROL_PMP_ATTACHED), hcr_base + HCONTROL); | ||
| 571 | } | ||
| 572 | |||
| 573 | static void sata_fsl_pmp_detach(struct ata_port *ap) | ||
| 574 | { | ||
| 575 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | ||
| 576 | void __iomem *hcr_base = host_priv->hcr_base; | ||
| 577 | u32 temp; | ||
| 578 | |||
| 579 | temp = ioread32(hcr_base + HCONTROL); | ||
| 580 | temp &= ~HCONTROL_PMP_ATTACHED; | ||
| 581 | iowrite32(temp, hcr_base + HCONTROL); | ||
| 582 | |||
| 583 | /* enable interrupts on the controller/port */ | ||
| 584 | temp = ioread32(hcr_base + HCONTROL); | ||
| 585 | iowrite32((temp | DEFAULT_PORT_IRQ_ENABLE_MASK), hcr_base + HCONTROL); | ||
| 586 | |||
| 587 | } | ||
| 588 | |||
| 561 | static int sata_fsl_port_start(struct ata_port *ap) | 589 | static int sata_fsl_port_start(struct ata_port *ap) |
| 562 | { | 590 | { |
| 563 | struct device *dev = ap->host->dev; | 591 | struct device *dev = ap->host->dev; |
| 564 | struct sata_fsl_port_priv *pp; | 592 | struct sata_fsl_port_priv *pp; |
| 565 | int retval; | ||
| 566 | void *mem; | 593 | void *mem; |
| 567 | dma_addr_t mem_dma; | 594 | dma_addr_t mem_dma; |
| 568 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 595 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| @@ -688,12 +715,13 @@ static int sata_fsl_prereset(struct ata_link *link, unsigned long deadline) | |||
| 688 | } | 715 | } |
| 689 | 716 | ||
| 690 | static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, | 717 | static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, |
| 691 | unsigned long deadline) | 718 | unsigned long deadline) |
| 692 | { | 719 | { |
| 693 | struct ata_port *ap = link->ap; | 720 | struct ata_port *ap = link->ap; |
| 694 | struct sata_fsl_port_priv *pp = ap->private_data; | 721 | struct sata_fsl_port_priv *pp = ap->private_data; |
| 695 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 722 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 696 | void __iomem *hcr_base = host_priv->hcr_base; | 723 | void __iomem *hcr_base = host_priv->hcr_base; |
| 724 | int pmp = sata_srst_pmp(link); | ||
| 697 | u32 temp; | 725 | u32 temp; |
| 698 | struct ata_taskfile tf; | 726 | struct ata_taskfile tf; |
| 699 | u8 *cfis; | 727 | u8 *cfis; |
| @@ -703,6 +731,9 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, | |||
| 703 | 731 | ||
| 704 | DPRINTK("in xx_softreset\n"); | 732 | DPRINTK("in xx_softreset\n"); |
| 705 | 733 | ||
| 734 | if (pmp != SATA_PMP_CTRL_PORT) | ||
| 735 | goto issue_srst; | ||
| 736 | |||
| 706 | try_offline_again: | 737 | try_offline_again: |
| 707 | /* | 738 | /* |
| 708 | * Force host controller to go off-line, aborting current operations | 739 | * Force host controller to go off-line, aborting current operations |
| @@ -746,6 +777,7 @@ try_offline_again: | |||
| 746 | 777 | ||
| 747 | temp = ioread32(hcr_base + HCONTROL); | 778 | temp = ioread32(hcr_base + HCONTROL); |
| 748 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); | 779 | temp |= (HCONTROL_ONLINE_PHY_RST | HCONTROL_SNOOP_ENABLE); |
| 780 | temp |= HCONTROL_PMP_ATTACHED; | ||
| 749 | iowrite32(temp, hcr_base + HCONTROL); | 781 | iowrite32(temp, hcr_base + HCONTROL); |
| 750 | 782 | ||
| 751 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); | 783 | temp = ata_wait_register(hcr_base + HSTATUS, ONLINE, 0, 1, 500); |
| @@ -771,7 +803,8 @@ try_offline_again: | |||
| 771 | ata_port_printk(ap, KERN_WARNING, | 803 | ata_port_printk(ap, KERN_WARNING, |
| 772 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", | 804 | "No Device OR PHYRDY change,Hstatus = 0x%x\n", |
| 773 | ioread32(hcr_base + HSTATUS)); | 805 | ioread32(hcr_base + HSTATUS)); |
| 774 | goto err; | 806 | *class = ATA_DEV_NONE; |
| 807 | goto out; | ||
| 775 | } | 808 | } |
| 776 | 809 | ||
| 777 | /* | 810 | /* |
| @@ -783,7 +816,8 @@ try_offline_again: | |||
| 783 | 816 | ||
| 784 | if ((temp & 0xFF) != 0x18) { | 817 | if ((temp & 0xFF) != 0x18) { |
| 785 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); | 818 | ata_port_printk(ap, KERN_WARNING, "No Signature Update\n"); |
| 786 | goto err; | 819 | *class = ATA_DEV_NONE; |
| 820 | goto out; | ||
| 787 | } else { | 821 | } else { |
| 788 | ata_port_printk(ap, KERN_INFO, | 822 | ata_port_printk(ap, KERN_INFO, |
| 789 | "Signature Update detected @ %d msecs\n", | 823 | "Signature Update detected @ %d msecs\n", |
| @@ -798,6 +832,7 @@ try_offline_again: | |||
| 798 | * reached here, we can send a command to the target device | 832 | * reached here, we can send a command to the target device |
| 799 | */ | 833 | */ |
| 800 | 834 | ||
| 835 | issue_srst: | ||
| 801 | DPRINTK("Sending SRST/device reset\n"); | 836 | DPRINTK("Sending SRST/device reset\n"); |
| 802 | 837 | ||
| 803 | ata_tf_init(link->device, &tf); | 838 | ata_tf_init(link->device, &tf); |
| @@ -808,7 +843,7 @@ try_offline_again: | |||
| 808 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | 843 | SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); |
| 809 | 844 | ||
| 810 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ | 845 | tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ |
| 811 | ata_tf_to_fis(&tf, 0, 0, cfis); | 846 | ata_tf_to_fis(&tf, pmp, 0, cfis); |
| 812 | 847 | ||
| 813 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", | 848 | DPRINTK("Dumping cfis : 0x%x, 0x%x, 0x%x, 0x%x\n", |
| 814 | cfis[0], cfis[1], cfis[2], cfis[3]); | 849 | cfis[0], cfis[1], cfis[2], cfis[3]); |
| @@ -854,8 +889,10 @@ try_offline_again: | |||
| 854 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); | 889 | sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); |
| 855 | 890 | ||
| 856 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ | 891 | tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ |
| 857 | ata_tf_to_fis(&tf, 0, 0, cfis); | 892 | ata_tf_to_fis(&tf, pmp, 0, cfis); |
| 858 | 893 | ||
| 894 | if (pmp != SATA_PMP_CTRL_PORT) | ||
| 895 | iowrite32(pmp, CQPMP + hcr_base); | ||
| 859 | iowrite32(1, CQ + hcr_base); | 896 | iowrite32(1, CQ + hcr_base); |
| 860 | msleep(150); /* ?? */ | 897 | msleep(150); /* ?? */ |
| 861 | 898 | ||
| @@ -886,12 +923,21 @@ try_offline_again: | |||
| 886 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); | 923 | VPRINTK("cereg = 0x%x\n", ioread32(hcr_base + CE)); |
| 887 | } | 924 | } |
| 888 | 925 | ||
| 926 | out: | ||
| 889 | return 0; | 927 | return 0; |
| 890 | 928 | ||
| 891 | err: | 929 | err: |
| 892 | return -EIO; | 930 | return -EIO; |
| 893 | } | 931 | } |
| 894 | 932 | ||
| 933 | static void sata_fsl_error_handler(struct ata_port *ap) | ||
| 934 | { | ||
| 935 | |||
| 936 | DPRINTK("in xx_error_handler\n"); | ||
| 937 | sata_pmp_error_handler(ap); | ||
| 938 | |||
| 939 | } | ||
| 940 | |||
| 895 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | 941 | static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) |
| 896 | { | 942 | { |
| 897 | if (qc->flags & ATA_QCFLAG_FAILED) | 943 | if (qc->flags & ATA_QCFLAG_FAILED) |
| @@ -905,18 +951,21 @@ static void sata_fsl_post_internal_cmd(struct ata_queued_cmd *qc) | |||
| 905 | 951 | ||
| 906 | static void sata_fsl_error_intr(struct ata_port *ap) | 952 | static void sata_fsl_error_intr(struct ata_port *ap) |
| 907 | { | 953 | { |
| 908 | struct ata_link *link = &ap->link; | ||
| 909 | struct ata_eh_info *ehi = &link->eh_info; | ||
| 910 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 954 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 911 | void __iomem *hcr_base = host_priv->hcr_base; | 955 | void __iomem *hcr_base = host_priv->hcr_base; |
| 912 | u32 hstatus, dereg, cereg = 0, SError = 0; | 956 | u32 hstatus, dereg=0, cereg = 0, SError = 0; |
| 913 | unsigned int err_mask = 0, action = 0; | 957 | unsigned int err_mask = 0, action = 0; |
| 914 | struct ata_queued_cmd *qc; | 958 | int freeze = 0, abort=0; |
| 915 | int freeze = 0; | 959 | struct ata_link *link = NULL; |
| 960 | struct ata_queued_cmd *qc = NULL; | ||
| 961 | struct ata_eh_info *ehi; | ||
| 916 | 962 | ||
| 917 | hstatus = ioread32(hcr_base + HSTATUS); | 963 | hstatus = ioread32(hcr_base + HSTATUS); |
| 918 | cereg = ioread32(hcr_base + CE); | 964 | cereg = ioread32(hcr_base + CE); |
| 919 | 965 | ||
| 966 | /* first, analyze and record host port events */ | ||
| 967 | link = &ap->link; | ||
| 968 | ehi = &link->eh_info; | ||
| 920 | ata_ehi_clear_desc(ehi); | 969 | ata_ehi_clear_desc(ehi); |
| 921 | 970 | ||
| 922 | /* | 971 | /* |
| @@ -926,42 +975,28 @@ static void sata_fsl_error_intr(struct ata_port *ap) | |||
| 926 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); | 975 | sata_fsl_scr_read(ap, SCR_ERROR, &SError); |
| 927 | if (unlikely(SError & 0xFFFF0000)) { | 976 | if (unlikely(SError & 0xFFFF0000)) { |
| 928 | sata_fsl_scr_write(ap, SCR_ERROR, SError); | 977 | sata_fsl_scr_write(ap, SCR_ERROR, SError); |
| 929 | err_mask |= AC_ERR_ATA_BUS; | ||
| 930 | } | 978 | } |
| 931 | 979 | ||
| 932 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", | 980 | DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n", |
| 933 | hstatus, cereg, ioread32(hcr_base + DE), SError); | 981 | hstatus, cereg, ioread32(hcr_base + DE), SError); |
| 934 | 982 | ||
| 935 | /* handle single device errors */ | 983 | /* handle fatal errors */ |
| 936 | if (cereg) { | 984 | if (hstatus & FATAL_ERROR_DECODE) { |
| 937 | /* | 985 | ehi->err_mask |= AC_ERR_ATA_BUS; |
| 938 | * clear the command error, also clears queue to the device | 986 | ehi->action |= ATA_EH_SOFTRESET; |
| 939 | * in error, and we can (re)issue commands to this device. | ||
| 940 | * When a device is in error all commands queued into the | ||
| 941 | * host controller and at the device are considered aborted | ||
| 942 | * and the queue for that device is stopped. Now, after | ||
| 943 | * clearing the device error, we can issue commands to the | ||
| 944 | * device to interrogate it to find the source of the error. | ||
| 945 | */ | ||
| 946 | dereg = ioread32(hcr_base + DE); | ||
| 947 | iowrite32(dereg, hcr_base + DE); | ||
| 948 | iowrite32(cereg, hcr_base + CE); | ||
| 949 | 987 | ||
| 950 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
| 951 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
| 952 | /* | 988 | /* |
| 953 | * We should consider this as non fatal error, and TF must | 989 | * Ignore serror in case of fatal errors as we always want |
| 954 | * be updated as done below. | 990 | * to do a soft-reset of the FSL SATA controller. Analyzing |
| 991 | * serror may cause libata to schedule a hard-reset action, | ||
| 992 | * and hard-reset currently does not do controller | ||
| 993 | * offline/online, causing command timeouts and leads to an | ||
| 994 | * un-recoverable state, hence make libATA ignore | ||
| 995 | * autopsy in case of fatal errors. | ||
| 955 | */ | 996 | */ |
| 956 | 997 | ||
| 957 | err_mask |= AC_ERR_DEV; | 998 | ehi->flags |= ATA_EHI_NO_AUTOPSY; |
| 958 | } | ||
| 959 | 999 | ||
| 960 | /* handle fatal errors */ | ||
| 961 | if (hstatus & FATAL_ERROR_DECODE) { | ||
| 962 | err_mask |= AC_ERR_ATA_BUS; | ||
| 963 | action |= ATA_EH_RESET; | ||
| 964 | /* how will fatal error interrupts be completed ?? */ | ||
| 965 | freeze = 1; | 1000 | freeze = 1; |
| 966 | } | 1001 | } |
| 967 | 1002 | ||
| @@ -971,30 +1006,83 @@ static void sata_fsl_error_intr(struct ata_port *ap) | |||
| 971 | 1006 | ||
| 972 | /* Setup a soft-reset EH action */ | 1007 | /* Setup a soft-reset EH action */ |
| 973 | ata_ehi_hotplugged(ehi); | 1008 | ata_ehi_hotplugged(ehi); |
| 1009 | ata_ehi_push_desc(ehi, "%s", "PHY RDY changed"); | ||
| 974 | freeze = 1; | 1010 | freeze = 1; |
| 975 | } | 1011 | } |
| 976 | 1012 | ||
| 977 | /* record error info */ | 1013 | /* handle single device errors */ |
| 978 | qc = ata_qc_from_tag(ap, link->active_tag); | 1014 | if (cereg) { |
| 1015 | /* | ||
| 1016 | * clear the command error, also clears queue to the device | ||
| 1017 | * in error, and we can (re)issue commands to this device. | ||
| 1018 | * When a device is in error all commands queued into the | ||
| 1019 | * host controller and at the device are considered aborted | ||
| 1020 | * and the queue for that device is stopped. Now, after | ||
| 1021 | * clearing the device error, we can issue commands to the | ||
| 1022 | * device to interrogate it to find the source of the error. | ||
| 1023 | */ | ||
| 1024 | abort = 1; | ||
| 1025 | |||
| 1026 | DPRINTK("single device error, CE=0x%x, DE=0x%x\n", | ||
| 1027 | ioread32(hcr_base + CE), ioread32(hcr_base + DE)); | ||
| 979 | 1028 | ||
| 980 | if (qc) | 1029 | /* find out the offending link and qc */ |
| 1030 | if (ap->nr_pmp_links) { | ||
| 1031 | dereg = ioread32(hcr_base + DE); | ||
| 1032 | iowrite32(dereg, hcr_base + DE); | ||
| 1033 | iowrite32(cereg, hcr_base + CE); | ||
| 1034 | |||
| 1035 | if (dereg < ap->nr_pmp_links) { | ||
| 1036 | link = &ap->pmp_link[dereg]; | ||
| 1037 | ehi = &link->eh_info; | ||
| 1038 | qc = ata_qc_from_tag(ap, link->active_tag); | ||
| 1039 | /* | ||
| 1040 | * We should consider this as non fatal error, | ||
| 1041 | * and TF must be updated as done below. | ||
| 1042 | */ | ||
| 1043 | |||
| 1044 | err_mask |= AC_ERR_DEV; | ||
| 1045 | |||
| 1046 | } else { | ||
| 1047 | err_mask |= AC_ERR_HSM; | ||
| 1048 | action |= ATA_EH_HARDRESET; | ||
| 1049 | freeze = 1; | ||
| 1050 | } | ||
| 1051 | } else { | ||
| 1052 | dereg = ioread32(hcr_base + DE); | ||
| 1053 | iowrite32(dereg, hcr_base + DE); | ||
| 1054 | iowrite32(cereg, hcr_base + CE); | ||
| 1055 | |||
| 1056 | qc = ata_qc_from_tag(ap, link->active_tag); | ||
| 1057 | /* | ||
| 1058 | * We should consider this as non fatal error, | ||
| 1059 | * and TF must be updated as done below. | ||
| 1060 | */ | ||
| 1061 | err_mask |= AC_ERR_DEV; | ||
| 1062 | } | ||
| 1063 | } | ||
| 1064 | |||
| 1065 | /* record error info */ | ||
| 1066 | if (qc) { | ||
| 981 | qc->err_mask |= err_mask; | 1067 | qc->err_mask |= err_mask; |
| 982 | else | 1068 | } else |
| 983 | ehi->err_mask |= err_mask; | 1069 | ehi->err_mask |= err_mask; |
| 984 | 1070 | ||
| 985 | ehi->action |= action; | 1071 | ehi->action |= action; |
| 986 | ehi->serror |= SError; | ||
| 987 | 1072 | ||
| 988 | /* freeze or abort */ | 1073 | /* freeze or abort */ |
| 989 | if (freeze) | 1074 | if (freeze) |
| 990 | ata_port_freeze(ap); | 1075 | ata_port_freeze(ap); |
| 991 | else | 1076 | else if (abort) { |
| 992 | ata_port_abort(ap); | 1077 | if (qc) |
| 1078 | ata_link_abort(qc->dev->link); | ||
| 1079 | else | ||
| 1080 | ata_port_abort(ap); | ||
| 1081 | } | ||
| 993 | } | 1082 | } |
| 994 | 1083 | ||
| 995 | static void sata_fsl_host_intr(struct ata_port *ap) | 1084 | static void sata_fsl_host_intr(struct ata_port *ap) |
| 996 | { | 1085 | { |
| 997 | struct ata_link *link = &ap->link; | ||
| 998 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; | 1086 | struct sata_fsl_host_priv *host_priv = ap->host->private_data; |
| 999 | void __iomem *hcr_base = host_priv->hcr_base; | 1087 | void __iomem *hcr_base = host_priv->hcr_base; |
| 1000 | u32 hstatus, qc_active = 0; | 1088 | u32 hstatus, qc_active = 0; |
| @@ -1017,10 +1105,19 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1017 | return; | 1105 | return; |
| 1018 | } | 1106 | } |
| 1019 | 1107 | ||
| 1020 | if (link->sactive) { /* only true for NCQ commands */ | 1108 | /* Read command completed register */ |
| 1109 | qc_active = ioread32(hcr_base + CC); | ||
| 1110 | |||
| 1111 | VPRINTK("Status of all queues :\n"); | ||
| 1112 | VPRINTK("qc_active/CC = 0x%x, CA = 0x%x, CE=0x%x,CQ=0x%x,apqa=0x%x\n", | ||
| 1113 | qc_active, | ||
| 1114 | ioread32(hcr_base + CA), | ||
| 1115 | ioread32(hcr_base + CE), | ||
| 1116 | ioread32(hcr_base + CQ), | ||
| 1117 | ap->qc_active); | ||
| 1118 | |||
| 1119 | if (qc_active & ap->qc_active) { | ||
| 1021 | int i; | 1120 | int i; |
| 1022 | /* Read command completed register */ | ||
| 1023 | qc_active = ioread32(hcr_base + CC); | ||
| 1024 | /* clear CC bit, this will also complete the interrupt */ | 1121 | /* clear CC bit, this will also complete the interrupt */ |
| 1025 | iowrite32(qc_active, hcr_base + CC); | 1122 | iowrite32(qc_active, hcr_base + CC); |
| 1026 | 1123 | ||
| @@ -1032,8 +1129,9 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1032 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { | 1129 | for (i = 0; i < SATA_FSL_QUEUE_DEPTH; i++) { |
| 1033 | if (qc_active & (1 << i)) { | 1130 | if (qc_active & (1 << i)) { |
| 1034 | qc = ata_qc_from_tag(ap, i); | 1131 | qc = ata_qc_from_tag(ap, i); |
| 1035 | if (qc) | 1132 | if (qc) { |
| 1036 | ata_qc_complete(qc); | 1133 | ata_qc_complete(qc); |
| 1134 | } | ||
| 1037 | DPRINTK | 1135 | DPRINTK |
| 1038 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", | 1136 | ("completing ncq cmd,tag=%d,CC=0x%x,CA=0x%x\n", |
| 1039 | i, ioread32(hcr_base + CC), | 1137 | i, ioread32(hcr_base + CC), |
| @@ -1042,19 +1140,21 @@ static void sata_fsl_host_intr(struct ata_port *ap) | |||
| 1042 | } | 1140 | } |
| 1043 | return; | 1141 | return; |
| 1044 | 1142 | ||
| 1045 | } else if (ap->qc_active) { | 1143 | } else if ((ap->qc_active & (1 << ATA_TAG_INTERNAL))) { |
| 1046 | iowrite32(1, hcr_base + CC); | 1144 | iowrite32(1, hcr_base + CC); |
| 1047 | qc = ata_qc_from_tag(ap, link->active_tag); | 1145 | qc = ata_qc_from_tag(ap, ATA_TAG_INTERNAL); |
| 1048 | 1146 | ||
| 1049 | DPRINTK("completing non-ncq cmd, tag=%d,CC=0x%x\n", | 1147 | DPRINTK("completing non-ncq cmd, CC=0x%x\n", |
| 1050 | link->active_tag, ioread32(hcr_base + CC)); | 1148 | ioread32(hcr_base + CC)); |
| 1051 | 1149 | ||
| 1052 | if (qc) | 1150 | if (qc) { |
| 1053 | ata_qc_complete(qc); | 1151 | ata_qc_complete(qc); |
| 1152 | } | ||
| 1054 | } else { | 1153 | } else { |
| 1055 | /* Spurious Interrupt!! */ | 1154 | /* Spurious Interrupt!! */ |
| 1056 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", | 1155 | DPRINTK("spurious interrupt!!, CC = 0x%x\n", |
| 1057 | ioread32(hcr_base + CC)); | 1156 | ioread32(hcr_base + CC)); |
| 1157 | iowrite32(qc_active, hcr_base + CC); | ||
| 1058 | return; | 1158 | return; |
| 1059 | } | 1159 | } |
| 1060 | } | 1160 | } |
| @@ -1130,9 +1230,6 @@ static int sata_fsl_init_controller(struct ata_host *host) | |||
| 1130 | iowrite32(0x00000FFFF, hcr_base + CE); | 1230 | iowrite32(0x00000FFFF, hcr_base + CE); |
| 1131 | iowrite32(0x00000FFFF, hcr_base + DE); | 1231 | iowrite32(0x00000FFFF, hcr_base + DE); |
| 1132 | 1232 | ||
| 1133 | /* initially assuming no Port multiplier, set CQPMP to 0 */ | ||
| 1134 | iowrite32(0x0, hcr_base + CQPMP); | ||
| 1135 | |||
| 1136 | /* | 1233 | /* |
| 1137 | * host controller will be brought on-line, during xx_port_start() | 1234 | * host controller will be brought on-line, during xx_port_start() |
| 1138 | * callback, that should also initiate the OOB, COMINIT sequence | 1235 | * callback, that should also initiate the OOB, COMINIT sequence |
| @@ -1154,8 +1251,8 @@ static struct scsi_host_template sata_fsl_sht = { | |||
| 1154 | .dma_boundary = ATA_DMA_BOUNDARY, | 1251 | .dma_boundary = ATA_DMA_BOUNDARY, |
| 1155 | }; | 1252 | }; |
| 1156 | 1253 | ||
| 1157 | static const struct ata_port_operations sata_fsl_ops = { | 1254 | static struct ata_port_operations sata_fsl_ops = { |
| 1158 | .inherits = &sata_port_ops, | 1255 | .inherits = &sata_pmp_port_ops, |
| 1159 | 1256 | ||
| 1160 | .qc_prep = sata_fsl_qc_prep, | 1257 | .qc_prep = sata_fsl_qc_prep, |
| 1161 | .qc_issue = sata_fsl_qc_issue, | 1258 | .qc_issue = sata_fsl_qc_issue, |
| @@ -1168,10 +1265,15 @@ static const struct ata_port_operations sata_fsl_ops = { | |||
| 1168 | .thaw = sata_fsl_thaw, | 1265 | .thaw = sata_fsl_thaw, |
| 1169 | .prereset = sata_fsl_prereset, | 1266 | .prereset = sata_fsl_prereset, |
| 1170 | .softreset = sata_fsl_softreset, | 1267 | .softreset = sata_fsl_softreset, |
| 1268 | .pmp_softreset = sata_fsl_softreset, | ||
| 1269 | .error_handler = sata_fsl_error_handler, | ||
| 1171 | .post_internal_cmd = sata_fsl_post_internal_cmd, | 1270 | .post_internal_cmd = sata_fsl_post_internal_cmd, |
| 1172 | 1271 | ||
| 1173 | .port_start = sata_fsl_port_start, | 1272 | .port_start = sata_fsl_port_start, |
| 1174 | .port_stop = sata_fsl_port_stop, | 1273 | .port_stop = sata_fsl_port_stop, |
| 1274 | |||
| 1275 | .pmp_attach = sata_fsl_pmp_attach, | ||
| 1276 | .pmp_detach = sata_fsl_pmp_detach, | ||
| 1175 | }; | 1277 | }; |
| 1176 | 1278 | ||
| 1177 | static const struct ata_port_info sata_fsl_port_info[] = { | 1279 | static const struct ata_port_info sata_fsl_port_info[] = { |
diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c index fb81f0c7a8c2..60391e9a84db 100644 --- a/drivers/ata/sata_mv.c +++ b/drivers/ata/sata_mv.c | |||
| @@ -72,7 +72,7 @@ | |||
| 72 | #include <linux/libata.h> | 72 | #include <linux/libata.h> |
| 73 | 73 | ||
| 74 | #define DRV_NAME "sata_mv" | 74 | #define DRV_NAME "sata_mv" |
| 75 | #define DRV_VERSION "1.21" | 75 | #define DRV_VERSION "1.24" |
| 76 | 76 | ||
| 77 | enum { | 77 | enum { |
| 78 | /* BAR's are enumerated in terms of pci_resource_start() terms */ | 78 | /* BAR's are enumerated in terms of pci_resource_start() terms */ |
| @@ -122,8 +122,6 @@ enum { | |||
| 122 | /* Host Flags */ | 122 | /* Host Flags */ |
| 123 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ | 123 | MV_FLAG_DUAL_HC = (1 << 30), /* two SATA Host Controllers */ |
| 124 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ | 124 | MV_FLAG_IRQ_COALESCE = (1 << 29), /* IRQ coalescing capability */ |
| 125 | /* SoC integrated controllers, no PCI interface */ | ||
| 126 | MV_FLAG_SOC = (1 << 28), | ||
| 127 | 125 | ||
| 128 | MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | | 126 | MV_COMMON_FLAGS = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY | |
| 129 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | | 127 | ATA_FLAG_MMIO | ATA_FLAG_NO_ATAPI | |
| @@ -226,6 +224,11 @@ enum { | |||
| 226 | 224 | ||
| 227 | PHY_MODE3 = 0x310, | 225 | PHY_MODE3 = 0x310, |
| 228 | PHY_MODE4 = 0x314, | 226 | PHY_MODE4 = 0x314, |
| 227 | PHY_MODE4_CFG_MASK = 0x00000003, /* phy internal config field */ | ||
| 228 | PHY_MODE4_CFG_VALUE = 0x00000001, /* phy internal config field */ | ||
| 229 | PHY_MODE4_RSVD_ZEROS = 0x5de3fffa, /* Gen2e always write zeros */ | ||
| 230 | PHY_MODE4_RSVD_ONES = 0x00000005, /* Gen2e always write ones */ | ||
| 231 | |||
| 229 | PHY_MODE2 = 0x330, | 232 | PHY_MODE2 = 0x330, |
| 230 | SATA_IFCTL_OFS = 0x344, | 233 | SATA_IFCTL_OFS = 0x344, |
| 231 | SATA_TESTCTL_OFS = 0x348, | 234 | SATA_TESTCTL_OFS = 0x348, |
| @@ -356,12 +359,12 @@ enum { | |||
| 356 | MV_HP_ERRATA_50XXB2 = (1 << 2), | 359 | MV_HP_ERRATA_50XXB2 = (1 << 2), |
| 357 | MV_HP_ERRATA_60X1B2 = (1 << 3), | 360 | MV_HP_ERRATA_60X1B2 = (1 << 3), |
| 358 | MV_HP_ERRATA_60X1C0 = (1 << 4), | 361 | MV_HP_ERRATA_60X1C0 = (1 << 4), |
| 359 | MV_HP_ERRATA_XX42A0 = (1 << 5), | ||
| 360 | MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */ | 362 | MV_HP_GEN_I = (1 << 6), /* Generation I: 50xx */ |
| 361 | MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */ | 363 | MV_HP_GEN_II = (1 << 7), /* Generation II: 60xx */ |
| 362 | MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */ | 364 | MV_HP_GEN_IIE = (1 << 8), /* Generation IIE: 6042/7042 */ |
| 363 | MV_HP_PCIE = (1 << 9), /* PCIe bus/regs: 7042 */ | 365 | MV_HP_PCIE = (1 << 9), /* PCIe bus/regs: 7042 */ |
| 364 | MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */ | 366 | MV_HP_CUT_THROUGH = (1 << 10), /* can use EDMA cut-through */ |
| 367 | MV_HP_FLAG_SOC = (1 << 11), /* SystemOnChip, no PCI */ | ||
| 365 | 368 | ||
| 366 | /* Port private flags (pp_flags) */ | 369 | /* Port private flags (pp_flags) */ |
| 367 | MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */ | 370 | MV_PP_FLAG_EDMA_EN = (1 << 0), /* is EDMA engine enabled? */ |
| @@ -374,7 +377,7 @@ enum { | |||
| 374 | #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II) | 377 | #define IS_GEN_II(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_II) |
| 375 | #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE) | 378 | #define IS_GEN_IIE(hpriv) ((hpriv)->hp_flags & MV_HP_GEN_IIE) |
| 376 | #define IS_PCIE(hpriv) ((hpriv)->hp_flags & MV_HP_PCIE) | 379 | #define IS_PCIE(hpriv) ((hpriv)->hp_flags & MV_HP_PCIE) |
| 377 | #define HAS_PCI(host) (!((host)->ports[0]->flags & MV_FLAG_SOC)) | 380 | #define IS_SOC(hpriv) ((hpriv)->hp_flags & MV_HP_FLAG_SOC) |
| 378 | 381 | ||
| 379 | #define WINDOW_CTRL(i) (0x20030 + ((i) << 4)) | 382 | #define WINDOW_CTRL(i) (0x20030 + ((i) << 4)) |
| 380 | #define WINDOW_BASE(i) (0x20034 + ((i) << 4)) | 383 | #define WINDOW_BASE(i) (0x20034 + ((i) << 4)) |
| @@ -652,7 +655,7 @@ static const struct ata_port_info mv_port_info[] = { | |||
| 652 | .port_ops = &mv_iie_ops, | 655 | .port_ops = &mv_iie_ops, |
| 653 | }, | 656 | }, |
| 654 | { /* chip_soc */ | 657 | { /* chip_soc */ |
| 655 | .flags = MV_GENIIE_FLAGS | MV_FLAG_SOC, | 658 | .flags = MV_GENIIE_FLAGS, |
| 656 | .pio_mask = 0x1f, /* pio0-4 */ | 659 | .pio_mask = 0x1f, /* pio0-4 */ |
| 657 | .udma_mask = ATA_UDMA6, | 660 | .udma_mask = ATA_UDMA6, |
| 658 | .port_ops = &mv_iie_ops, | 661 | .port_ops = &mv_iie_ops, |
| @@ -812,12 +815,7 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio, | |||
| 812 | writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); | 815 | writel((pp->crqb_dma >> 16) >> 16, port_mmio + EDMA_REQ_Q_BASE_HI_OFS); |
| 813 | writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, | 816 | writelfl((pp->crqb_dma & EDMA_REQ_Q_BASE_LO_MASK) | index, |
| 814 | port_mmio + EDMA_REQ_Q_IN_PTR_OFS); | 817 | port_mmio + EDMA_REQ_Q_IN_PTR_OFS); |
| 815 | 818 | writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | |
| 816 | if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0) | ||
| 817 | writelfl((pp->crqb_dma & 0xffffffff) | index, | ||
| 818 | port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | ||
| 819 | else | ||
| 820 | writelfl(index, port_mmio + EDMA_REQ_Q_OUT_PTR_OFS); | ||
| 821 | 819 | ||
| 822 | /* | 820 | /* |
| 823 | * initialize response queue | 821 | * initialize response queue |
| @@ -827,13 +825,7 @@ static void mv_set_edma_ptrs(void __iomem *port_mmio, | |||
| 827 | 825 | ||
| 828 | WARN_ON(pp->crpb_dma & 0xff); | 826 | WARN_ON(pp->crpb_dma & 0xff); |
| 829 | writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); | 827 | writel((pp->crpb_dma >> 16) >> 16, port_mmio + EDMA_RSP_Q_BASE_HI_OFS); |
| 830 | 828 | writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | |
| 831 | if (hpriv->hp_flags & MV_HP_ERRATA_XX42A0) | ||
| 832 | writelfl((pp->crpb_dma & 0xffffffff) | index, | ||
| 833 | port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | ||
| 834 | else | ||
| 835 | writelfl(index, port_mmio + EDMA_RSP_Q_IN_PTR_OFS); | ||
| 836 | |||
| 837 | writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, | 829 | writelfl((pp->crpb_dma & EDMA_RSP_Q_BASE_LO_MASK) | index, |
| 838 | port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); | 830 | port_mmio + EDMA_RSP_Q_OUT_PTR_OFS); |
| 839 | } | 831 | } |
| @@ -1254,7 +1246,7 @@ static void mv_edma_cfg(struct ata_port *ap, int want_ncq) | |||
| 1254 | 1246 | ||
| 1255 | cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ | 1247 | cfg |= (1 << 23); /* do not mask PM field in rx'd FIS */ |
| 1256 | cfg |= (1 << 22); /* enab 4-entry host queue cache */ | 1248 | cfg |= (1 << 22); /* enab 4-entry host queue cache */ |
| 1257 | if (HAS_PCI(ap->host)) | 1249 | if (!IS_SOC(hpriv)) |
| 1258 | cfg |= (1 << 18); /* enab early completion */ | 1250 | cfg |= (1 << 18); /* enab early completion */ |
| 1259 | if (hpriv->hp_flags & MV_HP_CUT_THROUGH) | 1251 | if (hpriv->hp_flags & MV_HP_CUT_THROUGH) |
| 1260 | cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ | 1252 | cfg |= (1 << 17); /* enab cut-thru (dis stor&forwrd) */ |
| @@ -2225,7 +2217,7 @@ static irqreturn_t mv_interrupt(int irq, void *dev_instance) | |||
| 2225 | * a bogus register value which can indicate HW removal or PCI fault. | 2217 | * a bogus register value which can indicate HW removal or PCI fault. |
| 2226 | */ | 2218 | */ |
| 2227 | if (pending_irqs && main_irq_cause != 0xffffffffU) { | 2219 | if (pending_irqs && main_irq_cause != 0xffffffffU) { |
| 2228 | if (unlikely((pending_irqs & PCI_ERR) && HAS_PCI(host))) | 2220 | if (unlikely((pending_irqs & PCI_ERR) && !IS_SOC(hpriv))) |
| 2229 | handled = mv_pci_error(host, hpriv->base); | 2221 | handled = mv_pci_error(host, hpriv->base); |
| 2230 | else | 2222 | else |
| 2231 | handled = mv_host_intr(host, pending_irqs); | 2223 | handled = mv_host_intr(host, pending_irqs); |
| @@ -2547,7 +2539,7 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2547 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); | 2539 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); |
| 2548 | int fix_phy_mode4 = | 2540 | int fix_phy_mode4 = |
| 2549 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); | 2541 | hp_flags & (MV_HP_ERRATA_60X1B2 | MV_HP_ERRATA_60X1C0); |
| 2550 | u32 m2, tmp; | 2542 | u32 m2, m3; |
| 2551 | 2543 | ||
| 2552 | if (fix_phy_mode2) { | 2544 | if (fix_phy_mode2) { |
| 2553 | m2 = readl(port_mmio + PHY_MODE2); | 2545 | m2 = readl(port_mmio + PHY_MODE2); |
| @@ -2564,28 +2556,36 @@ static void mv6_phy_errata(struct mv_host_priv *hpriv, void __iomem *mmio, | |||
| 2564 | udelay(200); | 2556 | udelay(200); |
| 2565 | } | 2557 | } |
| 2566 | 2558 | ||
| 2567 | /* who knows what this magic does */ | 2559 | /* |
| 2568 | tmp = readl(port_mmio + PHY_MODE3); | 2560 | * Gen-II/IIe PHY_MODE3 errata RM#2: |
| 2569 | tmp &= ~0x7F800000; | 2561 | * Achieves better receiver noise performance than the h/w default: |
| 2570 | tmp |= 0x2A800000; | 2562 | */ |
| 2571 | writel(tmp, port_mmio + PHY_MODE3); | 2563 | m3 = readl(port_mmio + PHY_MODE3); |
| 2572 | 2564 | m3 = (m3 & 0x1f) | (0x5555601 << 5); | |
| 2573 | if (fix_phy_mode4) { | ||
| 2574 | u32 m4; | ||
| 2575 | |||
| 2576 | m4 = readl(port_mmio + PHY_MODE4); | ||
| 2577 | |||
| 2578 | if (hp_flags & MV_HP_ERRATA_60X1B2) | ||
| 2579 | tmp = readl(port_mmio + PHY_MODE3); | ||
| 2580 | 2565 | ||
| 2581 | /* workaround for errata FEr SATA#10 (part 1) */ | 2566 | /* Guideline 88F5182 (GL# SATA-S11) */ |
| 2582 | m4 = (m4 & ~(1 << 1)) | (1 << 0); | 2567 | if (IS_SOC(hpriv)) |
| 2568 | m3 &= ~0x1c; | ||
| 2583 | 2569 | ||
| 2570 | if (fix_phy_mode4) { | ||
| 2571 | u32 m4 = readl(port_mmio + PHY_MODE4); | ||
| 2572 | /* | ||
| 2573 | * Enforce reserved-bit restrictions on GenIIe devices only. | ||
| 2574 | * For earlier chipsets, force only the internal config field | ||
| 2575 | * (workaround for errata FEr SATA#10 part 1). | ||
| 2576 | */ | ||
| 2577 | if (IS_GEN_IIE(hpriv)) | ||
| 2578 | m4 = (m4 & ~PHY_MODE4_RSVD_ZEROS) | PHY_MODE4_RSVD_ONES; | ||
| 2579 | else | ||
| 2580 | m4 = (m4 & ~PHY_MODE4_CFG_MASK) | PHY_MODE4_CFG_VALUE; | ||
| 2584 | writel(m4, port_mmio + PHY_MODE4); | 2581 | writel(m4, port_mmio + PHY_MODE4); |
| 2585 | |||
| 2586 | if (hp_flags & MV_HP_ERRATA_60X1B2) | ||
| 2587 | writel(tmp, port_mmio + PHY_MODE3); | ||
| 2588 | } | 2582 | } |
| 2583 | /* | ||
| 2584 | * Workaround for 60x1-B2 errata SATA#13: | ||
| 2585 | * Any write to PHY_MODE4 (above) may corrupt PHY_MODE3, | ||
| 2586 | * so we must always rewrite PHY_MODE3 after PHY_MODE4. | ||
| 2587 | */ | ||
| 2588 | writel(m3, port_mmio + PHY_MODE3); | ||
| 2589 | 2589 | ||
| 2590 | /* Revert values of pre-emphasis and signal amps to the saved ones */ | 2590 | /* Revert values of pre-emphasis and signal amps to the saved ones */ |
| 2591 | m2 = readl(port_mmio + PHY_MODE2); | 2591 | m2 = readl(port_mmio + PHY_MODE2); |
| @@ -2876,7 +2876,7 @@ static unsigned int mv_in_pcix_mode(struct ata_host *host) | |||
| 2876 | void __iomem *mmio = hpriv->base; | 2876 | void __iomem *mmio = hpriv->base; |
| 2877 | u32 reg; | 2877 | u32 reg; |
| 2878 | 2878 | ||
| 2879 | if (!HAS_PCI(host) || !IS_PCIE(hpriv)) | 2879 | if (IS_SOC(hpriv) || !IS_PCIE(hpriv)) |
| 2880 | return 0; /* not PCI-X capable */ | 2880 | return 0; /* not PCI-X capable */ |
| 2881 | reg = readl(mmio + MV_PCI_MODE_OFS); | 2881 | reg = readl(mmio + MV_PCI_MODE_OFS); |
| 2882 | if ((reg & MV_PCI_MODE_MASK) == 0) | 2882 | if ((reg & MV_PCI_MODE_MASK) == 0) |
| @@ -3003,10 +3003,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
| 3003 | hp_flags |= MV_HP_CUT_THROUGH; | 3003 | hp_flags |= MV_HP_CUT_THROUGH; |
| 3004 | 3004 | ||
| 3005 | switch (pdev->revision) { | 3005 | switch (pdev->revision) { |
| 3006 | case 0x0: | 3006 | case 0x2: /* Rev.B0: the first/only public release */ |
| 3007 | hp_flags |= MV_HP_ERRATA_XX42A0; | ||
| 3008 | break; | ||
| 3009 | case 0x1: | ||
| 3010 | hp_flags |= MV_HP_ERRATA_60X1C0; | 3007 | hp_flags |= MV_HP_ERRATA_60X1C0; |
| 3011 | break; | 3008 | break; |
| 3012 | default: | 3009 | default: |
| @@ -3018,7 +3015,7 @@ static int mv_chip_id(struct ata_host *host, unsigned int board_idx) | |||
| 3018 | break; | 3015 | break; |
| 3019 | case chip_soc: | 3016 | case chip_soc: |
| 3020 | hpriv->ops = &mv_soc_ops; | 3017 | hpriv->ops = &mv_soc_ops; |
| 3021 | hp_flags |= MV_HP_ERRATA_60X1C0; | 3018 | hp_flags |= MV_HP_FLAG_SOC | MV_HP_ERRATA_60X1C0; |
| 3022 | break; | 3019 | break; |
| 3023 | 3020 | ||
| 3024 | default: | 3021 | default: |
| @@ -3062,12 +3059,12 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3062 | if (rc) | 3059 | if (rc) |
| 3063 | goto done; | 3060 | goto done; |
| 3064 | 3061 | ||
| 3065 | if (HAS_PCI(host)) { | 3062 | if (IS_SOC(hpriv)) { |
| 3066 | hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; | ||
| 3067 | hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; | ||
| 3068 | } else { | ||
| 3069 | hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; | 3063 | hpriv->main_irq_cause_addr = mmio + SOC_HC_MAIN_IRQ_CAUSE_OFS; |
| 3070 | hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; | 3064 | hpriv->main_irq_mask_addr = mmio + SOC_HC_MAIN_IRQ_MASK_OFS; |
| 3065 | } else { | ||
| 3066 | hpriv->main_irq_cause_addr = mmio + PCI_HC_MAIN_IRQ_CAUSE_OFS; | ||
| 3067 | hpriv->main_irq_mask_addr = mmio + PCI_HC_MAIN_IRQ_MASK_OFS; | ||
| 3071 | } | 3068 | } |
| 3072 | 3069 | ||
| 3073 | /* global interrupt mask: 0 == mask everything */ | 3070 | /* global interrupt mask: 0 == mask everything */ |
| @@ -3093,7 +3090,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3093 | mv_port_init(&ap->ioaddr, port_mmio); | 3090 | mv_port_init(&ap->ioaddr, port_mmio); |
| 3094 | 3091 | ||
| 3095 | #ifdef CONFIG_PCI | 3092 | #ifdef CONFIG_PCI |
| 3096 | if (HAS_PCI(host)) { | 3093 | if (!IS_SOC(hpriv)) { |
| 3097 | unsigned int offset = port_mmio - mmio; | 3094 | unsigned int offset = port_mmio - mmio; |
| 3098 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); | 3095 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, -1, "mmio"); |
| 3099 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); | 3096 | ata_port_pbar_desc(ap, MV_PRIMARY_BAR, offset, "port"); |
| @@ -3113,7 +3110,7 @@ static int mv_init_host(struct ata_host *host, unsigned int board_idx) | |||
| 3113 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); | 3110 | writelfl(0, hc_mmio + HC_IRQ_CAUSE_OFS); |
| 3114 | } | 3111 | } |
| 3115 | 3112 | ||
| 3116 | if (HAS_PCI(host)) { | 3113 | if (!IS_SOC(hpriv)) { |
| 3117 | /* Clear any currently outstanding host interrupt conditions */ | 3114 | /* Clear any currently outstanding host interrupt conditions */ |
| 3118 | writelfl(0, mmio + hpriv->irq_cause_ofs); | 3115 | writelfl(0, mmio + hpriv->irq_cause_ofs); |
| 3119 | 3116 | ||
diff --git a/drivers/base/core.c b/drivers/base/core.c index 72eccae4904b..422cfcad486d 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c | |||
| @@ -760,6 +760,21 @@ static void device_remove_class_symlinks(struct device *dev) | |||
| 760 | } | 760 | } |
| 761 | 761 | ||
| 762 | /** | 762 | /** |
| 763 | * dev_set_name - set a device name | ||
| 764 | * @dev: device | ||
| 765 | */ | ||
| 766 | int dev_set_name(struct device *dev, const char *fmt, ...) | ||
| 767 | { | ||
| 768 | va_list vargs; | ||
| 769 | |||
| 770 | va_start(vargs, fmt); | ||
| 771 | vsnprintf(dev->bus_id, sizeof(dev->bus_id), fmt, vargs); | ||
| 772 | va_end(vargs); | ||
| 773 | return 0; | ||
| 774 | } | ||
| 775 | EXPORT_SYMBOL_GPL(dev_set_name); | ||
| 776 | |||
| 777 | /** | ||
| 763 | * device_add - add device to device hierarchy. | 778 | * device_add - add device to device hierarchy. |
| 764 | * @dev: device. | 779 | * @dev: device. |
| 765 | * | 780 | * |
diff --git a/drivers/block/brd.c b/drivers/block/brd.c index 680cdfc00b90..24b97b0bef99 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c | |||
| @@ -397,6 +397,7 @@ module_param(max_part, int, 0); | |||
| 397 | MODULE_PARM_DESC(max_part, "Maximum number of partitions per RAM disk"); | 397 | MODULE_PARM_DESC(max_part, "Maximum number of partitions per RAM disk"); |
| 398 | MODULE_LICENSE("GPL"); | 398 | MODULE_LICENSE("GPL"); |
| 399 | MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR); | 399 | MODULE_ALIAS_BLOCKDEV_MAJOR(RAMDISK_MAJOR); |
| 400 | MODULE_ALIAS("rd"); | ||
| 400 | 401 | ||
| 401 | #ifndef MODULE | 402 | #ifndef MODULE |
| 402 | /* Legacy boot options - nonmodular */ | 403 | /* Legacy boot options - nonmodular */ |
diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index 84e064ffee52..dd7ea203f940 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c | |||
| @@ -260,6 +260,10 @@ static int virtblk_probe(struct virtio_device *vdev) | |||
| 260 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) | 260 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_BARRIER)) |
| 261 | blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL); | 261 | blk_queue_ordered(vblk->disk->queue, QUEUE_ORDERED_TAG, NULL); |
| 262 | 262 | ||
| 263 | /* If disk is read-only in the host, the guest should obey */ | ||
| 264 | if (virtio_has_feature(vdev, VIRTIO_BLK_F_RO)) | ||
| 265 | set_disk_ro(vblk->disk, 1); | ||
| 266 | |||
| 263 | /* Host must always specify the capacity. */ | 267 | /* Host must always specify the capacity. */ |
| 264 | vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity), | 268 | vdev->config->get(vdev, offsetof(struct virtio_blk_config, capacity), |
| 265 | &cap, sizeof(cap)); | 269 | &cap, sizeof(cap)); |
| @@ -311,6 +315,7 @@ static void virtblk_remove(struct virtio_device *vdev) | |||
| 311 | /* Stop all the virtqueues. */ | 315 | /* Stop all the virtqueues. */ |
| 312 | vdev->config->reset(vdev); | 316 | vdev->config->reset(vdev); |
| 313 | 317 | ||
| 318 | del_gendisk(vblk->disk); | ||
| 314 | blk_cleanup_queue(vblk->disk->queue); | 319 | blk_cleanup_queue(vblk->disk->queue); |
| 315 | put_disk(vblk->disk); | 320 | put_disk(vblk->disk); |
| 316 | mempool_destroy(vblk->pool); | 321 | mempool_destroy(vblk->pool); |
| @@ -325,7 +330,7 @@ static struct virtio_device_id id_table[] = { | |||
| 325 | 330 | ||
| 326 | static unsigned int features[] = { | 331 | static unsigned int features[] = { |
| 327 | VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, | 332 | VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, |
| 328 | VIRTIO_BLK_F_GEOMETRY, | 333 | VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, |
| 329 | }; | 334 | }; |
| 330 | 335 | ||
| 331 | static struct virtio_driver virtio_blk = { | 336 | static struct virtio_driver virtio_blk = { |
diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig index 595a925c62a9..d307bf26af58 100644 --- a/drivers/char/Kconfig +++ b/drivers/char/Kconfig | |||
| @@ -118,8 +118,8 @@ config COMPUTONE | |||
| 118 | order to become a dial-in server. If you have a card like that, say | 118 | order to become a dial-in server. If you have a card like that, say |
| 119 | Y here and read <file:Documentation/computone.txt>. | 119 | Y here and read <file:Documentation/computone.txt>. |
| 120 | 120 | ||
| 121 | To compile this driver as modules, choose M here: the | 121 | To compile this driver as module, choose M here: the |
| 122 | modules will be called ip2 and ip2main. | 122 | module will be called ip2. |
| 123 | 123 | ||
| 124 | config ROCKETPORT | 124 | config ROCKETPORT |
| 125 | tristate "Comtrol RocketPort support" | 125 | tristate "Comtrol RocketPort support" |
diff --git a/drivers/char/hw_random/Kconfig b/drivers/char/hw_random/Kconfig index 8d6c2089d2a8..efd0b4db7c8e 100644 --- a/drivers/char/hw_random/Kconfig +++ b/drivers/char/hw_random/Kconfig | |||
| @@ -112,3 +112,12 @@ config HW_RANDOM_PASEMI | |||
| 112 | 112 | ||
| 113 | If unsure, say Y. | 113 | If unsure, say Y. |
| 114 | 114 | ||
| 115 | config HW_RANDOM_VIRTIO | ||
| 116 | tristate "VirtIO Random Number Generator support" | ||
| 117 | depends on HW_RANDOM && VIRTIO | ||
| 118 | ---help--- | ||
| 119 | This driver provides kernel-side support for the virtual Random Number | ||
| 120 | Generator hardware. | ||
| 121 | |||
| 122 | To compile this driver as a module, choose M here: the | ||
| 123 | module will be called virtio-rng. If unsure, say N. | ||
diff --git a/drivers/char/hw_random/Makefile b/drivers/char/hw_random/Makefile index c8b7300e2fb1..b4940ddbb35f 100644 --- a/drivers/char/hw_random/Makefile +++ b/drivers/char/hw_random/Makefile | |||
| @@ -11,3 +11,4 @@ obj-$(CONFIG_HW_RANDOM_VIA) += via-rng.o | |||
| 11 | obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o | 11 | obj-$(CONFIG_HW_RANDOM_IXP4XX) += ixp4xx-rng.o |
| 12 | obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o | 12 | obj-$(CONFIG_HW_RANDOM_OMAP) += omap-rng.o |
| 13 | obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o | 13 | obj-$(CONFIG_HW_RANDOM_PASEMI) += pasemi-rng.o |
| 14 | obj-$(CONFIG_HW_RANDOM_VIRTIO) += virtio-rng.o | ||
diff --git a/drivers/char/hw_random/virtio-rng.c b/drivers/char/hw_random/virtio-rng.c new file mode 100644 index 000000000000..d0e563e4fc39 --- /dev/null +++ b/drivers/char/hw_random/virtio-rng.c | |||
| @@ -0,0 +1,155 @@ | |||
| 1 | /* | ||
| 2 | * Randomness driver for virtio | ||
| 3 | * Copyright (C) 2007, 2008 Rusty Russell IBM Corporation | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify | ||
| 6 | * it under the terms of the GNU General Public License as published by | ||
| 7 | * the Free Software Foundation; either version 2 of the License, or | ||
| 8 | * (at your option) any later version. | ||
| 9 | * | ||
| 10 | * This program is distributed in the hope that it will be useful, | ||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | * GNU General Public License for more details. | ||
| 14 | * | ||
| 15 | * You should have received a copy of the GNU General Public License | ||
| 16 | * along with this program; if not, write to the Free Software | ||
| 17 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| 18 | */ | ||
| 19 | #include <linux/err.h> | ||
| 20 | #include <linux/hw_random.h> | ||
| 21 | #include <linux/scatterlist.h> | ||
| 22 | #include <linux/spinlock.h> | ||
| 23 | #include <linux/virtio.h> | ||
| 24 | #include <linux/virtio_rng.h> | ||
| 25 | |||
| 26 | /* The host will fill any buffer we give it with sweet, sweet randomness. We | ||
| 27 | * give it 64 bytes at a time, and the hwrng framework takes it 4 bytes at a | ||
| 28 | * time. */ | ||
| 29 | #define RANDOM_DATA_SIZE 64 | ||
| 30 | |||
| 31 | static struct virtqueue *vq; | ||
| 32 | static u32 *random_data; | ||
| 33 | static unsigned int data_left; | ||
| 34 | static DECLARE_COMPLETION(have_data); | ||
| 35 | |||
| 36 | static void random_recv_done(struct virtqueue *vq) | ||
| 37 | { | ||
| 38 | int len; | ||
| 39 | |||
| 40 | /* We never get spurious callbacks. */ | ||
| 41 | if (!vq->vq_ops->get_buf(vq, &len)) | ||
| 42 | BUG(); | ||
| 43 | |||
| 44 | data_left = len / sizeof(random_data[0]); | ||
| 45 | complete(&have_data); | ||
| 46 | } | ||
| 47 | |||
| 48 | static void register_buffer(void) | ||
| 49 | { | ||
| 50 | struct scatterlist sg; | ||
| 51 | |||
| 52 | sg_init_one(&sg, random_data, RANDOM_DATA_SIZE); | ||
| 53 | /* There should always be room for one buffer. */ | ||
| 54 | if (vq->vq_ops->add_buf(vq, &sg, 0, 1, random_data) != 0) | ||
| 55 | BUG(); | ||
| 56 | vq->vq_ops->kick(vq); | ||
| 57 | } | ||
| 58 | |||
| 59 | /* At least we don't udelay() in a loop like some other drivers. */ | ||
| 60 | static int virtio_data_present(struct hwrng *rng, int wait) | ||
| 61 | { | ||
| 62 | if (data_left) | ||
| 63 | return 1; | ||
| 64 | |||
| 65 | if (!wait) | ||
| 66 | return 0; | ||
| 67 | |||
| 68 | wait_for_completion(&have_data); | ||
| 69 | return 1; | ||
| 70 | } | ||
| 71 | |||
| 72 | /* virtio_data_present() must have succeeded before this is called. */ | ||
| 73 | static int virtio_data_read(struct hwrng *rng, u32 *data) | ||
| 74 | { | ||
| 75 | BUG_ON(!data_left); | ||
| 76 | |||
| 77 | *data = random_data[--data_left]; | ||
| 78 | |||
| 79 | if (!data_left) { | ||
| 80 | init_completion(&have_data); | ||
| 81 | register_buffer(); | ||
| 82 | } | ||
| 83 | return sizeof(*data); | ||
| 84 | } | ||
| 85 | |||
| 86 | static struct hwrng virtio_hwrng = { | ||
| 87 | .name = "virtio", | ||
| 88 | .data_present = virtio_data_present, | ||
| 89 | .data_read = virtio_data_read, | ||
| 90 | }; | ||
| 91 | |||
| 92 | static int virtrng_probe(struct virtio_device *vdev) | ||
| 93 | { | ||
| 94 | int err; | ||
| 95 | |||
| 96 | /* We expect a single virtqueue. */ | ||
| 97 | vq = vdev->config->find_vq(vdev, 0, random_recv_done); | ||
| 98 | if (IS_ERR(vq)) | ||
| 99 | return PTR_ERR(vq); | ||
| 100 | |||
| 101 | err = hwrng_register(&virtio_hwrng); | ||
| 102 | if (err) { | ||
| 103 | vdev->config->del_vq(vq); | ||
| 104 | return err; | ||
| 105 | } | ||
| 106 | |||
| 107 | register_buffer(); | ||
| 108 | return 0; | ||
| 109 | } | ||
| 110 | |||
| 111 | static void virtrng_remove(struct virtio_device *vdev) | ||
| 112 | { | ||
| 113 | vdev->config->reset(vdev); | ||
| 114 | hwrng_unregister(&virtio_hwrng); | ||
| 115 | vdev->config->del_vq(vq); | ||
| 116 | } | ||
| 117 | |||
| 118 | static struct virtio_device_id id_table[] = { | ||
| 119 | { VIRTIO_ID_RNG, VIRTIO_DEV_ANY_ID }, | ||
| 120 | { 0 }, | ||
| 121 | }; | ||
| 122 | |||
| 123 | static struct virtio_driver virtio_rng = { | ||
| 124 | .driver.name = KBUILD_MODNAME, | ||
| 125 | .driver.owner = THIS_MODULE, | ||
| 126 | .id_table = id_table, | ||
| 127 | .probe = virtrng_probe, | ||
| 128 | .remove = __devexit_p(virtrng_remove), | ||
| 129 | }; | ||
| 130 | |||
| 131 | static int __init init(void) | ||
| 132 | { | ||
| 133 | int err; | ||
| 134 | |||
| 135 | random_data = kmalloc(RANDOM_DATA_SIZE, GFP_KERNEL); | ||
| 136 | if (!random_data) | ||
| 137 | return -ENOMEM; | ||
| 138 | |||
| 139 | err = register_virtio_driver(&virtio_rng); | ||
| 140 | if (err) | ||
| 141 | kfree(random_data); | ||
| 142 | return err; | ||
| 143 | } | ||
| 144 | |||
| 145 | static void __exit fini(void) | ||
| 146 | { | ||
| 147 | kfree(random_data); | ||
| 148 | unregister_virtio_driver(&virtio_rng); | ||
| 149 | } | ||
| 150 | module_init(init); | ||
| 151 | module_exit(fini); | ||
| 152 | |||
| 153 | MODULE_DEVICE_TABLE(virtio, id_table); | ||
| 154 | MODULE_DESCRIPTION("Virtio random number driver"); | ||
| 155 | MODULE_LICENSE("GPL"); | ||
diff --git a/drivers/char/pcmcia/ipwireless/hardware.c b/drivers/char/pcmcia/ipwireless/hardware.c index fa9d3c945f31..ba6340ae98af 100644 --- a/drivers/char/pcmcia/ipwireless/hardware.c +++ b/drivers/char/pcmcia/ipwireless/hardware.c | |||
| @@ -251,10 +251,11 @@ struct ipw_hardware { | |||
| 251 | int init_loops; | 251 | int init_loops; |
| 252 | struct timer_list setup_timer; | 252 | struct timer_list setup_timer; |
| 253 | 253 | ||
| 254 | /* Flag if hw is ready to send next packet */ | ||
| 254 | int tx_ready; | 255 | int tx_ready; |
| 255 | struct list_head tx_queue[NL_NUM_OF_PRIORITIES]; | 256 | /* Count of pending packets to be sent */ |
| 256 | /* True if any packets are queued for transmission */ | ||
| 257 | int tx_queued; | 257 | int tx_queued; |
| 258 | struct list_head tx_queue[NL_NUM_OF_PRIORITIES]; | ||
| 258 | 259 | ||
| 259 | int rx_bytes_queued; | 260 | int rx_bytes_queued; |
| 260 | struct list_head rx_queue; | 261 | struct list_head rx_queue; |
| @@ -404,6 +405,8 @@ static int do_send_fragment(struct ipw_hardware *hw, const unsigned char *data, | |||
| 404 | 405 | ||
| 405 | spin_lock_irqsave(&hw->spinlock, flags); | 406 | spin_lock_irqsave(&hw->spinlock, flags); |
| 406 | 407 | ||
| 408 | hw->tx_ready = 0; | ||
| 409 | |||
| 407 | if (hw->hw_version == HW_VERSION_1) { | 410 | if (hw->hw_version == HW_VERSION_1) { |
| 408 | outw((unsigned short) length, hw->base_port + IODWR); | 411 | outw((unsigned short) length, hw->base_port + IODWR); |
| 409 | 412 | ||
| @@ -492,6 +495,7 @@ static int do_send_packet(struct ipw_hardware *hw, struct ipw_tx_packet *packet) | |||
| 492 | 495 | ||
| 493 | spin_lock_irqsave(&hw->spinlock, flags); | 496 | spin_lock_irqsave(&hw->spinlock, flags); |
| 494 | list_add(&packet->queue, &hw->tx_queue[0]); | 497 | list_add(&packet->queue, &hw->tx_queue[0]); |
| 498 | hw->tx_queued++; | ||
| 495 | spin_unlock_irqrestore(&hw->spinlock, flags); | 499 | spin_unlock_irqrestore(&hw->spinlock, flags); |
| 496 | } else { | 500 | } else { |
| 497 | if (packet->packet_callback) | 501 | if (packet->packet_callback) |
| @@ -949,12 +953,10 @@ static int send_pending_packet(struct ipw_hardware *hw, int priority_limit) | |||
| 949 | unsigned long flags; | 953 | unsigned long flags; |
| 950 | 954 | ||
| 951 | spin_lock_irqsave(&hw->spinlock, flags); | 955 | spin_lock_irqsave(&hw->spinlock, flags); |
| 952 | if (hw->tx_queued && hw->tx_ready != 0) { | 956 | if (hw->tx_queued && hw->tx_ready) { |
| 953 | int priority; | 957 | int priority; |
| 954 | struct ipw_tx_packet *packet = NULL; | 958 | struct ipw_tx_packet *packet = NULL; |
| 955 | 959 | ||
| 956 | hw->tx_ready--; | ||
| 957 | |||
| 958 | /* Pick a packet */ | 960 | /* Pick a packet */ |
| 959 | for (priority = 0; priority < priority_limit; priority++) { | 961 | for (priority = 0; priority < priority_limit; priority++) { |
| 960 | if (!list_empty(&hw->tx_queue[priority])) { | 962 | if (!list_empty(&hw->tx_queue[priority])) { |
| @@ -963,6 +965,7 @@ static int send_pending_packet(struct ipw_hardware *hw, int priority_limit) | |||
| 963 | struct ipw_tx_packet, | 965 | struct ipw_tx_packet, |
| 964 | queue); | 966 | queue); |
| 965 | 967 | ||
| 968 | hw->tx_queued--; | ||
| 966 | list_del(&packet->queue); | 969 | list_del(&packet->queue); |
| 967 | 970 | ||
| 968 | break; | 971 | break; |
| @@ -973,6 +976,7 @@ static int send_pending_packet(struct ipw_hardware *hw, int priority_limit) | |||
| 973 | spin_unlock_irqrestore(&hw->spinlock, flags); | 976 | spin_unlock_irqrestore(&hw->spinlock, flags); |
| 974 | return 0; | 977 | return 0; |
| 975 | } | 978 | } |
| 979 | |||
| 976 | spin_unlock_irqrestore(&hw->spinlock, flags); | 980 | spin_unlock_irqrestore(&hw->spinlock, flags); |
| 977 | 981 | ||
| 978 | /* Send */ | 982 | /* Send */ |
| @@ -1063,7 +1067,7 @@ static irqreturn_t ipwireless_handle_v1_interrupt(int irq, | |||
| 1063 | if (irqn & IR_TXINTR) { | 1067 | if (irqn & IR_TXINTR) { |
| 1064 | ack |= IR_TXINTR; | 1068 | ack |= IR_TXINTR; |
| 1065 | spin_lock_irqsave(&hw->spinlock, flags); | 1069 | spin_lock_irqsave(&hw->spinlock, flags); |
| 1066 | hw->tx_ready++; | 1070 | hw->tx_ready = 1; |
| 1067 | spin_unlock_irqrestore(&hw->spinlock, flags); | 1071 | spin_unlock_irqrestore(&hw->spinlock, flags); |
| 1068 | } | 1072 | } |
| 1069 | /* Received data */ | 1073 | /* Received data */ |
| @@ -1170,7 +1174,7 @@ static irqreturn_t ipwireless_handle_v2_v3_interrupt(int irq, | |||
| 1170 | if (memrxdone & MEMRX_RX_DONE) { | 1174 | if (memrxdone & MEMRX_RX_DONE) { |
| 1171 | writew(0, &hw->memory_info_regs->memreg_rx_done); | 1175 | writew(0, &hw->memory_info_regs->memreg_rx_done); |
| 1172 | spin_lock_irqsave(&hw->spinlock, flags); | 1176 | spin_lock_irqsave(&hw->spinlock, flags); |
| 1173 | hw->tx_ready++; | 1177 | hw->tx_ready = 1; |
| 1174 | spin_unlock_irqrestore(&hw->spinlock, flags); | 1178 | spin_unlock_irqrestore(&hw->spinlock, flags); |
| 1175 | tx = 1; | 1179 | tx = 1; |
| 1176 | } | 1180 | } |
| @@ -1234,7 +1238,7 @@ static void send_packet(struct ipw_hardware *hw, int priority, | |||
| 1234 | 1238 | ||
| 1235 | spin_lock_irqsave(&hw->spinlock, flags); | 1239 | spin_lock_irqsave(&hw->spinlock, flags); |
| 1236 | list_add_tail(&packet->queue, &hw->tx_queue[priority]); | 1240 | list_add_tail(&packet->queue, &hw->tx_queue[priority]); |
| 1237 | hw->tx_queued = 1; | 1241 | hw->tx_queued++; |
| 1238 | spin_unlock_irqrestore(&hw->spinlock, flags); | 1242 | spin_unlock_irqrestore(&hw->spinlock, flags); |
| 1239 | 1243 | ||
| 1240 | flush_packets_to_hw(hw); | 1244 | flush_packets_to_hw(hw); |
diff --git a/drivers/char/vt.c b/drivers/char/vt.c index fa1ffbf2c621..935f1c207a1f 100644 --- a/drivers/char/vt.c +++ b/drivers/char/vt.c | |||
| @@ -434,7 +434,7 @@ static void update_attr(struct vc_data *vc) | |||
| 434 | vc->vc_blink, vc->vc_underline, | 434 | vc->vc_blink, vc->vc_underline, |
| 435 | vc->vc_reverse ^ vc->vc_decscnm, vc->vc_italic); | 435 | vc->vc_reverse ^ vc->vc_decscnm, vc->vc_italic); |
| 436 | vc->vc_video_erase_char = (build_attr(vc, vc->vc_color, 1, vc->vc_blink, 0, vc->vc_decscnm, 0) << 8) | ' '; | 436 | vc->vc_video_erase_char = (build_attr(vc, vc->vc_color, 1, vc->vc_blink, 0, vc->vc_decscnm, 0) << 8) | ' '; |
| 437 | vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, false, false) << 8) | ' '; | 437 | vc->vc_scrl_erase_char = (build_attr(vc, vc->vc_def_color, 1, false, false, vc->vc_decscnm, false) << 8) | ' '; |
| 438 | } | 438 | } |
| 439 | 439 | ||
| 440 | /* Note: inverting the screen twice should revert to the original state */ | 440 | /* Note: inverting the screen twice should revert to the original state */ |
| @@ -909,7 +909,7 @@ int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines) | |||
| 909 | 909 | ||
| 910 | if (vc->vc_tty) { | 910 | if (vc->vc_tty) { |
| 911 | struct winsize ws, *cws = &vc->vc_tty->winsize; | 911 | struct winsize ws, *cws = &vc->vc_tty->winsize; |
| 912 | unsigned long flags; | 912 | struct pid *pgrp = NULL; |
| 913 | 913 | ||
| 914 | memset(&ws, 0, sizeof(ws)); | 914 | memset(&ws, 0, sizeof(ws)); |
| 915 | ws.ws_row = vc->vc_rows; | 915 | ws.ws_row = vc->vc_rows; |
| @@ -917,11 +917,14 @@ int vc_resize(struct vc_data *vc, unsigned int cols, unsigned int lines) | |||
| 917 | ws.ws_ypixel = vc->vc_scan_lines; | 917 | ws.ws_ypixel = vc->vc_scan_lines; |
| 918 | 918 | ||
| 919 | mutex_lock(&vc->vc_tty->termios_mutex); | 919 | mutex_lock(&vc->vc_tty->termios_mutex); |
| 920 | spin_lock_irqsave(&vc->vc_tty->ctrl_lock, flags); | 920 | spin_lock_irq(&vc->vc_tty->ctrl_lock); |
| 921 | if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col) && | 921 | if ((ws.ws_row != cws->ws_row || ws.ws_col != cws->ws_col)) |
| 922 | vc->vc_tty->pgrp) | 922 | pgrp = get_pid(vc->vc_tty->pgrp); |
| 923 | spin_unlock_irq(&vc->vc_tty->ctrl_lock); | ||
| 924 | if (pgrp) { | ||
| 923 | kill_pgrp(vc->vc_tty->pgrp, SIGWINCH, 1); | 925 | kill_pgrp(vc->vc_tty->pgrp, SIGWINCH, 1); |
| 924 | spin_unlock_irqrestore(&vc->vc_tty->ctrl_lock, flags); | 926 | put_pid(pgrp); |
| 927 | } | ||
| 925 | *cws = ws; | 928 | *cws = ws; |
| 926 | mutex_unlock(&vc->vc_tty->termios_mutex); | 929 | mutex_unlock(&vc->vc_tty->termios_mutex); |
| 927 | } | 930 | } |
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 7fce038fa57e..4e07d1f43a43 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -625,7 +625,7 @@ static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy, | |||
| 625 | unsigned int freq = 0; | 625 | unsigned int freq = 0; |
| 626 | unsigned int ret; | 626 | unsigned int ret; |
| 627 | 627 | ||
| 628 | if (!policy->governor->store_setspeed) | 628 | if (!policy->governor || !policy->governor->store_setspeed) |
| 629 | return -EINVAL; | 629 | return -EINVAL; |
| 630 | 630 | ||
| 631 | ret = sscanf(buf, "%u", &freq); | 631 | ret = sscanf(buf, "%u", &freq); |
| @@ -639,7 +639,7 @@ static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy, | |||
| 639 | 639 | ||
| 640 | static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf) | 640 | static ssize_t show_scaling_setspeed(struct cpufreq_policy *policy, char *buf) |
| 641 | { | 641 | { |
| 642 | if (!policy->governor->show_setspeed) | 642 | if (!policy->governor || !policy->governor->show_setspeed) |
| 643 | return sprintf(buf, "<unsupported>\n"); | 643 | return sprintf(buf, "<unsupported>\n"); |
| 644 | 644 | ||
| 645 | return policy->governor->show_setspeed(policy, buf); | 645 | return policy->governor->show_setspeed(policy, buf); |
| @@ -928,13 +928,13 @@ static int cpufreq_add_dev(struct sys_device *sys_dev) | |||
| 928 | policy->user_policy.policy = policy->policy; | 928 | policy->user_policy.policy = policy->policy; |
| 929 | policy->user_policy.governor = policy->governor; | 929 | policy->user_policy.governor = policy->governor; |
| 930 | 930 | ||
| 931 | unlock_policy_rwsem_write(cpu); | ||
| 932 | |||
| 933 | if (ret) { | 931 | if (ret) { |
| 934 | dprintk("setting policy failed\n"); | 932 | dprintk("setting policy failed\n"); |
| 935 | goto err_out_unregister; | 933 | goto err_out_unregister; |
| 936 | } | 934 | } |
| 937 | 935 | ||
| 936 | unlock_policy_rwsem_write(cpu); | ||
| 937 | |||
| 938 | kobject_uevent(&policy->kobj, KOBJ_ADD); | 938 | kobject_uevent(&policy->kobj, KOBJ_ADD); |
| 939 | module_put(cpufreq_driver->owner); | 939 | module_put(cpufreq_driver->owner); |
| 940 | dprintk("initialization complete\n"); | 940 | dprintk("initialization complete\n"); |
diff --git a/drivers/firmware/edd.c b/drivers/firmware/edd.c index 744011989044..9e4f59dc7f1e 100644 --- a/drivers/firmware/edd.c +++ b/drivers/firmware/edd.c | |||
| @@ -753,7 +753,7 @@ edd_init(void) | |||
| 753 | 753 | ||
| 754 | if (!edd_num_devices()) { | 754 | if (!edd_num_devices()) { |
| 755 | printk(KERN_INFO "EDD information not available.\n"); | 755 | printk(KERN_INFO "EDD information not available.\n"); |
| 756 | return 1; | 756 | return -ENODEV; |
| 757 | } | 757 | } |
| 758 | 758 | ||
| 759 | edd_kset = kset_create_and_add("edd", NULL, firmware_kobj); | 759 | edd_kset = kset_create_and_add("edd", NULL, firmware_kobj); |
diff --git a/drivers/hwmon/hdaps.c b/drivers/hwmon/hdaps.c index 88e89653daaf..26df06f840eb 100644 --- a/drivers/hwmon/hdaps.c +++ b/drivers/hwmon/hdaps.c | |||
| @@ -522,6 +522,7 @@ static struct dmi_system_id __initdata hdaps_whitelist[] = { | |||
| 522 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T42"), | 522 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T42"), |
| 523 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T43"), | 523 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad T43"), |
| 524 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T60"), | 524 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T60"), |
| 525 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad T61"), | ||
| 525 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X40"), | 526 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X40"), |
| 526 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X41"), | 527 | HDAPS_DMI_MATCH_NORMAL("IBM", "ThinkPad X41"), |
| 527 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60"), | 528 | HDAPS_DMI_MATCH_INVERT("LENOVO", "ThinkPad X60"), |
diff --git a/drivers/hwmon/ibmaem.c b/drivers/hwmon/ibmaem.c index 5c006c9a4311..c9416e657487 100644 --- a/drivers/hwmon/ibmaem.c +++ b/drivers/hwmon/ibmaem.c | |||
| @@ -189,8 +189,8 @@ static struct aem_iana_id system_x_id = { | |||
| 189 | struct aem_find_firmware_req { | 189 | struct aem_find_firmware_req { |
| 190 | struct aem_iana_id id; | 190 | struct aem_iana_id id; |
| 191 | u8 rsvd; | 191 | u8 rsvd; |
| 192 | u16 index; | 192 | __be16 index; |
| 193 | u16 module_type_id; | 193 | __be16 module_type_id; |
| 194 | } __packed; | 194 | } __packed; |
| 195 | 195 | ||
| 196 | struct aem_find_firmware_resp { | 196 | struct aem_find_firmware_resp { |
| @@ -202,7 +202,7 @@ struct aem_find_firmware_resp { | |||
| 202 | struct aem_find_instance_req { | 202 | struct aem_find_instance_req { |
| 203 | struct aem_iana_id id; | 203 | struct aem_iana_id id; |
| 204 | u8 instance_number; | 204 | u8 instance_number; |
| 205 | u16 module_type_id; | 205 | __be16 module_type_id; |
| 206 | } __packed; | 206 | } __packed; |
| 207 | 207 | ||
| 208 | struct aem_find_instance_resp { | 208 | struct aem_find_instance_resp { |
| @@ -444,17 +444,17 @@ static int aem_read_sensor(struct aem_data *data, u8 elt, u8 reg, | |||
| 444 | } | 444 | } |
| 445 | case 2: { | 445 | case 2: { |
| 446 | u16 *x = buf; | 446 | u16 *x = buf; |
| 447 | *x = be16_to_cpup((u16 *)rs_resp->bytes); | 447 | *x = be16_to_cpup((__be16 *)rs_resp->bytes); |
| 448 | break; | 448 | break; |
| 449 | } | 449 | } |
| 450 | case 4: { | 450 | case 4: { |
| 451 | u32 *x = buf; | 451 | u32 *x = buf; |
| 452 | *x = be32_to_cpup((u32 *)rs_resp->bytes); | 452 | *x = be32_to_cpup((__be32 *)rs_resp->bytes); |
| 453 | break; | 453 | break; |
| 454 | } | 454 | } |
| 455 | case 8: { | 455 | case 8: { |
| 456 | u64 *x = buf; | 456 | u64 *x = buf; |
| 457 | *x = be64_to_cpup((u64 *)rs_resp->bytes); | 457 | *x = be64_to_cpup((__be64 *)rs_resp->bytes); |
| 458 | break; | 458 | break; |
| 459 | } | 459 | } |
| 460 | } | 460 | } |
diff --git a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c index 4a95adc4cc78..af58a6f1e898 100644 --- a/drivers/input/keyboard/atkbd.c +++ b/drivers/input/keyboard/atkbd.c | |||
| @@ -807,6 +807,8 @@ static int atkbd_activate(struct atkbd *atkbd) | |||
| 807 | static void atkbd_cleanup(struct serio *serio) | 807 | static void atkbd_cleanup(struct serio *serio) |
| 808 | { | 808 | { |
| 809 | struct atkbd *atkbd = serio_get_drvdata(serio); | 809 | struct atkbd *atkbd = serio_get_drvdata(serio); |
| 810 | |||
| 811 | atkbd_disable(atkbd); | ||
| 810 | ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); | 812 | ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_BAT); |
| 811 | } | 813 | } |
| 812 | 814 | ||
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c index 3dea0c5077a9..45767e73f071 100644 --- a/drivers/input/keyboard/pxa27x_keypad.c +++ b/drivers/input/keyboard/pxa27x_keypad.c | |||
| @@ -136,6 +136,9 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) | |||
| 136 | set_bit(code, input_dev->keybit); | 136 | set_bit(code, input_dev->keybit); |
| 137 | } | 137 | } |
| 138 | 138 | ||
| 139 | for (i = 0; i < pdata->direct_key_num; i++) | ||
| 140 | set_bit(pdata->direct_key_map[i], input_dev->keybit); | ||
| 141 | |||
| 139 | keypad->rotary_up_key[0] = pdata->rotary0_up_key; | 142 | keypad->rotary_up_key[0] = pdata->rotary0_up_key; |
| 140 | keypad->rotary_up_key[1] = pdata->rotary1_up_key; | 143 | keypad->rotary_up_key[1] = pdata->rotary1_up_key; |
| 141 | keypad->rotary_down_key[0] = pdata->rotary0_down_key; | 144 | keypad->rotary_down_key[0] = pdata->rotary0_down_key; |
| @@ -143,17 +146,21 @@ static void pxa27x_keypad_build_keycode(struct pxa27x_keypad *keypad) | |||
| 143 | keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; | 146 | keypad->rotary_rel_code[0] = pdata->rotary0_rel_code; |
| 144 | keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; | 147 | keypad->rotary_rel_code[1] = pdata->rotary1_rel_code; |
| 145 | 148 | ||
| 146 | if (pdata->rotary0_up_key && pdata->rotary0_down_key) { | 149 | if (pdata->enable_rotary0) { |
| 147 | set_bit(pdata->rotary0_up_key, input_dev->keybit); | 150 | if (pdata->rotary0_up_key && pdata->rotary0_down_key) { |
| 148 | set_bit(pdata->rotary0_down_key, input_dev->keybit); | 151 | set_bit(pdata->rotary0_up_key, input_dev->keybit); |
| 149 | } else | 152 | set_bit(pdata->rotary0_down_key, input_dev->keybit); |
| 150 | set_bit(pdata->rotary0_rel_code, input_dev->relbit); | 153 | } else |
| 151 | 154 | set_bit(pdata->rotary0_rel_code, input_dev->relbit); | |
| 152 | if (pdata->rotary1_up_key && pdata->rotary1_down_key) { | 155 | } |
| 153 | set_bit(pdata->rotary1_up_key, input_dev->keybit); | 156 | |
| 154 | set_bit(pdata->rotary1_down_key, input_dev->keybit); | 157 | if (pdata->enable_rotary1) { |
| 155 | } else | 158 | if (pdata->rotary1_up_key && pdata->rotary1_down_key) { |
| 156 | set_bit(pdata->rotary1_rel_code, input_dev->relbit); | 159 | set_bit(pdata->rotary1_up_key, input_dev->keybit); |
| 160 | set_bit(pdata->rotary1_down_key, input_dev->keybit); | ||
| 161 | } else | ||
| 162 | set_bit(pdata->rotary1_rel_code, input_dev->relbit); | ||
| 163 | } | ||
| 157 | } | 164 | } |
| 158 | 165 | ||
| 159 | static inline unsigned int lookup_matrix_keycode( | 166 | static inline unsigned int lookup_matrix_keycode( |
| @@ -484,8 +491,13 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev) | |||
| 484 | keypad->input_dev = input_dev; | 491 | keypad->input_dev = input_dev; |
| 485 | input_set_drvdata(input_dev, keypad); | 492 | input_set_drvdata(input_dev, keypad); |
| 486 | 493 | ||
| 487 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP) | | 494 | input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REP); |
| 488 | BIT_MASK(EV_REL); | 495 | if ((keypad->pdata->enable_rotary0 && |
| 496 | keypad->pdata->rotary0_rel_code) || | ||
| 497 | (keypad->pdata->enable_rotary1 && | ||
| 498 | keypad->pdata->rotary1_rel_code)) { | ||
| 499 | input_dev->evbit[0] |= BIT_MASK(EV_REL); | ||
| 500 | } | ||
| 489 | 501 | ||
| 490 | pxa27x_keypad_build_keycode(keypad); | 502 | pxa27x_keypad_build_keycode(keypad); |
| 491 | platform_set_drvdata(pdev, keypad); | 503 | platform_set_drvdata(pdev, keypad); |
diff --git a/drivers/input/misc/apanel.c b/drivers/input/misc/apanel.c index 9531d8c7444f..d82f7f727f7a 100644 --- a/drivers/input/misc/apanel.c +++ b/drivers/input/misc/apanel.c | |||
| @@ -20,7 +20,6 @@ | |||
| 20 | #include <linux/module.h> | 20 | #include <linux/module.h> |
| 21 | #include <linux/ioport.h> | 21 | #include <linux/ioport.h> |
| 22 | #include <linux/io.h> | 22 | #include <linux/io.h> |
| 23 | #include <linux/module.h> | ||
| 24 | #include <linux/input-polldev.h> | 23 | #include <linux/input-polldev.h> |
| 25 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
| 26 | #include <linux/workqueue.h> | 25 | #include <linux/workqueue.h> |
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index 5ece9f56babc..9aafa96cb746 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
| @@ -331,6 +331,13 @@ static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = { | |||
| 331 | }, | 331 | }, |
| 332 | }, | 332 | }, |
| 333 | { | 333 | { |
| 334 | .ident = "Acer TravelMate 660", | ||
| 335 | .matches = { | ||
| 336 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | ||
| 337 | DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), | ||
| 338 | }, | ||
| 339 | }, | ||
| 340 | { | ||
| 334 | .ident = "Acer TravelMate 2490", | 341 | .ident = "Acer TravelMate 2490", |
| 335 | .matches = { | 342 | .matches = { |
| 336 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), | 343 | DMI_MATCH(DMI_SYS_VENDOR, "Acer"), |
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c index 65a74cfc187b..592ff55b62d0 100644 --- a/drivers/input/serio/i8042.c +++ b/drivers/input/serio/i8042.c | |||
| @@ -885,6 +885,20 @@ static long i8042_panic_blink(long count) | |||
| 885 | 885 | ||
| 886 | #undef DELAY | 886 | #undef DELAY |
| 887 | 887 | ||
| 888 | #ifdef CONFIG_X86 | ||
| 889 | static void i8042_dritek_enable(void) | ||
| 890 | { | ||
| 891 | char param = 0x90; | ||
| 892 | int error; | ||
| 893 | |||
| 894 | error = i8042_command(¶m, 0x1059); | ||
| 895 | if (error) | ||
| 896 | printk(KERN_WARNING | ||
| 897 | "Failed to enable DRITEK extension: %d\n", | ||
| 898 | error); | ||
| 899 | } | ||
| 900 | #endif | ||
| 901 | |||
| 888 | #ifdef CONFIG_PM | 902 | #ifdef CONFIG_PM |
| 889 | /* | 903 | /* |
| 890 | * Here we try to restore the original BIOS settings. We only want to | 904 | * Here we try to restore the original BIOS settings. We only want to |
| @@ -942,6 +956,12 @@ static int i8042_resume(struct platform_device *dev) | |||
| 942 | return -EIO; | 956 | return -EIO; |
| 943 | } | 957 | } |
| 944 | 958 | ||
| 959 | |||
| 960 | #ifdef CONFIG_X86 | ||
| 961 | if (i8042_dritek) | ||
| 962 | i8042_dritek_enable(); | ||
| 963 | #endif | ||
| 964 | |||
| 945 | if (i8042_mux_present) { | 965 | if (i8042_mux_present) { |
| 946 | if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) | 966 | if (i8042_set_mux_mode(1, NULL) || i8042_enable_mux_ports()) |
| 947 | printk(KERN_WARNING | 967 | printk(KERN_WARNING |
| @@ -1160,6 +1180,11 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
| 1160 | if (error) | 1180 | if (error) |
| 1161 | return error; | 1181 | return error; |
| 1162 | 1182 | ||
| 1183 | #ifdef CONFIG_X86 | ||
| 1184 | if (i8042_dritek) | ||
| 1185 | i8042_dritek_enable(); | ||
| 1186 | #endif | ||
| 1187 | |||
| 1163 | if (!i8042_noaux) { | 1188 | if (!i8042_noaux) { |
| 1164 | error = i8042_setup_aux(); | 1189 | error = i8042_setup_aux(); |
| 1165 | if (error && error != -ENODEV && error != -EBUSY) | 1190 | if (error && error != -ENODEV && error != -EBUSY) |
| @@ -1171,14 +1196,6 @@ static int __devinit i8042_probe(struct platform_device *dev) | |||
| 1171 | if (error) | 1196 | if (error) |
| 1172 | goto out_fail; | 1197 | goto out_fail; |
| 1173 | } | 1198 | } |
| 1174 | #ifdef CONFIG_X86 | ||
| 1175 | if (i8042_dritek) { | ||
| 1176 | char param = 0x90; | ||
| 1177 | error = i8042_command(¶m, 0x1059); | ||
| 1178 | if (error) | ||
| 1179 | goto out_fail; | ||
| 1180 | } | ||
| 1181 | #endif | ||
| 1182 | /* | 1199 | /* |
| 1183 | * Ok, everything is ready, let's register all serio ports | 1200 | * Ok, everything is ready, let's register all serio ports |
| 1184 | */ | 1201 | */ |
diff --git a/drivers/input/tablet/gtco.c b/drivers/input/tablet/gtco.c index c5a8661a1baa..1e748e46d12e 100644 --- a/drivers/input/tablet/gtco.c +++ b/drivers/input/tablet/gtco.c | |||
| @@ -830,7 +830,7 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 830 | struct gtco *gtco; | 830 | struct gtco *gtco; |
| 831 | struct input_dev *input_dev; | 831 | struct input_dev *input_dev; |
| 832 | struct hid_descriptor *hid_desc; | 832 | struct hid_descriptor *hid_desc; |
| 833 | char *report = NULL; | 833 | char *report; |
| 834 | int result = 0, retry; | 834 | int result = 0, retry; |
| 835 | int error; | 835 | int error; |
| 836 | struct usb_endpoint_descriptor *endpoint; | 836 | struct usb_endpoint_descriptor *endpoint; |
| @@ -916,12 +916,16 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 916 | le16_to_cpu(hid_desc->wDescriptorLength), | 916 | le16_to_cpu(hid_desc->wDescriptorLength), |
| 917 | 5000); /* 5 secs */ | 917 | 5000); /* 5 secs */ |
| 918 | 918 | ||
| 919 | if (result == le16_to_cpu(hid_desc->wDescriptorLength)) | 919 | dbg("usb_control_msg result: %d", result); |
| 920 | if (result == le16_to_cpu(hid_desc->wDescriptorLength)) { | ||
| 921 | parse_hid_report_descriptor(gtco, report, result); | ||
| 920 | break; | 922 | break; |
| 923 | } | ||
| 921 | } | 924 | } |
| 922 | 925 | ||
| 926 | kfree(report); | ||
| 927 | |||
| 923 | /* If we didn't get the report, fail */ | 928 | /* If we didn't get the report, fail */ |
| 924 | dbg("usb_control_msg result: :%d", result); | ||
| 925 | if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { | 929 | if (result != le16_to_cpu(hid_desc->wDescriptorLength)) { |
| 926 | err("Failed to get HID Report Descriptor of size: %d", | 930 | err("Failed to get HID Report Descriptor of size: %d", |
| 927 | hid_desc->wDescriptorLength); | 931 | hid_desc->wDescriptorLength); |
| @@ -929,12 +933,6 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 929 | goto err_free_urb; | 933 | goto err_free_urb; |
| 930 | } | 934 | } |
| 931 | 935 | ||
| 932 | /* Now we parse the report */ | ||
| 933 | parse_hid_report_descriptor(gtco, report, result); | ||
| 934 | |||
| 935 | /* Now we delete it */ | ||
| 936 | kfree(report); | ||
| 937 | |||
| 938 | /* Create a device file node */ | 936 | /* Create a device file node */ |
| 939 | usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); | 937 | usb_make_path(gtco->usbdev, gtco->usbpath, sizeof(gtco->usbpath)); |
| 940 | strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); | 938 | strlcat(gtco->usbpath, "/input0", sizeof(gtco->usbpath)); |
| @@ -988,7 +986,6 @@ static int gtco_probe(struct usb_interface *usbinterface, | |||
| 988 | usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, | 986 | usb_buffer_free(gtco->usbdev, REPORT_MAX_SIZE, |
| 989 | gtco->buffer, gtco->buf_dma); | 987 | gtco->buffer, gtco->buf_dma); |
| 990 | err_free_devs: | 988 | err_free_devs: |
| 991 | kfree(report); | ||
| 992 | input_free_device(input_dev); | 989 | input_free_device(input_dev); |
| 993 | kfree(gtco); | 990 | kfree(gtco); |
| 994 | return error; | 991 | return error; |
diff --git a/drivers/input/touchscreen/wm9713.c b/drivers/input/touchscreen/wm9713.c index 01278bd7e65c..838458792ea0 100644 --- a/drivers/input/touchscreen/wm9713.c +++ b/drivers/input/touchscreen/wm9713.c | |||
| @@ -85,6 +85,15 @@ module_param(delay, int, 0); | |||
| 85 | MODULE_PARM_DESC(delay, "Set adc sample delay."); | 85 | MODULE_PARM_DESC(delay, "Set adc sample delay."); |
| 86 | 86 | ||
| 87 | /* | 87 | /* |
| 88 | * Set five_wire = 1 to use a 5 wire touchscreen. | ||
| 89 | * | ||
| 90 | * NOTE: Five wire mode does not allow for readback of pressure. | ||
| 91 | */ | ||
| 92 | static int five_wire; | ||
| 93 | module_param(five_wire, int, 0); | ||
| 94 | MODULE_PARM_DESC(five_wire, "Set to '1' to use 5-wire touchscreen."); | ||
| 95 | |||
| 96 | /* | ||
| 88 | * Set adc mask function. | 97 | * Set adc mask function. |
| 89 | * | 98 | * |
| 90 | * Sources of glitch noise, such as signals driving an LCD display, may feed | 99 | * Sources of glitch noise, such as signals driving an LCD display, may feed |
| @@ -162,6 +171,19 @@ static void wm9713_phy_init(struct wm97xx *wm) | |||
| 162 | 64000 / rpu); | 171 | 64000 / rpu); |
| 163 | } | 172 | } |
| 164 | 173 | ||
| 174 | /* Five wire panel? */ | ||
| 175 | if (five_wire) { | ||
| 176 | dig3 |= WM9713_45W; | ||
| 177 | dev_info(wm->dev, "setting 5-wire touchscreen mode."); | ||
| 178 | |||
| 179 | if (pil) { | ||
| 180 | dev_warn(wm->dev, | ||
| 181 | "Pressure measurement not supported in 5 " | ||
| 182 | "wire mode, disabling\n"); | ||
| 183 | pil = 0; | ||
| 184 | } | ||
| 185 | } | ||
| 186 | |||
| 165 | /* touchpanel pressure */ | 187 | /* touchpanel pressure */ |
| 166 | if (pil == 2) { | 188 | if (pil == 2) { |
| 167 | dig3 |= WM9712_PIL; | 189 | dig3 |= WM9712_PIL; |
diff --git a/drivers/input/touchscreen/wm97xx-core.c b/drivers/input/touchscreen/wm97xx-core.c index e9c7ea46b6e3..cdc24ad314e0 100644 --- a/drivers/input/touchscreen/wm97xx-core.c +++ b/drivers/input/touchscreen/wm97xx-core.c | |||
| @@ -608,6 +608,17 @@ static int wm97xx_probe(struct device *dev) | |||
| 608 | goto alloc_err; | 608 | goto alloc_err; |
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | /* set up physical characteristics */ | ||
| 612 | wm->codec->phy_init(wm); | ||
| 613 | |||
| 614 | /* load gpio cache */ | ||
| 615 | wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); | ||
| 616 | wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); | ||
| 617 | wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); | ||
| 618 | wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); | ||
| 619 | wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); | ||
| 620 | wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); | ||
| 621 | |||
| 611 | wm->input_dev = input_allocate_device(); | 622 | wm->input_dev = input_allocate_device(); |
| 612 | if (wm->input_dev == NULL) { | 623 | if (wm->input_dev == NULL) { |
| 613 | ret = -ENOMEM; | 624 | ret = -ENOMEM; |
| @@ -616,6 +627,7 @@ static int wm97xx_probe(struct device *dev) | |||
| 616 | 627 | ||
| 617 | /* set up touch configuration */ | 628 | /* set up touch configuration */ |
| 618 | wm->input_dev->name = "wm97xx touchscreen"; | 629 | wm->input_dev->name = "wm97xx touchscreen"; |
| 630 | wm->input_dev->phys = "wm97xx"; | ||
| 619 | wm->input_dev->open = wm97xx_ts_input_open; | 631 | wm->input_dev->open = wm97xx_ts_input_open; |
| 620 | wm->input_dev->close = wm97xx_ts_input_close; | 632 | wm->input_dev->close = wm97xx_ts_input_close; |
| 621 | set_bit(EV_ABS, wm->input_dev->evbit); | 633 | set_bit(EV_ABS, wm->input_dev->evbit); |
| @@ -634,17 +646,6 @@ static int wm97xx_probe(struct device *dev) | |||
| 634 | if (ret < 0) | 646 | if (ret < 0) |
| 635 | goto dev_alloc_err; | 647 | goto dev_alloc_err; |
| 636 | 648 | ||
| 637 | /* set up physical characteristics */ | ||
| 638 | wm->codec->phy_init(wm); | ||
| 639 | |||
| 640 | /* load gpio cache */ | ||
| 641 | wm->gpio[0] = wm97xx_reg_read(wm, AC97_GPIO_CFG); | ||
| 642 | wm->gpio[1] = wm97xx_reg_read(wm, AC97_GPIO_POLARITY); | ||
| 643 | wm->gpio[2] = wm97xx_reg_read(wm, AC97_GPIO_STICKY); | ||
| 644 | wm->gpio[3] = wm97xx_reg_read(wm, AC97_GPIO_WAKEUP); | ||
| 645 | wm->gpio[4] = wm97xx_reg_read(wm, AC97_GPIO_STATUS); | ||
| 646 | wm->gpio[5] = wm97xx_reg_read(wm, AC97_MISC_AFE); | ||
| 647 | |||
| 648 | /* register our battery device */ | 649 | /* register our battery device */ |
| 649 | wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); | 650 | wm->battery_dev = platform_device_alloc("wm97xx-battery", -1); |
| 650 | if (!wm->battery_dev) { | 651 | if (!wm->battery_dev) { |
| @@ -801,7 +802,7 @@ void wm97xx_unregister_mach_ops(struct wm97xx *wm) | |||
| 801 | EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); | 802 | EXPORT_SYMBOL_GPL(wm97xx_unregister_mach_ops); |
| 802 | 803 | ||
| 803 | static struct device_driver wm97xx_driver = { | 804 | static struct device_driver wm97xx_driver = { |
| 804 | .name = "ac97", | 805 | .name = "wm97xx-ts", |
| 805 | .bus = &ac97_bus_type, | 806 | .bus = &ac97_bus_type, |
| 806 | .owner = THIS_MODULE, | 807 | .owner = THIS_MODULE, |
| 807 | .probe = wm97xx_probe, | 808 | .probe = wm97xx_probe, |
diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c index 8080249957af..1a8de57289eb 100644 --- a/drivers/lguest/lguest_device.c +++ b/drivers/lguest/lguest_device.c | |||
| @@ -20,14 +20,11 @@ | |||
| 20 | /* The pointer to our (page) of device descriptions. */ | 20 | /* The pointer to our (page) of device descriptions. */ |
| 21 | static void *lguest_devices; | 21 | static void *lguest_devices; |
| 22 | 22 | ||
| 23 | /* Unique numbering for lguest devices. */ | ||
| 24 | static unsigned int dev_index; | ||
| 25 | |||
| 26 | /* For Guests, device memory can be used as normal memory, so we cast away the | 23 | /* For Guests, device memory can be used as normal memory, so we cast away the |
| 27 | * __iomem to quieten sparse. */ | 24 | * __iomem to quieten sparse. */ |
| 28 | static inline void *lguest_map(unsigned long phys_addr, unsigned long pages) | 25 | static inline void *lguest_map(unsigned long phys_addr, unsigned long pages) |
| 29 | { | 26 | { |
| 30 | return (__force void *)ioremap(phys_addr, PAGE_SIZE*pages); | 27 | return (__force void *)ioremap_cache(phys_addr, PAGE_SIZE*pages); |
| 31 | } | 28 | } |
| 32 | 29 | ||
| 33 | static inline void lguest_unmap(void *addr) | 30 | static inline void lguest_unmap(void *addr) |
| @@ -325,8 +322,10 @@ static struct device lguest_root = { | |||
| 325 | * As Andrew Tridgell says, "Untested code is buggy code". | 322 | * As Andrew Tridgell says, "Untested code is buggy code". |
| 326 | * | 323 | * |
| 327 | * It's worth reading this carefully: we start with a pointer to the new device | 324 | * It's worth reading this carefully: we start with a pointer to the new device |
| 328 | * descriptor in the "lguest_devices" page. */ | 325 | * descriptor in the "lguest_devices" page, and the offset into the device |
| 329 | static void add_lguest_device(struct lguest_device_desc *d) | 326 | * descriptor page so we can uniquely identify it if things go badly wrong. */ |
| 327 | static void add_lguest_device(struct lguest_device_desc *d, | ||
| 328 | unsigned int offset) | ||
| 330 | { | 329 | { |
| 331 | struct lguest_device *ldev; | 330 | struct lguest_device *ldev; |
| 332 | 331 | ||
| @@ -334,18 +333,14 @@ static void add_lguest_device(struct lguest_device_desc *d) | |||
| 334 | * it. */ | 333 | * it. */ |
| 335 | ldev = kzalloc(sizeof(*ldev), GFP_KERNEL); | 334 | ldev = kzalloc(sizeof(*ldev), GFP_KERNEL); |
| 336 | if (!ldev) { | 335 | if (!ldev) { |
| 337 | printk(KERN_EMERG "Cannot allocate lguest dev %u\n", | 336 | printk(KERN_EMERG "Cannot allocate lguest dev %u type %u\n", |
| 338 | dev_index++); | 337 | offset, d->type); |
| 339 | return; | 338 | return; |
| 340 | } | 339 | } |
| 341 | 340 | ||
| 342 | /* This devices' parent is the lguest/ dir. */ | 341 | /* This devices' parent is the lguest/ dir. */ |
| 343 | ldev->vdev.dev.parent = &lguest_root; | 342 | ldev->vdev.dev.parent = &lguest_root; |
| 344 | /* We have a unique device index thanks to the dev_index counter. */ | 343 | /* We have a unique device index thanks to the dev_index counter. */ |
| 345 | ldev->vdev.index = dev_index++; | ||
| 346 | /* The device type comes straight from the descriptor. There's also a | ||
| 347 | * device vendor field in the virtio_device struct, which we leave as | ||
| 348 | * 0. */ | ||
| 349 | ldev->vdev.id.device = d->type; | 344 | ldev->vdev.id.device = d->type; |
| 350 | /* We have a simple set of routines for querying the device's | 345 | /* We have a simple set of routines for querying the device's |
| 351 | * configuration information and setting its status. */ | 346 | * configuration information and setting its status. */ |
| @@ -357,8 +352,8 @@ static void add_lguest_device(struct lguest_device_desc *d) | |||
| 357 | * virtio_device and calls device_register(). This makes the bus | 352 | * virtio_device and calls device_register(). This makes the bus |
| 358 | * infrastructure look for a matching driver. */ | 353 | * infrastructure look for a matching driver. */ |
| 359 | if (register_virtio_device(&ldev->vdev) != 0) { | 354 | if (register_virtio_device(&ldev->vdev) != 0) { |
| 360 | printk(KERN_ERR "Failed to register lguest device %u\n", | 355 | printk(KERN_ERR "Failed to register lguest dev %u type %u\n", |
| 361 | ldev->vdev.index); | 356 | offset, d->type); |
| 362 | kfree(ldev); | 357 | kfree(ldev); |
| 363 | } | 358 | } |
| 364 | } | 359 | } |
| @@ -379,7 +374,7 @@ static void scan_devices(void) | |||
| 379 | break; | 374 | break; |
| 380 | 375 | ||
| 381 | printk("Device at %i has size %u\n", i, desc_size(d)); | 376 | printk("Device at %i has size %u\n", i, desc_size(d)); |
| 382 | add_lguest_device(d); | 377 | add_lguest_device(d, i); |
| 383 | } | 378 | } |
| 384 | } | 379 | } |
| 385 | 380 | ||
diff --git a/drivers/md/md.c b/drivers/md/md.c index 51c19f86ff99..7cf512a34ccf 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -276,6 +276,7 @@ static mddev_t * mddev_find(dev_t unit) | |||
| 276 | atomic_set(&new->active, 1); | 276 | atomic_set(&new->active, 1); |
| 277 | spin_lock_init(&new->write_lock); | 277 | spin_lock_init(&new->write_lock); |
| 278 | init_waitqueue_head(&new->sb_wait); | 278 | init_waitqueue_head(&new->sb_wait); |
| 279 | init_waitqueue_head(&new->recovery_wait); | ||
| 279 | new->reshape_position = MaxSector; | 280 | new->reshape_position = MaxSector; |
| 280 | new->resync_max = MaxSector; | 281 | new->resync_max = MaxSector; |
| 281 | new->level = LEVEL_NONE; | 282 | new->level = LEVEL_NONE; |
| @@ -5665,7 +5666,6 @@ void md_do_sync(mddev_t *mddev) | |||
| 5665 | window/2,(unsigned long long) max_sectors/2); | 5666 | window/2,(unsigned long long) max_sectors/2); |
| 5666 | 5667 | ||
| 5667 | atomic_set(&mddev->recovery_active, 0); | 5668 | atomic_set(&mddev->recovery_active, 0); |
| 5668 | init_waitqueue_head(&mddev->recovery_wait); | ||
| 5669 | last_check = 0; | 5669 | last_check = 0; |
| 5670 | 5670 | ||
| 5671 | if (j>2) { | 5671 | if (j>2) { |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 425958a76b84..c37e256b1176 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
| @@ -2002,6 +2002,7 @@ static int __handle_issuing_new_read_requests5(struct stripe_head *sh, | |||
| 2002 | * have quiesced. | 2002 | * have quiesced. |
| 2003 | */ | 2003 | */ |
| 2004 | if ((s->uptodate == disks - 1) && | 2004 | if ((s->uptodate == disks - 1) && |
| 2005 | (s->failed && disk_idx == s->failed_num) && | ||
| 2005 | !test_bit(STRIPE_OP_CHECK, &sh->ops.pending)) { | 2006 | !test_bit(STRIPE_OP_CHECK, &sh->ops.pending)) { |
| 2006 | set_bit(STRIPE_OP_COMPUTE_BLK, &sh->ops.pending); | 2007 | set_bit(STRIPE_OP_COMPUTE_BLK, &sh->ops.pending); |
| 2007 | set_bit(R5_Wantcompute, &dev->flags); | 2008 | set_bit(R5_Wantcompute, &dev->flags); |
| @@ -2087,7 +2088,9 @@ static void handle_issuing_new_read_requests6(struct stripe_head *sh, | |||
| 2087 | /* we would like to get this block, possibly | 2088 | /* we would like to get this block, possibly |
| 2088 | * by computing it, but we might not be able to | 2089 | * by computing it, but we might not be able to |
| 2089 | */ | 2090 | */ |
| 2090 | if (s->uptodate == disks-1) { | 2091 | if ((s->uptodate == disks - 1) && |
| 2092 | (s->failed && (i == r6s->failed_num[0] || | ||
| 2093 | i == r6s->failed_num[1]))) { | ||
| 2091 | pr_debug("Computing stripe %llu block %d\n", | 2094 | pr_debug("Computing stripe %llu block %d\n", |
| 2092 | (unsigned long long)sh->sector, i); | 2095 | (unsigned long long)sh->sector, i); |
| 2093 | compute_block_1(sh, i, 0); | 2096 | compute_block_1(sh, i, 0); |
| @@ -2645,6 +2648,7 @@ static void handle_stripe5(struct stripe_head *sh) | |||
| 2645 | struct r5dev *dev; | 2648 | struct r5dev *dev; |
| 2646 | unsigned long pending = 0; | 2649 | unsigned long pending = 0; |
| 2647 | mdk_rdev_t *blocked_rdev = NULL; | 2650 | mdk_rdev_t *blocked_rdev = NULL; |
| 2651 | int prexor; | ||
| 2648 | 2652 | ||
| 2649 | memset(&s, 0, sizeof(s)); | 2653 | memset(&s, 0, sizeof(s)); |
| 2650 | pr_debug("handling stripe %llu, state=%#lx cnt=%d, pd_idx=%d " | 2654 | pr_debug("handling stripe %llu, state=%#lx cnt=%d, pd_idx=%d " |
| @@ -2774,9 +2778,11 @@ static void handle_stripe5(struct stripe_head *sh) | |||
| 2774 | /* leave prexor set until postxor is done, allows us to distinguish | 2778 | /* leave prexor set until postxor is done, allows us to distinguish |
| 2775 | * a rmw from a rcw during biodrain | 2779 | * a rmw from a rcw during biodrain |
| 2776 | */ | 2780 | */ |
| 2781 | prexor = 0; | ||
| 2777 | if (test_bit(STRIPE_OP_PREXOR, &sh->ops.complete) && | 2782 | if (test_bit(STRIPE_OP_PREXOR, &sh->ops.complete) && |
| 2778 | test_bit(STRIPE_OP_POSTXOR, &sh->ops.complete)) { | 2783 | test_bit(STRIPE_OP_POSTXOR, &sh->ops.complete)) { |
| 2779 | 2784 | ||
| 2785 | prexor = 1; | ||
| 2780 | clear_bit(STRIPE_OP_PREXOR, &sh->ops.complete); | 2786 | clear_bit(STRIPE_OP_PREXOR, &sh->ops.complete); |
| 2781 | clear_bit(STRIPE_OP_PREXOR, &sh->ops.ack); | 2787 | clear_bit(STRIPE_OP_PREXOR, &sh->ops.ack); |
| 2782 | clear_bit(STRIPE_OP_PREXOR, &sh->ops.pending); | 2788 | clear_bit(STRIPE_OP_PREXOR, &sh->ops.pending); |
| @@ -2810,6 +2816,8 @@ static void handle_stripe5(struct stripe_head *sh) | |||
| 2810 | if (!test_and_set_bit( | 2816 | if (!test_and_set_bit( |
| 2811 | STRIPE_OP_IO, &sh->ops.pending)) | 2817 | STRIPE_OP_IO, &sh->ops.pending)) |
| 2812 | sh->ops.count++; | 2818 | sh->ops.count++; |
| 2819 | if (prexor) | ||
| 2820 | continue; | ||
| 2813 | if (!test_bit(R5_Insync, &dev->flags) || | 2821 | if (!test_bit(R5_Insync, &dev->flags) || |
| 2814 | (i == sh->pd_idx && s.failed == 0)) | 2822 | (i == sh->pd_idx && s.failed == 0)) |
| 2815 | set_bit(STRIPE_INSYNC, &sh->state); | 2823 | set_bit(STRIPE_INSYNC, &sh->state); |
diff --git a/drivers/media/Makefile b/drivers/media/Makefile index cc11c4c0e7e7..09a829d8a7e7 100644 --- a/drivers/media/Makefile +++ b/drivers/media/Makefile | |||
| @@ -2,12 +2,7 @@ | |||
| 2 | # Makefile for the kernel multimedia device drivers. | 2 | # Makefile for the kernel multimedia device drivers. |
| 3 | # | 3 | # |
| 4 | 4 | ||
| 5 | obj-y := common/ | 5 | obj-y += common/ video/ |
| 6 | |||
| 7 | obj-$(CONFIG_VIDEO_MEDIA) += common/ | ||
| 8 | |||
| 9 | # Since hybrid devices are here, should be compiled if DVB and/or V4L | ||
| 10 | obj-$(CONFIG_VIDEO_MEDIA) += video/ | ||
| 11 | 6 | ||
| 12 | obj-$(CONFIG_VIDEO_DEV) += radio/ | 7 | obj-$(CONFIG_VIDEO_DEV) += radio/ |
| 13 | obj-$(CONFIG_DVB_CORE) += dvb/ | 8 | obj-$(CONFIG_DVB_CORE) += dvb/ |
diff --git a/drivers/media/common/tuners/Kconfig b/drivers/media/common/tuners/Kconfig index d6206540476b..85482960d012 100644 --- a/drivers/media/common/tuners/Kconfig +++ b/drivers/media/common/tuners/Kconfig | |||
| @@ -21,6 +21,7 @@ config MEDIA_TUNER | |||
| 21 | tristate | 21 | tristate |
| 22 | default VIDEO_MEDIA && I2C | 22 | default VIDEO_MEDIA && I2C |
| 23 | depends on VIDEO_MEDIA && I2C | 23 | depends on VIDEO_MEDIA && I2C |
| 24 | select FW_LOADER if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG | ||
| 24 | select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG | 25 | select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG |
| 25 | select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG | 26 | select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMIZE && HOTPLUG |
| 26 | select MEDIA_TUNER_MT20XX if !MEDIA_TUNER_CUSTOMIZE | 27 | select MEDIA_TUNER_MT20XX if !MEDIA_TUNER_CUSTOMIZE |
diff --git a/drivers/media/common/tuners/mxl5005s.c b/drivers/media/common/tuners/mxl5005s.c index 5d05b5390f66..0dc2bef9f6a3 100644 --- a/drivers/media/common/tuners/mxl5005s.c +++ b/drivers/media/common/tuners/mxl5005s.c | |||
| @@ -101,7 +101,7 @@ enum { | |||
| 101 | MXL_QAM, | 101 | MXL_QAM, |
| 102 | MXL_ANALOG_CABLE, | 102 | MXL_ANALOG_CABLE, |
| 103 | MXL_ANALOG_OTA | 103 | MXL_ANALOG_OTA |
| 104 | } tuner_modu_type; | 104 | }; |
| 105 | 105 | ||
| 106 | /* MXL5005 Tuner Register Struct */ | 106 | /* MXL5005 Tuner Register Struct */ |
| 107 | struct TunerReg { | 107 | struct TunerReg { |
| @@ -194,7 +194,7 @@ enum { | |||
| 194 | RFSYN_DIVM, /* 88 */ | 194 | RFSYN_DIVM, /* 88 */ |
| 195 | DN_BYPASS_AGC_I2C /* 89 */ | 195 | DN_BYPASS_AGC_I2C /* 89 */ |
| 196 | #endif | 196 | #endif |
| 197 | } MXL5005_ControlName; | 197 | }; |
| 198 | 198 | ||
| 199 | /* | 199 | /* |
| 200 | * The following context is source code provided by MaxLinear. | 200 | * The following context is source code provided by MaxLinear. |
diff --git a/drivers/media/common/tuners/tda18271-common.c b/drivers/media/common/tuners/tda18271-common.c index 42b5f5d4bfe6..f1894fec32b9 100644 --- a/drivers/media/common/tuners/tda18271-common.c +++ b/drivers/media/common/tuners/tda18271-common.c | |||
| @@ -648,11 +648,11 @@ int tda18271_calc_rf_cal(struct dvb_frontend *fe, u32 *freq) | |||
| 648 | unsigned char *regs = priv->tda18271_regs; | 648 | unsigned char *regs = priv->tda18271_regs; |
| 649 | u8 val; | 649 | u8 val; |
| 650 | 650 | ||
| 651 | tda18271_lookup_map(fe, RF_CAL, freq, &val); | 651 | int ret = tda18271_lookup_map(fe, RF_CAL, freq, &val); |
| 652 | 652 | ||
| 653 | regs[R_EB14] = val; | 653 | regs[R_EB14] = val; |
| 654 | 654 | ||
| 655 | return 0; | 655 | return ret; |
| 656 | } | 656 | } |
| 657 | 657 | ||
| 658 | /* | 658 | /* |
diff --git a/drivers/media/common/tuners/tda827x.c b/drivers/media/common/tuners/tda827x.c index d30d2c9094d9..8555d9cf9051 100644 --- a/drivers/media/common/tuners/tda827x.c +++ b/drivers/media/common/tuners/tda827x.c | |||
| @@ -418,13 +418,13 @@ static void tda827xa_lna_gain(struct dvb_frontend *fe, int high, | |||
| 418 | unsigned char buf[] = {0x22, 0x01}; | 418 | unsigned char buf[] = {0x22, 0x01}; |
| 419 | int arg; | 419 | int arg; |
| 420 | int gp_func; | 420 | int gp_func; |
| 421 | struct i2c_msg msg = { .addr = priv->cfg->switch_addr, .flags = 0, | 421 | struct i2c_msg msg = { .flags = 0, .buf = buf, .len = sizeof(buf) }; |
| 422 | .buf = buf, .len = sizeof(buf) }; | ||
| 423 | 422 | ||
| 424 | if (NULL == priv->cfg) { | 423 | if (NULL == priv->cfg) { |
| 425 | dprintk("tda827x_config not defined, cannot set LNA gain!\n"); | 424 | dprintk("tda827x_config not defined, cannot set LNA gain!\n"); |
| 426 | return; | 425 | return; |
| 427 | } | 426 | } |
| 427 | msg.addr = priv->cfg->switch_addr; | ||
| 428 | if (priv->cfg->config) { | 428 | if (priv->cfg->config) { |
| 429 | if (high) | 429 | if (high) |
| 430 | dprintk("setting LNA to high gain\n"); | 430 | dprintk("setting LNA to high gain\n"); |
diff --git a/drivers/media/common/tuners/tea5761.c b/drivers/media/common/tuners/tea5761.c index b93cdef9ac73..b23dadeecd05 100644 --- a/drivers/media/common/tuners/tea5761.c +++ b/drivers/media/common/tuners/tea5761.c | |||
| @@ -295,7 +295,7 @@ struct dvb_frontend *tea5761_attach(struct dvb_frontend *fe, | |||
| 295 | { | 295 | { |
| 296 | struct tea5761_priv *priv = NULL; | 296 | struct tea5761_priv *priv = NULL; |
| 297 | 297 | ||
| 298 | if (tea5761_autodetection(i2c_adap, i2c_addr) == EINVAL) | 298 | if (tea5761_autodetection(i2c_adap, i2c_addr) != 0) |
| 299 | return NULL; | 299 | return NULL; |
| 300 | 300 | ||
| 301 | priv = kzalloc(sizeof(struct tea5761_priv), GFP_KERNEL); | 301 | priv = kzalloc(sizeof(struct tea5761_priv), GFP_KERNEL); |
diff --git a/drivers/media/common/tuners/tuner-i2c.h b/drivers/media/common/tuners/tuner-i2c.h index 3ad6c8e0b04c..cb1c7141f0c6 100644 --- a/drivers/media/common/tuners/tuner-i2c.h +++ b/drivers/media/common/tuners/tuner-i2c.h | |||
| @@ -170,4 +170,12 @@ __fail: \ | |||
| 170 | __ret; \ | 170 | __ret; \ |
| 171 | }) | 171 | }) |
| 172 | 172 | ||
| 173 | #define hybrid_tuner_report_instance_count(state) \ | ||
| 174 | ({ \ | ||
| 175 | int __ret = 0; \ | ||
| 176 | if (state) \ | ||
| 177 | __ret = state->i2c_props.count; \ | ||
| 178 | __ret; \ | ||
| 179 | }) | ||
| 180 | |||
| 173 | #endif /* __TUNER_I2C_H__ */ | 181 | #endif /* __TUNER_I2C_H__ */ |
diff --git a/drivers/media/common/tuners/tuner-simple.c b/drivers/media/common/tuners/tuner-simple.c index be8d903171b7..266c255cf0d8 100644 --- a/drivers/media/common/tuners/tuner-simple.c +++ b/drivers/media/common/tuners/tuner-simple.c | |||
| @@ -1018,8 +1018,10 @@ struct dvb_frontend *simple_tuner_attach(struct dvb_frontend *fe, | |||
| 1018 | fe->ops.i2c_gate_ctrl(fe, 1); | 1018 | fe->ops.i2c_gate_ctrl(fe, 1); |
| 1019 | 1019 | ||
| 1020 | if (1 != i2c_transfer(i2c_adap, &msg, 1)) | 1020 | if (1 != i2c_transfer(i2c_adap, &msg, 1)) |
| 1021 | tuner_warn("unable to probe %s, proceeding anyway.", | 1021 | printk(KERN_WARNING "tuner-simple %d-%04x: " |
| 1022 | tuners[type].name); | 1022 | "unable to probe %s, proceeding anyway.", |
| 1023 | i2c_adapter_id(i2c_adap), i2c_addr, | ||
| 1024 | tuners[type].name); | ||
| 1023 | 1025 | ||
| 1024 | if (fe->ops.i2c_gate_ctrl) | 1026 | if (fe->ops.i2c_gate_ctrl) |
| 1025 | fe->ops.i2c_gate_ctrl(fe, 0); | 1027 | fe->ops.i2c_gate_ctrl(fe, 0); |
diff --git a/drivers/media/common/tuners/tuner-xc2028.c b/drivers/media/common/tuners/tuner-xc2028.c index 9e9003cffc7f..0cbde17bfbb7 100644 --- a/drivers/media/common/tuners/tuner-xc2028.c +++ b/drivers/media/common/tuners/tuner-xc2028.c | |||
| @@ -46,7 +46,7 @@ module_param_string(firmware_name, firmware_name, sizeof(firmware_name), 0); | |||
| 46 | MODULE_PARM_DESC(firmware_name, "Firmware file name. Allows overriding the " | 46 | MODULE_PARM_DESC(firmware_name, "Firmware file name. Allows overriding the " |
| 47 | "default firmware name\n"); | 47 | "default firmware name\n"); |
| 48 | 48 | ||
| 49 | static LIST_HEAD(xc2028_list); | 49 | static LIST_HEAD(hybrid_tuner_instance_list); |
| 50 | static DEFINE_MUTEX(xc2028_list_mutex); | 50 | static DEFINE_MUTEX(xc2028_list_mutex); |
| 51 | 51 | ||
| 52 | /* struct for storing firmware table */ | 52 | /* struct for storing firmware table */ |
| @@ -68,12 +68,11 @@ struct firmware_properties { | |||
| 68 | }; | 68 | }; |
| 69 | 69 | ||
| 70 | struct xc2028_data { | 70 | struct xc2028_data { |
| 71 | struct list_head xc2028_list; | 71 | struct list_head hybrid_tuner_instance_list; |
| 72 | struct tuner_i2c_props i2c_props; | 72 | struct tuner_i2c_props i2c_props; |
| 73 | int (*tuner_callback) (void *dev, | 73 | int (*tuner_callback) (void *dev, |
| 74 | int command, int arg); | 74 | int command, int arg); |
| 75 | void *video_dev; | 75 | void *video_dev; |
| 76 | int count; | ||
| 77 | __u32 frequency; | 76 | __u32 frequency; |
| 78 | 77 | ||
| 79 | struct firmware_description *firm; | 78 | struct firmware_description *firm; |
| @@ -1072,20 +1071,19 @@ static int xc2028_dvb_release(struct dvb_frontend *fe) | |||
| 1072 | 1071 | ||
| 1073 | mutex_lock(&xc2028_list_mutex); | 1072 | mutex_lock(&xc2028_list_mutex); |
| 1074 | 1073 | ||
| 1075 | priv->count--; | 1074 | /* only perform final cleanup if this is the last instance */ |
| 1076 | 1075 | if (hybrid_tuner_report_instance_count(priv) == 1) { | |
| 1077 | if (!priv->count) { | ||
| 1078 | list_del(&priv->xc2028_list); | ||
| 1079 | |||
| 1080 | kfree(priv->ctrl.fname); | 1076 | kfree(priv->ctrl.fname); |
| 1081 | |||
| 1082 | free_firmware(priv); | 1077 | free_firmware(priv); |
| 1083 | kfree(priv); | ||
| 1084 | fe->tuner_priv = NULL; | ||
| 1085 | } | 1078 | } |
| 1086 | 1079 | ||
| 1080 | if (priv) | ||
| 1081 | hybrid_tuner_release_state(priv); | ||
| 1082 | |||
| 1087 | mutex_unlock(&xc2028_list_mutex); | 1083 | mutex_unlock(&xc2028_list_mutex); |
| 1088 | 1084 | ||
| 1085 | fe->tuner_priv = NULL; | ||
| 1086 | |||
| 1089 | return 0; | 1087 | return 0; |
| 1090 | } | 1088 | } |
| 1091 | 1089 | ||
| @@ -1150,7 +1148,7 @@ struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe, | |||
| 1150 | struct xc2028_config *cfg) | 1148 | struct xc2028_config *cfg) |
| 1151 | { | 1149 | { |
| 1152 | struct xc2028_data *priv; | 1150 | struct xc2028_data *priv; |
| 1153 | void *video_dev; | 1151 | int instance; |
| 1154 | 1152 | ||
| 1155 | if (debug) | 1153 | if (debug) |
| 1156 | printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n"); | 1154 | printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n"); |
| @@ -1163,48 +1161,40 @@ struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe, | |||
| 1163 | return NULL; | 1161 | return NULL; |
| 1164 | } | 1162 | } |
| 1165 | 1163 | ||
| 1166 | video_dev = cfg->i2c_adap->algo_data; | ||
| 1167 | |||
| 1168 | if (debug) | ||
| 1169 | printk(KERN_DEBUG "xc2028: video_dev =%p\n", video_dev); | ||
| 1170 | |||
| 1171 | mutex_lock(&xc2028_list_mutex); | 1164 | mutex_lock(&xc2028_list_mutex); |
| 1172 | 1165 | ||
| 1173 | list_for_each_entry(priv, &xc2028_list, xc2028_list) { | 1166 | instance = hybrid_tuner_request_state(struct xc2028_data, priv, |
| 1174 | if (&priv->i2c_props.adap->dev == &cfg->i2c_adap->dev) { | 1167 | hybrid_tuner_instance_list, |
| 1175 | video_dev = NULL; | 1168 | cfg->i2c_adap, cfg->i2c_addr, |
| 1176 | if (debug) | 1169 | "xc2028"); |
| 1177 | printk(KERN_DEBUG "xc2028: reusing device\n"); | 1170 | switch (instance) { |
| 1178 | 1171 | case 0: | |
| 1179 | break; | 1172 | /* memory allocation failure */ |
| 1180 | } | 1173 | goto fail; |
| 1181 | } | 1174 | break; |
| 1182 | 1175 | case 1: | |
| 1183 | if (video_dev) { | 1176 | /* new tuner instance */ |
| 1184 | priv = kzalloc(sizeof(*priv), GFP_KERNEL); | ||
| 1185 | if (priv == NULL) { | ||
| 1186 | mutex_unlock(&xc2028_list_mutex); | ||
| 1187 | return NULL; | ||
| 1188 | } | ||
| 1189 | |||
| 1190 | priv->i2c_props.addr = cfg->i2c_addr; | ||
| 1191 | priv->i2c_props.adap = cfg->i2c_adap; | ||
| 1192 | priv->i2c_props.name = "xc2028"; | ||
| 1193 | |||
| 1194 | priv->video_dev = video_dev; | ||
| 1195 | priv->tuner_callback = cfg->callback; | 1177 | priv->tuner_callback = cfg->callback; |
| 1196 | priv->ctrl.max_len = 13; | 1178 | priv->ctrl.max_len = 13; |
| 1197 | 1179 | ||
| 1198 | mutex_init(&priv->lock); | 1180 | mutex_init(&priv->lock); |
| 1199 | 1181 | ||
| 1200 | list_add_tail(&priv->xc2028_list, &xc2028_list); | 1182 | /* analog side (tuner-core) uses i2c_adap->algo_data. |
| 1201 | } | 1183 | * digital side is not guaranteed to have algo_data defined. |
| 1202 | 1184 | * | |
| 1203 | fe->tuner_priv = priv; | 1185 | * digital side will always have fe->dvb defined. |
| 1204 | priv->count++; | 1186 | * analog side (tuner-core) doesn't (yet) define fe->dvb. |
| 1187 | */ | ||
| 1188 | priv->video_dev = ((fe->dvb) && (fe->dvb->priv)) ? | ||
| 1189 | fe->dvb->priv : cfg->i2c_adap->algo_data; | ||
| 1205 | 1190 | ||
| 1206 | if (debug) | 1191 | fe->tuner_priv = priv; |
| 1207 | printk(KERN_DEBUG "xc2028: usage count is %i\n", priv->count); | 1192 | break; |
| 1193 | case 2: | ||
| 1194 | /* existing tuner instance */ | ||
| 1195 | fe->tuner_priv = priv; | ||
| 1196 | break; | ||
| 1197 | } | ||
| 1208 | 1198 | ||
| 1209 | memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops, | 1199 | memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops, |
| 1210 | sizeof(xc2028_dvb_tuner_ops)); | 1200 | sizeof(xc2028_dvb_tuner_ops)); |
| @@ -1217,6 +1207,11 @@ struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe, | |||
| 1217 | mutex_unlock(&xc2028_list_mutex); | 1207 | mutex_unlock(&xc2028_list_mutex); |
| 1218 | 1208 | ||
| 1219 | return fe; | 1209 | return fe; |
| 1210 | fail: | ||
| 1211 | mutex_unlock(&xc2028_list_mutex); | ||
| 1212 | |||
| 1213 | xc2028_dvb_release(fe); | ||
| 1214 | return NULL; | ||
| 1220 | } | 1215 | } |
| 1221 | 1216 | ||
| 1222 | EXPORT_SYMBOL(xc2028_attach); | 1217 | EXPORT_SYMBOL(xc2028_attach); |
diff --git a/drivers/media/dvb/b2c2/flexcop-usb.c b/drivers/media/dvb/b2c2/flexcop-usb.c index 449fb5c3d0b1..ae0d76a5d51d 100644 --- a/drivers/media/dvb/b2c2/flexcop-usb.c +++ b/drivers/media/dvb/b2c2/flexcop-usb.c | |||
| @@ -379,7 +379,7 @@ static void flexcop_usb_transfer_exit(struct flexcop_usb *fc_usb) | |||
| 379 | 379 | ||
| 380 | static int flexcop_usb_transfer_init(struct flexcop_usb *fc_usb) | 380 | static int flexcop_usb_transfer_init(struct flexcop_usb *fc_usb) |
| 381 | { | 381 | { |
| 382 | u16 frame_size = fc_usb->uintf->cur_altsetting->endpoint[0].desc.wMaxPacketSize; | 382 | u16 frame_size = le16_to_cpu(fc_usb->uintf->cur_altsetting->endpoint[0].desc.wMaxPacketSize); |
| 383 | int bufsize = B2C2_USB_NUM_ISO_URB * B2C2_USB_FRAMES_PER_ISO * frame_size,i,j,ret; | 383 | int bufsize = B2C2_USB_NUM_ISO_URB * B2C2_USB_FRAMES_PER_ISO * frame_size,i,j,ret; |
| 384 | int buffer_offset = 0; | 384 | int buffer_offset = 0; |
| 385 | 385 | ||
diff --git a/drivers/media/dvb/cinergyT2/cinergyT2.c b/drivers/media/dvb/cinergyT2/cinergyT2.c index f5010e8671b8..a824f3719f81 100644 --- a/drivers/media/dvb/cinergyT2/cinergyT2.c +++ b/drivers/media/dvb/cinergyT2/cinergyT2.c | |||
| @@ -82,22 +82,22 @@ enum cinergyt2_ep1_cmd { | |||
| 82 | 82 | ||
| 83 | struct dvbt_set_parameters_msg { | 83 | struct dvbt_set_parameters_msg { |
| 84 | uint8_t cmd; | 84 | uint8_t cmd; |
| 85 | uint32_t freq; | 85 | __le32 freq; |
| 86 | uint8_t bandwidth; | 86 | uint8_t bandwidth; |
| 87 | uint16_t tps; | 87 | __le16 tps; |
| 88 | uint8_t flags; | 88 | uint8_t flags; |
| 89 | } __attribute__((packed)); | 89 | } __attribute__((packed)); |
| 90 | 90 | ||
| 91 | struct dvbt_get_status_msg { | 91 | struct dvbt_get_status_msg { |
| 92 | uint32_t freq; | 92 | __le32 freq; |
| 93 | uint8_t bandwidth; | 93 | uint8_t bandwidth; |
| 94 | uint16_t tps; | 94 | __le16 tps; |
| 95 | uint8_t flags; | 95 | uint8_t flags; |
| 96 | uint16_t gain; | 96 | __le16 gain; |
| 97 | uint8_t snr; | 97 | uint8_t snr; |
| 98 | uint32_t viterbi_error_rate; | 98 | __le32 viterbi_error_rate; |
| 99 | uint32_t rs_error_rate; | 99 | __le32 rs_error_rate; |
| 100 | uint32_t uncorrected_block_count; | 100 | __le32 uncorrected_block_count; |
| 101 | uint8_t lock_bits; | 101 | uint8_t lock_bits; |
| 102 | uint8_t prev_lock_bits; | 102 | uint8_t prev_lock_bits; |
| 103 | } __attribute__((packed)); | 103 | } __attribute__((packed)); |
| @@ -136,6 +136,7 @@ struct cinergyt2 { | |||
| 136 | wait_queue_head_t poll_wq; | 136 | wait_queue_head_t poll_wq; |
| 137 | int pending_fe_events; | 137 | int pending_fe_events; |
| 138 | int disconnect_pending; | 138 | int disconnect_pending; |
| 139 | unsigned int uncorrected_block_count; | ||
| 139 | atomic_t inuse; | 140 | atomic_t inuse; |
| 140 | 141 | ||
| 141 | void *streambuf; | 142 | void *streambuf; |
| @@ -147,7 +148,7 @@ struct cinergyt2 { | |||
| 147 | char phys[64]; | 148 | char phys[64]; |
| 148 | struct delayed_work rc_query_work; | 149 | struct delayed_work rc_query_work; |
| 149 | int rc_input_event; | 150 | int rc_input_event; |
| 150 | u32 rc_last_code; | 151 | __le32 rc_last_code; |
| 151 | unsigned long last_event_jiffies; | 152 | unsigned long last_event_jiffies; |
| 152 | #endif | 153 | #endif |
| 153 | }; | 154 | }; |
| @@ -160,7 +161,7 @@ enum { | |||
| 160 | 161 | ||
| 161 | struct cinergyt2_rc_event { | 162 | struct cinergyt2_rc_event { |
| 162 | char type; | 163 | char type; |
| 163 | uint32_t value; | 164 | __le32 value; |
| 164 | } __attribute__((packed)); | 165 | } __attribute__((packed)); |
| 165 | 166 | ||
| 166 | static const uint32_t rc_keys[] = { | 167 | static const uint32_t rc_keys[] = { |
| @@ -619,8 +620,11 @@ static int cinergyt2_ioctl (struct inode *inode, struct file *file, | |||
| 619 | { | 620 | { |
| 620 | uint32_t unc_count; | 621 | uint32_t unc_count; |
| 621 | 622 | ||
| 622 | unc_count = stat->uncorrected_block_count; | 623 | if (mutex_lock_interruptible(&cinergyt2->sem)) |
| 623 | stat->uncorrected_block_count = 0; | 624 | return -ERESTARTSYS; |
| 625 | unc_count = cinergyt2->uncorrected_block_count; | ||
| 626 | cinergyt2->uncorrected_block_count = 0; | ||
| 627 | mutex_unlock(&cinergyt2->sem); | ||
| 624 | 628 | ||
| 625 | /* UNC are already converted to host byte order... */ | 629 | /* UNC are already converted to host byte order... */ |
| 626 | return put_user(unc_count,(__u32 __user *) arg); | 630 | return put_user(unc_count,(__u32 __user *) arg); |
| @@ -769,7 +773,7 @@ static void cinergyt2_query_rc (struct work_struct *work) | |||
| 769 | input_sync(cinergyt2->rc_input_dev); | 773 | input_sync(cinergyt2->rc_input_dev); |
| 770 | cinergyt2->rc_input_event = KEY_MAX; | 774 | cinergyt2->rc_input_event = KEY_MAX; |
| 771 | } | 775 | } |
| 772 | cinergyt2->rc_last_code = ~0; | 776 | cinergyt2->rc_last_code = cpu_to_le32(~0); |
| 773 | } | 777 | } |
| 774 | goto out; | 778 | goto out; |
| 775 | } | 779 | } |
| @@ -780,7 +784,7 @@ static void cinergyt2_query_rc (struct work_struct *work) | |||
| 780 | n, le32_to_cpu(rc_events[n].value), rc_events[n].type); | 784 | n, le32_to_cpu(rc_events[n].value), rc_events[n].type); |
| 781 | 785 | ||
| 782 | if (rc_events[n].type == CINERGYT2_RC_EVENT_TYPE_NEC && | 786 | if (rc_events[n].type == CINERGYT2_RC_EVENT_TYPE_NEC && |
| 783 | rc_events[n].value == ~0) { | 787 | rc_events[n].value == cpu_to_le32(~0)) { |
| 784 | /* keyrepeat bit -> just repeat last rc_input_event */ | 788 | /* keyrepeat bit -> just repeat last rc_input_event */ |
| 785 | } else { | 789 | } else { |
| 786 | cinergyt2->rc_input_event = KEY_MAX; | 790 | cinergyt2->rc_input_event = KEY_MAX; |
| @@ -795,7 +799,7 @@ static void cinergyt2_query_rc (struct work_struct *work) | |||
| 795 | 799 | ||
| 796 | if (cinergyt2->rc_input_event != KEY_MAX) { | 800 | if (cinergyt2->rc_input_event != KEY_MAX) { |
| 797 | if (rc_events[n].value == cinergyt2->rc_last_code && | 801 | if (rc_events[n].value == cinergyt2->rc_last_code && |
| 798 | cinergyt2->rc_last_code != ~0) { | 802 | cinergyt2->rc_last_code != cpu_to_le32(~0)) { |
| 799 | /* emit a key-up so the double event is recognized */ | 803 | /* emit a key-up so the double event is recognized */ |
| 800 | dprintk(1, "rc_input_event=%d UP\n", cinergyt2->rc_input_event); | 804 | dprintk(1, "rc_input_event=%d UP\n", cinergyt2->rc_input_event); |
| 801 | input_report_key(cinergyt2->rc_input_dev, | 805 | input_report_key(cinergyt2->rc_input_dev, |
| @@ -829,7 +833,7 @@ static int cinergyt2_register_rc(struct cinergyt2 *cinergyt2) | |||
| 829 | usb_make_path(cinergyt2->udev, cinergyt2->phys, sizeof(cinergyt2->phys)); | 833 | usb_make_path(cinergyt2->udev, cinergyt2->phys, sizeof(cinergyt2->phys)); |
| 830 | strlcat(cinergyt2->phys, "/input0", sizeof(cinergyt2->phys)); | 834 | strlcat(cinergyt2->phys, "/input0", sizeof(cinergyt2->phys)); |
| 831 | cinergyt2->rc_input_event = KEY_MAX; | 835 | cinergyt2->rc_input_event = KEY_MAX; |
| 832 | cinergyt2->rc_last_code = ~0; | 836 | cinergyt2->rc_last_code = cpu_to_le32(~0); |
| 833 | INIT_DELAYED_WORK(&cinergyt2->rc_query_work, cinergyt2_query_rc); | 837 | INIT_DELAYED_WORK(&cinergyt2->rc_query_work, cinergyt2_query_rc); |
| 834 | 838 | ||
| 835 | input_dev->name = DRIVER_NAME " remote control"; | 839 | input_dev->name = DRIVER_NAME " remote control"; |
| @@ -840,8 +844,8 @@ static int cinergyt2_register_rc(struct cinergyt2 *cinergyt2) | |||
| 840 | input_dev->keycodesize = 0; | 844 | input_dev->keycodesize = 0; |
| 841 | input_dev->keycodemax = 0; | 845 | input_dev->keycodemax = 0; |
| 842 | input_dev->id.bustype = BUS_USB; | 846 | input_dev->id.bustype = BUS_USB; |
| 843 | input_dev->id.vendor = cinergyt2->udev->descriptor.idVendor; | 847 | input_dev->id.vendor = le16_to_cpu(cinergyt2->udev->descriptor.idVendor); |
| 844 | input_dev->id.product = cinergyt2->udev->descriptor.idProduct; | 848 | input_dev->id.product = le16_to_cpu(cinergyt2->udev->descriptor.idProduct); |
| 845 | input_dev->id.version = 1; | 849 | input_dev->id.version = 1; |
| 846 | input_dev->dev.parent = &cinergyt2->udev->dev; | 850 | input_dev->dev.parent = &cinergyt2->udev->dev; |
| 847 | 851 | ||
| @@ -889,18 +893,16 @@ static void cinergyt2_query (struct work_struct *work) | |||
| 889 | char cmd [] = { CINERGYT2_EP1_GET_TUNER_STATUS }; | 893 | char cmd [] = { CINERGYT2_EP1_GET_TUNER_STATUS }; |
| 890 | struct dvbt_get_status_msg *s = &cinergyt2->status; | 894 | struct dvbt_get_status_msg *s = &cinergyt2->status; |
| 891 | uint8_t lock_bits; | 895 | uint8_t lock_bits; |
| 892 | uint32_t unc; | ||
| 893 | 896 | ||
| 894 | if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->sem)) | 897 | if (cinergyt2->disconnect_pending || mutex_lock_interruptible(&cinergyt2->sem)) |
| 895 | return; | 898 | return; |
| 896 | 899 | ||
| 897 | unc = s->uncorrected_block_count; | ||
| 898 | lock_bits = s->lock_bits; | 900 | lock_bits = s->lock_bits; |
| 899 | 901 | ||
| 900 | cinergyt2_command(cinergyt2, cmd, sizeof(cmd), (char *) s, sizeof(*s)); | 902 | cinergyt2_command(cinergyt2, cmd, sizeof(cmd), (char *) s, sizeof(*s)); |
| 901 | 903 | ||
| 902 | unc += le32_to_cpu(s->uncorrected_block_count); | 904 | cinergyt2->uncorrected_block_count += |
| 903 | s->uncorrected_block_count = unc; | 905 | le32_to_cpu(s->uncorrected_block_count); |
| 904 | 906 | ||
| 905 | if (lock_bits != s->lock_bits) { | 907 | if (lock_bits != s->lock_bits) { |
| 906 | wake_up_interruptible(&cinergyt2->poll_wq); | 908 | wake_up_interruptible(&cinergyt2->poll_wq); |
diff --git a/drivers/media/dvb/dvb-core/dvb_net.c b/drivers/media/dvb/dvb-core/dvb_net.c index 56d871cfd7fc..c2334aef4143 100644 --- a/drivers/media/dvb/dvb-core/dvb_net.c +++ b/drivers/media/dvb/dvb-core/dvb_net.c | |||
| @@ -168,7 +168,7 @@ struct dvb_net_priv { | |||
| 168 | * stolen from eth.c out of the linux kernel, hacked for dvb-device | 168 | * stolen from eth.c out of the linux kernel, hacked for dvb-device |
| 169 | * by Michael Holzt <kju@debian.org> | 169 | * by Michael Holzt <kju@debian.org> |
| 170 | */ | 170 | */ |
| 171 | static unsigned short dvb_net_eth_type_trans(struct sk_buff *skb, | 171 | static __be16 dvb_net_eth_type_trans(struct sk_buff *skb, |
| 172 | struct net_device *dev) | 172 | struct net_device *dev) |
| 173 | { | 173 | { |
| 174 | struct ethhdr *eth; | 174 | struct ethhdr *eth; |
| @@ -277,10 +277,10 @@ static int handle_one_ule_extension( struct dvb_net_priv *p ) | |||
| 277 | if(ext_len >= 0) { | 277 | if(ext_len >= 0) { |
| 278 | p->ule_next_hdr += ext_len; | 278 | p->ule_next_hdr += ext_len; |
| 279 | if (!p->ule_bridged) { | 279 | if (!p->ule_bridged) { |
| 280 | p->ule_sndu_type = ntohs(*(unsigned short *)p->ule_next_hdr); | 280 | p->ule_sndu_type = ntohs(*(__be16 *)p->ule_next_hdr); |
| 281 | p->ule_next_hdr += 2; | 281 | p->ule_next_hdr += 2; |
| 282 | } else { | 282 | } else { |
| 283 | p->ule_sndu_type = ntohs(*(unsigned short *)(p->ule_next_hdr + ((p->ule_dbit ? 2 : 3) * ETH_ALEN))); | 283 | p->ule_sndu_type = ntohs(*(__be16 *)(p->ule_next_hdr + ((p->ule_dbit ? 2 : 3) * ETH_ALEN))); |
| 284 | /* This assures the extension handling loop will terminate. */ | 284 | /* This assures the extension handling loop will terminate. */ |
| 285 | } | 285 | } |
| 286 | } | 286 | } |
| @@ -294,7 +294,7 @@ static int handle_one_ule_extension( struct dvb_net_priv *p ) | |||
| 294 | if (ule_optional_ext_handlers[htype]) | 294 | if (ule_optional_ext_handlers[htype]) |
| 295 | (void)ule_optional_ext_handlers[htype]( p ); | 295 | (void)ule_optional_ext_handlers[htype]( p ); |
| 296 | p->ule_next_hdr += ext_len; | 296 | p->ule_next_hdr += ext_len; |
| 297 | p->ule_sndu_type = ntohs( *(unsigned short *)(p->ule_next_hdr-2) ); | 297 | p->ule_sndu_type = ntohs( *(__be16 *)(p->ule_next_hdr-2) ); |
| 298 | /* | 298 | /* |
| 299 | * note: the length of the next header type is included in the | 299 | * note: the length of the next header type is included in the |
| 300 | * length of THIS optional extension header | 300 | * length of THIS optional extension header |
| @@ -594,8 +594,8 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len ) | |||
| 594 | /* Check for complete payload. */ | 594 | /* Check for complete payload. */ |
| 595 | if (priv->ule_sndu_remain <= 0) { | 595 | if (priv->ule_sndu_remain <= 0) { |
| 596 | /* Check CRC32, we've got it in our skb already. */ | 596 | /* Check CRC32, we've got it in our skb already. */ |
| 597 | unsigned short ulen = htons(priv->ule_sndu_len); | 597 | __be16 ulen = htons(priv->ule_sndu_len); |
| 598 | unsigned short utype = htons(priv->ule_sndu_type); | 598 | __be16 utype = htons(priv->ule_sndu_type); |
| 599 | const u8 *tail; | 599 | const u8 *tail; |
| 600 | struct kvec iov[3] = { | 600 | struct kvec iov[3] = { |
| 601 | { &ulen, sizeof ulen }, | 601 | { &ulen, sizeof ulen }, |
diff --git a/drivers/media/dvb/dvb-usb/Kconfig b/drivers/media/dvb/dvb-usb/Kconfig index cf4584e48b6d..f00a0eb40420 100644 --- a/drivers/media/dvb/dvb-usb/Kconfig +++ b/drivers/media/dvb/dvb-usb/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config DVB_USB | 1 | config DVB_USB |
| 2 | tristate "Support for various USB DVB devices" | 2 | tristate "Support for various USB DVB devices" |
| 3 | depends on DVB_CORE && USB && I2C | 3 | depends on DVB_CORE && USB && I2C && INPUT |
| 4 | depends on HOTPLUG # due to FW_LOADER | 4 | depends on HOTPLUG # due to FW_LOADER |
| 5 | select FW_LOADER | 5 | select FW_LOADER |
| 6 | help | 6 | help |
diff --git a/drivers/media/dvb/dvb-usb/dib0700_devices.c b/drivers/media/dvb/dvb-usb/dib0700_devices.c index 346223856f59..c4d40fe01d57 100644 --- a/drivers/media/dvb/dvb-usb/dib0700_devices.c +++ b/drivers/media/dvb/dvb-usb/dib0700_devices.c | |||
| @@ -111,8 +111,8 @@ static int bristol_tuner_attach(struct dvb_usb_adapter *adap) | |||
| 111 | struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1); | 111 | struct i2c_adapter *tun_i2c = dib3000mc_get_tuner_i2c_master(adap->fe, 1); |
| 112 | s8 a; | 112 | s8 a; |
| 113 | int if1=1220; | 113 | int if1=1220; |
| 114 | if (adap->dev->udev->descriptor.idVendor == USB_VID_HAUPPAUGE && | 114 | if (adap->dev->udev->descriptor.idVendor == cpu_to_le16(USB_VID_HAUPPAUGE) && |
| 115 | adap->dev->udev->descriptor.idProduct == USB_PID_HAUPPAUGE_NOVA_T_500_2) { | 115 | adap->dev->udev->descriptor.idProduct == cpu_to_le16(USB_PID_HAUPPAUGE_NOVA_T_500_2)) { |
| 116 | if (!eeprom_read(prim_i2c,0x59 + adap->id,&a)) if1=1220+a; | 116 | if (!eeprom_read(prim_i2c,0x59 + adap->id,&a)) if1=1220+a; |
| 117 | } | 117 | } |
| 118 | return dvb_attach(mt2060_attach,adap->fe, tun_i2c,&bristol_mt2060_config[adap->id], | 118 | return dvb_attach(mt2060_attach,adap->fe, tun_i2c,&bristol_mt2060_config[adap->id], |
| @@ -402,8 +402,8 @@ static int stk7700ph_frontend_attach(struct dvb_usb_adapter *adap) | |||
| 402 | { | 402 | { |
| 403 | struct usb_device_descriptor *desc = &adap->dev->udev->descriptor; | 403 | struct usb_device_descriptor *desc = &adap->dev->udev->descriptor; |
| 404 | 404 | ||
| 405 | if (desc->idVendor == USB_VID_PINNACLE && | 405 | if (desc->idVendor == cpu_to_le16(USB_VID_PINNACLE) && |
| 406 | desc->idProduct == USB_PID_PINNACLE_EXPRESSCARD_320CX) | 406 | desc->idProduct == cpu_to_le16(USB_PID_PINNACLE_EXPRESSCARD_320CX)) |
| 407 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); | 407 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); |
| 408 | else | 408 | else |
| 409 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); | 409 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); |
| @@ -845,8 +845,8 @@ static int stk7700p_tuner_attach(struct dvb_usb_adapter *adap) | |||
| 845 | struct i2c_adapter *tun_i2c; | 845 | struct i2c_adapter *tun_i2c; |
| 846 | s8 a; | 846 | s8 a; |
| 847 | int if1=1220; | 847 | int if1=1220; |
| 848 | if (adap->dev->udev->descriptor.idVendor == USB_VID_HAUPPAUGE && | 848 | if (adap->dev->udev->descriptor.idVendor == cpu_to_le16(USB_VID_HAUPPAUGE) && |
| 849 | adap->dev->udev->descriptor.idProduct == USB_PID_HAUPPAUGE_NOVA_T_STICK) { | 849 | adap->dev->udev->descriptor.idProduct == cpu_to_le16(USB_PID_HAUPPAUGE_NOVA_T_STICK)) { |
| 850 | if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+a; | 850 | if (!eeprom_read(prim_i2c,0x58,&a)) if1=1220+a; |
| 851 | } | 851 | } |
| 852 | if (st->is_dib7000pc) | 852 | if (st->is_dib7000pc) |
| @@ -990,11 +990,12 @@ static struct dib7000p_config dib7070p_dib7000p_config = { | |||
| 990 | /* STK7070P */ | 990 | /* STK7070P */ |
| 991 | static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap) | 991 | static int stk7070p_frontend_attach(struct dvb_usb_adapter *adap) |
| 992 | { | 992 | { |
| 993 | if (adap->dev->udev->descriptor.idVendor == USB_VID_PINNACLE && | 993 | struct usb_device_descriptor *p = &adap->dev->udev->descriptor; |
| 994 | adap->dev->udev->descriptor.idProduct == USB_PID_PINNACLE_PCTV72E) | 994 | if (p->idVendor == cpu_to_le16(USB_VID_PINNACLE) && |
| 995 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); | 995 | p->idProduct == cpu_to_le16(USB_PID_PINNACLE_PCTV72E)) |
| 996 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 0); | ||
| 996 | else | 997 | else |
| 997 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); | 998 | dib0700_set_gpio(adap->dev, GPIO6, GPIO_OUT, 1); |
| 998 | msleep(10); | 999 | msleep(10); |
| 999 | dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1); | 1000 | dib0700_set_gpio(adap->dev, GPIO9, GPIO_OUT, 1); |
| 1000 | dib0700_set_gpio(adap->dev, GPIO4, GPIO_OUT, 1); | 1001 | dib0700_set_gpio(adap->dev, GPIO4, GPIO_OUT, 1); |
diff --git a/drivers/media/dvb/dvb-usb/dvb-usb-firmware.c b/drivers/media/dvb/dvb-usb/dvb-usb-firmware.c index e1112e39fb63..733a7ff7b207 100644 --- a/drivers/media/dvb/dvb-usb/dvb-usb-firmware.c +++ b/drivers/media/dvb/dvb-usb/dvb-usb-firmware.c | |||
| @@ -127,7 +127,7 @@ int dvb_usb_get_hexline(const struct firmware *fw, struct hexline *hx, | |||
| 127 | if ((*pos + hx->len + 4) >= fw->size) | 127 | if ((*pos + hx->len + 4) >= fw->size) |
| 128 | return -EINVAL; | 128 | return -EINVAL; |
| 129 | 129 | ||
| 130 | hx->addr = le16_to_cpu( *((u16 *) &b[1]) ); | 130 | hx->addr = b[1] | (b[2] << 8); |
| 131 | hx->type = b[3]; | 131 | hx->type = b[3]; |
| 132 | 132 | ||
| 133 | if (hx->type == 0x04) { | 133 | if (hx->type == 0x04) { |
diff --git a/drivers/media/dvb/dvb-usb/gp8psk.c b/drivers/media/dvb/dvb-usb/gp8psk.c index 9a942afaf0af..2653120673b7 100644 --- a/drivers/media/dvb/dvb-usb/gp8psk.c +++ b/drivers/media/dvb/dvb-usb/gp8psk.c | |||
| @@ -146,24 +146,24 @@ static int gp8psk_power_ctrl(struct dvb_usb_device *d, int onoff) | |||
| 146 | if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM) | 146 | if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM) |
| 147 | if (! (status & bm8pskFW_Loaded)) /* BCM4500 firmware loaded */ | 147 | if (! (status & bm8pskFW_Loaded)) /* BCM4500 firmware loaded */ |
| 148 | if(gp8psk_load_bcm4500fw(d)) | 148 | if(gp8psk_load_bcm4500fw(d)) |
| 149 | return EINVAL; | 149 | return -EINVAL; |
| 150 | 150 | ||
| 151 | if (! (status & bmIntersilOn)) /* LNB Power */ | 151 | if (! (status & bmIntersilOn)) /* LNB Power */ |
| 152 | if (gp8psk_usb_in_op(d, START_INTERSIL, 1, 0, | 152 | if (gp8psk_usb_in_op(d, START_INTERSIL, 1, 0, |
| 153 | &buf, 1)) | 153 | &buf, 1)) |
| 154 | return EINVAL; | 154 | return -EINVAL; |
| 155 | 155 | ||
| 156 | /* Set DVB mode to 1 */ | 156 | /* Set DVB mode to 1 */ |
| 157 | if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM) | 157 | if (gp_product_id == USB_PID_GENPIX_8PSK_REV_1_WARM) |
| 158 | if (gp8psk_usb_out_op(d, SET_DVB_MODE, 1, 0, NULL, 0)) | 158 | if (gp8psk_usb_out_op(d, SET_DVB_MODE, 1, 0, NULL, 0)) |
| 159 | return EINVAL; | 159 | return -EINVAL; |
| 160 | /* Abort possible TS (if previous tune crashed) */ | 160 | /* Abort possible TS (if previous tune crashed) */ |
| 161 | if (gp8psk_usb_out_op(d, ARM_TRANSFER, 0, 0, NULL, 0)) | 161 | if (gp8psk_usb_out_op(d, ARM_TRANSFER, 0, 0, NULL, 0)) |
| 162 | return EINVAL; | 162 | return -EINVAL; |
| 163 | } else { | 163 | } else { |
| 164 | /* Turn off LNB power */ | 164 | /* Turn off LNB power */ |
| 165 | if (gp8psk_usb_in_op(d, START_INTERSIL, 0, 0, &buf, 1)) | 165 | if (gp8psk_usb_in_op(d, START_INTERSIL, 0, 0, &buf, 1)) |
| 166 | return EINVAL; | 166 | return -EINVAL; |
| 167 | /* Turn off 8psk power */ | 167 | /* Turn off 8psk power */ |
| 168 | if (gp8psk_usb_in_op(d, BOOT_8PSK, 0, 0, &buf, 1)) | 168 | if (gp8psk_usb_in_op(d, BOOT_8PSK, 0, 0, &buf, 1)) |
| 169 | return -EINVAL; | 169 | return -EINVAL; |
diff --git a/drivers/media/dvb/dvb-usb/m920x.c b/drivers/media/dvb/dvb-usb/m920x.c index a12e6f784fda..54626a0dbf68 100644 --- a/drivers/media/dvb/dvb-usb/m920x.c +++ b/drivers/media/dvb/dvb-usb/m920x.c | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include "qt1010.h" | 16 | #include "qt1010.h" |
| 17 | #include "tda1004x.h" | 17 | #include "tda1004x.h" |
| 18 | #include "tda827x.h" | 18 | #include "tda827x.h" |
| 19 | #include <asm/unaligned.h> | ||
| 19 | 20 | ||
| 20 | /* debug */ | 21 | /* debug */ |
| 21 | static int dvb_usb_m920x_debug; | 22 | static int dvb_usb_m920x_debug; |
| @@ -347,13 +348,13 @@ static int m920x_firmware_download(struct usb_device *udev, const struct firmwar | |||
| 347 | 348 | ||
| 348 | for (pass = 0; pass < 2; pass++) { | 349 | for (pass = 0; pass < 2; pass++) { |
| 349 | for (i = 0; i + (sizeof(u16) * 3) < fw->size;) { | 350 | for (i = 0; i + (sizeof(u16) * 3) < fw->size;) { |
| 350 | value = le16_to_cpu(*(u16 *)(fw->data + i)); | 351 | value = get_unaligned_le16(fw->data + i); |
| 351 | i += sizeof(u16); | 352 | i += sizeof(u16); |
| 352 | 353 | ||
| 353 | index = le16_to_cpu(*(u16 *)(fw->data + i)); | 354 | index = get_unaligned_le16(fw->data + i); |
| 354 | i += sizeof(u16); | 355 | i += sizeof(u16); |
| 355 | 356 | ||
| 356 | size = le16_to_cpu(*(u16 *)(fw->data + i)); | 357 | size = get_unaligned_le16(fw->data + i); |
| 357 | i += sizeof(u16); | 358 | i += sizeof(u16); |
| 358 | 359 | ||
| 359 | if (pass == 1) { | 360 | if (pass == 1) { |
diff --git a/drivers/media/dvb/frontends/dib0070.h b/drivers/media/dvb/frontends/dib0070.h index 786e37d33889..3eedfdf505bc 100644 --- a/drivers/media/dvb/frontends/dib0070.h +++ b/drivers/media/dvb/frontends/dib0070.h | |||
| @@ -37,7 +37,20 @@ struct dib0070_config { | |||
| 37 | u8 flip_chip; | 37 | u8 flip_chip; |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | extern struct dvb_frontend * dib0070_attach(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dib0070_config *cfg); | 40 | #if defined(CONFIG_DVB_TUNER_DIB0070) || (defined(CONFIG_DVB_TUNER_DIB0070_MODULE) && defined(MODULE)) |
| 41 | extern struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, | ||
| 42 | struct i2c_adapter *i2c, | ||
| 43 | struct dib0070_config *cfg); | ||
| 44 | #else | ||
| 45 | static inline struct dvb_frontend *dib0070_attach(struct dvb_frontend *fe, | ||
| 46 | struct i2c_adapter *i2c, | ||
| 47 | struct dib0070_config *cfg) | ||
| 48 | { | ||
| 49 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | ||
| 50 | return NULL; | ||
| 51 | } | ||
| 52 | #endif | ||
| 53 | |||
| 41 | extern void dib0070_ctrl_agc_filter(struct dvb_frontend *, uint8_t open); | 54 | extern void dib0070_ctrl_agc_filter(struct dvb_frontend *, uint8_t open); |
| 42 | extern u16 dib0070_wbd_offset(struct dvb_frontend *); | 55 | extern u16 dib0070_wbd_offset(struct dvb_frontend *); |
| 43 | 56 | ||
diff --git a/drivers/media/dvb/frontends/dib7000p.h b/drivers/media/dvb/frontends/dib7000p.h index 081bd81f3da2..07c4d12ed5b7 100644 --- a/drivers/media/dvb/frontends/dib7000p.h +++ b/drivers/media/dvb/frontends/dib7000p.h | |||
| @@ -37,7 +37,20 @@ struct dib7000p_config { | |||
| 37 | 37 | ||
| 38 | #define DEFAULT_DIB7000P_I2C_ADDRESS 18 | 38 | #define DEFAULT_DIB7000P_I2C_ADDRESS 18 |
| 39 | 39 | ||
| 40 | extern struct dvb_frontend * dib7000p_attach(struct i2c_adapter *i2c_adap, u8 i2c_addr, struct dib7000p_config *cfg); | 40 | #if defined(CONFIG_DVB_DIB7000P) || (defined(CONFIG_DVB_DIB7000P_MODULE) && defined(MODULE)) |
| 41 | extern struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, | ||
| 42 | u8 i2c_addr, | ||
| 43 | struct dib7000p_config *cfg); | ||
| 44 | #else | ||
| 45 | static inline struct dvb_frontend *dib7000p_attach(struct i2c_adapter *i2c_adap, | ||
| 46 | u8 i2c_addr, | ||
| 47 | struct dib7000p_config *cfg) | ||
| 48 | { | ||
| 49 | printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); | ||
| 50 | return NULL; | ||
| 51 | } | ||
| 52 | #endif | ||
| 53 | |||
| 41 | extern int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_addr, struct dib7000p_config cfg[]); | 54 | extern int dib7000p_i2c_enumeration(struct i2c_adapter *i2c, int no_of_demods, u8 default_addr, struct dib7000p_config cfg[]); |
| 42 | 55 | ||
| 43 | extern struct i2c_adapter * dib7000p_get_i2c_master(struct dvb_frontend *, enum dibx000_i2c_interface, int); | 56 | extern struct i2c_adapter * dib7000p_get_i2c_master(struct dvb_frontend *, enum dibx000_i2c_interface, int); |
diff --git a/drivers/media/dvb/frontends/or51132.c b/drivers/media/dvb/frontends/or51132.c index c7b5785f81f2..5ed32544de39 100644 --- a/drivers/media/dvb/frontends/or51132.c +++ b/drivers/media/dvb/frontends/or51132.c | |||
| @@ -126,7 +126,7 @@ static int or51132_readreg(struct or51132_state *state, u8 reg) | |||
| 126 | reg, err); | 126 | reg, err); |
| 127 | return -EREMOTEIO; | 127 | return -EREMOTEIO; |
| 128 | } | 128 | } |
| 129 | return le16_to_cpup((u16*)buf); | 129 | return buf[0] | (buf[1] << 8); |
| 130 | } | 130 | } |
| 131 | 131 | ||
| 132 | static int or51132_load_firmware (struct dvb_frontend* fe, const struct firmware *fw) | 132 | static int or51132_load_firmware (struct dvb_frontend* fe, const struct firmware *fw) |
| @@ -140,9 +140,9 @@ static int or51132_load_firmware (struct dvb_frontend* fe, const struct firmware | |||
| 140 | dprintk("Firmware is %Zd bytes\n",fw->size); | 140 | dprintk("Firmware is %Zd bytes\n",fw->size); |
| 141 | 141 | ||
| 142 | /* Get size of firmware A and B */ | 142 | /* Get size of firmware A and B */ |
| 143 | firmwareAsize = le32_to_cpu(*((u32*)fw->data)); | 143 | firmwareAsize = le32_to_cpu(*((__le32*)fw->data)); |
| 144 | dprintk("FirmwareA is %i bytes\n",firmwareAsize); | 144 | dprintk("FirmwareA is %i bytes\n",firmwareAsize); |
| 145 | firmwareBsize = le32_to_cpu(*((u32*)(fw->data+4))); | 145 | firmwareBsize = le32_to_cpu(*((__le32*)(fw->data+4))); |
| 146 | dprintk("FirmwareB is %i bytes\n",firmwareBsize); | 146 | dprintk("FirmwareB is %i bytes\n",firmwareBsize); |
| 147 | 147 | ||
| 148 | /* Upload firmware */ | 148 | /* Upload firmware */ |
diff --git a/drivers/media/dvb/ttpci/av7110.c b/drivers/media/dvb/ttpci/av7110.c index 747e7f1a6267..f05d43d8b5cf 100644 --- a/drivers/media/dvb/ttpci/av7110.c +++ b/drivers/media/dvb/ttpci/av7110.c | |||
| @@ -51,6 +51,7 @@ | |||
| 51 | #include <linux/crc32.h> | 51 | #include <linux/crc32.h> |
| 52 | #include <linux/i2c.h> | 52 | #include <linux/i2c.h> |
| 53 | #include <linux/kthread.h> | 53 | #include <linux/kthread.h> |
| 54 | #include <asm/unaligned.h> | ||
| 54 | 55 | ||
| 55 | #include <asm/system.h> | 56 | #include <asm/system.h> |
| 56 | 57 | ||
| @@ -1461,9 +1462,9 @@ static int check_firmware(struct av7110* av7110) | |||
| 1461 | ptr += 4; | 1462 | ptr += 4; |
| 1462 | 1463 | ||
| 1463 | /* check dpram file */ | 1464 | /* check dpram file */ |
| 1464 | crc = ntohl(*(u32*) ptr); | 1465 | crc = get_unaligned_be32(ptr); |
| 1465 | ptr += 4; | 1466 | ptr += 4; |
| 1466 | len = ntohl(*(u32*) ptr); | 1467 | len = get_unaligned_be32(ptr); |
| 1467 | ptr += 4; | 1468 | ptr += 4; |
| 1468 | if (len >= 512) { | 1469 | if (len >= 512) { |
| 1469 | printk("dvb-ttpci: dpram file is way too big.\n"); | 1470 | printk("dvb-ttpci: dpram file is way too big.\n"); |
| @@ -1478,9 +1479,9 @@ static int check_firmware(struct av7110* av7110) | |||
| 1478 | ptr += len; | 1479 | ptr += len; |
| 1479 | 1480 | ||
| 1480 | /* check root file */ | 1481 | /* check root file */ |
| 1481 | crc = ntohl(*(u32*) ptr); | 1482 | crc = get_unaligned_be32(ptr); |
| 1482 | ptr += 4; | 1483 | ptr += 4; |
| 1483 | len = ntohl(*(u32*) ptr); | 1484 | len = get_unaligned_be32(ptr); |
| 1484 | ptr += 4; | 1485 | ptr += 4; |
| 1485 | 1486 | ||
| 1486 | if (len <= 200000 || len >= 300000 || | 1487 | if (len <= 200000 || len >= 300000 || |
diff --git a/drivers/media/dvb/ttpci/av7110_av.c b/drivers/media/dvb/ttpci/av7110_av.c index 3e6b650fbb81..ec55a968f204 100644 --- a/drivers/media/dvb/ttpci/av7110_av.c +++ b/drivers/media/dvb/ttpci/av7110_av.c | |||
| @@ -965,8 +965,9 @@ static u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x | |||
| 965 | 965 | ||
| 966 | static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len, int nonblock) | 966 | static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len, int nonblock) |
| 967 | { | 967 | { |
| 968 | int i, n; | 968 | unsigned i, n; |
| 969 | int progressive = 0; | 969 | int progressive = 0; |
| 970 | int match = 0; | ||
| 970 | 971 | ||
| 971 | dprintk(2, "av7110:%p, \n", av7110); | 972 | dprintk(2, "av7110:%p, \n", av7110); |
| 972 | 973 | ||
| @@ -975,12 +976,31 @@ static int play_iframe(struct av7110 *av7110, char __user *buf, unsigned int len | |||
| 975 | return -EBUSY; | 976 | return -EBUSY; |
| 976 | } | 977 | } |
| 977 | 978 | ||
| 978 | for (i = 0; i < len - 5; i++) { | 979 | /* search in buf for instances of 00 00 01 b5 1? */ |
| 979 | /* get progressive flag from picture extension */ | 980 | for (i = 0; i < len; i++) { |
| 980 | if (buf[i] == 0x00 && buf[i+1] == 0x00 && | 981 | unsigned char c; |
| 981 | buf[i+2] == 0x01 && (unsigned char)buf[i+3] == 0xb5 && | 982 | if (get_user(c, buf + i)) |
| 982 | (buf[i+4] & 0xf0) == 0x10) | 983 | return -EFAULT; |
| 983 | progressive = buf[i+5] & 0x08; | 984 | if (match == 5) { |
| 985 | progressive = c & 0x08; | ||
| 986 | match = 0; | ||
| 987 | } | ||
| 988 | if (c == 0x00) { | ||
| 989 | match = (match == 1 || match == 2) ? 2 : 1; | ||
| 990 | continue; | ||
| 991 | } | ||
| 992 | switch (match++) { | ||
| 993 | case 2: if (c == 0x01) | ||
| 994 | continue; | ||
| 995 | break; | ||
| 996 | case 3: if (c == 0xb5) | ||
| 997 | continue; | ||
| 998 | break; | ||
| 999 | case 4: if ((c & 0xf0) == 0x10) | ||
| 1000 | continue; | ||
| 1001 | break; | ||
| 1002 | } | ||
| 1003 | match = 0; | ||
| 984 | } | 1004 | } |
| 985 | 1005 | ||
| 986 | /* setting n always > 1, fixes problems when playing stillframes | 1006 | /* setting n always > 1, fixes problems when playing stillframes |
diff --git a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c index 732ce4de512e..5d2d81ab2371 100644 --- a/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c +++ b/drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c | |||
| @@ -552,7 +552,7 @@ static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack, | |||
| 552 | u16 csum = 0, cc; | 552 | u16 csum = 0, cc; |
| 553 | int i; | 553 | int i; |
| 554 | for (i = 0; i < len; i += 2) | 554 | for (i = 0; i < len; i += 2) |
| 555 | csum ^= le16_to_cpup((u16 *) (muxpack + i)); | 555 | csum ^= le16_to_cpup((__le16 *) (muxpack + i)); |
| 556 | if (csum) { | 556 | if (csum) { |
| 557 | printk("%s: muxpack with incorrect checksum, ignoring\n", | 557 | printk("%s: muxpack with incorrect checksum, ignoring\n", |
| 558 | __func__); | 558 | __func__); |
diff --git a/drivers/media/dvb/ttusb-dec/Kconfig b/drivers/media/dvb/ttusb-dec/Kconfig index 0712899e39a4..a23cc0aa17d3 100644 --- a/drivers/media/dvb/ttusb-dec/Kconfig +++ b/drivers/media/dvb/ttusb-dec/Kconfig | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | config DVB_TTUSB_DEC | 1 | config DVB_TTUSB_DEC |
| 2 | tristate "Technotrend/Hauppauge USB DEC devices" | 2 | tristate "Technotrend/Hauppauge USB DEC devices" |
| 3 | depends on DVB_CORE && USB | 3 | depends on DVB_CORE && USB && INPUT |
| 4 | depends on HOTPLUG # due to FW_LOADER | 4 | depends on HOTPLUG # due to FW_LOADER |
| 5 | select FW_LOADER | 5 | select FW_LOADER |
| 6 | select CRC32 | 6 | select CRC32 |
diff --git a/drivers/media/dvb/ttusb-dec/ttusb_dec.c b/drivers/media/dvb/ttusb-dec/ttusb_dec.c index 42eee04daa5d..fefdc05e84ac 100644 --- a/drivers/media/dvb/ttusb-dec/ttusb_dec.c +++ b/drivers/media/dvb/ttusb-dec/ttusb_dec.c | |||
| @@ -343,7 +343,7 @@ static int ttusb_dec_get_stb_state (struct ttusb_dec *dec, unsigned int *mode, | |||
| 343 | u8 c[COMMAND_PACKET_SIZE]; | 343 | u8 c[COMMAND_PACKET_SIZE]; |
| 344 | int c_length; | 344 | int c_length; |
| 345 | int result; | 345 | int result; |
| 346 | unsigned int tmp; | 346 | __be32 tmp; |
| 347 | 347 | ||
| 348 | dprintk("%s\n", __func__); | 348 | dprintk("%s\n", __func__); |
| 349 | 349 | ||
| @@ -398,9 +398,9 @@ static void ttusb_dec_set_pids(struct ttusb_dec *dec) | |||
| 398 | 0x00, 0x00, 0xff, 0xff, | 398 | 0x00, 0x00, 0xff, 0xff, |
| 399 | 0xff, 0xff, 0xff, 0xff }; | 399 | 0xff, 0xff, 0xff, 0xff }; |
| 400 | 400 | ||
| 401 | u16 pcr = htons(dec->pid[DMX_PES_PCR]); | 401 | __be16 pcr = htons(dec->pid[DMX_PES_PCR]); |
| 402 | u16 audio = htons(dec->pid[DMX_PES_AUDIO]); | 402 | __be16 audio = htons(dec->pid[DMX_PES_AUDIO]); |
| 403 | u16 video = htons(dec->pid[DMX_PES_VIDEO]); | 403 | __be16 video = htons(dec->pid[DMX_PES_VIDEO]); |
| 404 | 404 | ||
| 405 | dprintk("%s\n", __func__); | 405 | dprintk("%s\n", __func__); |
| 406 | 406 | ||
| @@ -435,7 +435,7 @@ static void ttusb_dec_process_pva(struct ttusb_dec *dec, u8 *pva, int length) | |||
| 435 | case 0x01: { /* VideoStream */ | 435 | case 0x01: { /* VideoStream */ |
| 436 | int prebytes = pva[5] & 0x03; | 436 | int prebytes = pva[5] & 0x03; |
| 437 | int postbytes = (pva[5] & 0x0c) >> 2; | 437 | int postbytes = (pva[5] & 0x0c) >> 2; |
| 438 | u16 v_pes_payload_length; | 438 | __be16 v_pes_payload_length; |
| 439 | 439 | ||
| 440 | if (output_pva) { | 440 | if (output_pva) { |
| 441 | dec->video_filter->feed->cb.ts(pva, length, NULL, 0, | 441 | dec->video_filter->feed->cb.ts(pva, length, NULL, 0, |
| @@ -1006,7 +1006,7 @@ static int ttusb_dec_start_sec_feed(struct dvb_demux_feed *dvbdmxfeed) | |||
| 1006 | 0x00, 0x00, 0x00, 0x00, | 1006 | 0x00, 0x00, 0x00, 0x00, |
| 1007 | 0x00, 0x00, 0x00, 0x00, | 1007 | 0x00, 0x00, 0x00, 0x00, |
| 1008 | 0x00 }; | 1008 | 0x00 }; |
| 1009 | u16 pid; | 1009 | __be16 pid; |
| 1010 | u8 c[COMMAND_PACKET_SIZE]; | 1010 | u8 c[COMMAND_PACKET_SIZE]; |
| 1011 | int c_length; | 1011 | int c_length; |
| 1012 | int result; | 1012 | int result; |
| @@ -1278,9 +1278,10 @@ static int ttusb_dec_boot_dsp(struct ttusb_dec *dec) | |||
| 1278 | u8 *firmware = NULL; | 1278 | u8 *firmware = NULL; |
| 1279 | size_t firmware_size = 0; | 1279 | size_t firmware_size = 0; |
| 1280 | u16 firmware_csum = 0; | 1280 | u16 firmware_csum = 0; |
| 1281 | u16 firmware_csum_ns; | 1281 | __be16 firmware_csum_ns; |
| 1282 | u32 firmware_size_nl; | 1282 | __be32 firmware_size_nl; |
| 1283 | u32 crc32_csum, crc32_check, tmp; | 1283 | u32 crc32_csum, crc32_check; |
| 1284 | __be32 tmp; | ||
| 1284 | const struct firmware *fw_entry = NULL; | 1285 | const struct firmware *fw_entry = NULL; |
| 1285 | 1286 | ||
| 1286 | dprintk("%s\n", __func__); | 1287 | dprintk("%s\n", __func__); |
| @@ -1306,7 +1307,7 @@ static int ttusb_dec_boot_dsp(struct ttusb_dec *dec) | |||
| 1306 | valid. */ | 1307 | valid. */ |
| 1307 | crc32_csum = crc32(~0L, firmware, 56) ^ ~0L; | 1308 | crc32_csum = crc32(~0L, firmware, 56) ^ ~0L; |
| 1308 | memcpy(&tmp, &firmware[56], 4); | 1309 | memcpy(&tmp, &firmware[56], 4); |
| 1309 | crc32_check = htonl(tmp); | 1310 | crc32_check = ntohl(tmp); |
| 1310 | if (crc32_csum != crc32_check) { | 1311 | if (crc32_csum != crc32_check) { |
| 1311 | printk("%s: crc32 check of DSP code failed (calculated " | 1312 | printk("%s: crc32 check of DSP code failed (calculated " |
| 1312 | "0x%08x != 0x%08x in file), file invalid.\n", | 1313 | "0x%08x != 0x%08x in file), file invalid.\n", |
| @@ -1627,7 +1628,7 @@ static int ttusb_dec_probe(struct usb_interface *intf, | |||
| 1627 | 1628 | ||
| 1628 | usb_set_intfdata(intf, (void *)dec); | 1629 | usb_set_intfdata(intf, (void *)dec); |
| 1629 | 1630 | ||
| 1630 | switch (le16_to_cpu(id->idProduct)) { | 1631 | switch (id->idProduct) { |
| 1631 | case 0x1006: | 1632 | case 0x1006: |
| 1632 | ttusb_dec_set_model(dec, TTUSB_DEC3000S); | 1633 | ttusb_dec_set_model(dec, TTUSB_DEC3000S); |
| 1633 | break; | 1634 | break; |
| @@ -1652,7 +1653,7 @@ static int ttusb_dec_probe(struct usb_interface *intf, | |||
| 1652 | ttusb_dec_init_dvb(dec); | 1653 | ttusb_dec_init_dvb(dec); |
| 1653 | 1654 | ||
| 1654 | dec->adapter.priv = dec; | 1655 | dec->adapter.priv = dec; |
| 1655 | switch (le16_to_cpu(id->idProduct)) { | 1656 | switch (id->idProduct) { |
| 1656 | case 0x1006: | 1657 | case 0x1006: |
| 1657 | dec->fe = ttusbdecfe_dvbs_attach(&fe_config); | 1658 | dec->fe = ttusbdecfe_dvbs_attach(&fe_config); |
| 1658 | break; | 1659 | break; |
diff --git a/drivers/media/dvb/ttusb-dec/ttusbdecfe.c b/drivers/media/dvb/ttusb-dec/ttusbdecfe.c index eb5eaeccd7c4..443af24097f3 100644 --- a/drivers/media/dvb/ttusb-dec/ttusbdecfe.c +++ b/drivers/media/dvb/ttusb-dec/ttusbdecfe.c | |||
| @@ -86,7 +86,7 @@ static int ttusbdecfe_dvbt_set_frontend(struct dvb_frontend* fe, struct dvb_fron | |||
| 86 | 0x00, 0x00, 0x00, 0xff, | 86 | 0x00, 0x00, 0x00, 0xff, |
| 87 | 0x00, 0x00, 0x00, 0xff }; | 87 | 0x00, 0x00, 0x00, 0xff }; |
| 88 | 88 | ||
| 89 | u32 freq = htonl(p->frequency / 1000); | 89 | __be32 freq = htonl(p->frequency / 1000); |
| 90 | memcpy(&b[4], &freq, sizeof (u32)); | 90 | memcpy(&b[4], &freq, sizeof (u32)); |
| 91 | state->config->send_command(fe, 0x71, sizeof(b), b, NULL, NULL); | 91 | state->config->send_command(fe, 0x71, sizeof(b), b, NULL, NULL); |
| 92 | 92 | ||
| @@ -117,10 +117,10 @@ static int ttusbdecfe_dvbs_set_frontend(struct dvb_frontend* fe, struct dvb_fron | |||
| 117 | 0x00, 0x00, 0x00, 0x00, | 117 | 0x00, 0x00, 0x00, 0x00, |
| 118 | 0x00, 0x00, 0x00, 0x00, | 118 | 0x00, 0x00, 0x00, 0x00, |
| 119 | 0x00, 0x00, 0x00, 0x00 }; | 119 | 0x00, 0x00, 0x00, 0x00 }; |
| 120 | u32 freq; | 120 | __be32 freq; |
| 121 | u32 sym_rate; | 121 | __be32 sym_rate; |
| 122 | u32 band; | 122 | __be32 band; |
| 123 | u32 lnb_voltage; | 123 | __be32 lnb_voltage; |
| 124 | 124 | ||
| 125 | freq = htonl(p->frequency + | 125 | freq = htonl(p->frequency + |
| 126 | (state->hi_band ? LOF_HI : LOF_LO)); | 126 | (state->hi_band ? LOF_HI : LOF_LO)); |
diff --git a/drivers/media/video/au0828/Kconfig b/drivers/media/video/au0828/Kconfig index def10d086373..52b2491581a8 100644 --- a/drivers/media/video/au0828/Kconfig +++ b/drivers/media/video/au0828/Kconfig | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | 1 | ||
| 2 | config VIDEO_AU0828 | 2 | config VIDEO_AU0828 |
| 3 | tristate "Auvitek AU0828 support" | 3 | tristate "Auvitek AU0828 support" |
| 4 | depends on VIDEO_DEV && I2C && INPUT && DVB_CORE && USB | 4 | depends on I2C && INPUT && DVB_CORE && USB |
| 5 | select I2C_ALGOBIT | 5 | select I2C_ALGOBIT |
| 6 | select VIDEO_TVEEPROM | 6 | select VIDEO_TVEEPROM |
| 7 | select DVB_AU8522 if !DVB_FE_CUSTOMIZE | 7 | select DVB_AU8522 if !DVB_FE_CUSTOMIZE |
diff --git a/drivers/media/video/au0828/au0828-dvb.c b/drivers/media/video/au0828/au0828-dvb.c index c86a5f17eca8..c6d470590380 100644 --- a/drivers/media/video/au0828/au0828-dvb.c +++ b/drivers/media/video/au0828/au0828-dvb.c | |||
| @@ -353,12 +353,6 @@ int au0828_dvb_register(struct au0828_dev *dev) | |||
| 353 | return -1; | 353 | return -1; |
| 354 | } | 354 | } |
| 355 | 355 | ||
| 356 | /* Put the analog decoder in standby to keep it quiet */ | ||
| 357 | au0828_call_i2c_clients(dev, TUNER_SET_STANDBY, NULL); | ||
| 358 | |||
| 359 | if (dvb->frontend->ops.analog_ops.standby) | ||
| 360 | dvb->frontend->ops.analog_ops.standby(dvb->frontend); | ||
| 361 | |||
| 362 | /* register everything */ | 356 | /* register everything */ |
| 363 | ret = dvb_register(dev); | 357 | ret = dvb_register(dev); |
| 364 | if (ret < 0) { | 358 | if (ret < 0) { |
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c index f20a01cfc73e..8ef0424c26c4 100644 --- a/drivers/media/video/bt8xx/bttv-cards.c +++ b/drivers/media/video/bt8xx/bttv-cards.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/firmware.h> | 34 | #include <linux/firmware.h> |
| 35 | #include <net/checksum.h> | 35 | #include <net/checksum.h> |
| 36 | 36 | ||
| 37 | #include <asm/unaligned.h> | ||
| 37 | #include <asm/io.h> | 38 | #include <asm/io.h> |
| 38 | 39 | ||
| 39 | #include "bttvp.h" | 40 | #include "bttvp.h" |
| @@ -3858,7 +3859,7 @@ static void __devinit osprey_eeprom(struct bttv *btv, const u8 ee[256]) | |||
| 3858 | ee += i; | 3859 | ee += i; |
| 3859 | 3860 | ||
| 3860 | /* found a valid descriptor */ | 3861 | /* found a valid descriptor */ |
| 3861 | type = be16_to_cpup((u16*)(ee+4)); | 3862 | type = get_unaligned_be16((__be16 *)(ee+4)); |
| 3862 | 3863 | ||
| 3863 | switch(type) { | 3864 | switch(type) { |
| 3864 | /* 848 based */ | 3865 | /* 848 based */ |
| @@ -3918,7 +3919,7 @@ static void __devinit osprey_eeprom(struct bttv *btv, const u8 ee[256]) | |||
| 3918 | btv->c.nr, type); | 3919 | btv->c.nr, type); |
| 3919 | break; | 3920 | break; |
| 3920 | } | 3921 | } |
| 3921 | serial = be32_to_cpup((u32*)(ee+6)); | 3922 | serial = get_unaligned_be32((__be32 *)(ee+6)); |
| 3922 | } | 3923 | } |
| 3923 | 3924 | ||
| 3924 | printk(KERN_INFO "bttv%d: osprey eeprom: card=%d '%s' serial=%u\n", | 3925 | printk(KERN_INFO "bttv%d: osprey eeprom: card=%d '%s' serial=%u\n", |
diff --git a/drivers/media/video/bt8xx/bttv-risc.c b/drivers/media/video/bt8xx/bttv-risc.c index e5979f77504c..0af586876e72 100644 --- a/drivers/media/video/bt8xx/bttv-risc.c +++ b/drivers/media/video/bt8xx/bttv-risc.c | |||
| @@ -48,7 +48,7 @@ bttv_risc_packed(struct bttv *btv, struct btcx_riscmem *risc, | |||
| 48 | { | 48 | { |
| 49 | u32 instructions,line,todo; | 49 | u32 instructions,line,todo; |
| 50 | struct scatterlist *sg; | 50 | struct scatterlist *sg; |
| 51 | u32 *rp; | 51 | __le32 *rp; |
| 52 | int rc; | 52 | int rc; |
| 53 | 53 | ||
| 54 | /* estimate risc mem: worst case is one write per page border + | 54 | /* estimate risc mem: worst case is one write per page border + |
| @@ -128,7 +128,8 @@ bttv_risc_planar(struct bttv *btv, struct btcx_riscmem *risc, | |||
| 128 | unsigned int cpadding) | 128 | unsigned int cpadding) |
| 129 | { | 129 | { |
| 130 | unsigned int instructions,line,todo,ylen,chroma; | 130 | unsigned int instructions,line,todo,ylen,chroma; |
| 131 | u32 *rp,ri; | 131 | __le32 *rp; |
| 132 | u32 ri; | ||
| 132 | struct scatterlist *ysg; | 133 | struct scatterlist *ysg; |
| 133 | struct scatterlist *usg; | 134 | struct scatterlist *usg; |
| 134 | struct scatterlist *vsg; | 135 | struct scatterlist *vsg; |
| @@ -244,7 +245,8 @@ bttv_risc_overlay(struct bttv *btv, struct btcx_riscmem *risc, | |||
| 244 | { | 245 | { |
| 245 | int dwords,rc,line,maxy,start,end,skip,nskips; | 246 | int dwords,rc,line,maxy,start,end,skip,nskips; |
| 246 | struct btcx_skiplist *skips; | 247 | struct btcx_skiplist *skips; |
| 247 | u32 *rp,ri,ra; | 248 | __le32 *rp; |
| 249 | u32 ri,ra; | ||
| 248 | u32 addr; | 250 | u32 addr; |
| 249 | 251 | ||
| 250 | /* skip list for window clipping */ | 252 | /* skip list for window clipping */ |
diff --git a/drivers/media/video/btcx-risc.c b/drivers/media/video/btcx-risc.c index ce0840ccd594..f42701f82e7f 100644 --- a/drivers/media/video/btcx-risc.c +++ b/drivers/media/video/btcx-risc.c | |||
| @@ -63,7 +63,7 @@ int btcx_riscmem_alloc(struct pci_dev *pci, | |||
| 63 | struct btcx_riscmem *risc, | 63 | struct btcx_riscmem *risc, |
| 64 | unsigned int size) | 64 | unsigned int size) |
| 65 | { | 65 | { |
| 66 | u32 *cpu; | 66 | __le32 *cpu; |
| 67 | dma_addr_t dma; | 67 | dma_addr_t dma; |
| 68 | 68 | ||
| 69 | if (NULL != risc->cpu && risc->size < size) | 69 | if (NULL != risc->cpu && risc->size < size) |
diff --git a/drivers/media/video/btcx-risc.h b/drivers/media/video/btcx-risc.h index 503e6c6d7b69..861bc8112824 100644 --- a/drivers/media/video/btcx-risc.h +++ b/drivers/media/video/btcx-risc.h | |||
| @@ -2,8 +2,8 @@ | |||
| 2 | */ | 2 | */ |
| 3 | struct btcx_riscmem { | 3 | struct btcx_riscmem { |
| 4 | unsigned int size; | 4 | unsigned int size; |
| 5 | u32 *cpu; | 5 | __le32 *cpu; |
| 6 | u32 *jmp; | 6 | __le32 *jmp; |
| 7 | dma_addr_t dma; | 7 | dma_addr_t dma; |
| 8 | }; | 8 | }; |
| 9 | 9 | ||
diff --git a/drivers/media/video/cx18/cx18-av-core.c b/drivers/media/video/cx18/cx18-av-core.c index 66864904c99b..9a26751615c6 100644 --- a/drivers/media/video/cx18/cx18-av-core.c +++ b/drivers/media/video/cx18/cx18-av-core.c | |||
| @@ -182,14 +182,16 @@ static void input_change(struct cx18 *cx) | |||
| 182 | if (std == V4L2_STD_NTSC_M_JP) { | 182 | if (std == V4L2_STD_NTSC_M_JP) { |
| 183 | /* Japan uses EIAJ audio standard */ | 183 | /* Japan uses EIAJ audio standard */ |
| 184 | cx18_av_write(cx, 0x808, 0xf7); | 184 | cx18_av_write(cx, 0x808, 0xf7); |
| 185 | cx18_av_write(cx, 0x80b, 0x02); | ||
| 185 | } else if (std == V4L2_STD_NTSC_M_KR) { | 186 | } else if (std == V4L2_STD_NTSC_M_KR) { |
| 186 | /* South Korea uses A2 audio standard */ | 187 | /* South Korea uses A2 audio standard */ |
| 187 | cx18_av_write(cx, 0x808, 0xf8); | 188 | cx18_av_write(cx, 0x808, 0xf8); |
| 189 | cx18_av_write(cx, 0x80b, 0x03); | ||
| 188 | } else { | 190 | } else { |
| 189 | /* Others use the BTSC audio standard */ | 191 | /* Others use the BTSC audio standard */ |
| 190 | cx18_av_write(cx, 0x808, 0xf6); | 192 | cx18_av_write(cx, 0x808, 0xf6); |
| 193 | cx18_av_write(cx, 0x80b, 0x01); | ||
| 191 | } | 194 | } |
| 192 | cx18_av_write(cx, 0x80b, 0x00); | ||
| 193 | } else if (std & V4L2_STD_PAL) { | 195 | } else if (std & V4L2_STD_PAL) { |
| 194 | /* Follow tuner change procedure for PAL */ | 196 | /* Follow tuner change procedure for PAL */ |
| 195 | cx18_av_write(cx, 0x808, 0xff); | 197 | cx18_av_write(cx, 0x808, 0xff); |
| @@ -741,8 +743,8 @@ static void log_audio_status(struct cx18 *cx) | |||
| 741 | { | 743 | { |
| 742 | struct cx18_av_state *state = &cx->av_state; | 744 | struct cx18_av_state *state = &cx->av_state; |
| 743 | u8 download_ctl = cx18_av_read(cx, 0x803); | 745 | u8 download_ctl = cx18_av_read(cx, 0x803); |
| 744 | u8 mod_det_stat0 = cx18_av_read(cx, 0x805); | 746 | u8 mod_det_stat0 = cx18_av_read(cx, 0x804); |
| 745 | u8 mod_det_stat1 = cx18_av_read(cx, 0x804); | 747 | u8 mod_det_stat1 = cx18_av_read(cx, 0x805); |
| 746 | u8 audio_config = cx18_av_read(cx, 0x808); | 748 | u8 audio_config = cx18_av_read(cx, 0x808); |
| 747 | u8 pref_mode = cx18_av_read(cx, 0x809); | 749 | u8 pref_mode = cx18_av_read(cx, 0x809); |
| 748 | u8 afc0 = cx18_av_read(cx, 0x80b); | 750 | u8 afc0 = cx18_av_read(cx, 0x80b); |
| @@ -760,12 +762,12 @@ static void log_audio_status(struct cx18 *cx) | |||
| 760 | case 0x12: p = "dual with SAP"; break; | 762 | case 0x12: p = "dual with SAP"; break; |
| 761 | case 0x14: p = "tri with SAP"; break; | 763 | case 0x14: p = "tri with SAP"; break; |
| 762 | case 0xfe: p = "forced mode"; break; | 764 | case 0xfe: p = "forced mode"; break; |
| 763 | default: p = "not defined"; | 765 | default: p = "not defined"; break; |
| 764 | } | 766 | } |
| 765 | CX18_INFO("Detected audio mode: %s\n", p); | 767 | CX18_INFO("Detected audio mode: %s\n", p); |
| 766 | 768 | ||
| 767 | switch (mod_det_stat1) { | 769 | switch (mod_det_stat1) { |
| 768 | case 0x00: p = "BTSC"; break; | 770 | case 0x00: p = "not defined"; break; |
| 769 | case 0x01: p = "EIAJ"; break; | 771 | case 0x01: p = "EIAJ"; break; |
| 770 | case 0x02: p = "A2-M"; break; | 772 | case 0x02: p = "A2-M"; break; |
| 771 | case 0x03: p = "A2-BG"; break; | 773 | case 0x03: p = "A2-BG"; break; |
| @@ -779,8 +781,13 @@ static void log_audio_status(struct cx18 *cx) | |||
| 779 | case 0x0b: p = "NICAM-I"; break; | 781 | case 0x0b: p = "NICAM-I"; break; |
| 780 | case 0x0c: p = "NICAM-L"; break; | 782 | case 0x0c: p = "NICAM-L"; break; |
| 781 | case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break; | 783 | case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break; |
| 784 | case 0x0e: p = "IF FM Radio"; break; | ||
| 785 | case 0x0f: p = "BTSC"; break; | ||
| 786 | case 0x10: p = "detected chrominance"; break; | ||
| 787 | case 0xfd: p = "unknown audio standard"; break; | ||
| 788 | case 0xfe: p = "forced audio standard"; break; | ||
| 782 | case 0xff: p = "no detected audio standard"; break; | 789 | case 0xff: p = "no detected audio standard"; break; |
| 783 | default: p = "not defined"; | 790 | default: p = "not defined"; break; |
| 784 | } | 791 | } |
| 785 | CX18_INFO("Detected audio standard: %s\n", p); | 792 | CX18_INFO("Detected audio standard: %s\n", p); |
| 786 | CX18_INFO("Audio muted: %s\n", | 793 | CX18_INFO("Audio muted: %s\n", |
| @@ -789,22 +796,23 @@ static void log_audio_status(struct cx18 *cx) | |||
| 789 | (download_ctl & 0x10) ? "running" : "stopped"); | 796 | (download_ctl & 0x10) ? "running" : "stopped"); |
| 790 | 797 | ||
| 791 | switch (audio_config >> 4) { | 798 | switch (audio_config >> 4) { |
| 792 | case 0x00: p = "BTSC"; break; | 799 | case 0x00: p = "undefined"; break; |
| 793 | case 0x01: p = "EIAJ"; break; | 800 | case 0x01: p = "BTSC"; break; |
| 794 | case 0x02: p = "A2-M"; break; | 801 | case 0x02: p = "EIAJ"; break; |
| 795 | case 0x03: p = "A2-BG"; break; | 802 | case 0x03: p = "A2-M"; break; |
| 796 | case 0x04: p = "A2-DK1"; break; | 803 | case 0x04: p = "A2-BG"; break; |
| 797 | case 0x05: p = "A2-DK2"; break; | 804 | case 0x05: p = "A2-DK1"; break; |
| 798 | case 0x06: p = "A2-DK3"; break; | 805 | case 0x06: p = "A2-DK2"; break; |
| 799 | case 0x07: p = "A1 (6.0 MHz FM Mono)"; break; | 806 | case 0x07: p = "A2-DK3"; break; |
| 800 | case 0x08: p = "AM-L"; break; | 807 | case 0x08: p = "A1 (6.0 MHz FM Mono)"; break; |
| 801 | case 0x09: p = "NICAM-BG"; break; | 808 | case 0x09: p = "AM-L"; break; |
| 802 | case 0x0a: p = "NICAM-DK"; break; | 809 | case 0x0a: p = "NICAM-BG"; break; |
| 803 | case 0x0b: p = "NICAM-I"; break; | 810 | case 0x0b: p = "NICAM-DK"; break; |
| 804 | case 0x0c: p = "NICAM-L"; break; | 811 | case 0x0c: p = "NICAM-I"; break; |
| 805 | case 0x0d: p = "FM radio"; break; | 812 | case 0x0d: p = "NICAM-L"; break; |
| 813 | case 0x0e: p = "FM radio"; break; | ||
| 806 | case 0x0f: p = "automatic detection"; break; | 814 | case 0x0f: p = "automatic detection"; break; |
| 807 | default: p = "undefined"; | 815 | default: p = "undefined"; break; |
| 808 | } | 816 | } |
| 809 | CX18_INFO("Configured audio standard: %s\n", p); | 817 | CX18_INFO("Configured audio standard: %s\n", p); |
| 810 | 818 | ||
| @@ -815,12 +823,9 @@ static void log_audio_status(struct cx18 *cx) | |||
| 815 | case 0x02: p = "MONO3 (STEREO forced MONO)"; break; | 823 | case 0x02: p = "MONO3 (STEREO forced MONO)"; break; |
| 816 | case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break; | 824 | case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break; |
| 817 | case 0x04: p = "STEREO"; break; | 825 | case 0x04: p = "STEREO"; break; |
| 818 | case 0x05: p = "DUAL1 (AB)"; break; | 826 | case 0x05: p = "DUAL1 (AC)"; break; |
| 819 | case 0x06: p = "DUAL2 (AC) (FM)"; break; | 827 | case 0x06: p = "DUAL2 (BC)"; break; |
| 820 | case 0x07: p = "DUAL3 (BC) (FM)"; break; | 828 | case 0x07: p = "DUAL3 (AB)"; break; |
| 821 | case 0x08: p = "DUAL4 (AC) (AM)"; break; | ||
| 822 | case 0x09: p = "DUAL5 (BC) (AM)"; break; | ||
| 823 | case 0x0a: p = "SAP"; break; | ||
| 824 | default: p = "undefined"; | 829 | default: p = "undefined"; |
| 825 | } | 830 | } |
| 826 | CX18_INFO("Configured audio mode: %s\n", p); | 831 | CX18_INFO("Configured audio mode: %s\n", p); |
| @@ -835,9 +840,11 @@ static void log_audio_status(struct cx18 *cx) | |||
| 835 | case 0x06: p = "BTSC"; break; | 840 | case 0x06: p = "BTSC"; break; |
| 836 | case 0x07: p = "EIAJ"; break; | 841 | case 0x07: p = "EIAJ"; break; |
| 837 | case 0x08: p = "A2-M"; break; | 842 | case 0x08: p = "A2-M"; break; |
| 838 | case 0x09: p = "FM Radio"; break; | 843 | case 0x09: p = "FM Radio (4.5 MHz)"; break; |
| 844 | case 0x0a: p = "FM Radio (5.5 MHz)"; break; | ||
| 845 | case 0x0b: p = "S-Video"; break; | ||
| 839 | case 0x0f: p = "automatic standard and mode detection"; break; | 846 | case 0x0f: p = "automatic standard and mode detection"; break; |
| 840 | default: p = "undefined"; | 847 | default: p = "undefined"; break; |
| 841 | } | 848 | } |
| 842 | CX18_INFO("Configured audio system: %s\n", p); | 849 | CX18_INFO("Configured audio system: %s\n", p); |
| 843 | } | 850 | } |
| @@ -857,22 +864,24 @@ static void log_audio_status(struct cx18 *cx) | |||
| 857 | case 5: p = "language AC"; break; | 864 | case 5: p = "language AC"; break; |
| 858 | case 6: p = "language BC"; break; | 865 | case 6: p = "language BC"; break; |
| 859 | case 7: p = "language AB"; break; | 866 | case 7: p = "language AB"; break; |
| 860 | default: p = "undefined"; | 867 | default: p = "undefined"; break; |
| 861 | } | 868 | } |
| 862 | CX18_INFO("Preferred audio mode: %s\n", p); | 869 | CX18_INFO("Preferred audio mode: %s\n", p); |
| 863 | 870 | ||
| 864 | if ((audio_config & 0xf) == 0xf) { | 871 | if ((audio_config & 0xf) == 0xf) { |
| 865 | switch ((afc0 >> 2) & 0x1) { | 872 | switch ((afc0 >> 3) & 0x1) { |
| 866 | case 0: p = "system DK"; break; | 873 | case 0: p = "system DK"; break; |
| 867 | case 1: p = "system L"; break; | 874 | case 1: p = "system L"; break; |
| 868 | } | 875 | } |
| 869 | CX18_INFO("Selected 65 MHz format: %s\n", p); | 876 | CX18_INFO("Selected 65 MHz format: %s\n", p); |
| 870 | 877 | ||
| 871 | switch (afc0 & 0x3) { | 878 | switch (afc0 & 0x7) { |
| 872 | case 0: p = "BTSC"; break; | 879 | case 0: p = "Chroma"; break; |
| 873 | case 1: p = "EIAJ"; break; | 880 | case 1: p = "BTSC"; break; |
| 874 | case 2: p = "A2-M"; break; | 881 | case 2: p = "EIAJ"; break; |
| 875 | default: p = "undefined"; | 882 | case 3: p = "A2-M"; break; |
| 883 | case 4: p = "autodetect"; break; | ||
| 884 | default: p = "undefined"; break; | ||
| 876 | } | 885 | } |
| 877 | CX18_INFO("Selected 45 MHz format: %s\n", p); | 886 | CX18_INFO("Selected 45 MHz format: %s\n", p); |
| 878 | } | 887 | } |
diff --git a/drivers/media/video/cx18/cx18-cards.c b/drivers/media/video/cx18/cx18-cards.c index 553adbf2cd44..baccd079243d 100644 --- a/drivers/media/video/cx18/cx18-cards.c +++ b/drivers/media/video/cx18/cx18-cards.c | |||
| @@ -126,7 +126,7 @@ static const struct cx18_card cx18_card_hvr1600_samsung = { | |||
| 126 | 126 | ||
| 127 | /* ------------------------------------------------------------------------- */ | 127 | /* ------------------------------------------------------------------------- */ |
| 128 | 128 | ||
| 129 | /* Compro VideoMate H900: not working at the moment! */ | 129 | /* Compro VideoMate H900: note that this card is analog only! */ |
| 130 | 130 | ||
| 131 | static const struct cx18_card_pci_info cx18_pci_h900[] = { | 131 | static const struct cx18_card_pci_info cx18_pci_h900[] = { |
| 132 | { PCI_DEVICE_ID_CX23418, CX18_PCI_ID_COMPRO, 0xe100 }, | 132 | { PCI_DEVICE_ID_CX23418, CX18_PCI_ID_COMPRO, 0xe100 }, |
| @@ -136,7 +136,7 @@ static const struct cx18_card_pci_info cx18_pci_h900[] = { | |||
| 136 | static const struct cx18_card cx18_card_h900 = { | 136 | static const struct cx18_card cx18_card_h900 = { |
| 137 | .type = CX18_CARD_COMPRO_H900, | 137 | .type = CX18_CARD_COMPRO_H900, |
| 138 | .name = "Compro VideoMate H900", | 138 | .name = "Compro VideoMate H900", |
| 139 | .comment = "DVB & VBI are not yet supported\n", | 139 | .comment = "VBI is not yet supported\n", |
| 140 | .v4l2_capabilities = CX18_CAP_ENCODER, | 140 | .v4l2_capabilities = CX18_CAP_ENCODER, |
| 141 | .hw_audio_ctrl = CX18_HW_CX23418, | 141 | .hw_audio_ctrl = CX18_HW_CX23418, |
| 142 | .hw_all = CX18_HW_TUNER, | 142 | .hw_all = CX18_HW_TUNER, |
diff --git a/drivers/media/video/cx18/cx18-controls.c b/drivers/media/video/cx18/cx18-controls.c index 2bdac5ebbb0d..87cf41021665 100644 --- a/drivers/media/video/cx18/cx18-controls.c +++ b/drivers/media/video/cx18/cx18-controls.c | |||
| @@ -159,7 +159,7 @@ static int cx18_setup_vbi_fmt(struct cx18 *cx, enum v4l2_mpeg_stream_vbi_fmt fmt | |||
| 159 | { | 159 | { |
| 160 | if (!(cx->v4l2_cap & V4L2_CAP_SLICED_VBI_CAPTURE)) | 160 | if (!(cx->v4l2_cap & V4L2_CAP_SLICED_VBI_CAPTURE)) |
| 161 | return -EINVAL; | 161 | return -EINVAL; |
| 162 | if (atomic_read(&cx->capturing) > 0) | 162 | if (atomic_read(&cx->ana_capturing) > 0) |
| 163 | return -EBUSY; | 163 | return -EBUSY; |
| 164 | 164 | ||
| 165 | /* First try to allocate sliced VBI buffers if needed. */ | 165 | /* First try to allocate sliced VBI buffers if needed. */ |
| @@ -235,7 +235,7 @@ int cx18_control_ioctls(struct cx18 *cx, unsigned int cmd, void *arg) | |||
| 235 | CX18_DEBUG_IOCTL("VIDIOC_S_EXT_CTRLS\n"); | 235 | CX18_DEBUG_IOCTL("VIDIOC_S_EXT_CTRLS\n"); |
| 236 | if (c->ctrl_class == V4L2_CTRL_CLASS_MPEG) { | 236 | if (c->ctrl_class == V4L2_CTRL_CLASS_MPEG) { |
| 237 | struct cx2341x_mpeg_params p = cx->params; | 237 | struct cx2341x_mpeg_params p = cx->params; |
| 238 | int err = cx2341x_ext_ctrls(&p, atomic_read(&cx->capturing), arg, cmd); | 238 | int err = cx2341x_ext_ctrls(&p, atomic_read(&cx->ana_capturing), arg, cmd); |
| 239 | 239 | ||
| 240 | if (err) | 240 | if (err) |
| 241 | return err; | 241 | return err; |
| @@ -295,7 +295,7 @@ int cx18_control_ioctls(struct cx18 *cx, unsigned int cmd, void *arg) | |||
| 295 | CX18_DEBUG_IOCTL("VIDIOC_TRY_EXT_CTRLS\n"); | 295 | CX18_DEBUG_IOCTL("VIDIOC_TRY_EXT_CTRLS\n"); |
| 296 | if (c->ctrl_class == V4L2_CTRL_CLASS_MPEG) | 296 | if (c->ctrl_class == V4L2_CTRL_CLASS_MPEG) |
| 297 | return cx2341x_ext_ctrls(&cx->params, | 297 | return cx2341x_ext_ctrls(&cx->params, |
| 298 | atomic_read(&cx->capturing), arg, cmd); | 298 | atomic_read(&cx->ana_capturing), arg, cmd); |
| 299 | return -EINVAL; | 299 | return -EINVAL; |
| 300 | } | 300 | } |
| 301 | 301 | ||
diff --git a/drivers/media/video/cx18/cx18-driver.c b/drivers/media/video/cx18/cx18-driver.c index 0dd4e0529970..2b810bb2a4c7 100644 --- a/drivers/media/video/cx18/cx18-driver.c +++ b/drivers/media/video/cx18/cx18-driver.c | |||
| @@ -670,7 +670,7 @@ static int __devinit cx18_probe(struct pci_dev *dev, | |||
| 670 | cx18_init_power(cx, 1); | 670 | cx18_init_power(cx, 1); |
| 671 | cx18_init_memory(cx); | 671 | cx18_init_memory(cx); |
| 672 | 672 | ||
| 673 | cx->scb = (struct cx18_scb *)(cx->enc_mem + SCB_OFFSET); | 673 | cx->scb = (struct cx18_scb __iomem *)(cx->enc_mem + SCB_OFFSET); |
| 674 | cx18_init_scb(cx); | 674 | cx18_init_scb(cx); |
| 675 | 675 | ||
| 676 | cx18_gpio_init(cx); | 676 | cx18_gpio_init(cx); |
| @@ -751,17 +751,6 @@ static int __devinit cx18_probe(struct pci_dev *dev, | |||
| 751 | if (cx->options.radio > 0) | 751 | if (cx->options.radio > 0) |
| 752 | cx->v4l2_cap |= V4L2_CAP_RADIO; | 752 | cx->v4l2_cap |= V4L2_CAP_RADIO; |
| 753 | 753 | ||
| 754 | retval = cx18_streams_setup(cx); | ||
| 755 | if (retval) { | ||
| 756 | CX18_ERR("Error %d setting up streams\n", retval); | ||
| 757 | goto free_irq; | ||
| 758 | } | ||
| 759 | retval = cx18_streams_register(cx); | ||
| 760 | if (retval) { | ||
| 761 | CX18_ERR("Error %d registering devices\n", retval); | ||
| 762 | goto free_streams; | ||
| 763 | } | ||
| 764 | |||
| 765 | if (cx->options.tuner > -1) { | 754 | if (cx->options.tuner > -1) { |
| 766 | struct tuner_setup setup; | 755 | struct tuner_setup setup; |
| 767 | 756 | ||
| @@ -788,7 +777,16 @@ static int __devinit cx18_probe(struct pci_dev *dev, | |||
| 788 | are not. */ | 777 | are not. */ |
| 789 | cx->tuner_std = cx->std; | 778 | cx->tuner_std = cx->std; |
| 790 | 779 | ||
| 791 | cx18_init_on_first_open(cx); | 780 | retval = cx18_streams_setup(cx); |
| 781 | if (retval) { | ||
| 782 | CX18_ERR("Error %d setting up streams\n", retval); | ||
| 783 | goto free_irq; | ||
| 784 | } | ||
| 785 | retval = cx18_streams_register(cx); | ||
| 786 | if (retval) { | ||
| 787 | CX18_ERR("Error %d registering devices\n", retval); | ||
| 788 | goto free_streams; | ||
| 789 | } | ||
| 792 | 790 | ||
| 793 | CX18_INFO("Initialized card #%d: %s\n", cx->num, cx->card_name); | 791 | CX18_INFO("Initialized card #%d: %s\n", cx->num, cx->card_name); |
| 794 | 792 | ||
| @@ -889,7 +887,7 @@ static void cx18_remove(struct pci_dev *pci_dev) | |||
| 889 | 887 | ||
| 890 | /* Stop all captures */ | 888 | /* Stop all captures */ |
| 891 | CX18_DEBUG_INFO("Stopping all streams\n"); | 889 | CX18_DEBUG_INFO("Stopping all streams\n"); |
| 892 | if (atomic_read(&cx->capturing) > 0) | 890 | if (atomic_read(&cx->tot_capturing) > 0) |
| 893 | cx18_stop_all_captures(cx); | 891 | cx18_stop_all_captures(cx); |
| 894 | 892 | ||
| 895 | /* Interrupts */ | 893 | /* Interrupts */ |
diff --git a/drivers/media/video/cx18/cx18-driver.h b/drivers/media/video/cx18/cx18-driver.h index a2a6c58d12fe..de14ab59a206 100644 --- a/drivers/media/video/cx18/cx18-driver.h +++ b/drivers/media/video/cx18/cx18-driver.h | |||
| @@ -358,7 +358,7 @@ struct cx18 { | |||
| 358 | u32 v4l2_cap; /* V4L2 capabilities of card */ | 358 | u32 v4l2_cap; /* V4L2 capabilities of card */ |
| 359 | u32 hw_flags; /* Hardware description of the board */ | 359 | u32 hw_flags; /* Hardware description of the board */ |
| 360 | unsigned mdl_offset; | 360 | unsigned mdl_offset; |
| 361 | struct cx18_scb *scb; /* pointer to SCB */ | 361 | struct cx18_scb __iomem *scb; /* pointer to SCB */ |
| 362 | 362 | ||
| 363 | struct cx18_av_state av_state; | 363 | struct cx18_av_state av_state; |
| 364 | 364 | ||
| @@ -380,7 +380,8 @@ struct cx18 { | |||
| 380 | int stream_buf_size[CX18_MAX_STREAMS]; /* Stream buffer size */ | 380 | int stream_buf_size[CX18_MAX_STREAMS]; /* Stream buffer size */ |
| 381 | struct cx18_stream streams[CX18_MAX_STREAMS]; /* Stream data */ | 381 | struct cx18_stream streams[CX18_MAX_STREAMS]; /* Stream data */ |
| 382 | unsigned long i_flags; /* global cx18 flags */ | 382 | unsigned long i_flags; /* global cx18 flags */ |
| 383 | atomic_t capturing; /* count number of active capture streams */ | 383 | atomic_t ana_capturing; /* count number of active analog capture streams */ |
| 384 | atomic_t tot_capturing; /* total count number of active capture streams */ | ||
| 384 | spinlock_t lock; /* lock access to this struct */ | 385 | spinlock_t lock; /* lock access to this struct */ |
| 385 | int search_pack_header; | 386 | int search_pack_header; |
| 386 | 387 | ||
| @@ -423,6 +424,10 @@ struct cx18 { | |||
| 423 | struct mutex i2c_bus_lock[2]; | 424 | struct mutex i2c_bus_lock[2]; |
| 424 | struct i2c_client *i2c_clients[I2C_CLIENTS_MAX]; | 425 | struct i2c_client *i2c_clients[I2C_CLIENTS_MAX]; |
| 425 | 426 | ||
| 427 | /* gpio */ | ||
| 428 | u32 gpio_dir; | ||
| 429 | u32 gpio_val; | ||
| 430 | |||
| 426 | /* v4l2 and User settings */ | 431 | /* v4l2 and User settings */ |
| 427 | 432 | ||
| 428 | /* codec settings */ | 433 | /* codec settings */ |
diff --git a/drivers/media/video/cx18/cx18-fileops.c b/drivers/media/video/cx18/cx18-fileops.c index 0b3141db174b..1e537fe04a23 100644 --- a/drivers/media/video/cx18/cx18-fileops.c +++ b/drivers/media/video/cx18/cx18-fileops.c | |||
| @@ -318,7 +318,7 @@ static ssize_t cx18_read(struct cx18_stream *s, char __user *ubuf, | |||
| 318 | size_t tot_written = 0; | 318 | size_t tot_written = 0; |
| 319 | int single_frame = 0; | 319 | int single_frame = 0; |
| 320 | 320 | ||
| 321 | if (atomic_read(&cx->capturing) == 0 && s->id == -1) { | 321 | if (atomic_read(&cx->ana_capturing) == 0 && s->id == -1) { |
| 322 | /* shouldn't happen */ | 322 | /* shouldn't happen */ |
| 323 | CX18_DEBUG_WARN("Stream %s not initialized before read\n", | 323 | CX18_DEBUG_WARN("Stream %s not initialized before read\n", |
| 324 | s->name); | 324 | s->name); |
| @@ -361,7 +361,8 @@ static ssize_t cx18_read(struct cx18_stream *s, char __user *ubuf, | |||
| 361 | cx18_enqueue(s, buf, &s->q_free); | 361 | cx18_enqueue(s, buf, &s->q_free); |
| 362 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL, 5, | 362 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL, 5, |
| 363 | s->handle, | 363 | s->handle, |
| 364 | (void *)&cx->scb->cpu_mdl[buf->id] - cx->enc_mem, | 364 | (void __iomem *)&cx->scb->cpu_mdl[buf->id] - |
| 365 | cx->enc_mem, | ||
| 365 | 1, buf->id, s->buf_size); | 366 | 1, buf->id, s->buf_size); |
| 366 | } else | 367 | } else |
| 367 | cx18_enqueue(s, buf, &s->q_io); | 368 | cx18_enqueue(s, buf, &s->q_io); |
| @@ -581,7 +582,7 @@ int cx18_v4l2_close(struct inode *inode, struct file *filp) | |||
| 581 | cx18_call_i2c_clients(cx, VIDIOC_S_STD, &cx->std); | 582 | cx18_call_i2c_clients(cx, VIDIOC_S_STD, &cx->std); |
| 582 | /* Select correct audio input (i.e. TV tuner or Line in) */ | 583 | /* Select correct audio input (i.e. TV tuner or Line in) */ |
| 583 | cx18_audio_set_io(cx); | 584 | cx18_audio_set_io(cx); |
| 584 | if (atomic_read(&cx->capturing) > 0) { | 585 | if (atomic_read(&cx->ana_capturing) > 0) { |
| 585 | /* Undo video mute */ | 586 | /* Undo video mute */ |
| 586 | cx18_vapi(cx, CX18_CPU_SET_VIDEO_MUTE, 2, s->handle, | 587 | cx18_vapi(cx, CX18_CPU_SET_VIDEO_MUTE, 2, s->handle, |
| 587 | cx->params.video_mute | | 588 | cx->params.video_mute | |
| @@ -627,7 +628,7 @@ static int cx18_serialized_open(struct cx18_stream *s, struct file *filp) | |||
| 627 | } | 628 | } |
| 628 | 629 | ||
| 629 | if (!test_bit(CX18_F_I_RADIO_USER, &cx->i_flags)) { | 630 | if (!test_bit(CX18_F_I_RADIO_USER, &cx->i_flags)) { |
| 630 | if (atomic_read(&cx->capturing) > 0) { | 631 | if (atomic_read(&cx->ana_capturing) > 0) { |
| 631 | /* switching to radio while capture is | 632 | /* switching to radio while capture is |
| 632 | in progress is not polite */ | 633 | in progress is not polite */ |
| 633 | cx18_release_stream(s); | 634 | cx18_release_stream(s); |
| @@ -694,7 +695,7 @@ int cx18_v4l2_open(struct inode *inode, struct file *filp) | |||
| 694 | 695 | ||
| 695 | void cx18_mute(struct cx18 *cx) | 696 | void cx18_mute(struct cx18 *cx) |
| 696 | { | 697 | { |
| 697 | if (atomic_read(&cx->capturing)) | 698 | if (atomic_read(&cx->ana_capturing)) |
| 698 | cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2, | 699 | cx18_vapi(cx, CX18_CPU_SET_AUDIO_MUTE, 2, |
| 699 | cx18_find_handle(cx), 1); | 700 | cx18_find_handle(cx), 1); |
| 700 | CX18_DEBUG_INFO("Mute\n"); | 701 | CX18_DEBUG_INFO("Mute\n"); |
| @@ -702,7 +703,7 @@ void cx18_mute(struct cx18 *cx) | |||
| 702 | 703 | ||
| 703 | void cx18_unmute(struct cx18 *cx) | 704 | void cx18_unmute(struct cx18 *cx) |
| 704 | { | 705 | { |
| 705 | if (atomic_read(&cx->capturing)) { | 706 | if (atomic_read(&cx->ana_capturing)) { |
| 706 | cx18_msleep_timeout(100, 0); | 707 | cx18_msleep_timeout(100, 0); |
| 707 | cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 2, | 708 | cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 2, |
| 708 | cx18_find_handle(cx), 12); | 709 | cx18_find_handle(cx), 12); |
diff --git a/drivers/media/video/cx18/cx18-gpio.c b/drivers/media/video/cx18/cx18-gpio.c index bb8bc86086d0..ceb63653c926 100644 --- a/drivers/media/video/cx18/cx18-gpio.c +++ b/drivers/media/video/cx18/cx18-gpio.c | |||
| @@ -35,9 +35,6 @@ | |||
| 35 | #define CX18_REG_GPIO_OUT2 0xc78104 | 35 | #define CX18_REG_GPIO_OUT2 0xc78104 |
| 36 | #define CX18_REG_GPIO_DIR2 0xc7810c | 36 | #define CX18_REG_GPIO_DIR2 0xc7810c |
| 37 | 37 | ||
| 38 | static u32 gpio_dir; | ||
| 39 | static u32 gpio_val; | ||
| 40 | |||
| 41 | /* | 38 | /* |
| 42 | * HVR-1600 GPIO pins, courtesy of Hauppauge: | 39 | * HVR-1600 GPIO pins, courtesy of Hauppauge: |
| 43 | * | 40 | * |
| @@ -49,24 +46,29 @@ static u32 gpio_val; | |||
| 49 | 46 | ||
| 50 | static void gpio_write(struct cx18 *cx) | 47 | static void gpio_write(struct cx18 *cx) |
| 51 | { | 48 | { |
| 52 | write_reg((gpio_dir & 0xffff) << 16, CX18_REG_GPIO_DIR1); | 49 | u32 dir = cx->gpio_dir; |
| 53 | write_reg(((gpio_dir & 0xffff) << 16) | (gpio_val & 0xffff), | 50 | u32 val = cx->gpio_val; |
| 51 | |||
| 52 | write_reg((dir & 0xffff) << 16, CX18_REG_GPIO_DIR1); | ||
| 53 | write_reg(((dir & 0xffff) << 16) | (val & 0xffff), | ||
| 54 | CX18_REG_GPIO_OUT1); | 54 | CX18_REG_GPIO_OUT1); |
| 55 | write_reg(gpio_dir & 0xffff0000, CX18_REG_GPIO_DIR2); | 55 | write_reg(dir & 0xffff0000, CX18_REG_GPIO_DIR2); |
| 56 | write_reg((gpio_dir & 0xffff0000) | ((gpio_val & 0xffff0000) >> 16), | 56 | write_reg((dir & 0xffff0000) | ((val & 0xffff0000) >> 16), |
| 57 | CX18_REG_GPIO_OUT2); | 57 | CX18_REG_GPIO_OUT2); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | void cx18_gpio_init(struct cx18 *cx) | 60 | void cx18_gpio_init(struct cx18 *cx) |
| 61 | { | 61 | { |
| 62 | gpio_dir = cx->card->gpio_init.direction; | 62 | cx->gpio_dir = cx->card->gpio_init.direction; |
| 63 | gpio_val = cx->card->gpio_init.initial_value; | 63 | cx->gpio_val = cx->card->gpio_init.initial_value; |
| 64 | 64 | ||
| 65 | if (gpio_dir == 0) | 65 | if (cx->card->tuners[0].tuner == TUNER_XC2028) { |
| 66 | return; | 66 | cx->gpio_dir |= 1 << cx->card->xceive_pin; |
| 67 | cx->gpio_val |= 1 << cx->card->xceive_pin; | ||
| 68 | } | ||
| 67 | 69 | ||
| 68 | gpio_dir |= 1 << cx->card->xceive_pin; | 70 | if (cx->gpio_dir == 0) |
| 69 | gpio_val |= 1 << cx->card->xceive_pin; | 71 | return; |
| 70 | 72 | ||
| 71 | CX18_DEBUG_INFO("GPIO initial dir: %08x/%08x out: %08x/%08x\n", | 73 | CX18_DEBUG_INFO("GPIO initial dir: %08x/%08x out: %08x/%08x\n", |
| 72 | read_reg(CX18_REG_GPIO_DIR1), read_reg(CX18_REG_GPIO_DIR2), | 74 | read_reg(CX18_REG_GPIO_DIR1), read_reg(CX18_REG_GPIO_DIR2), |
| @@ -86,13 +88,12 @@ int cx18_reset_tuner_gpio(void *dev, int cmd, int value) | |||
| 86 | return 0; | 88 | return 0; |
| 87 | CX18_DEBUG_INFO("Resetting tuner\n"); | 89 | CX18_DEBUG_INFO("Resetting tuner\n"); |
| 88 | 90 | ||
| 89 | gpio_dir |= 1 << cx->card->xceive_pin; | 91 | cx->gpio_val &= ~(1 << cx->card->xceive_pin); |
| 90 | gpio_val &= ~(1 << cx->card->xceive_pin); | ||
| 91 | 92 | ||
| 92 | gpio_write(cx); | 93 | gpio_write(cx); |
| 93 | schedule_timeout_interruptible(msecs_to_jiffies(1)); | 94 | schedule_timeout_interruptible(msecs_to_jiffies(1)); |
| 94 | 95 | ||
| 95 | gpio_val |= 1 << cx->card->xceive_pin; | 96 | cx->gpio_val |= 1 << cx->card->xceive_pin; |
| 96 | gpio_write(cx); | 97 | gpio_write(cx); |
| 97 | schedule_timeout_interruptible(msecs_to_jiffies(1)); | 98 | schedule_timeout_interruptible(msecs_to_jiffies(1)); |
| 98 | return 0; | 99 | return 0; |
diff --git a/drivers/media/video/cx18/cx18-ioctl.c b/drivers/media/video/cx18/cx18-ioctl.c index dbdcb86ec5aa..4151f1e5493f 100644 --- a/drivers/media/video/cx18/cx18-ioctl.c +++ b/drivers/media/video/cx18/cx18-ioctl.c | |||
| @@ -247,7 +247,7 @@ static int cx18_try_or_set_fmt(struct cx18 *cx, int streamtype, | |||
| 247 | 247 | ||
| 248 | if (!set_fmt || (cx->params.width == w && cx->params.height == h)) | 248 | if (!set_fmt || (cx->params.width == w && cx->params.height == h)) |
| 249 | return 0; | 249 | return 0; |
| 250 | if (atomic_read(&cx->capturing) > 0) | 250 | if (atomic_read(&cx->ana_capturing) > 0) |
| 251 | return -EBUSY; | 251 | return -EBUSY; |
| 252 | 252 | ||
| 253 | cx->params.width = w; | 253 | cx->params.width = w; |
| @@ -264,7 +264,7 @@ static int cx18_try_or_set_fmt(struct cx18 *cx, int streamtype, | |||
| 264 | if (fmt->type == V4L2_BUF_TYPE_VBI_CAPTURE) { | 264 | if (fmt->type == V4L2_BUF_TYPE_VBI_CAPTURE) { |
| 265 | if (set_fmt && streamtype == CX18_ENC_STREAM_TYPE_VBI && | 265 | if (set_fmt && streamtype == CX18_ENC_STREAM_TYPE_VBI && |
| 266 | cx->vbi.sliced_in->service_set && | 266 | cx->vbi.sliced_in->service_set && |
| 267 | atomic_read(&cx->capturing) > 0) | 267 | atomic_read(&cx->ana_capturing) > 0) |
| 268 | return -EBUSY; | 268 | return -EBUSY; |
| 269 | if (set_fmt) { | 269 | if (set_fmt) { |
| 270 | cx->vbi.sliced_in->service_set = 0; | 270 | cx->vbi.sliced_in->service_set = 0; |
| @@ -293,7 +293,7 @@ static int cx18_try_or_set_fmt(struct cx18 *cx, int streamtype, | |||
| 293 | return 0; | 293 | return 0; |
| 294 | if (set == 0) | 294 | if (set == 0) |
| 295 | return -EINVAL; | 295 | return -EINVAL; |
| 296 | if (atomic_read(&cx->capturing) > 0 && cx->vbi.sliced_in->service_set == 0) | 296 | if (atomic_read(&cx->ana_capturing) > 0 && cx->vbi.sliced_in->service_set == 0) |
| 297 | return -EBUSY; | 297 | return -EBUSY; |
| 298 | cx18_av_cmd(cx, VIDIOC_S_FMT, fmt); | 298 | cx18_av_cmd(cx, VIDIOC_S_FMT, fmt); |
| 299 | memcpy(cx->vbi.sliced_in, vbifmt, sizeof(*cx->vbi.sliced_in)); | 299 | memcpy(cx->vbi.sliced_in, vbifmt, sizeof(*cx->vbi.sliced_in)); |
| @@ -581,7 +581,7 @@ int cx18_v4l2_ioctls(struct cx18 *cx, struct file *filp, unsigned cmd, void *arg | |||
| 581 | break; | 581 | break; |
| 582 | 582 | ||
| 583 | if (test_bit(CX18_F_I_RADIO_USER, &cx->i_flags) || | 583 | if (test_bit(CX18_F_I_RADIO_USER, &cx->i_flags) || |
| 584 | atomic_read(&cx->capturing) > 0) { | 584 | atomic_read(&cx->ana_capturing) > 0) { |
| 585 | /* Switching standard would turn off the radio or mess | 585 | /* Switching standard would turn off the radio or mess |
| 586 | with already running streams, prevent that by | 586 | with already running streams, prevent that by |
| 587 | returning EBUSY. */ | 587 | returning EBUSY. */ |
| @@ -677,7 +677,7 @@ int cx18_v4l2_ioctls(struct cx18 *cx, struct file *filp, unsigned cmd, void *arg | |||
| 677 | enc->flags = 0; | 677 | enc->flags = 0; |
| 678 | if (try) | 678 | if (try) |
| 679 | return 0; | 679 | return 0; |
| 680 | if (!atomic_read(&cx->capturing)) | 680 | if (!atomic_read(&cx->ana_capturing)) |
| 681 | return -EPERM; | 681 | return -EPERM; |
| 682 | if (test_and_set_bit(CX18_F_I_ENC_PAUSED, &cx->i_flags)) | 682 | if (test_and_set_bit(CX18_F_I_ENC_PAUSED, &cx->i_flags)) |
| 683 | return 0; | 683 | return 0; |
| @@ -689,7 +689,7 @@ int cx18_v4l2_ioctls(struct cx18 *cx, struct file *filp, unsigned cmd, void *arg | |||
| 689 | enc->flags = 0; | 689 | enc->flags = 0; |
| 690 | if (try) | 690 | if (try) |
| 691 | return 0; | 691 | return 0; |
| 692 | if (!atomic_read(&cx->capturing)) | 692 | if (!atomic_read(&cx->ana_capturing)) |
| 693 | return -EPERM; | 693 | return -EPERM; |
| 694 | if (!test_and_clear_bit(CX18_F_I_ENC_PAUSED, &cx->i_flags)) | 694 | if (!test_and_clear_bit(CX18_F_I_ENC_PAUSED, &cx->i_flags)) |
| 695 | return 0; | 695 | return 0; |
diff --git a/drivers/media/video/cx18/cx18-irq.c b/drivers/media/video/cx18/cx18-irq.c index 6e14f8bda559..25114a5cbd57 100644 --- a/drivers/media/video/cx18/cx18-irq.c +++ b/drivers/media/video/cx18/cx18-irq.c | |||
| @@ -75,7 +75,7 @@ static void epu_dma_done(struct cx18 *cx, struct cx18_mailbox *mb) | |||
| 75 | 75 | ||
| 76 | cx18_buf_sync_for_device(s, buf); | 76 | cx18_buf_sync_for_device(s, buf); |
| 77 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL, 5, s->handle, | 77 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL, 5, s->handle, |
| 78 | (void *)&cx->scb->cpu_mdl[buf->id] - cx->enc_mem, | 78 | (void __iomem *)&cx->scb->cpu_mdl[buf->id] - cx->enc_mem, |
| 79 | 1, buf->id, s->buf_size); | 79 | 1, buf->id, s->buf_size); |
| 80 | } else | 80 | } else |
| 81 | set_bit(CX18_F_B_NEED_BUF_SWAP, &buf->b_flags); | 81 | set_bit(CX18_F_B_NEED_BUF_SWAP, &buf->b_flags); |
| @@ -161,13 +161,15 @@ irqreturn_t cx18_irq_handler(int irq, void *dev_id) | |||
| 161 | */ | 161 | */ |
| 162 | 162 | ||
| 163 | if (sw2) { | 163 | if (sw2) { |
| 164 | if (sw2 & (cx->scb->cpu2hpu_irq_ack | cx->scb->cpu2epu_irq_ack)) | 164 | if (sw2 & (readl(&cx->scb->cpu2hpu_irq_ack) | |
| 165 | readl(&cx->scb->cpu2epu_irq_ack))) | ||
| 165 | wake_up(&cx->mb_cpu_waitq); | 166 | wake_up(&cx->mb_cpu_waitq); |
| 166 | if (sw2 & (cx->scb->apu2hpu_irq_ack | cx->scb->apu2epu_irq_ack)) | 167 | if (sw2 & (readl(&cx->scb->apu2hpu_irq_ack) | |
| 168 | readl(&cx->scb->apu2epu_irq_ack))) | ||
| 167 | wake_up(&cx->mb_apu_waitq); | 169 | wake_up(&cx->mb_apu_waitq); |
| 168 | if (sw2 & cx->scb->epu2hpu_irq_ack) | 170 | if (sw2 & readl(&cx->scb->epu2hpu_irq_ack)) |
| 169 | wake_up(&cx->mb_epu_waitq); | 171 | wake_up(&cx->mb_epu_waitq); |
| 170 | if (sw2 & cx->scb->hpu2epu_irq_ack) | 172 | if (sw2 & readl(&cx->scb->hpu2epu_irq_ack)) |
| 171 | wake_up(&cx->mb_hpu_waitq); | 173 | wake_up(&cx->mb_hpu_waitq); |
| 172 | } | 174 | } |
| 173 | 175 | ||
diff --git a/drivers/media/video/cx18/cx18-mailbox.c b/drivers/media/video/cx18/cx18-mailbox.c index 0c5f328bca54..2a5ccef9185b 100644 --- a/drivers/media/video/cx18/cx18-mailbox.c +++ b/drivers/media/video/cx18/cx18-mailbox.c | |||
| @@ -94,10 +94,10 @@ static const struct cx18_api_info *find_api_info(u32 cmd) | |||
| 94 | return NULL; | 94 | return NULL; |
| 95 | } | 95 | } |
| 96 | 96 | ||
| 97 | static struct cx18_mailbox *cx18_mb_is_complete(struct cx18 *cx, int rpu, | 97 | static struct cx18_mailbox __iomem *cx18_mb_is_complete(struct cx18 *cx, int rpu, |
| 98 | u32 *state, u32 *irq, u32 *req) | 98 | u32 *state, u32 *irq, u32 *req) |
| 99 | { | 99 | { |
| 100 | struct cx18_mailbox *mb = NULL; | 100 | struct cx18_mailbox __iomem *mb = NULL; |
| 101 | int wait_count = 0; | 101 | int wait_count = 0; |
| 102 | u32 ack; | 102 | u32 ack; |
| 103 | 103 | ||
| @@ -142,7 +142,7 @@ static struct cx18_mailbox *cx18_mb_is_complete(struct cx18 *cx, int rpu, | |||
| 142 | long cx18_mb_ack(struct cx18 *cx, const struct cx18_mailbox *mb) | 142 | long cx18_mb_ack(struct cx18 *cx, const struct cx18_mailbox *mb) |
| 143 | { | 143 | { |
| 144 | const struct cx18_api_info *info = find_api_info(mb->cmd); | 144 | const struct cx18_api_info *info = find_api_info(mb->cmd); |
| 145 | struct cx18_mailbox *ack_mb; | 145 | struct cx18_mailbox __iomem *ack_mb; |
| 146 | u32 ack_irq; | 146 | u32 ack_irq; |
| 147 | u8 rpu = CPU; | 147 | u8 rpu = CPU; |
| 148 | 148 | ||
| @@ -182,7 +182,7 @@ static int cx18_api_call(struct cx18 *cx, u32 cmd, int args, u32 data[]) | |||
| 182 | { | 182 | { |
| 183 | const struct cx18_api_info *info = find_api_info(cmd); | 183 | const struct cx18_api_info *info = find_api_info(cmd); |
| 184 | u32 state = 0, irq = 0, req, oldreq, err; | 184 | u32 state = 0, irq = 0, req, oldreq, err; |
| 185 | struct cx18_mailbox *mb; | 185 | struct cx18_mailbox __iomem *mb; |
| 186 | wait_queue_head_t *waitq; | 186 | wait_queue_head_t *waitq; |
| 187 | int timeout = 100; | 187 | int timeout = 100; |
| 188 | int cnt = 0; | 188 | int cnt = 0; |
diff --git a/drivers/media/video/cx18/cx18-streams.c b/drivers/media/video/cx18/cx18-streams.c index 4ca9d847f1b1..1b921a336092 100644 --- a/drivers/media/video/cx18/cx18-streams.c +++ b/drivers/media/video/cx18/cx18-streams.c | |||
| @@ -36,12 +36,13 @@ | |||
| 36 | #define CX18_DSP0_INTERRUPT_MASK 0xd0004C | 36 | #define CX18_DSP0_INTERRUPT_MASK 0xd0004C |
| 37 | 37 | ||
| 38 | static struct file_operations cx18_v4l2_enc_fops = { | 38 | static struct file_operations cx18_v4l2_enc_fops = { |
| 39 | .owner = THIS_MODULE, | 39 | .owner = THIS_MODULE, |
| 40 | .read = cx18_v4l2_read, | 40 | .read = cx18_v4l2_read, |
| 41 | .open = cx18_v4l2_open, | 41 | .open = cx18_v4l2_open, |
| 42 | .ioctl = cx18_v4l2_ioctl, | 42 | .ioctl = cx18_v4l2_ioctl, |
| 43 | .release = cx18_v4l2_close, | 43 | .compat_ioctl = v4l_compat_ioctl32, |
| 44 | .poll = cx18_v4l2_enc_poll, | 44 | .release = cx18_v4l2_close, |
| 45 | .poll = cx18_v4l2_enc_poll, | ||
| 45 | }; | 46 | }; |
| 46 | 47 | ||
| 47 | /* offset from 0 to register ts v4l2 minors on */ | 48 | /* offset from 0 to register ts v4l2 minors on */ |
| @@ -443,7 +444,7 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) | |||
| 443 | s->handle = data[0]; | 444 | s->handle = data[0]; |
| 444 | cx18_vapi(cx, CX18_CPU_SET_CHANNEL_TYPE, 2, s->handle, captype); | 445 | cx18_vapi(cx, CX18_CPU_SET_CHANNEL_TYPE, 2, s->handle, captype); |
| 445 | 446 | ||
| 446 | if (atomic_read(&cx->capturing) == 0 && !ts) { | 447 | if (atomic_read(&cx->ana_capturing) == 0 && !ts) { |
| 447 | /* Stuff from Windows, we don't know what it is */ | 448 | /* Stuff from Windows, we don't know what it is */ |
| 448 | cx18_vapi(cx, CX18_CPU_SET_VER_CROP_LINE, 2, s->handle, 0); | 449 | cx18_vapi(cx, CX18_CPU_SET_VER_CROP_LINE, 2, s->handle, 0); |
| 449 | cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 3, s->handle, 3, 1); | 450 | cx18_vapi(cx, CX18_CPU_SET_MISC_PARAMETERS, 3, s->handle, 3, 1); |
| @@ -466,14 +467,14 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) | |||
| 466 | cx2341x_update(cx, cx18_api_func, NULL, &cx->params); | 467 | cx2341x_update(cx, cx18_api_func, NULL, &cx->params); |
| 467 | } | 468 | } |
| 468 | 469 | ||
| 469 | if (atomic_read(&cx->capturing) == 0) { | 470 | if (atomic_read(&cx->tot_capturing) == 0) { |
| 470 | clear_bit(CX18_F_I_EOS, &cx->i_flags); | 471 | clear_bit(CX18_F_I_EOS, &cx->i_flags); |
| 471 | write_reg(7, CX18_DSP0_INTERRUPT_MASK); | 472 | write_reg(7, CX18_DSP0_INTERRUPT_MASK); |
| 472 | } | 473 | } |
| 473 | 474 | ||
| 474 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL_ACK, 3, s->handle, | 475 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL_ACK, 3, s->handle, |
| 475 | (void *)&cx->scb->cpu_mdl_ack[s->type][0] - cx->enc_mem, | 476 | (void __iomem *)&cx->scb->cpu_mdl_ack[s->type][0] - cx->enc_mem, |
| 476 | (void *)&cx->scb->cpu_mdl_ack[s->type][1] - cx->enc_mem); | 477 | (void __iomem *)&cx->scb->cpu_mdl_ack[s->type][1] - cx->enc_mem); |
| 477 | 478 | ||
| 478 | list_for_each(p, &s->q_free.list) { | 479 | list_for_each(p, &s->q_free.list) { |
| 479 | struct cx18_buffer *buf = list_entry(p, struct cx18_buffer, list); | 480 | struct cx18_buffer *buf = list_entry(p, struct cx18_buffer, list); |
| @@ -481,8 +482,8 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) | |||
| 481 | writel(buf->dma_handle, &cx->scb->cpu_mdl[buf->id].paddr); | 482 | writel(buf->dma_handle, &cx->scb->cpu_mdl[buf->id].paddr); |
| 482 | writel(s->buf_size, &cx->scb->cpu_mdl[buf->id].length); | 483 | writel(s->buf_size, &cx->scb->cpu_mdl[buf->id].length); |
| 483 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL, 5, s->handle, | 484 | cx18_vapi(cx, CX18_CPU_DE_SET_MDL, 5, s->handle, |
| 484 | (void *)&cx->scb->cpu_mdl[buf->id] - cx->enc_mem, 1, | 485 | (void __iomem *)&cx->scb->cpu_mdl[buf->id] - cx->enc_mem, |
| 485 | buf->id, s->buf_size); | 486 | 1, buf->id, s->buf_size); |
| 486 | } | 487 | } |
| 487 | /* begin_capture */ | 488 | /* begin_capture */ |
| 488 | if (cx18_vapi(cx, CX18_CPU_CAPTURE_START, 1, s->handle)) { | 489 | if (cx18_vapi(cx, CX18_CPU_CAPTURE_START, 1, s->handle)) { |
| @@ -492,7 +493,9 @@ int cx18_start_v4l2_encode_stream(struct cx18_stream *s) | |||
| 492 | } | 493 | } |
| 493 | 494 | ||
| 494 | /* you're live! sit back and await interrupts :) */ | 495 | /* you're live! sit back and await interrupts :) */ |
| 495 | atomic_inc(&cx->capturing); | 496 | if (!ts) |
| 497 | atomic_inc(&cx->ana_capturing); | ||
| 498 | atomic_inc(&cx->tot_capturing); | ||
| 496 | return 0; | 499 | return 0; |
| 497 | } | 500 | } |
| 498 | 501 | ||
| @@ -523,7 +526,7 @@ int cx18_stop_v4l2_encode_stream(struct cx18_stream *s, int gop_end) | |||
| 523 | 526 | ||
| 524 | CX18_DEBUG_INFO("Stop Capture\n"); | 527 | CX18_DEBUG_INFO("Stop Capture\n"); |
| 525 | 528 | ||
| 526 | if (atomic_read(&cx->capturing) == 0) | 529 | if (atomic_read(&cx->tot_capturing) == 0) |
| 527 | return 0; | 530 | return 0; |
| 528 | 531 | ||
| 529 | if (s->type == CX18_ENC_STREAM_TYPE_MPG) | 532 | if (s->type == CX18_ENC_STREAM_TYPE_MPG) |
| @@ -537,7 +540,9 @@ int cx18_stop_v4l2_encode_stream(struct cx18_stream *s, int gop_end) | |||
| 537 | CX18_INFO("ignoring gop_end: not (yet?) supported by the firmware\n"); | 540 | CX18_INFO("ignoring gop_end: not (yet?) supported by the firmware\n"); |
| 538 | } | 541 | } |
| 539 | 542 | ||
| 540 | atomic_dec(&cx->capturing); | 543 | if (s->type != CX18_ENC_STREAM_TYPE_TS) |
| 544 | atomic_dec(&cx->ana_capturing); | ||
| 545 | atomic_dec(&cx->tot_capturing); | ||
| 541 | 546 | ||
| 542 | /* Clear capture and no-read bits */ | 547 | /* Clear capture and no-read bits */ |
| 543 | clear_bit(CX18_F_S_STREAMING, &s->s_flags); | 548 | clear_bit(CX18_F_S_STREAMING, &s->s_flags); |
| @@ -545,7 +550,7 @@ int cx18_stop_v4l2_encode_stream(struct cx18_stream *s, int gop_end) | |||
| 545 | cx18_vapi(cx, CX18_DESTROY_TASK, 1, s->handle); | 550 | cx18_vapi(cx, CX18_DESTROY_TASK, 1, s->handle); |
| 546 | s->handle = 0xffffffff; | 551 | s->handle = 0xffffffff; |
| 547 | 552 | ||
| 548 | if (atomic_read(&cx->capturing) > 0) | 553 | if (atomic_read(&cx->tot_capturing) > 0) |
| 549 | return 0; | 554 | return 0; |
| 550 | 555 | ||
| 551 | write_reg(5, CX18_DSP0_INTERRUPT_MASK); | 556 | write_reg(5, CX18_DSP0_INTERRUPT_MASK); |
diff --git a/drivers/media/video/cx23885/cx23885-core.c b/drivers/media/video/cx23885/cx23885-core.c index f24abcd06dea..c4cc2f3b8876 100644 --- a/drivers/media/video/cx23885/cx23885-core.c +++ b/drivers/media/video/cx23885/cx23885-core.c | |||
| @@ -823,7 +823,7 @@ static void cx23885_dev_unregister(struct cx23885_dev *dev) | |||
| 823 | iounmap(dev->lmmio); | 823 | iounmap(dev->lmmio); |
| 824 | } | 824 | } |
| 825 | 825 | ||
| 826 | static u32* cx23885_risc_field(u32 *rp, struct scatterlist *sglist, | 826 | static __le32* cx23885_risc_field(__le32 *rp, struct scatterlist *sglist, |
| 827 | unsigned int offset, u32 sync_line, | 827 | unsigned int offset, u32 sync_line, |
| 828 | unsigned int bpl, unsigned int padding, | 828 | unsigned int bpl, unsigned int padding, |
| 829 | unsigned int lines) | 829 | unsigned int lines) |
| @@ -883,7 +883,7 @@ int cx23885_risc_buffer(struct pci_dev *pci, struct btcx_riscmem *risc, | |||
| 883 | unsigned int padding, unsigned int lines) | 883 | unsigned int padding, unsigned int lines) |
| 884 | { | 884 | { |
| 885 | u32 instructions, fields; | 885 | u32 instructions, fields; |
| 886 | u32 *rp; | 886 | __le32 *rp; |
| 887 | int rc; | 887 | int rc; |
| 888 | 888 | ||
| 889 | fields = 0; | 889 | fields = 0; |
| @@ -924,7 +924,7 @@ static int cx23885_risc_databuffer(struct pci_dev *pci, | |||
| 924 | unsigned int lines) | 924 | unsigned int lines) |
| 925 | { | 925 | { |
| 926 | u32 instructions; | 926 | u32 instructions; |
| 927 | u32 *rp; | 927 | __le32 *rp; |
| 928 | int rc; | 928 | int rc; |
| 929 | 929 | ||
| 930 | /* estimate risc mem: worst case is one write per page border + | 930 | /* estimate risc mem: worst case is one write per page border + |
| @@ -951,7 +951,7 @@ static int cx23885_risc_databuffer(struct pci_dev *pci, | |||
| 951 | int cx23885_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc, | 951 | int cx23885_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc, |
| 952 | u32 reg, u32 mask, u32 value) | 952 | u32 reg, u32 mask, u32 value) |
| 953 | { | 953 | { |
| 954 | u32 *rp; | 954 | __le32 *rp; |
| 955 | int rc; | 955 | int rc; |
| 956 | 956 | ||
| 957 | if ((rc = btcx_riscmem_alloc(pci, risc, 4*16)) < 0) | 957 | if ((rc = btcx_riscmem_alloc(pci, risc, 4*16)) < 0) |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index aeba26dc0a37..fa6d398e97b9 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
| @@ -1493,10 +1493,16 @@ static const struct cx88_board cx88_boards[] = { | |||
| 1493 | }, | 1493 | }, |
| 1494 | }, | 1494 | }, |
| 1495 | [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { | 1495 | [CX88_BOARD_POWERCOLOR_REAL_ANGEL] = { |
| 1496 | .name = "PowerColor Real Angel 330", | 1496 | .name = "PowerColor RA330", /* Long names may confuse LIRC. */ |
| 1497 | .tuner_type = TUNER_XC2028, | 1497 | .tuner_type = TUNER_XC2028, |
| 1498 | .tuner_addr = 0x61, | 1498 | .tuner_addr = 0x61, |
| 1499 | .input = { { | 1499 | .input = { { |
| 1500 | .type = CX88_VMUX_DEBUG, | ||
| 1501 | .vmux = 3, /* Due to the way the cx88 driver is written, */ | ||
| 1502 | .gpio0 = 0x00ff, /* there is no way to deactivate audio pass- */ | ||
| 1503 | .gpio1 = 0xf39d, /* through without this entry. Furthermore, if */ | ||
| 1504 | .gpio3 = 0x0000, /* the TV mux entry is first, you get audio */ | ||
| 1505 | }, { /* from the tuner on boot for a little while. */ | ||
| 1500 | .type = CX88_VMUX_TELEVISION, | 1506 | .type = CX88_VMUX_TELEVISION, |
| 1501 | .vmux = 0, | 1507 | .vmux = 0, |
| 1502 | .gpio0 = 0x00ff, | 1508 | .gpio0 = 0x00ff, |
| @@ -2424,8 +2430,9 @@ void cx88_setup_xc3028(struct cx88_core *core, struct xc2028_ctrl *ctl) | |||
| 2424 | 2430 | ||
| 2425 | switch (core->boardnr) { | 2431 | switch (core->boardnr) { |
| 2426 | case CX88_BOARD_POWERCOLOR_REAL_ANGEL: | 2432 | case CX88_BOARD_POWERCOLOR_REAL_ANGEL: |
| 2427 | /* Doesn't work with firmware version 2.7 */ | 2433 | /* Now works with firmware version 2.7 */ |
| 2428 | ctl->fname = "xc3028-v25.fw"; | 2434 | if (core->i2c_algo.udelay < 16) |
| 2435 | core->i2c_algo.udelay = 16; | ||
| 2429 | break; | 2436 | break; |
| 2430 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: | 2437 | case CX88_BOARD_DVICO_FUSIONHDTV_DVB_T_PRO: |
| 2431 | ctl->scode_table = XC3028_FE_ZARLINK456; | 2438 | ctl->scode_table = XC3028_FE_ZARLINK456; |
diff --git a/drivers/media/video/cx88/cx88-core.c b/drivers/media/video/cx88/cx88-core.c index c4d1aff1fdb4..60eeda3057e9 100644 --- a/drivers/media/video/cx88/cx88-core.c +++ b/drivers/media/video/cx88/cx88-core.c | |||
| @@ -70,7 +70,7 @@ static DEFINE_MUTEX(devlist); | |||
| 70 | 70 | ||
| 71 | /* @lpi: lines per IRQ, or 0 to not generate irqs. Note: IRQ to be | 71 | /* @lpi: lines per IRQ, or 0 to not generate irqs. Note: IRQ to be |
| 72 | generated _after_ lpi lines are transferred. */ | 72 | generated _after_ lpi lines are transferred. */ |
| 73 | static u32* cx88_risc_field(u32 *rp, struct scatterlist *sglist, | 73 | static __le32* cx88_risc_field(__le32 *rp, struct scatterlist *sglist, |
| 74 | unsigned int offset, u32 sync_line, | 74 | unsigned int offset, u32 sync_line, |
| 75 | unsigned int bpl, unsigned int padding, | 75 | unsigned int bpl, unsigned int padding, |
| 76 | unsigned int lines, unsigned int lpi) | 76 | unsigned int lines, unsigned int lpi) |
| @@ -130,7 +130,7 @@ int cx88_risc_buffer(struct pci_dev *pci, struct btcx_riscmem *risc, | |||
| 130 | unsigned int bpl, unsigned int padding, unsigned int lines) | 130 | unsigned int bpl, unsigned int padding, unsigned int lines) |
| 131 | { | 131 | { |
| 132 | u32 instructions,fields; | 132 | u32 instructions,fields; |
| 133 | u32 *rp; | 133 | __le32 *rp; |
| 134 | int rc; | 134 | int rc; |
| 135 | 135 | ||
| 136 | fields = 0; | 136 | fields = 0; |
| @@ -168,7 +168,7 @@ int cx88_risc_databuffer(struct pci_dev *pci, struct btcx_riscmem *risc, | |||
| 168 | unsigned int lines, unsigned int lpi) | 168 | unsigned int lines, unsigned int lpi) |
| 169 | { | 169 | { |
| 170 | u32 instructions; | 170 | u32 instructions; |
| 171 | u32 *rp; | 171 | __le32 *rp; |
| 172 | int rc; | 172 | int rc; |
| 173 | 173 | ||
| 174 | /* estimate risc mem: worst case is one write per page border + | 174 | /* estimate risc mem: worst case is one write per page border + |
| @@ -193,7 +193,7 @@ int cx88_risc_databuffer(struct pci_dev *pci, struct btcx_riscmem *risc, | |||
| 193 | int cx88_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc, | 193 | int cx88_risc_stopper(struct pci_dev *pci, struct btcx_riscmem *risc, |
| 194 | u32 reg, u32 mask, u32 value) | 194 | u32 reg, u32 mask, u32 value) |
| 195 | { | 195 | { |
| 196 | u32 *rp; | 196 | __le32 *rp; |
| 197 | int rc; | 197 | int rc; |
| 198 | 198 | ||
| 199 | if ((rc = btcx_riscmem_alloc(pci, risc, 4*16)) < 0) | 199 | if ((rc = btcx_riscmem_alloc(pci, risc, 4*16)) < 0) |
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c index 8996175cc950..fb163ecd9216 100644 --- a/drivers/media/video/em28xx/em28xx-video.c +++ b/drivers/media/video/em28xx/em28xx-video.c | |||
| @@ -1166,13 +1166,13 @@ static int vidioc_g_register(struct file *file, void *priv, | |||
| 1166 | 1166 | ||
| 1167 | reg->val = ret; | 1167 | reg->val = ret; |
| 1168 | } else { | 1168 | } else { |
| 1169 | u64 val = 0; | 1169 | __le64 val = 0; |
| 1170 | ret = em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS, | 1170 | ret = em28xx_read_reg_req_len(dev, USB_REQ_GET_STATUS, |
| 1171 | reg->reg, (char *)&val, 2); | 1171 | reg->reg, (char *)&val, 2); |
| 1172 | if (ret < 0) | 1172 | if (ret < 0) |
| 1173 | return ret; | 1173 | return ret; |
| 1174 | 1174 | ||
| 1175 | reg->val = cpu_to_le64((__u64)val); | 1175 | reg->val = le64_to_cpu(val); |
| 1176 | } | 1176 | } |
| 1177 | 1177 | ||
| 1178 | return 0; | 1178 | return 0; |
| @@ -1183,9 +1183,9 @@ static int vidioc_s_register(struct file *file, void *priv, | |||
| 1183 | { | 1183 | { |
| 1184 | struct em28xx_fh *fh = priv; | 1184 | struct em28xx_fh *fh = priv; |
| 1185 | struct em28xx *dev = fh->dev; | 1185 | struct em28xx *dev = fh->dev; |
| 1186 | u64 buf; | 1186 | __le64 buf; |
| 1187 | 1187 | ||
| 1188 | buf = le64_to_cpu((__u64)reg->val); | 1188 | buf = cpu_to_le64(reg->val); |
| 1189 | 1189 | ||
| 1190 | return em28xx_write_regs(dev, reg->reg, (char *)&buf, | 1190 | return em28xx_write_regs(dev, reg->reg, (char *)&buf, |
| 1191 | em28xx_reg_len(reg->reg)); | 1191 | em28xx_reg_len(reg->reg)); |
diff --git a/drivers/media/video/ivtv/ivtv-driver.h b/drivers/media/video/ivtv/ivtv-driver.h index ba06e813c58c..9d23b1efd36d 100644 --- a/drivers/media/video/ivtv/ivtv-driver.h +++ b/drivers/media/video/ivtv/ivtv-driver.h | |||
| @@ -259,6 +259,12 @@ struct ivtv_mailbox_data { | |||
| 259 | 259 | ||
| 260 | /* Scatter-Gather array element, used in DMA transfers */ | 260 | /* Scatter-Gather array element, used in DMA transfers */ |
| 261 | struct ivtv_sg_element { | 261 | struct ivtv_sg_element { |
| 262 | __le32 src; | ||
| 263 | __le32 dst; | ||
| 264 | __le32 size; | ||
| 265 | }; | ||
| 266 | |||
| 267 | struct ivtv_sg_host_element { | ||
| 262 | u32 src; | 268 | u32 src; |
| 263 | u32 dst; | 269 | u32 dst; |
| 264 | u32 size; | 270 | u32 size; |
| @@ -349,8 +355,8 @@ struct ivtv_stream { | |||
| 349 | u16 dma_xfer_cnt; | 355 | u16 dma_xfer_cnt; |
| 350 | 356 | ||
| 351 | /* Base Dev SG Array for cx23415/6 */ | 357 | /* Base Dev SG Array for cx23415/6 */ |
| 352 | struct ivtv_sg_element *sg_pending; | 358 | struct ivtv_sg_host_element *sg_pending; |
| 353 | struct ivtv_sg_element *sg_processing; | 359 | struct ivtv_sg_host_element *sg_processing; |
| 354 | struct ivtv_sg_element *sg_dma; | 360 | struct ivtv_sg_element *sg_dma; |
| 355 | dma_addr_t sg_handle; | 361 | dma_addr_t sg_handle; |
| 356 | int sg_pending_size; | 362 | int sg_pending_size; |
diff --git a/drivers/media/video/ivtv/ivtv-fileops.c b/drivers/media/video/ivtv/ivtv-fileops.c index f2fa434b677b..db813e071ce6 100644 --- a/drivers/media/video/ivtv/ivtv-fileops.c +++ b/drivers/media/video/ivtv/ivtv-fileops.c | |||
| @@ -587,7 +587,7 @@ retry: | |||
| 587 | since we may get here before the stream has been fully set-up */ | 587 | since we may get here before the stream has been fully set-up */ |
| 588 | if (mode == OUT_YUV && s->q_full.length == 0 && itv->dma_data_req_size) { | 588 | if (mode == OUT_YUV && s->q_full.length == 0 && itv->dma_data_req_size) { |
| 589 | while (count >= itv->dma_data_req_size) { | 589 | while (count >= itv->dma_data_req_size) { |
| 590 | if (!ivtv_yuv_udma_stream_frame (itv, (void *)user_buf)) { | 590 | if (!ivtv_yuv_udma_stream_frame (itv, (void __user *)user_buf)) { |
| 591 | bytes_written += itv->dma_data_req_size; | 591 | bytes_written += itv->dma_data_req_size; |
| 592 | user_buf += itv->dma_data_req_size; | 592 | user_buf += itv->dma_data_req_size; |
| 593 | count -= itv->dma_data_req_size; | 593 | count -= itv->dma_data_req_size; |
diff --git a/drivers/media/video/ivtv/ivtv-irq.c b/drivers/media/video/ivtv/ivtv-irq.c index d8ba3a4a8761..fba150a6cd23 100644 --- a/drivers/media/video/ivtv/ivtv-irq.c +++ b/drivers/media/video/ivtv/ivtv-irq.c | |||
| @@ -231,14 +231,14 @@ static void dma_post(struct ivtv_stream *s) | |||
| 231 | struct ivtv_buffer *buf = NULL; | 231 | struct ivtv_buffer *buf = NULL; |
| 232 | struct list_head *p; | 232 | struct list_head *p; |
| 233 | u32 offset; | 233 | u32 offset; |
| 234 | u32 *u32buf; | 234 | __le32 *u32buf; |
| 235 | int x = 0; | 235 | int x = 0; |
| 236 | 236 | ||
| 237 | IVTV_DEBUG_HI_DMA("%s %s completed (%x)\n", ivtv_use_pio(s) ? "PIO" : "DMA", | 237 | IVTV_DEBUG_HI_DMA("%s %s completed (%x)\n", ivtv_use_pio(s) ? "PIO" : "DMA", |
| 238 | s->name, s->dma_offset); | 238 | s->name, s->dma_offset); |
| 239 | list_for_each(p, &s->q_dma.list) { | 239 | list_for_each(p, &s->q_dma.list) { |
| 240 | buf = list_entry(p, struct ivtv_buffer, list); | 240 | buf = list_entry(p, struct ivtv_buffer, list); |
| 241 | u32buf = (u32 *)buf->buf; | 241 | u32buf = (__le32 *)buf->buf; |
| 242 | 242 | ||
| 243 | /* Sync Buffer */ | 243 | /* Sync Buffer */ |
| 244 | ivtv_buf_sync_for_cpu(s, buf); | 244 | ivtv_buf_sync_for_cpu(s, buf); |
| @@ -444,7 +444,7 @@ static void ivtv_dma_enc_start(struct ivtv_stream *s) | |||
| 444 | } | 444 | } |
| 445 | 445 | ||
| 446 | s->dma_xfer_cnt++; | 446 | s->dma_xfer_cnt++; |
| 447 | memcpy(s->sg_processing, s->sg_pending, sizeof(struct ivtv_sg_element) * s->sg_pending_size); | 447 | memcpy(s->sg_processing, s->sg_pending, sizeof(struct ivtv_sg_host_element) * s->sg_pending_size); |
| 448 | s->sg_processing_size = s->sg_pending_size; | 448 | s->sg_processing_size = s->sg_pending_size; |
| 449 | s->sg_pending_size = 0; | 449 | s->sg_pending_size = 0; |
| 450 | s->sg_processed = 0; | 450 | s->sg_processed = 0; |
| @@ -473,7 +473,7 @@ static void ivtv_dma_dec_start(struct ivtv_stream *s) | |||
| 473 | if (s->q_predma.bytesused) | 473 | if (s->q_predma.bytesused) |
| 474 | ivtv_queue_move(s, &s->q_predma, NULL, &s->q_dma, s->q_predma.bytesused); | 474 | ivtv_queue_move(s, &s->q_predma, NULL, &s->q_dma, s->q_predma.bytesused); |
| 475 | s->dma_xfer_cnt++; | 475 | s->dma_xfer_cnt++; |
| 476 | memcpy(s->sg_processing, s->sg_pending, sizeof(struct ivtv_sg_element) * s->sg_pending_size); | 476 | memcpy(s->sg_processing, s->sg_pending, sizeof(struct ivtv_sg_host_element) * s->sg_pending_size); |
| 477 | s->sg_processing_size = s->sg_pending_size; | 477 | s->sg_processing_size = s->sg_pending_size; |
| 478 | s->sg_pending_size = 0; | 478 | s->sg_pending_size = 0; |
| 479 | s->sg_processed = 0; | 479 | s->sg_processed = 0; |
diff --git a/drivers/media/video/ivtv/ivtv-queue.c b/drivers/media/video/ivtv/ivtv-queue.c index fc8b1eaa333b..71bd13e22e2e 100644 --- a/drivers/media/video/ivtv/ivtv-queue.c +++ b/drivers/media/video/ivtv/ivtv-queue.c | |||
| @@ -193,7 +193,7 @@ void ivtv_flush_queues(struct ivtv_stream *s) | |||
| 193 | int ivtv_stream_alloc(struct ivtv_stream *s) | 193 | int ivtv_stream_alloc(struct ivtv_stream *s) |
| 194 | { | 194 | { |
| 195 | struct ivtv *itv = s->itv; | 195 | struct ivtv *itv = s->itv; |
| 196 | int SGsize = sizeof(struct ivtv_sg_element) * s->buffers; | 196 | int SGsize = sizeof(struct ivtv_sg_host_element) * s->buffers; |
| 197 | int i; | 197 | int i; |
| 198 | 198 | ||
| 199 | if (s->buffers == 0) | 199 | if (s->buffers == 0) |
diff --git a/drivers/media/video/ivtv/ivtv-streams.c b/drivers/media/video/ivtv/ivtv-streams.c index c47c2b945147..c854285a4371 100644 --- a/drivers/media/video/ivtv/ivtv-streams.c +++ b/drivers/media/video/ivtv/ivtv-streams.c | |||
| @@ -44,23 +44,25 @@ | |||
| 44 | #include "ivtv-streams.h" | 44 | #include "ivtv-streams.h" |
| 45 | 45 | ||
| 46 | static const struct file_operations ivtv_v4l2_enc_fops = { | 46 | static const struct file_operations ivtv_v4l2_enc_fops = { |
| 47 | .owner = THIS_MODULE, | 47 | .owner = THIS_MODULE, |
| 48 | .read = ivtv_v4l2_read, | 48 | .read = ivtv_v4l2_read, |
| 49 | .write = ivtv_v4l2_write, | 49 | .write = ivtv_v4l2_write, |
| 50 | .open = ivtv_v4l2_open, | 50 | .open = ivtv_v4l2_open, |
| 51 | .ioctl = ivtv_v4l2_ioctl, | 51 | .ioctl = ivtv_v4l2_ioctl, |
| 52 | .release = ivtv_v4l2_close, | 52 | .compat_ioctl = v4l_compat_ioctl32, |
| 53 | .poll = ivtv_v4l2_enc_poll, | 53 | .release = ivtv_v4l2_close, |
| 54 | .poll = ivtv_v4l2_enc_poll, | ||
| 54 | }; | 55 | }; |
| 55 | 56 | ||
| 56 | static const struct file_operations ivtv_v4l2_dec_fops = { | 57 | static const struct file_operations ivtv_v4l2_dec_fops = { |
| 57 | .owner = THIS_MODULE, | 58 | .owner = THIS_MODULE, |
| 58 | .read = ivtv_v4l2_read, | 59 | .read = ivtv_v4l2_read, |
| 59 | .write = ivtv_v4l2_write, | 60 | .write = ivtv_v4l2_write, |
| 60 | .open = ivtv_v4l2_open, | 61 | .open = ivtv_v4l2_open, |
| 61 | .ioctl = ivtv_v4l2_ioctl, | 62 | .ioctl = ivtv_v4l2_ioctl, |
| 62 | .release = ivtv_v4l2_close, | 63 | .compat_ioctl = v4l_compat_ioctl32, |
| 63 | .poll = ivtv_v4l2_dec_poll, | 64 | .release = ivtv_v4l2_close, |
| 65 | .poll = ivtv_v4l2_dec_poll, | ||
| 64 | }; | 66 | }; |
| 65 | 67 | ||
| 66 | #define IVTV_V4L2_DEC_MPG_OFFSET 16 /* offset from 0 to register decoder mpg v4l2 minors on */ | 68 | #define IVTV_V4L2_DEC_MPG_OFFSET 16 /* offset from 0 to register decoder mpg v4l2 minors on */ |
diff --git a/drivers/media/video/ivtv/ivtv-version.h b/drivers/media/video/ivtv/ivtv-version.h index 02c5ab071d1b..442f43f11b73 100644 --- a/drivers/media/video/ivtv/ivtv-version.h +++ b/drivers/media/video/ivtv/ivtv-version.h | |||
| @@ -22,8 +22,8 @@ | |||
| 22 | 22 | ||
| 23 | #define IVTV_DRIVER_NAME "ivtv" | 23 | #define IVTV_DRIVER_NAME "ivtv" |
| 24 | #define IVTV_DRIVER_VERSION_MAJOR 1 | 24 | #define IVTV_DRIVER_VERSION_MAJOR 1 |
| 25 | #define IVTV_DRIVER_VERSION_MINOR 2 | 25 | #define IVTV_DRIVER_VERSION_MINOR 3 |
| 26 | #define IVTV_DRIVER_VERSION_PATCHLEVEL 1 | 26 | #define IVTV_DRIVER_VERSION_PATCHLEVEL 0 |
| 27 | 27 | ||
| 28 | #define IVTV_VERSION __stringify(IVTV_DRIVER_VERSION_MAJOR) "." __stringify(IVTV_DRIVER_VERSION_MINOR) "." __stringify(IVTV_DRIVER_VERSION_PATCHLEVEL) | 28 | #define IVTV_VERSION __stringify(IVTV_DRIVER_VERSION_MAJOR) "." __stringify(IVTV_DRIVER_VERSION_MINOR) "." __stringify(IVTV_DRIVER_VERSION_PATCHLEVEL) |
| 29 | #define IVTV_DRIVER_VERSION KERNEL_VERSION(IVTV_DRIVER_VERSION_MAJOR,IVTV_DRIVER_VERSION_MINOR,IVTV_DRIVER_VERSION_PATCHLEVEL) | 29 | #define IVTV_DRIVER_VERSION KERNEL_VERSION(IVTV_DRIVER_VERSION_MAJOR,IVTV_DRIVER_VERSION_MINOR,IVTV_DRIVER_VERSION_PATCHLEVEL) |
diff --git a/drivers/media/video/ivtv/ivtv-yuv.c b/drivers/media/video/ivtv/ivtv-yuv.c index a9417f6e4087..3092ff1d00a0 100644 --- a/drivers/media/video/ivtv/ivtv-yuv.c +++ b/drivers/media/video/ivtv/ivtv-yuv.c | |||
| @@ -1116,7 +1116,7 @@ void ivtv_yuv_setup_stream_frame(struct ivtv *itv) | |||
| 1116 | } | 1116 | } |
| 1117 | 1117 | ||
| 1118 | /* Attempt to dma a frame from a user buffer */ | 1118 | /* Attempt to dma a frame from a user buffer */ |
| 1119 | int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void *src) | 1119 | int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src) |
| 1120 | { | 1120 | { |
| 1121 | struct yuv_playback_info *yi = &itv->yuv_info; | 1121 | struct yuv_playback_info *yi = &itv->yuv_info; |
| 1122 | struct ivtv_dma_frame dma_args; | 1122 | struct ivtv_dma_frame dma_args; |
diff --git a/drivers/media/video/ivtv/ivtv-yuv.h b/drivers/media/video/ivtv/ivtv-yuv.h index 2fe5f1250762..ca5173fbf006 100644 --- a/drivers/media/video/ivtv/ivtv-yuv.h +++ b/drivers/media/video/ivtv/ivtv-yuv.h | |||
| @@ -35,7 +35,7 @@ extern const u32 yuv_offset[IVTV_YUV_BUFFERS]; | |||
| 35 | 35 | ||
| 36 | int ivtv_yuv_filter_check(struct ivtv *itv); | 36 | int ivtv_yuv_filter_check(struct ivtv *itv); |
| 37 | void ivtv_yuv_setup_stream_frame(struct ivtv *itv); | 37 | void ivtv_yuv_setup_stream_frame(struct ivtv *itv); |
| 38 | int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void *src); | 38 | int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src); |
| 39 | void ivtv_yuv_frame_complete(struct ivtv *itv); | 39 | void ivtv_yuv_frame_complete(struct ivtv *itv); |
| 40 | int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args); | 40 | int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args); |
| 41 | void ivtv_yuv_close(struct ivtv *itv); | 41 | void ivtv_yuv_close(struct ivtv *itv); |
diff --git a/drivers/media/video/saa7134/saa7134-empress.c b/drivers/media/video/saa7134/saa7134-empress.c index 1314522a8130..81431ee41842 100644 --- a/drivers/media/video/saa7134/saa7134-empress.c +++ b/drivers/media/video/saa7134/saa7134-empress.c | |||
| @@ -163,8 +163,7 @@ ts_mmap(struct file *file, struct vm_area_struct * vma) | |||
| 163 | static int empress_querycap(struct file *file, void *priv, | 163 | static int empress_querycap(struct file *file, void *priv, |
| 164 | struct v4l2_capability *cap) | 164 | struct v4l2_capability *cap) |
| 165 | { | 165 | { |
| 166 | struct saa7134_fh *fh = priv; | 166 | struct saa7134_dev *dev = file->private_data; |
| 167 | struct saa7134_dev *dev = fh->dev; | ||
| 168 | 167 | ||
| 169 | strcpy(cap->driver, "saa7134"); | 168 | strcpy(cap->driver, "saa7134"); |
| 170 | strlcpy(cap->card, saa7134_boards[dev->board].name, | 169 | strlcpy(cap->card, saa7134_boards[dev->board].name, |
diff --git a/drivers/media/video/tuner-core.c b/drivers/media/video/tuner-core.c index 198f0afb812e..0d12ace61665 100644 --- a/drivers/media/video/tuner-core.c +++ b/drivers/media/video/tuner-core.c | |||
| @@ -92,6 +92,7 @@ struct tuner { | |||
| 92 | unsigned int type; /* chip type id */ | 92 | unsigned int type; /* chip type id */ |
| 93 | unsigned int config; | 93 | unsigned int config; |
| 94 | int (*tuner_callback) (void *dev, int command, int arg); | 94 | int (*tuner_callback) (void *dev, int command, int arg); |
| 95 | const char *name; | ||
| 95 | }; | 96 | }; |
| 96 | 97 | ||
| 97 | /* standard i2c insmod options */ | 98 | /* standard i2c insmod options */ |
| @@ -330,13 +331,13 @@ static void tuner_i2c_address_check(struct tuner *t) | |||
| 330 | tuner_warn("Support for tuners in i2c address range 0x64 thru 0x6f\n"); | 331 | tuner_warn("Support for tuners in i2c address range 0x64 thru 0x6f\n"); |
| 331 | tuner_warn("will soon be dropped. This message indicates that your\n"); | 332 | tuner_warn("will soon be dropped. This message indicates that your\n"); |
| 332 | tuner_warn("hardware has a %s tuner at i2c address 0x%02x.\n", | 333 | tuner_warn("hardware has a %s tuner at i2c address 0x%02x.\n", |
| 333 | t->i2c->name, t->i2c->addr); | 334 | t->name, t->i2c->addr); |
| 334 | tuner_warn("To ensure continued support for your device, please\n"); | 335 | tuner_warn("To ensure continued support for your device, please\n"); |
| 335 | tuner_warn("send a copy of this message, along with full dmesg\n"); | 336 | tuner_warn("send a copy of this message, along with full dmesg\n"); |
| 336 | tuner_warn("output to v4l-dvb-maintainer@linuxtv.org\n"); | 337 | tuner_warn("output to v4l-dvb-maintainer@linuxtv.org\n"); |
| 337 | tuner_warn("Please use subject line: \"obsolete tuner i2c address.\"\n"); | 338 | tuner_warn("Please use subject line: \"obsolete tuner i2c address.\"\n"); |
| 338 | tuner_warn("driver: %s, addr: 0x%02x, type: %d (%s)\n", | 339 | tuner_warn("driver: %s, addr: 0x%02x, type: %d (%s)\n", |
| 339 | t->i2c->adapter->name, t->i2c->addr, t->type, t->i2c->name); | 340 | t->i2c->adapter->name, t->i2c->addr, t->type, t->name); |
| 340 | tuner_warn("====================== WARNING! ======================\n"); | 341 | tuner_warn("====================== WARNING! ======================\n"); |
| 341 | } | 342 | } |
| 342 | 343 | ||
| @@ -470,19 +471,17 @@ static void set_type(struct i2c_client *c, unsigned int type, | |||
| 470 | if ((NULL == analog_ops->set_params) && | 471 | if ((NULL == analog_ops->set_params) && |
| 471 | (fe_tuner_ops->set_analog_params)) { | 472 | (fe_tuner_ops->set_analog_params)) { |
| 472 | 473 | ||
| 473 | strlcpy(t->i2c->name, fe_tuner_ops->info.name, | 474 | t->name = fe_tuner_ops->info.name; |
| 474 | sizeof(t->i2c->name)); | ||
| 475 | 475 | ||
| 476 | t->fe.analog_demod_priv = t; | 476 | t->fe.analog_demod_priv = t; |
| 477 | memcpy(analog_ops, &tuner_core_ops, | 477 | memcpy(analog_ops, &tuner_core_ops, |
| 478 | sizeof(struct analog_demod_ops)); | 478 | sizeof(struct analog_demod_ops)); |
| 479 | 479 | ||
| 480 | } else { | 480 | } else { |
| 481 | strlcpy(t->i2c->name, analog_ops->info.name, | 481 | t->name = analog_ops->info.name; |
| 482 | sizeof(t->i2c->name)); | ||
| 483 | } | 482 | } |
| 484 | 483 | ||
| 485 | tuner_dbg("type set to %s\n", t->i2c->name); | 484 | tuner_dbg("type set to %s\n", t->name); |
| 486 | 485 | ||
| 487 | if (t->mode_mask == T_UNINITIALIZED) | 486 | if (t->mode_mask == T_UNINITIALIZED) |
| 488 | t->mode_mask = new_mode_mask; | 487 | t->mode_mask = new_mode_mask; |
| @@ -537,7 +536,7 @@ static void set_addr(struct i2c_client *c, struct tuner_setup *tun_setup) | |||
| 537 | static inline int check_mode(struct tuner *t, char *cmd) | 536 | static inline int check_mode(struct tuner *t, char *cmd) |
| 538 | { | 537 | { |
| 539 | if ((1 << t->mode & t->mode_mask) == 0) { | 538 | if ((1 << t->mode & t->mode_mask) == 0) { |
| 540 | return EINVAL; | 539 | return -EINVAL; |
| 541 | } | 540 | } |
| 542 | 541 | ||
| 543 | switch (t->mode) { | 542 | switch (t->mode) { |
| @@ -731,11 +730,11 @@ static inline int set_mode(struct i2c_client *client, struct tuner *t, int mode, | |||
| 731 | 730 | ||
| 732 | t->mode = mode; | 731 | t->mode = mode; |
| 733 | 732 | ||
| 734 | if (check_mode(t, cmd) == EINVAL) { | 733 | if (check_mode(t, cmd) == -EINVAL) { |
| 735 | t->mode = T_STANDBY; | 734 | t->mode = T_STANDBY; |
| 736 | if (analog_ops->standby) | 735 | if (analog_ops->standby) |
| 737 | analog_ops->standby(&t->fe); | 736 | analog_ops->standby(&t->fe); |
| 738 | return EINVAL; | 737 | return -EINVAL; |
| 739 | } | 738 | } |
| 740 | return 0; | 739 | return 0; |
| 741 | } | 740 | } |
| @@ -777,13 +776,13 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 777 | break; | 776 | break; |
| 778 | case AUDC_SET_RADIO: | 777 | case AUDC_SET_RADIO: |
| 779 | if (set_mode(client, t, V4L2_TUNER_RADIO, "AUDC_SET_RADIO") | 778 | if (set_mode(client, t, V4L2_TUNER_RADIO, "AUDC_SET_RADIO") |
| 780 | == EINVAL) | 779 | == -EINVAL) |
| 781 | return 0; | 780 | return 0; |
| 782 | if (t->radio_freq) | 781 | if (t->radio_freq) |
| 783 | set_freq(client, t->radio_freq); | 782 | set_freq(client, t->radio_freq); |
| 784 | break; | 783 | break; |
| 785 | case TUNER_SET_STANDBY: | 784 | case TUNER_SET_STANDBY: |
| 786 | if (check_mode(t, "TUNER_SET_STANDBY") == EINVAL) | 785 | if (check_mode(t, "TUNER_SET_STANDBY") == -EINVAL) |
| 787 | return 0; | 786 | return 0; |
| 788 | t->mode = T_STANDBY; | 787 | t->mode = T_STANDBY; |
| 789 | if (analog_ops->standby) | 788 | if (analog_ops->standby) |
| @@ -791,9 +790,9 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 791 | break; | 790 | break; |
| 792 | #ifdef CONFIG_VIDEO_ALLOW_V4L1 | 791 | #ifdef CONFIG_VIDEO_ALLOW_V4L1 |
| 793 | case VIDIOCSAUDIO: | 792 | case VIDIOCSAUDIO: |
| 794 | if (check_mode(t, "VIDIOCSAUDIO") == EINVAL) | 793 | if (check_mode(t, "VIDIOCSAUDIO") == -EINVAL) |
| 795 | return 0; | 794 | return 0; |
| 796 | if (check_v4l2(t) == EINVAL) | 795 | if (check_v4l2(t) == -EINVAL) |
| 797 | return 0; | 796 | return 0; |
| 798 | 797 | ||
| 799 | /* Should be implemented, since bttv calls it */ | 798 | /* Should be implemented, since bttv calls it */ |
| @@ -811,10 +810,10 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 811 | }; | 810 | }; |
| 812 | struct video_channel *vc = arg; | 811 | struct video_channel *vc = arg; |
| 813 | 812 | ||
| 814 | if (check_v4l2(t) == EINVAL) | 813 | if (check_v4l2(t) == -EINVAL) |
| 815 | return 0; | 814 | return 0; |
| 816 | 815 | ||
| 817 | if (set_mode(client,t,V4L2_TUNER_ANALOG_TV, "VIDIOCSCHAN")==EINVAL) | 816 | if (set_mode(client,t,V4L2_TUNER_ANALOG_TV, "VIDIOCSCHAN")==-EINVAL) |
| 818 | return 0; | 817 | return 0; |
| 819 | 818 | ||
| 820 | if (vc->norm < ARRAY_SIZE(map)) | 819 | if (vc->norm < ARRAY_SIZE(map)) |
| @@ -828,9 +827,9 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 828 | { | 827 | { |
| 829 | unsigned long *v = arg; | 828 | unsigned long *v = arg; |
| 830 | 829 | ||
| 831 | if (check_mode(t, "VIDIOCSFREQ") == EINVAL) | 830 | if (check_mode(t, "VIDIOCSFREQ") == -EINVAL) |
| 832 | return 0; | 831 | return 0; |
| 833 | if (check_v4l2(t) == EINVAL) | 832 | if (check_v4l2(t) == -EINVAL) |
| 834 | return 0; | 833 | return 0; |
| 835 | 834 | ||
| 836 | set_freq(client, *v); | 835 | set_freq(client, *v); |
| @@ -840,9 +839,9 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 840 | { | 839 | { |
| 841 | struct video_tuner *vt = arg; | 840 | struct video_tuner *vt = arg; |
| 842 | 841 | ||
| 843 | if (check_mode(t, "VIDIOCGTUNER") == EINVAL) | 842 | if (check_mode(t, "VIDIOCGTUNER") == -EINVAL) |
| 844 | return 0; | 843 | return 0; |
| 845 | if (check_v4l2(t) == EINVAL) | 844 | if (check_v4l2(t) == -EINVAL) |
| 846 | return 0; | 845 | return 0; |
| 847 | 846 | ||
| 848 | if (V4L2_TUNER_RADIO == t->mode) { | 847 | if (V4L2_TUNER_RADIO == t->mode) { |
| @@ -884,9 +883,9 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 884 | { | 883 | { |
| 885 | struct video_audio *va = arg; | 884 | struct video_audio *va = arg; |
| 886 | 885 | ||
| 887 | if (check_mode(t, "VIDIOCGAUDIO") == EINVAL) | 886 | if (check_mode(t, "VIDIOCGAUDIO") == -EINVAL) |
| 888 | return 0; | 887 | return 0; |
| 889 | if (check_v4l2(t) == EINVAL) | 888 | if (check_v4l2(t) == -EINVAL) |
| 890 | return 0; | 889 | return 0; |
| 891 | 890 | ||
| 892 | if (V4L2_TUNER_RADIO == t->mode) { | 891 | if (V4L2_TUNER_RADIO == t->mode) { |
| @@ -926,7 +925,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 926 | v4l2_std_id *id = arg; | 925 | v4l2_std_id *id = arg; |
| 927 | 926 | ||
| 928 | if (set_mode (client, t, V4L2_TUNER_ANALOG_TV, "VIDIOC_S_STD") | 927 | if (set_mode (client, t, V4L2_TUNER_ANALOG_TV, "VIDIOC_S_STD") |
| 929 | == EINVAL) | 928 | == -EINVAL) |
| 930 | return 0; | 929 | return 0; |
| 931 | 930 | ||
| 932 | switch_v4l2(); | 931 | switch_v4l2(); |
| @@ -942,7 +941,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 942 | struct v4l2_frequency *f = arg; | 941 | struct v4l2_frequency *f = arg; |
| 943 | 942 | ||
| 944 | if (set_mode (client, t, f->type, "VIDIOC_S_FREQUENCY") | 943 | if (set_mode (client, t, f->type, "VIDIOC_S_FREQUENCY") |
| 945 | == EINVAL) | 944 | == -EINVAL) |
| 946 | return 0; | 945 | return 0; |
| 947 | switch_v4l2(); | 946 | switch_v4l2(); |
| 948 | set_freq(client,f->frequency); | 947 | set_freq(client,f->frequency); |
| @@ -953,7 +952,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 953 | { | 952 | { |
| 954 | struct v4l2_frequency *f = arg; | 953 | struct v4l2_frequency *f = arg; |
| 955 | 954 | ||
| 956 | if (check_mode(t, "VIDIOC_G_FREQUENCY") == EINVAL) | 955 | if (check_mode(t, "VIDIOC_G_FREQUENCY") == -EINVAL) |
| 957 | return 0; | 956 | return 0; |
| 958 | switch_v4l2(); | 957 | switch_v4l2(); |
| 959 | f->type = t->mode; | 958 | f->type = t->mode; |
| @@ -974,7 +973,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 974 | { | 973 | { |
| 975 | struct v4l2_tuner *tuner = arg; | 974 | struct v4l2_tuner *tuner = arg; |
| 976 | 975 | ||
| 977 | if (check_mode(t, "VIDIOC_G_TUNER") == EINVAL) | 976 | if (check_mode(t, "VIDIOC_G_TUNER") == -EINVAL) |
| 978 | return 0; | 977 | return 0; |
| 979 | switch_v4l2(); | 978 | switch_v4l2(); |
| 980 | 979 | ||
| @@ -1021,7 +1020,7 @@ static int tuner_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
| 1021 | { | 1020 | { |
| 1022 | struct v4l2_tuner *tuner = arg; | 1021 | struct v4l2_tuner *tuner = arg; |
| 1023 | 1022 | ||
| 1024 | if (check_mode(t, "VIDIOC_S_TUNER") == EINVAL) | 1023 | if (check_mode(t, "VIDIOC_S_TUNER") == -EINVAL) |
| 1025 | return 0; | 1024 | return 0; |
| 1026 | 1025 | ||
| 1027 | switch_v4l2(); | 1026 | switch_v4l2(); |
| @@ -1115,6 +1114,7 @@ static int tuner_probe(struct i2c_client *client, | |||
| 1115 | if (NULL == t) | 1114 | if (NULL == t) |
| 1116 | return -ENOMEM; | 1115 | return -ENOMEM; |
| 1117 | t->i2c = client; | 1116 | t->i2c = client; |
| 1117 | t->name = "(tuner unset)"; | ||
| 1118 | i2c_set_clientdata(client, t); | 1118 | i2c_set_clientdata(client, t); |
| 1119 | t->type = UNSET; | 1119 | t->type = UNSET; |
| 1120 | t->audmode = V4L2_TUNER_MODE_STEREO; | 1120 | t->audmode = V4L2_TUNER_MODE_STEREO; |
| @@ -1272,12 +1272,6 @@ static int tuner_remove(struct i2c_client *client) | |||
| 1272 | 1272 | ||
| 1273 | list_del(&t->list); | 1273 | list_del(&t->list); |
| 1274 | kfree(t); | 1274 | kfree(t); |
| 1275 | |||
| 1276 | /* The probing code has overwritten the device name, restore it so | ||
| 1277 | that reloading the driver will work. Ideally the device name | ||
| 1278 | should not be overwritten in the first place, but for now that | ||
| 1279 | will do. */ | ||
| 1280 | strlcpy(client->name, "tuner", I2C_NAME_SIZE); | ||
| 1281 | return 0; | 1275 | return 0; |
| 1282 | } | 1276 | } |
| 1283 | 1277 | ||
diff --git a/drivers/media/video/usbvideo/quickcam_messenger.c b/drivers/media/video/usbvideo/quickcam_messenger.c index 32e536edf09d..3d26a30abe1e 100644 --- a/drivers/media/video/usbvideo/quickcam_messenger.c +++ b/drivers/media/video/usbvideo/quickcam_messenger.c | |||
| @@ -210,7 +210,7 @@ static int qcm_stv_setb(struct usb_device *dev, u16 reg, u8 val) | |||
| 210 | return ret; | 210 | return ret; |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | static int qcm_stv_setw(struct usb_device *dev, u16 reg, u16 val) | 213 | static int qcm_stv_setw(struct usb_device *dev, u16 reg, __le16 val) |
| 214 | { | 214 | { |
| 215 | int ret; | 215 | int ret; |
| 216 | 216 | ||
diff --git a/drivers/media/video/zoran.h b/drivers/media/video/zoran.h index 81cc3b00a079..46b7ad477ceb 100644 --- a/drivers/media/video/zoran.h +++ b/drivers/media/video/zoran.h | |||
| @@ -285,7 +285,7 @@ struct zoran_mapping { | |||
| 285 | 285 | ||
| 286 | struct zoran_jpg_buffer { | 286 | struct zoran_jpg_buffer { |
| 287 | struct zoran_mapping *map; | 287 | struct zoran_mapping *map; |
| 288 | u32 *frag_tab; /* addresses of frag table */ | 288 | __le32 *frag_tab; /* addresses of frag table */ |
| 289 | u32 frag_tab_bus; /* same value cached to save time in ISR */ | 289 | u32 frag_tab_bus; /* same value cached to save time in ISR */ |
| 290 | enum zoran_buffer_state state; /* non-zero if corresponding buffer is in use in grab queue */ | 290 | enum zoran_buffer_state state; /* non-zero if corresponding buffer is in use in grab queue */ |
| 291 | struct zoran_sync bs; /* DONE: info to return to application */ | 291 | struct zoran_sync bs; /* DONE: info to return to application */ |
| @@ -450,7 +450,7 @@ struct zoran { | |||
| 450 | unsigned long jpg_queued_num; /* count of frames queued since grab/play started */ | 450 | unsigned long jpg_queued_num; /* count of frames queued since grab/play started */ |
| 451 | 451 | ||
| 452 | /* zr36057's code buffer table */ | 452 | /* zr36057's code buffer table */ |
| 453 | u32 *stat_com; /* stat_com[i] is indexed by dma_head/tail & BUZ_MASK_STAT_COM */ | 453 | __le32 *stat_com; /* stat_com[i] is indexed by dma_head/tail & BUZ_MASK_STAT_COM */ |
| 454 | 454 | ||
| 455 | /* (value & BUZ_MASK_FRAME) corresponds to index in pend[] queue */ | 455 | /* (value & BUZ_MASK_FRAME) corresponds to index in pend[] queue */ |
| 456 | int jpg_pend[BUZ_MAX_FRAME]; | 456 | int jpg_pend[BUZ_MAX_FRAME]; |
diff --git a/drivers/media/video/zoran_device.c b/drivers/media/video/zoran_device.c index 37629ffd34c3..88d369708e4c 100644 --- a/drivers/media/video/zoran_device.c +++ b/drivers/media/video/zoran_device.c | |||
| @@ -1320,7 +1320,7 @@ error_handler (struct zoran *zr, | |||
| 1320 | if (i) { | 1320 | if (i) { |
| 1321 | /* Rotate stat_comm entries to make current entry first */ | 1321 | /* Rotate stat_comm entries to make current entry first */ |
| 1322 | int j; | 1322 | int j; |
| 1323 | u32 bus_addr[BUZ_NUM_STAT_COM]; | 1323 | __le32 bus_addr[BUZ_NUM_STAT_COM]; |
| 1324 | 1324 | ||
| 1325 | /* Here we are copying the stat_com array, which | 1325 | /* Here we are copying the stat_com array, which |
| 1326 | * is already in little endian format, so | 1326 | * is already in little endian format, so |
diff --git a/drivers/media/video/zoran_driver.c b/drivers/media/video/zoran_driver.c index 345c77e46837..5394d7a5cfee 100644 --- a/drivers/media/video/zoran_driver.c +++ b/drivers/media/video/zoran_driver.c | |||
| @@ -495,7 +495,7 @@ jpg_fbuffer_alloc (struct file *file) | |||
| 495 | jpg_fbuffer_free(file); | 495 | jpg_fbuffer_free(file); |
| 496 | return -ENOBUFS; | 496 | return -ENOBUFS; |
| 497 | } | 497 | } |
| 498 | fh->jpg_buffers.buffer[i].frag_tab = (u32 *) mem; | 498 | fh->jpg_buffers.buffer[i].frag_tab = (__le32 *) mem; |
| 499 | fh->jpg_buffers.buffer[i].frag_tab_bus = | 499 | fh->jpg_buffers.buffer[i].frag_tab_bus = |
| 500 | virt_to_bus((void *) mem); | 500 | virt_to_bus((void *) mem); |
| 501 | 501 | ||
| @@ -1167,7 +1167,7 @@ zoran_close_end_session (struct file *file) | |||
| 1167 | 1167 | ||
| 1168 | /* v4l capture */ | 1168 | /* v4l capture */ |
| 1169 | if (fh->v4l_buffers.active != ZORAN_FREE) { | 1169 | if (fh->v4l_buffers.active != ZORAN_FREE) { |
| 1170 | long flags; | 1170 | unsigned long flags; |
| 1171 | 1171 | ||
| 1172 | spin_lock_irqsave(&zr->spinlock, flags); | 1172 | spin_lock_irqsave(&zr->spinlock, flags); |
| 1173 | zr36057_set_memgrab(zr, 0); | 1173 | zr36057_set_memgrab(zr, 0); |
| @@ -3436,7 +3436,7 @@ zoran_do_ioctl (struct inode *inode, | |||
| 3436 | 3436 | ||
| 3437 | /* unload capture */ | 3437 | /* unload capture */ |
| 3438 | if (zr->v4l_memgrab_active) { | 3438 | if (zr->v4l_memgrab_active) { |
| 3439 | long flags; | 3439 | unsigned long flags; |
| 3440 | 3440 | ||
| 3441 | spin_lock_irqsave(&zr->spinlock, flags); | 3441 | spin_lock_irqsave(&zr->spinlock, flags); |
| 3442 | zr36057_set_memgrab(zr, 0); | 3442 | zr36057_set_memgrab(zr, 0); |
| @@ -4375,7 +4375,7 @@ zoran_vm_close (struct vm_area_struct *vma) | |||
| 4375 | mutex_lock(&zr->resource_lock); | 4375 | mutex_lock(&zr->resource_lock); |
| 4376 | 4376 | ||
| 4377 | if (fh->v4l_buffers.active != ZORAN_FREE) { | 4377 | if (fh->v4l_buffers.active != ZORAN_FREE) { |
| 4378 | long flags; | 4378 | unsigned long flags; |
| 4379 | 4379 | ||
| 4380 | spin_lock_irqsave(&zr->spinlock, flags); | 4380 | spin_lock_irqsave(&zr->spinlock, flags); |
| 4381 | zr36057_set_memgrab(zr, 0); | 4381 | zr36057_set_memgrab(zr, 0); |
| @@ -4506,7 +4506,7 @@ zoran_mmap (struct file *file, | |||
| 4506 | if (todo > fraglen) | 4506 | if (todo > fraglen) |
| 4507 | todo = fraglen; | 4507 | todo = fraglen; |
| 4508 | pos = | 4508 | pos = |
| 4509 | le32_to_cpu((unsigned long) fh->jpg_buffers. | 4509 | le32_to_cpu(fh->jpg_buffers. |
| 4510 | buffer[i].frag_tab[2 * j]); | 4510 | buffer[i].frag_tab[2 * j]); |
| 4511 | /* should just be pos on i386 */ | 4511 | /* should just be pos on i386 */ |
| 4512 | page = virt_to_phys(bus_to_virt(pos)) | 4512 | page = virt_to_phys(bus_to_virt(pos)) |
diff --git a/drivers/message/fusion/mptfc.c b/drivers/message/fusion/mptfc.c index 3cdd4e962115..1e24ab4ac38c 100644 --- a/drivers/message/fusion/mptfc.c +++ b/drivers/message/fusion/mptfc.c | |||
| @@ -1238,8 +1238,6 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 1238 | sh->max_id = ioc->pfacts->MaxDevices; | 1238 | sh->max_id = ioc->pfacts->MaxDevices; |
| 1239 | sh->max_lun = max_lun; | 1239 | sh->max_lun = max_lun; |
| 1240 | 1240 | ||
| 1241 | sh->this_id = ioc->pfacts[0].PortSCSIID; | ||
| 1242 | |||
| 1243 | /* Required entry. | 1241 | /* Required entry. |
| 1244 | */ | 1242 | */ |
| 1245 | sh->unique_id = ioc->id; | 1243 | sh->unique_id = ioc->id; |
diff --git a/drivers/message/fusion/mptsas.c b/drivers/message/fusion/mptsas.c index 468480771f13..4d492ba232b0 100644 --- a/drivers/message/fusion/mptsas.c +++ b/drivers/message/fusion/mptsas.c | |||
| @@ -3193,8 +3193,6 @@ mptsas_probe(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 3193 | 3193 | ||
| 3194 | sh->transportt = mptsas_transport_template; | 3194 | sh->transportt = mptsas_transport_template; |
| 3195 | 3195 | ||
| 3196 | sh->this_id = ioc->pfacts[0].PortSCSIID; | ||
| 3197 | |||
| 3198 | /* Required entry. | 3196 | /* Required entry. |
| 3199 | */ | 3197 | */ |
| 3200 | sh->unique_id = ioc->id; | 3198 | sh->unique_id = ioc->id; |
diff --git a/drivers/message/fusion/mptscsih.c b/drivers/message/fusion/mptscsih.c index b109bd8a4d19..c68ef00c2f92 100644 --- a/drivers/message/fusion/mptscsih.c +++ b/drivers/message/fusion/mptscsih.c | |||
| @@ -2451,12 +2451,6 @@ mptscsih_slave_configure(struct scsi_device *sdev) | |||
| 2451 | ioc->name, sdev->sdtr, sdev->wdtr, | 2451 | ioc->name, sdev->sdtr, sdev->wdtr, |
| 2452 | sdev->ppr, sdev->inquiry_len)); | 2452 | sdev->ppr, sdev->inquiry_len)); |
| 2453 | 2453 | ||
| 2454 | if (sdev->id > sh->max_id) { | ||
| 2455 | /* error case, should never happen */ | ||
| 2456 | scsi_adjust_queue_depth(sdev, 0, 1); | ||
| 2457 | goto slave_configure_exit; | ||
| 2458 | } | ||
| 2459 | |||
| 2460 | vdevice->configured_lun = 1; | 2454 | vdevice->configured_lun = 1; |
| 2461 | mptscsih_change_queue_depth(sdev, MPT_SCSI_CMD_PER_DEV_HIGH); | 2455 | mptscsih_change_queue_depth(sdev, MPT_SCSI_CMD_PER_DEV_HIGH); |
| 2462 | 2456 | ||
| @@ -2470,8 +2464,6 @@ mptscsih_slave_configure(struct scsi_device *sdev) | |||
| 2470 | ioc->name, vtarget->negoFlags, vtarget->maxOffset, | 2464 | ioc->name, vtarget->negoFlags, vtarget->maxOffset, |
| 2471 | vtarget->minSyncFactor)); | 2465 | vtarget->minSyncFactor)); |
| 2472 | 2466 | ||
| 2473 | slave_configure_exit: | ||
| 2474 | |||
| 2475 | dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT | 2467 | dsprintk(ioc, printk(MYIOC_s_DEBUG_FMT |
| 2476 | "tagged %d, simple %d, ordered %d\n", | 2468 | "tagged %d, simple %d, ordered %d\n", |
| 2477 | ioc->name,sdev->tagged_supported, sdev->simple_tags, | 2469 | ioc->name,sdev->tagged_supported, sdev->simple_tags, |
diff --git a/drivers/misc/fujitsu-laptop.c b/drivers/misc/fujitsu-laptop.c index e2e7c05a147b..6d14e8fe1537 100644 --- a/drivers/misc/fujitsu-laptop.c +++ b/drivers/misc/fujitsu-laptop.c | |||
| @@ -352,3 +352,9 @@ MODULE_AUTHOR("Jonathan Woithe"); | |||
| 352 | MODULE_DESCRIPTION("Fujitsu laptop extras support"); | 352 | MODULE_DESCRIPTION("Fujitsu laptop extras support"); |
| 353 | MODULE_VERSION(FUJITSU_DRIVER_VERSION); | 353 | MODULE_VERSION(FUJITSU_DRIVER_VERSION); |
| 354 | MODULE_LICENSE("GPL"); | 354 | MODULE_LICENSE("GPL"); |
| 355 | |||
| 356 | static struct pnp_device_id pnp_ids[] = { | ||
| 357 | { .id = "FUJ02bf" }, | ||
| 358 | { .id = "" } | ||
| 359 | }; | ||
| 360 | MODULE_DEVICE_TABLE(pnp, pnp_ids); | ||
diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c index fa394104339c..e4ff50b95a5e 100644 --- a/drivers/misc/kgdbts.c +++ b/drivers/misc/kgdbts.c | |||
| @@ -102,7 +102,6 @@ | |||
| 102 | #include <linux/nmi.h> | 102 | #include <linux/nmi.h> |
| 103 | #include <linux/delay.h> | 103 | #include <linux/delay.h> |
| 104 | #include <linux/kthread.h> | 104 | #include <linux/kthread.h> |
| 105 | #include <linux/delay.h> | ||
| 106 | 105 | ||
| 107 | #define v1printk(a...) do { \ | 106 | #define v1printk(a...) do { \ |
| 108 | if (verbose) \ | 107 | if (verbose) \ |
| @@ -119,7 +118,6 @@ | |||
| 119 | } while (0) | 118 | } while (0) |
| 120 | #define MAX_CONFIG_LEN 40 | 119 | #define MAX_CONFIG_LEN 40 |
| 121 | 120 | ||
| 122 | static const char hexchars[] = "0123456789abcdef"; | ||
| 123 | static struct kgdb_io kgdbts_io_ops; | 121 | static struct kgdb_io kgdbts_io_ops; |
| 124 | static char get_buf[BUFMAX]; | 122 | static char get_buf[BUFMAX]; |
| 125 | static int get_buf_cnt; | 123 | static int get_buf_cnt; |
| @@ -131,6 +129,8 @@ static int repeat_test; | |||
| 131 | static int test_complete; | 129 | static int test_complete; |
| 132 | static int send_ack; | 130 | static int send_ack; |
| 133 | static int final_ack; | 131 | static int final_ack; |
| 132 | static int force_hwbrks; | ||
| 133 | static int hwbreaks_ok; | ||
| 134 | static int hw_break_val; | 134 | static int hw_break_val; |
| 135 | static int hw_break_val2; | 135 | static int hw_break_val2; |
| 136 | #if defined(CONFIG_ARM) || defined(CONFIG_MIPS) || defined(CONFIG_SPARC) | 136 | #if defined(CONFIG_ARM) || defined(CONFIG_MIPS) || defined(CONFIG_SPARC) |
| @@ -234,12 +234,12 @@ static void break_helper(char *bp_type, char *arg, unsigned long vaddr) | |||
| 234 | 234 | ||
| 235 | static void sw_break(char *arg) | 235 | static void sw_break(char *arg) |
| 236 | { | 236 | { |
| 237 | break_helper("Z0", arg, 0); | 237 | break_helper(force_hwbrks ? "Z1" : "Z0", arg, 0); |
| 238 | } | 238 | } |
| 239 | 239 | ||
| 240 | static void sw_rem_break(char *arg) | 240 | static void sw_rem_break(char *arg) |
| 241 | { | 241 | { |
| 242 | break_helper("z0", arg, 0); | 242 | break_helper(force_hwbrks ? "z1" : "z0", arg, 0); |
| 243 | } | 243 | } |
| 244 | 244 | ||
| 245 | static void hw_break(char *arg) | 245 | static void hw_break(char *arg) |
| @@ -619,8 +619,8 @@ static void fill_get_buf(char *buf) | |||
| 619 | count++; | 619 | count++; |
| 620 | } | 620 | } |
| 621 | strcat(get_buf, "#"); | 621 | strcat(get_buf, "#"); |
| 622 | get_buf[count + 2] = hexchars[checksum >> 4]; | 622 | get_buf[count + 2] = hex_asc_hi(checksum); |
| 623 | get_buf[count + 3] = hexchars[checksum & 0xf]; | 623 | get_buf[count + 3] = hex_asc_lo(checksum); |
| 624 | get_buf[count + 4] = '\0'; | 624 | get_buf[count + 4] = '\0'; |
| 625 | v2printk("get%i: %s\n", ts.idx, get_buf); | 625 | v2printk("get%i: %s\n", ts.idx, get_buf); |
| 626 | } | 626 | } |
| @@ -781,6 +781,8 @@ static void run_breakpoint_test(int is_hw_breakpoint) | |||
| 781 | return; | 781 | return; |
| 782 | 782 | ||
| 783 | eprintk("kgdbts: ERROR %s test failed\n", ts.name); | 783 | eprintk("kgdbts: ERROR %s test failed\n", ts.name); |
| 784 | if (is_hw_breakpoint) | ||
| 785 | hwbreaks_ok = 0; | ||
| 784 | } | 786 | } |
| 785 | 787 | ||
| 786 | static void run_hw_break_test(int is_write_test) | 788 | static void run_hw_break_test(int is_write_test) |
| @@ -798,9 +800,11 @@ static void run_hw_break_test(int is_write_test) | |||
| 798 | kgdb_breakpoint(); | 800 | kgdb_breakpoint(); |
| 799 | hw_break_val_access(); | 801 | hw_break_val_access(); |
| 800 | if (is_write_test) { | 802 | if (is_write_test) { |
| 801 | if (test_complete == 2) | 803 | if (test_complete == 2) { |
| 802 | eprintk("kgdbts: ERROR %s broke on access\n", | 804 | eprintk("kgdbts: ERROR %s broke on access\n", |
| 803 | ts.name); | 805 | ts.name); |
| 806 | hwbreaks_ok = 0; | ||
| 807 | } | ||
| 804 | hw_break_val_write(); | 808 | hw_break_val_write(); |
| 805 | } | 809 | } |
| 806 | kgdb_breakpoint(); | 810 | kgdb_breakpoint(); |
| @@ -809,6 +813,7 @@ static void run_hw_break_test(int is_write_test) | |||
| 809 | return; | 813 | return; |
| 810 | 814 | ||
| 811 | eprintk("kgdbts: ERROR %s test failed\n", ts.name); | 815 | eprintk("kgdbts: ERROR %s test failed\n", ts.name); |
| 816 | hwbreaks_ok = 0; | ||
| 812 | } | 817 | } |
| 813 | 818 | ||
| 814 | static void run_nmi_sleep_test(int nmi_sleep) | 819 | static void run_nmi_sleep_test(int nmi_sleep) |
| @@ -912,6 +917,7 @@ static void kgdbts_run_tests(void) | |||
| 912 | 917 | ||
| 913 | /* All HW break point tests */ | 918 | /* All HW break point tests */ |
| 914 | if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) { | 919 | if (arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT) { |
| 920 | hwbreaks_ok = 1; | ||
| 915 | v1printk("kgdbts:RUN hw breakpoint test\n"); | 921 | v1printk("kgdbts:RUN hw breakpoint test\n"); |
| 916 | run_breakpoint_test(1); | 922 | run_breakpoint_test(1); |
| 917 | v1printk("kgdbts:RUN hw write breakpoint test\n"); | 923 | v1printk("kgdbts:RUN hw write breakpoint test\n"); |
| @@ -925,6 +931,19 @@ static void kgdbts_run_tests(void) | |||
| 925 | run_nmi_sleep_test(nmi_sleep); | 931 | run_nmi_sleep_test(nmi_sleep); |
| 926 | } | 932 | } |
| 927 | 933 | ||
| 934 | #ifdef CONFIG_DEBUG_RODATA | ||
| 935 | /* Until there is an api to write to read-only text segments, use | ||
| 936 | * HW breakpoints for the remainder of any tests, else print a | ||
| 937 | * failure message if hw breakpoints do not work. | ||
| 938 | */ | ||
| 939 | if (!(arch_kgdb_ops.flags & KGDB_HW_BREAKPOINT && hwbreaks_ok)) { | ||
| 940 | eprintk("kgdbts: HW breakpoints do not work," | ||
| 941 | "skipping remaining tests\n"); | ||
| 942 | return; | ||
| 943 | } | ||
| 944 | force_hwbrks = 1; | ||
| 945 | #endif /* CONFIG_DEBUG_RODATA */ | ||
| 946 | |||
| 928 | /* If the do_fork test is run it will be the last test that is | 947 | /* If the do_fork test is run it will be the last test that is |
| 929 | * executed because a kernel thread will be spawned at the very | 948 | * executed because a kernel thread will be spawned at the very |
| 930 | * end to unregister the debug hooks. | 949 | * end to unregister the debug hooks. |
diff --git a/drivers/misc/thinkpad_acpi.c b/drivers/misc/thinkpad_acpi.c index 3f28f6eabdbf..a0ce0b2fa03e 100644 --- a/drivers/misc/thinkpad_acpi.c +++ b/drivers/misc/thinkpad_acpi.c | |||
| @@ -3821,7 +3821,7 @@ TPACPI_HANDLE(led, ec, "SLED", /* 570 */ | |||
| 3821 | #define TPACPI_LED_NUMLEDS 8 | 3821 | #define TPACPI_LED_NUMLEDS 8 |
| 3822 | static struct tpacpi_led_classdev *tpacpi_leds; | 3822 | static struct tpacpi_led_classdev *tpacpi_leds; |
| 3823 | static enum led_status_t tpacpi_led_state_cache[TPACPI_LED_NUMLEDS]; | 3823 | static enum led_status_t tpacpi_led_state_cache[TPACPI_LED_NUMLEDS]; |
| 3824 | static const char const *tpacpi_led_names[TPACPI_LED_NUMLEDS] = { | 3824 | static const char * const tpacpi_led_names[TPACPI_LED_NUMLEDS] = { |
| 3825 | /* there's a limit of 19 chars + NULL before 2.6.26 */ | 3825 | /* there's a limit of 19 chars + NULL before 2.6.26 */ |
| 3826 | "tpacpi::power", | 3826 | "tpacpi::power", |
| 3827 | "tpacpi:orange:batt", | 3827 | "tpacpi:orange:batt", |
| @@ -3860,10 +3860,10 @@ static int led_get_status(unsigned int led) | |||
| 3860 | static int led_set_status(unsigned int led, enum led_status_t ledstatus) | 3860 | static int led_set_status(unsigned int led, enum led_status_t ledstatus) |
| 3861 | { | 3861 | { |
| 3862 | /* off, on, blink. Index is led_status_t */ | 3862 | /* off, on, blink. Index is led_status_t */ |
| 3863 | static const int const led_sled_arg1[] = { 0, 1, 3 }; | 3863 | static const int led_sled_arg1[] = { 0, 1, 3 }; |
| 3864 | static const int const led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */ | 3864 | static const int led_exp_hlbl[] = { 0, 0, 1 }; /* led# * */ |
| 3865 | static const int const led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */ | 3865 | static const int led_exp_hlcl[] = { 0, 1, 1 }; /* led# * */ |
| 3866 | static const int const led_led_arg1[] = { 0, 0x80, 0xc0 }; | 3866 | static const int led_led_arg1[] = { 0, 0x80, 0xc0 }; |
| 3867 | 3867 | ||
| 3868 | int rc = 0; | 3868 | int rc = 0; |
| 3869 | 3869 | ||
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 91ded3e82401..f9ad960d7c1a 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c | |||
| @@ -46,7 +46,7 @@ | |||
| 46 | #define MMC_SHIFT 3 | 46 | #define MMC_SHIFT 3 |
| 47 | #define MMC_NUM_MINORS (256 >> MMC_SHIFT) | 47 | #define MMC_NUM_MINORS (256 >> MMC_SHIFT) |
| 48 | 48 | ||
| 49 | static unsigned long dev_use[MMC_NUM_MINORS/(8*sizeof(unsigned long))]; | 49 | static DECLARE_BITMAP(dev_use, MMC_NUM_MINORS); |
| 50 | 50 | ||
| 51 | /* | 51 | /* |
| 52 | * There is one mmc_blk_data per slot. | 52 | * There is one mmc_blk_data per slot. |
diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c index 25efd331ef28..b402269301f6 100644 --- a/drivers/mtd/devices/m25p80.c +++ b/drivers/mtd/devices/m25p80.c | |||
| @@ -346,8 +346,10 @@ static int m25p80_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
| 346 | mutex_lock(&flash->lock); | 346 | mutex_lock(&flash->lock); |
| 347 | 347 | ||
| 348 | /* Wait until finished previous write command. */ | 348 | /* Wait until finished previous write command. */ |
| 349 | if (wait_till_ready(flash)) | 349 | if (wait_till_ready(flash)) { |
| 350 | mutex_unlock(&flash->lock); | ||
| 350 | return 1; | 351 | return 1; |
| 352 | } | ||
| 351 | 353 | ||
| 352 | write_enable(flash); | 354 | write_enable(flash); |
| 353 | 355 | ||
diff --git a/drivers/mtd/maps/ck804xrom.c b/drivers/mtd/maps/ck804xrom.c index 59d8fb49270a..effaf7cdefab 100644 --- a/drivers/mtd/maps/ck804xrom.c +++ b/drivers/mtd/maps/ck804xrom.c | |||
| @@ -331,15 +331,15 @@ static void __devexit ck804xrom_remove_one (struct pci_dev *pdev) | |||
| 331 | } | 331 | } |
| 332 | 332 | ||
| 333 | static struct pci_device_id ck804xrom_pci_tbl[] = { | 333 | static struct pci_device_id ck804xrom_pci_tbl[] = { |
| 334 | { PCI_VENDOR_ID_NVIDIA, 0x0051, PCI_ANY_ID, PCI_ANY_ID, DEV_CK804 }, | 334 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0051), .driver_data = DEV_CK804 }, |
| 335 | { PCI_VENDOR_ID_NVIDIA, 0x0360, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 335 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0360), .driver_data = DEV_MCP55 }, |
| 336 | { PCI_VENDOR_ID_NVIDIA, 0x0361, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 336 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0361), .driver_data = DEV_MCP55 }, |
| 337 | { PCI_VENDOR_ID_NVIDIA, 0x0362, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 337 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0362), .driver_data = DEV_MCP55 }, |
| 338 | { PCI_VENDOR_ID_NVIDIA, 0x0363, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 338 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0363), .driver_data = DEV_MCP55 }, |
| 339 | { PCI_VENDOR_ID_NVIDIA, 0x0364, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 339 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0364), .driver_data = DEV_MCP55 }, |
| 340 | { PCI_VENDOR_ID_NVIDIA, 0x0365, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 340 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0365), .driver_data = DEV_MCP55 }, |
| 341 | { PCI_VENDOR_ID_NVIDIA, 0x0366, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 341 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0366), .driver_data = DEV_MCP55 }, |
| 342 | { PCI_VENDOR_ID_NVIDIA, 0x0367, PCI_ANY_ID, PCI_ANY_ID, DEV_MCP55 }, | 342 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, 0x0367), .driver_data = DEV_MCP55 }, |
| 343 | { 0, } | 343 | { 0, } |
| 344 | }; | 344 | }; |
| 345 | 345 | ||
diff --git a/drivers/mtd/maps/omap_nor.c b/drivers/mtd/maps/omap_nor.c index 240b0e2d095d..c12d8056bebd 100644 --- a/drivers/mtd/maps/omap_nor.c +++ b/drivers/mtd/maps/omap_nor.c | |||
| @@ -110,7 +110,7 @@ static int __init omapflash_probe(struct platform_device *pdev) | |||
| 110 | err = parse_mtd_partitions(info->mtd, part_probes, &info->parts, 0); | 110 | err = parse_mtd_partitions(info->mtd, part_probes, &info->parts, 0); |
| 111 | if (err > 0) | 111 | if (err > 0) |
| 112 | add_mtd_partitions(info->mtd, info->parts, err); | 112 | add_mtd_partitions(info->mtd, info->parts, err); |
| 113 | else if (err < 0 && pdata->parts) | 113 | else if (err <= 0 && pdata->parts) |
| 114 | add_mtd_partitions(info->mtd, pdata->parts, pdata->nr_parts); | 114 | add_mtd_partitions(info->mtd, pdata->parts, pdata->nr_parts); |
| 115 | else | 115 | else |
| 116 | #endif | 116 | #endif |
diff --git a/drivers/mtd/nand/pxa3xx_nand.c b/drivers/mtd/nand/pxa3xx_nand.c index fceb468ccdec..fe2bc7e42119 100644 --- a/drivers/mtd/nand/pxa3xx_nand.c +++ b/drivers/mtd/nand/pxa3xx_nand.c | |||
| @@ -1216,7 +1216,7 @@ static int pxa3xx_nand_resume(struct platform_device *pdev) | |||
| 1216 | 1216 | ||
| 1217 | clk_enable(info->clk); | 1217 | clk_enable(info->clk); |
| 1218 | 1218 | ||
| 1219 | return pxa3xx_nand_config_flash(info); | 1219 | return pxa3xx_nand_config_flash(info, info->flash_info); |
| 1220 | } | 1220 | } |
| 1221 | #else | 1221 | #else |
| 1222 | #define pxa3xx_nand_suspend NULL | 1222 | #define pxa3xx_nand_suspend NULL |
diff --git a/drivers/mtd/onenand/generic.c b/drivers/mtd/onenand/generic.c index 3d44d040a47d..ad81ab8e95e2 100644 --- a/drivers/mtd/onenand/generic.c +++ b/drivers/mtd/onenand/generic.c | |||
| @@ -76,7 +76,7 @@ static int __devinit generic_onenand_probe(struct device *dev) | |||
| 76 | err = parse_mtd_partitions(&info->mtd, part_probes, &info->parts, 0); | 76 | err = parse_mtd_partitions(&info->mtd, part_probes, &info->parts, 0); |
| 77 | if (err > 0) | 77 | if (err > 0) |
| 78 | add_mtd_partitions(&info->mtd, info->parts, err); | 78 | add_mtd_partitions(&info->mtd, info->parts, err); |
| 79 | else if (err < 0 && pdata->parts) | 79 | else if (err <= 0 && pdata->parts) |
| 80 | add_mtd_partitions(&info->mtd, pdata->parts, pdata->nr_parts); | 80 | add_mtd_partitions(&info->mtd, pdata->parts, pdata->nr_parts); |
| 81 | else | 81 | else |
| 82 | #endif | 82 | #endif |
diff --git a/drivers/mtd/redboot.c b/drivers/mtd/redboot.c index 47474903263c..c5030f94f04e 100644 --- a/drivers/mtd/redboot.c +++ b/drivers/mtd/redboot.c | |||
| @@ -295,5 +295,5 @@ module_init(redboot_parser_init); | |||
| 295 | module_exit(redboot_parser_exit); | 295 | module_exit(redboot_parser_exit); |
| 296 | 296 | ||
| 297 | MODULE_LICENSE("GPL"); | 297 | MODULE_LICENSE("GPL"); |
| 298 | MODULE_AUTHOR("Red Hat, Inc. - David Woodhouse <dwmw2@cambridge.redhat.com>"); | 298 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); |
| 299 | MODULE_DESCRIPTION("Parsing code for RedBoot Flash Image System (FIS) tables"); | 299 | MODULE_DESCRIPTION("Parsing code for RedBoot Flash Image System (FIS) tables"); |
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c index 87d8795823d7..b9d097c9f6bb 100644 --- a/drivers/net/3c509.c +++ b/drivers/net/3c509.c | |||
| @@ -1062,7 +1062,6 @@ el3_rx(struct net_device *dev) | |||
| 1062 | struct sk_buff *skb; | 1062 | struct sk_buff *skb; |
| 1063 | 1063 | ||
| 1064 | skb = dev_alloc_skb(pkt_len+5); | 1064 | skb = dev_alloc_skb(pkt_len+5); |
| 1065 | dev->stats.rx_bytes += pkt_len; | ||
| 1066 | if (el3_debug > 4) | 1065 | if (el3_debug > 4) |
| 1067 | printk("Receiving packet size %d status %4.4x.\n", | 1066 | printk("Receiving packet size %d status %4.4x.\n", |
| 1068 | pkt_len, rx_status); | 1067 | pkt_len, rx_status); |
| @@ -1077,6 +1076,7 @@ el3_rx(struct net_device *dev) | |||
| 1077 | skb->protocol = eth_type_trans(skb,dev); | 1076 | skb->protocol = eth_type_trans(skb,dev); |
| 1078 | netif_rx(skb); | 1077 | netif_rx(skb); |
| 1079 | dev->last_rx = jiffies; | 1078 | dev->last_rx = jiffies; |
| 1079 | dev->stats.rx_bytes += pkt_len; | ||
| 1080 | dev->stats.rx_packets++; | 1080 | dev->stats.rx_packets++; |
| 1081 | continue; | 1081 | continue; |
| 1082 | } | 1082 | } |
diff --git a/drivers/net/atlx/atl1.c b/drivers/net/atlx/atl1.c index 6e4c80d41b08..6ddc911e7d15 100644 --- a/drivers/net/atlx/atl1.c +++ b/drivers/net/atlx/atl1.c | |||
| @@ -2023,6 +2023,7 @@ rrd_ok: | |||
| 2023 | /* Good Receive */ | 2023 | /* Good Receive */ |
| 2024 | pci_unmap_page(adapter->pdev, buffer_info->dma, | 2024 | pci_unmap_page(adapter->pdev, buffer_info->dma, |
| 2025 | buffer_info->length, PCI_DMA_FROMDEVICE); | 2025 | buffer_info->length, PCI_DMA_FROMDEVICE); |
| 2026 | buffer_info->dma = 0; | ||
| 2026 | skb = buffer_info->skb; | 2027 | skb = buffer_info->skb; |
| 2027 | length = le16_to_cpu(rrd->xsz.xsum_sz.pkt_size); | 2028 | length = le16_to_cpu(rrd->xsz.xsum_sz.pkt_size); |
| 2028 | 2029 | ||
diff --git a/drivers/net/au1000_eth.c b/drivers/net/au1000_eth.c index 3634b5fd7919..7023d77bf380 100644 --- a/drivers/net/au1000_eth.c +++ b/drivers/net/au1000_eth.c | |||
| @@ -1239,12 +1239,7 @@ static int au1000_rx(struct net_device *dev) | |||
| 1239 | */ | 1239 | */ |
| 1240 | static irqreturn_t au1000_interrupt(int irq, void *dev_id) | 1240 | static irqreturn_t au1000_interrupt(int irq, void *dev_id) |
| 1241 | { | 1241 | { |
| 1242 | struct net_device *dev = (struct net_device *) dev_id; | 1242 | struct net_device *dev = dev_id; |
| 1243 | |||
| 1244 | if (dev == NULL) { | ||
| 1245 | printk(KERN_ERR "%s: isr: null dev ptr\n", dev->name); | ||
| 1246 | return IRQ_RETVAL(1); | ||
| 1247 | } | ||
| 1248 | 1243 | ||
| 1249 | /* Handle RX interrupts first to minimize chance of overrun */ | 1244 | /* Handle RX interrupts first to minimize chance of overrun */ |
| 1250 | 1245 | ||
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c index 89c0018132ec..41443435ab1c 100644 --- a/drivers/net/bfin_mac.c +++ b/drivers/net/bfin_mac.c | |||
| @@ -22,7 +22,6 @@ | |||
| 22 | #include <linux/crc32.h> | 22 | #include <linux/crc32.h> |
| 23 | #include <linux/device.h> | 23 | #include <linux/device.h> |
| 24 | #include <linux/spinlock.h> | 24 | #include <linux/spinlock.h> |
| 25 | #include <linux/ethtool.h> | ||
| 26 | #include <linux/mii.h> | 25 | #include <linux/mii.h> |
| 27 | #include <linux/phy.h> | 26 | #include <linux/phy.h> |
| 28 | #include <linux/netdevice.h> | 27 | #include <linux/netdevice.h> |
diff --git a/drivers/net/cpmac.c b/drivers/net/cpmac.c index 2b5740b3d182..7f3f62e1b113 100644 --- a/drivers/net/cpmac.c +++ b/drivers/net/cpmac.c | |||
| @@ -38,6 +38,7 @@ | |||
| 38 | #include <linux/platform_device.h> | 38 | #include <linux/platform_device.h> |
| 39 | #include <linux/dma-mapping.h> | 39 | #include <linux/dma-mapping.h> |
| 40 | #include <asm/gpio.h> | 40 | #include <asm/gpio.h> |
| 41 | #include <asm/atomic.h> | ||
| 41 | 42 | ||
| 42 | MODULE_AUTHOR("Eugene Konev <ejka@imfi.kspu.ru>"); | 43 | MODULE_AUTHOR("Eugene Konev <ejka@imfi.kspu.ru>"); |
| 43 | MODULE_DESCRIPTION("TI AR7 ethernet driver (CPMAC)"); | 44 | MODULE_DESCRIPTION("TI AR7 ethernet driver (CPMAC)"); |
| @@ -187,6 +188,7 @@ struct cpmac_desc { | |||
| 187 | #define CPMAC_EOQ 0x1000 | 188 | #define CPMAC_EOQ 0x1000 |
| 188 | struct sk_buff *skb; | 189 | struct sk_buff *skb; |
| 189 | struct cpmac_desc *next; | 190 | struct cpmac_desc *next; |
| 191 | struct cpmac_desc *prev; | ||
| 190 | dma_addr_t mapping; | 192 | dma_addr_t mapping; |
| 191 | dma_addr_t data_mapping; | 193 | dma_addr_t data_mapping; |
| 192 | }; | 194 | }; |
| @@ -208,6 +210,7 @@ struct cpmac_priv { | |||
| 208 | struct work_struct reset_work; | 210 | struct work_struct reset_work; |
| 209 | struct platform_device *pdev; | 211 | struct platform_device *pdev; |
| 210 | struct napi_struct napi; | 212 | struct napi_struct napi; |
| 213 | atomic_t reset_pending; | ||
| 211 | }; | 214 | }; |
| 212 | 215 | ||
| 213 | static irqreturn_t cpmac_irq(int, void *); | 216 | static irqreturn_t cpmac_irq(int, void *); |
| @@ -241,6 +244,16 @@ static void cpmac_dump_desc(struct net_device *dev, struct cpmac_desc *desc) | |||
| 241 | printk("\n"); | 244 | printk("\n"); |
| 242 | } | 245 | } |
| 243 | 246 | ||
| 247 | static void cpmac_dump_all_desc(struct net_device *dev) | ||
| 248 | { | ||
| 249 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 250 | struct cpmac_desc *dump = priv->rx_head; | ||
| 251 | do { | ||
| 252 | cpmac_dump_desc(dev, dump); | ||
| 253 | dump = dump->next; | ||
| 254 | } while (dump != priv->rx_head); | ||
| 255 | } | ||
| 256 | |||
| 244 | static void cpmac_dump_skb(struct net_device *dev, struct sk_buff *skb) | 257 | static void cpmac_dump_skb(struct net_device *dev, struct sk_buff *skb) |
| 245 | { | 258 | { |
| 246 | int i; | 259 | int i; |
| @@ -412,21 +425,42 @@ static struct sk_buff *cpmac_rx_one(struct cpmac_priv *priv, | |||
| 412 | static int cpmac_poll(struct napi_struct *napi, int budget) | 425 | static int cpmac_poll(struct napi_struct *napi, int budget) |
| 413 | { | 426 | { |
| 414 | struct sk_buff *skb; | 427 | struct sk_buff *skb; |
| 415 | struct cpmac_desc *desc; | 428 | struct cpmac_desc *desc, *restart; |
| 416 | int received = 0; | ||
| 417 | struct cpmac_priv *priv = container_of(napi, struct cpmac_priv, napi); | 429 | struct cpmac_priv *priv = container_of(napi, struct cpmac_priv, napi); |
| 430 | int received = 0, processed = 0; | ||
| 418 | 431 | ||
| 419 | spin_lock(&priv->rx_lock); | 432 | spin_lock(&priv->rx_lock); |
| 420 | if (unlikely(!priv->rx_head)) { | 433 | if (unlikely(!priv->rx_head)) { |
| 421 | if (netif_msg_rx_err(priv) && net_ratelimit()) | 434 | if (netif_msg_rx_err(priv) && net_ratelimit()) |
| 422 | printk(KERN_WARNING "%s: rx: polling, but no queue\n", | 435 | printk(KERN_WARNING "%s: rx: polling, but no queue\n", |
| 423 | priv->dev->name); | 436 | priv->dev->name); |
| 437 | spin_unlock(&priv->rx_lock); | ||
| 424 | netif_rx_complete(priv->dev, napi); | 438 | netif_rx_complete(priv->dev, napi); |
| 425 | return 0; | 439 | return 0; |
| 426 | } | 440 | } |
| 427 | 441 | ||
| 428 | desc = priv->rx_head; | 442 | desc = priv->rx_head; |
| 443 | restart = NULL; | ||
| 429 | while (((desc->dataflags & CPMAC_OWN) == 0) && (received < budget)) { | 444 | while (((desc->dataflags & CPMAC_OWN) == 0) && (received < budget)) { |
| 445 | processed++; | ||
| 446 | |||
| 447 | if ((desc->dataflags & CPMAC_EOQ) != 0) { | ||
| 448 | /* The last update to eoq->hw_next didn't happen | ||
| 449 | * soon enough, and the receiver stopped here. | ||
| 450 | *Remember this descriptor so we can restart | ||
| 451 | * the receiver after freeing some space. | ||
| 452 | */ | ||
| 453 | if (unlikely(restart)) { | ||
| 454 | if (netif_msg_rx_err(priv)) | ||
| 455 | printk(KERN_ERR "%s: poll found a" | ||
| 456 | " duplicate EOQ: %p and %p\n", | ||
| 457 | priv->dev->name, restart, desc); | ||
| 458 | goto fatal_error; | ||
| 459 | } | ||
| 460 | |||
| 461 | restart = desc->next; | ||
| 462 | } | ||
| 463 | |||
| 430 | skb = cpmac_rx_one(priv, desc); | 464 | skb = cpmac_rx_one(priv, desc); |
| 431 | if (likely(skb)) { | 465 | if (likely(skb)) { |
| 432 | netif_receive_skb(skb); | 466 | netif_receive_skb(skb); |
| @@ -435,19 +469,90 @@ static int cpmac_poll(struct napi_struct *napi, int budget) | |||
| 435 | desc = desc->next; | 469 | desc = desc->next; |
| 436 | } | 470 | } |
| 437 | 471 | ||
| 472 | if (desc != priv->rx_head) { | ||
| 473 | /* We freed some buffers, but not the whole ring, | ||
| 474 | * add what we did free to the rx list */ | ||
| 475 | desc->prev->hw_next = (u32)0; | ||
| 476 | priv->rx_head->prev->hw_next = priv->rx_head->mapping; | ||
| 477 | } | ||
| 478 | |||
| 479 | /* Optimization: If we did not actually process an EOQ (perhaps because | ||
| 480 | * of quota limits), check to see if the tail of the queue has EOQ set. | ||
| 481 | * We should immediately restart in that case so that the receiver can | ||
| 482 | * restart and run in parallel with more packet processing. | ||
| 483 | * This lets us handle slightly larger bursts before running | ||
| 484 | * out of ring space (assuming dev->weight < ring_size) */ | ||
| 485 | |||
| 486 | if (!restart && | ||
| 487 | (priv->rx_head->prev->dataflags & (CPMAC_OWN|CPMAC_EOQ)) | ||
| 488 | == CPMAC_EOQ && | ||
| 489 | (priv->rx_head->dataflags & CPMAC_OWN) != 0) { | ||
| 490 | /* reset EOQ so the poll loop (above) doesn't try to | ||
| 491 | * restart this when it eventually gets to this descriptor. | ||
| 492 | */ | ||
| 493 | priv->rx_head->prev->dataflags &= ~CPMAC_EOQ; | ||
| 494 | restart = priv->rx_head; | ||
| 495 | } | ||
| 496 | |||
| 497 | if (restart) { | ||
| 498 | priv->dev->stats.rx_errors++; | ||
| 499 | priv->dev->stats.rx_fifo_errors++; | ||
| 500 | if (netif_msg_rx_err(priv) && net_ratelimit()) | ||
| 501 | printk(KERN_WARNING "%s: rx dma ring overrun\n", | ||
| 502 | priv->dev->name); | ||
| 503 | |||
| 504 | if (unlikely((restart->dataflags & CPMAC_OWN) == 0)) { | ||
| 505 | if (netif_msg_drv(priv)) | ||
| 506 | printk(KERN_ERR "%s: cpmac_poll is trying to " | ||
| 507 | "restart rx from a descriptor that's " | ||
| 508 | "not free: %p\n", | ||
| 509 | priv->dev->name, restart); | ||
| 510 | goto fatal_error; | ||
| 511 | } | ||
| 512 | |||
| 513 | cpmac_write(priv->regs, CPMAC_RX_PTR(0), restart->mapping); | ||
| 514 | } | ||
| 515 | |||
| 438 | priv->rx_head = desc; | 516 | priv->rx_head = desc; |
| 439 | spin_unlock(&priv->rx_lock); | 517 | spin_unlock(&priv->rx_lock); |
| 440 | if (unlikely(netif_msg_rx_status(priv))) | 518 | if (unlikely(netif_msg_rx_status(priv))) |
| 441 | printk(KERN_DEBUG "%s: poll processed %d packets\n", | 519 | printk(KERN_DEBUG "%s: poll processed %d packets\n", |
| 442 | priv->dev->name, received); | 520 | priv->dev->name, received); |
| 443 | if (desc->dataflags & CPMAC_OWN) { | 521 | if (processed == 0) { |
| 522 | /* we ran out of packets to read, | ||
| 523 | * revert to interrupt-driven mode */ | ||
| 444 | netif_rx_complete(priv->dev, napi); | 524 | netif_rx_complete(priv->dev, napi); |
| 445 | cpmac_write(priv->regs, CPMAC_RX_PTR(0), (u32)desc->mapping); | ||
| 446 | cpmac_write(priv->regs, CPMAC_RX_INT_ENABLE, 1); | 525 | cpmac_write(priv->regs, CPMAC_RX_INT_ENABLE, 1); |
| 447 | return 0; | 526 | return 0; |
| 448 | } | 527 | } |
| 449 | 528 | ||
| 450 | return 1; | 529 | return 1; |
| 530 | |||
| 531 | fatal_error: | ||
| 532 | /* Something went horribly wrong. | ||
| 533 | * Reset hardware to try to recover rather than wedging. */ | ||
| 534 | |||
| 535 | if (netif_msg_drv(priv)) { | ||
| 536 | printk(KERN_ERR "%s: cpmac_poll is confused. " | ||
| 537 | "Resetting hardware\n", priv->dev->name); | ||
| 538 | cpmac_dump_all_desc(priv->dev); | ||
| 539 | printk(KERN_DEBUG "%s: RX_PTR(0)=0x%08x RX_ACK(0)=0x%08x\n", | ||
| 540 | priv->dev->name, | ||
| 541 | cpmac_read(priv->regs, CPMAC_RX_PTR(0)), | ||
| 542 | cpmac_read(priv->regs, CPMAC_RX_ACK(0))); | ||
| 543 | } | ||
| 544 | |||
| 545 | spin_unlock(&priv->rx_lock); | ||
| 546 | netif_rx_complete(priv->dev, napi); | ||
| 547 | netif_stop_queue(priv->dev); | ||
| 548 | napi_disable(&priv->napi); | ||
| 549 | |||
| 550 | atomic_inc(&priv->reset_pending); | ||
| 551 | cpmac_hw_stop(priv->dev); | ||
| 552 | if (!schedule_work(&priv->reset_work)) | ||
| 553 | atomic_dec(&priv->reset_pending); | ||
| 554 | return 0; | ||
| 555 | |||
| 451 | } | 556 | } |
| 452 | 557 | ||
| 453 | static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) | 558 | static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) |
| @@ -456,6 +561,9 @@ static int cpmac_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 456 | struct cpmac_desc *desc; | 561 | struct cpmac_desc *desc; |
| 457 | struct cpmac_priv *priv = netdev_priv(dev); | 562 | struct cpmac_priv *priv = netdev_priv(dev); |
| 458 | 563 | ||
| 564 | if (unlikely(atomic_read(&priv->reset_pending))) | ||
| 565 | return NETDEV_TX_BUSY; | ||
| 566 | |||
| 459 | if (unlikely(skb_padto(skb, ETH_ZLEN))) | 567 | if (unlikely(skb_padto(skb, ETH_ZLEN))) |
| 460 | return NETDEV_TX_OK; | 568 | return NETDEV_TX_OK; |
| 461 | 569 | ||
| @@ -621,8 +729,10 @@ static void cpmac_clear_rx(struct net_device *dev) | |||
| 621 | desc->dataflags = CPMAC_OWN; | 729 | desc->dataflags = CPMAC_OWN; |
| 622 | dev->stats.rx_dropped++; | 730 | dev->stats.rx_dropped++; |
| 623 | } | 731 | } |
| 732 | desc->hw_next = desc->next->mapping; | ||
| 624 | desc = desc->next; | 733 | desc = desc->next; |
| 625 | } | 734 | } |
| 735 | priv->rx_head->prev->hw_next = 0; | ||
| 626 | } | 736 | } |
| 627 | 737 | ||
| 628 | static void cpmac_clear_tx(struct net_device *dev) | 738 | static void cpmac_clear_tx(struct net_device *dev) |
| @@ -635,14 +745,14 @@ static void cpmac_clear_tx(struct net_device *dev) | |||
| 635 | priv->desc_ring[i].dataflags = 0; | 745 | priv->desc_ring[i].dataflags = 0; |
| 636 | if (priv->desc_ring[i].skb) { | 746 | if (priv->desc_ring[i].skb) { |
| 637 | dev_kfree_skb_any(priv->desc_ring[i].skb); | 747 | dev_kfree_skb_any(priv->desc_ring[i].skb); |
| 638 | if (netif_subqueue_stopped(dev, i)) | 748 | priv->desc_ring[i].skb = NULL; |
| 639 | netif_wake_subqueue(dev, i); | ||
| 640 | } | 749 | } |
| 641 | } | 750 | } |
| 642 | } | 751 | } |
| 643 | 752 | ||
| 644 | static void cpmac_hw_error(struct work_struct *work) | 753 | static void cpmac_hw_error(struct work_struct *work) |
| 645 | { | 754 | { |
| 755 | int i; | ||
| 646 | struct cpmac_priv *priv = | 756 | struct cpmac_priv *priv = |
| 647 | container_of(work, struct cpmac_priv, reset_work); | 757 | container_of(work, struct cpmac_priv, reset_work); |
| 648 | 758 | ||
| @@ -651,8 +761,48 @@ static void cpmac_hw_error(struct work_struct *work) | |||
| 651 | spin_unlock(&priv->rx_lock); | 761 | spin_unlock(&priv->rx_lock); |
| 652 | cpmac_clear_tx(priv->dev); | 762 | cpmac_clear_tx(priv->dev); |
| 653 | cpmac_hw_start(priv->dev); | 763 | cpmac_hw_start(priv->dev); |
| 654 | napi_enable(&priv->napi); | 764 | barrier(); |
| 655 | netif_start_queue(priv->dev); | 765 | atomic_dec(&priv->reset_pending); |
| 766 | |||
| 767 | for (i = 0; i < CPMAC_QUEUES; i++) | ||
| 768 | netif_wake_subqueue(priv->dev, i); | ||
| 769 | netif_wake_queue(priv->dev); | ||
| 770 | cpmac_write(priv->regs, CPMAC_MAC_INT_ENABLE, 3); | ||
| 771 | } | ||
| 772 | |||
| 773 | static void cpmac_check_status(struct net_device *dev) | ||
| 774 | { | ||
| 775 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 776 | |||
| 777 | u32 macstatus = cpmac_read(priv->regs, CPMAC_MAC_STATUS); | ||
| 778 | int rx_channel = (macstatus >> 8) & 7; | ||
| 779 | int rx_code = (macstatus >> 12) & 15; | ||
| 780 | int tx_channel = (macstatus >> 16) & 7; | ||
| 781 | int tx_code = (macstatus >> 20) & 15; | ||
| 782 | |||
| 783 | if (rx_code || tx_code) { | ||
| 784 | if (netif_msg_drv(priv) && net_ratelimit()) { | ||
| 785 | /* Can't find any documentation on what these | ||
| 786 | *error codes actually are. So just log them and hope.. | ||
| 787 | */ | ||
| 788 | if (rx_code) | ||
| 789 | printk(KERN_WARNING "%s: host error %d on rx " | ||
| 790 | "channel %d (macstatus %08x), resetting\n", | ||
| 791 | dev->name, rx_code, rx_channel, macstatus); | ||
| 792 | if (tx_code) | ||
| 793 | printk(KERN_WARNING "%s: host error %d on tx " | ||
| 794 | "channel %d (macstatus %08x), resetting\n", | ||
| 795 | dev->name, tx_code, tx_channel, macstatus); | ||
| 796 | } | ||
| 797 | |||
| 798 | netif_stop_queue(dev); | ||
| 799 | cpmac_hw_stop(dev); | ||
| 800 | if (schedule_work(&priv->reset_work)) | ||
| 801 | atomic_inc(&priv->reset_pending); | ||
| 802 | if (unlikely(netif_msg_hw(priv))) | ||
| 803 | cpmac_dump_regs(dev); | ||
| 804 | } | ||
| 805 | cpmac_write(priv->regs, CPMAC_MAC_INT_CLEAR, 0xff); | ||
| 656 | } | 806 | } |
| 657 | 807 | ||
| 658 | static irqreturn_t cpmac_irq(int irq, void *dev_id) | 808 | static irqreturn_t cpmac_irq(int irq, void *dev_id) |
| @@ -683,49 +833,32 @@ static irqreturn_t cpmac_irq(int irq, void *dev_id) | |||
| 683 | 833 | ||
| 684 | cpmac_write(priv->regs, CPMAC_MAC_EOI_VECTOR, 0); | 834 | cpmac_write(priv->regs, CPMAC_MAC_EOI_VECTOR, 0); |
| 685 | 835 | ||
| 686 | if (unlikely(status & (MAC_INT_HOST | MAC_INT_STATUS))) { | 836 | if (unlikely(status & (MAC_INT_HOST | MAC_INT_STATUS))) |
| 687 | if (netif_msg_drv(priv) && net_ratelimit()) | 837 | cpmac_check_status(dev); |
| 688 | printk(KERN_ERR "%s: hw error, resetting...\n", | ||
| 689 | dev->name); | ||
| 690 | netif_stop_queue(dev); | ||
| 691 | napi_disable(&priv->napi); | ||
| 692 | cpmac_hw_stop(dev); | ||
| 693 | schedule_work(&priv->reset_work); | ||
| 694 | if (unlikely(netif_msg_hw(priv))) | ||
| 695 | cpmac_dump_regs(dev); | ||
| 696 | } | ||
| 697 | 838 | ||
| 698 | return IRQ_HANDLED; | 839 | return IRQ_HANDLED; |
| 699 | } | 840 | } |
| 700 | 841 | ||
| 701 | static void cpmac_tx_timeout(struct net_device *dev) | 842 | static void cpmac_tx_timeout(struct net_device *dev) |
| 702 | { | 843 | { |
| 703 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 704 | int i; | 844 | int i; |
| 845 | struct cpmac_priv *priv = netdev_priv(dev); | ||
| 705 | 846 | ||
| 706 | spin_lock(&priv->lock); | 847 | spin_lock(&priv->lock); |
| 707 | dev->stats.tx_errors++; | 848 | dev->stats.tx_errors++; |
| 708 | spin_unlock(&priv->lock); | 849 | spin_unlock(&priv->lock); |
| 709 | if (netif_msg_tx_err(priv) && net_ratelimit()) | 850 | if (netif_msg_tx_err(priv) && net_ratelimit()) |
| 710 | printk(KERN_WARNING "%s: transmit timeout\n", dev->name); | 851 | printk(KERN_WARNING "%s: transmit timeout\n", dev->name); |
| 711 | /* | 852 | |
| 712 | * FIXME: waking up random queue is not the best thing to | 853 | atomic_inc(&priv->reset_pending); |
| 713 | * do... on the other hand why we got here at all? | 854 | barrier(); |
| 714 | */ | 855 | cpmac_clear_tx(dev); |
| 715 | #ifdef CONFIG_NETDEVICES_MULTIQUEUE | 856 | barrier(); |
| 857 | atomic_dec(&priv->reset_pending); | ||
| 858 | |||
| 859 | netif_wake_queue(priv->dev); | ||
| 716 | for (i = 0; i < CPMAC_QUEUES; i++) | 860 | for (i = 0; i < CPMAC_QUEUES; i++) |
| 717 | if (priv->desc_ring[i].skb) { | 861 | netif_wake_subqueue(dev, i); |
| 718 | priv->desc_ring[i].dataflags = 0; | ||
| 719 | dev_kfree_skb_any(priv->desc_ring[i].skb); | ||
| 720 | netif_wake_subqueue(dev, i); | ||
| 721 | break; | ||
| 722 | } | ||
| 723 | #else | ||
| 724 | priv->desc_ring[0].dataflags = 0; | ||
| 725 | if (priv->desc_ring[0].skb) | ||
| 726 | dev_kfree_skb_any(priv->desc_ring[0].skb); | ||
| 727 | netif_wake_queue(dev); | ||
| 728 | #endif | ||
| 729 | } | 862 | } |
| 730 | 863 | ||
| 731 | static int cpmac_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | 864 | static int cpmac_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) |
| @@ -901,9 +1034,12 @@ static int cpmac_open(struct net_device *dev) | |||
| 901 | desc->buflen = CPMAC_SKB_SIZE; | 1034 | desc->buflen = CPMAC_SKB_SIZE; |
| 902 | desc->dataflags = CPMAC_OWN; | 1035 | desc->dataflags = CPMAC_OWN; |
| 903 | desc->next = &priv->rx_head[(i + 1) % priv->ring_size]; | 1036 | desc->next = &priv->rx_head[(i + 1) % priv->ring_size]; |
| 1037 | desc->next->prev = desc; | ||
| 904 | desc->hw_next = (u32)desc->next->mapping; | 1038 | desc->hw_next = (u32)desc->next->mapping; |
| 905 | } | 1039 | } |
| 906 | 1040 | ||
| 1041 | priv->rx_head->prev->hw_next = (u32)0; | ||
| 1042 | |||
| 907 | if ((res = request_irq(dev->irq, cpmac_irq, IRQF_SHARED, | 1043 | if ((res = request_irq(dev->irq, cpmac_irq, IRQF_SHARED, |
| 908 | dev->name, dev))) { | 1044 | dev->name, dev))) { |
| 909 | if (netif_msg_drv(priv)) | 1045 | if (netif_msg_drv(priv)) |
| @@ -912,6 +1048,7 @@ static int cpmac_open(struct net_device *dev) | |||
| 912 | goto fail_irq; | 1048 | goto fail_irq; |
| 913 | } | 1049 | } |
| 914 | 1050 | ||
| 1051 | atomic_set(&priv->reset_pending, 0); | ||
| 915 | INIT_WORK(&priv->reset_work, cpmac_hw_error); | 1052 | INIT_WORK(&priv->reset_work, cpmac_hw_error); |
| 916 | cpmac_hw_start(dev); | 1053 | cpmac_hw_start(dev); |
| 917 | 1054 | ||
| @@ -1007,21 +1144,10 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
| 1007 | 1144 | ||
| 1008 | if (phy_id == PHY_MAX_ADDR) { | 1145 | if (phy_id == PHY_MAX_ADDR) { |
| 1009 | if (external_switch || dumb_switch) { | 1146 | if (external_switch || dumb_switch) { |
| 1010 | struct fixed_phy_status status = {}; | 1147 | mdio_bus_id = 0; /* fixed phys bus */ |
| 1011 | 1148 | phy_id = pdev->id; | |
| 1012 | /* | ||
| 1013 | * FIXME: this should be in the platform code! | ||
| 1014 | * Since there is not platform code at all (that is, | ||
| 1015 | * no mainline users of that driver), place it here | ||
| 1016 | * for now. | ||
| 1017 | */ | ||
| 1018 | phy_id = 0; | ||
| 1019 | status.link = 1; | ||
| 1020 | status.duplex = 1; | ||
| 1021 | status.speed = 100; | ||
| 1022 | fixed_phy_add(PHY_POLL, phy_id, &status); | ||
| 1023 | } else { | 1149 | } else { |
| 1024 | printk(KERN_ERR "cpmac: no PHY present\n"); | 1150 | dev_err(&pdev->dev, "no PHY present\n"); |
| 1025 | return -ENODEV; | 1151 | return -ENODEV; |
| 1026 | } | 1152 | } |
| 1027 | } | 1153 | } |
| @@ -1064,10 +1190,8 @@ static int __devinit cpmac_probe(struct platform_device *pdev) | |||
| 1064 | priv->msg_enable = netif_msg_init(debug_level, 0xff); | 1190 | priv->msg_enable = netif_msg_init(debug_level, 0xff); |
| 1065 | memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr)); | 1191 | memcpy(dev->dev_addr, pdata->dev_addr, sizeof(dev->dev_addr)); |
| 1066 | 1192 | ||
| 1067 | snprintf(priv->phy_name, BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id); | 1193 | priv->phy = phy_connect(dev, cpmac_mii.phy_map[phy_id]->dev.bus_id, |
| 1068 | 1194 | &cpmac_adjust_link, 0, PHY_INTERFACE_MODE_MII); | |
| 1069 | priv->phy = phy_connect(dev, priv->phy_name, &cpmac_adjust_link, 0, | ||
| 1070 | PHY_INTERFACE_MODE_MII); | ||
| 1071 | if (IS_ERR(priv->phy)) { | 1195 | if (IS_ERR(priv->phy)) { |
| 1072 | if (netif_msg_drv(priv)) | 1196 | if (netif_msg_drv(priv)) |
| 1073 | printk(KERN_ERR "%s: Could not attach to PHY\n", | 1197 | printk(KERN_ERR "%s: Could not attach to PHY\n", |
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index 348371fda597..fba87abe78ee 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
| @@ -1394,7 +1394,11 @@ net_open(struct net_device *dev) | |||
| 1394 | #endif | 1394 | #endif |
| 1395 | if (!result) { | 1395 | if (!result) { |
| 1396 | printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name); | 1396 | printk(KERN_ERR "%s: EEPROM is configured for unavailable media\n", dev->name); |
| 1397 | release_irq: | 1397 | release_dma: |
| 1398 | #if ALLOW_DMA | ||
| 1399 | free_dma(dev->dma); | ||
| 1400 | #endif | ||
| 1401 | release_irq: | ||
| 1398 | #if ALLOW_DMA | 1402 | #if ALLOW_DMA |
| 1399 | release_dma_buff(lp); | 1403 | release_dma_buff(lp); |
| 1400 | #endif | 1404 | #endif |
| @@ -1442,12 +1446,12 @@ net_open(struct net_device *dev) | |||
| 1442 | if ((result = detect_bnc(dev)) != DETECTED_NONE) | 1446 | if ((result = detect_bnc(dev)) != DETECTED_NONE) |
| 1443 | break; | 1447 | break; |
| 1444 | printk(KERN_ERR "%s: no media detected\n", dev->name); | 1448 | printk(KERN_ERR "%s: no media detected\n", dev->name); |
| 1445 | goto release_irq; | 1449 | goto release_dma; |
| 1446 | } | 1450 | } |
| 1447 | switch(result) { | 1451 | switch(result) { |
| 1448 | case DETECTED_NONE: | 1452 | case DETECTED_NONE: |
| 1449 | printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name); | 1453 | printk(KERN_ERR "%s: no network cable attached to configured media\n", dev->name); |
| 1450 | goto release_irq; | 1454 | goto release_dma; |
| 1451 | case DETECTED_RJ45H: | 1455 | case DETECTED_RJ45H: |
| 1452 | printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name); | 1456 | printk(KERN_INFO "%s: using half-duplex 10Base-T (RJ-45)\n", dev->name); |
| 1453 | break; | 1457 | break; |
diff --git a/drivers/net/dm9000.c b/drivers/net/dm9000.c index d45bcd2660af..864295e081b6 100644 --- a/drivers/net/dm9000.c +++ b/drivers/net/dm9000.c | |||
| @@ -903,7 +903,7 @@ dm9000_stop(struct net_device *ndev) | |||
| 903 | if (netif_msg_ifdown(db)) | 903 | if (netif_msg_ifdown(db)) |
| 904 | dev_dbg(db->dev, "shutting down %s\n", ndev->name); | 904 | dev_dbg(db->dev, "shutting down %s\n", ndev->name); |
| 905 | 905 | ||
| 906 | cancel_delayed_work(&db->phy_poll); | 906 | cancel_delayed_work_sync(&db->phy_poll); |
| 907 | 907 | ||
| 908 | netif_stop_queue(ndev); | 908 | netif_stop_queue(ndev); |
| 909 | netif_carrier_off(ndev); | 909 | netif_carrier_off(ndev); |
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index 8cbb40f3a506..cab1835173cd 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
| @@ -4201,8 +4201,8 @@ static int __devinit e1000_probe(struct pci_dev *pdev, | |||
| 4201 | struct e1000_adapter *adapter; | 4201 | struct e1000_adapter *adapter; |
| 4202 | struct e1000_hw *hw; | 4202 | struct e1000_hw *hw; |
| 4203 | const struct e1000_info *ei = e1000_info_tbl[ent->driver_data]; | 4203 | const struct e1000_info *ei = e1000_info_tbl[ent->driver_data]; |
| 4204 | unsigned long mmio_start, mmio_len; | 4204 | resource_size_t mmio_start, mmio_len; |
| 4205 | unsigned long flash_start, flash_len; | 4205 | resource_size_t flash_start, flash_len; |
| 4206 | 4206 | ||
| 4207 | static int cards_found; | 4207 | static int cards_found; |
| 4208 | int i, err, pci_using_dac; | 4208 | int i, err, pci_using_dac; |
diff --git a/drivers/net/ehea/ehea_main.c b/drivers/net/ehea/ehea_main.c index d1b6d4e7495d..287a61918739 100644 --- a/drivers/net/ehea/ehea_main.c +++ b/drivers/net/ehea/ehea_main.c | |||
| @@ -2213,8 +2213,6 @@ static void ehea_vlan_rx_register(struct net_device *dev, | |||
| 2213 | goto out; | 2213 | goto out; |
| 2214 | } | 2214 | } |
| 2215 | 2215 | ||
| 2216 | memset(cb1->vlan_filter, 0, sizeof(cb1->vlan_filter)); | ||
| 2217 | |||
| 2218 | hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id, | 2216 | hret = ehea_h_modify_ehea_port(adapter->handle, port->logical_port_id, |
| 2219 | H_PORT_CB1, H_PORT_CB1_ALL, cb1); | 2217 | H_PORT_CB1, H_PORT_CB1_ALL, cb1); |
| 2220 | if (hret != H_SUCCESS) | 2218 | if (hret != H_SUCCESS) |
| @@ -3178,11 +3176,12 @@ out_err: | |||
| 3178 | 3176 | ||
| 3179 | static void ehea_shutdown_single_port(struct ehea_port *port) | 3177 | static void ehea_shutdown_single_port(struct ehea_port *port) |
| 3180 | { | 3178 | { |
| 3179 | struct ehea_adapter *adapter = port->adapter; | ||
| 3181 | unregister_netdev(port->netdev); | 3180 | unregister_netdev(port->netdev); |
| 3182 | ehea_unregister_port(port); | 3181 | ehea_unregister_port(port); |
| 3183 | kfree(port->mc_list); | 3182 | kfree(port->mc_list); |
| 3184 | free_netdev(port->netdev); | 3183 | free_netdev(port->netdev); |
| 3185 | port->adapter->active_ports--; | 3184 | adapter->active_ports--; |
| 3186 | } | 3185 | } |
| 3187 | 3186 | ||
| 3188 | static int ehea_setup_ports(struct ehea_adapter *adapter) | 3187 | static int ehea_setup_ports(struct ehea_adapter *adapter) |
diff --git a/drivers/net/forcedeth.c b/drivers/net/forcedeth.c index 35f66d4a4595..9eca97fb0a54 100644 --- a/drivers/net/forcedeth.c +++ b/drivers/net/forcedeth.c | |||
| @@ -5823,6 +5823,7 @@ static int nv_resume(struct pci_dev *pdev) | |||
| 5823 | writel(txreg, base + NvRegTransmitPoll); | 5823 | writel(txreg, base + NvRegTransmitPoll); |
| 5824 | 5824 | ||
| 5825 | rc = nv_open(dev); | 5825 | rc = nv_open(dev); |
| 5826 | nv_set_multicast(dev); | ||
| 5826 | out: | 5827 | out: |
| 5827 | return rc; | 5828 | return rc; |
| 5828 | } | 5829 | } |
diff --git a/drivers/net/fs_enet/fs_enet-main.c b/drivers/net/fs_enet/fs_enet-main.c index 67b4b0728fce..a5baaf59ff66 100644 --- a/drivers/net/fs_enet/fs_enet-main.c +++ b/drivers/net/fs_enet/fs_enet-main.c | |||
| @@ -1093,7 +1093,7 @@ err: | |||
| 1093 | if (registered) | 1093 | if (registered) |
| 1094 | unregister_netdev(ndev); | 1094 | unregister_netdev(ndev); |
| 1095 | 1095 | ||
| 1096 | if (fep != NULL) { | 1096 | if (fep && fep->ops) { |
| 1097 | (*fep->ops->free_bd)(ndev); | 1097 | (*fep->ops->free_bd)(ndev); |
| 1098 | (*fep->ops->cleanup_data)(ndev); | 1098 | (*fep->ops->cleanup_data)(ndev); |
| 1099 | } | 1099 | } |
diff --git a/drivers/net/hamradio/scc.c b/drivers/net/hamradio/scc.c index f90515935833..45ae9d1191d7 100644 --- a/drivers/net/hamradio/scc.c +++ b/drivers/net/hamradio/scc.c | |||
| @@ -1340,9 +1340,10 @@ static unsigned int scc_set_param(struct scc_channel *scc, unsigned int cmd, uns | |||
| 1340 | case PARAM_RTS: | 1340 | case PARAM_RTS: |
| 1341 | if ( !(scc->wreg[R5] & RTS) ) | 1341 | if ( !(scc->wreg[R5] & RTS) ) |
| 1342 | { | 1342 | { |
| 1343 | if (arg != TX_OFF) | 1343 | if (arg != TX_OFF) { |
| 1344 | scc_key_trx(scc, TX_ON); | 1344 | scc_key_trx(scc, TX_ON); |
| 1345 | scc_start_tx_timer(scc, t_txdelay, scc->kiss.txdelay); | 1345 | scc_start_tx_timer(scc, t_txdelay, scc->kiss.txdelay); |
| 1346 | } | ||
| 1346 | } else { | 1347 | } else { |
| 1347 | if (arg == TX_OFF) | 1348 | if (arg == TX_OFF) |
| 1348 | { | 1349 | { |
diff --git a/drivers/net/myri10ge/myri10ge.c b/drivers/net/myri10ge/myri10ge.c index c91b12ea26ad..e0d76c75aea0 100644 --- a/drivers/net/myri10ge/myri10ge.c +++ b/drivers/net/myri10ge/myri10ge.c | |||
| @@ -75,7 +75,7 @@ | |||
| 75 | #include "myri10ge_mcp.h" | 75 | #include "myri10ge_mcp.h" |
| 76 | #include "myri10ge_mcp_gen_header.h" | 76 | #include "myri10ge_mcp_gen_header.h" |
| 77 | 77 | ||
| 78 | #define MYRI10GE_VERSION_STR "1.3.2-1.287" | 78 | #define MYRI10GE_VERSION_STR "1.3.99-1.347" |
| 79 | 79 | ||
| 80 | MODULE_DESCRIPTION("Myricom 10G driver (10GbE)"); | 80 | MODULE_DESCRIPTION("Myricom 10G driver (10GbE)"); |
| 81 | MODULE_AUTHOR("Maintainer: help@myri.com"); | 81 | MODULE_AUTHOR("Maintainer: help@myri.com"); |
| @@ -631,7 +631,7 @@ static int myri10ge_adopt_running_firmware(struct myri10ge_priv *mgp) | |||
| 631 | return status; | 631 | return status; |
| 632 | } | 632 | } |
| 633 | 633 | ||
| 634 | int myri10ge_get_firmware_capabilities(struct myri10ge_priv *mgp) | 634 | static int myri10ge_get_firmware_capabilities(struct myri10ge_priv *mgp) |
| 635 | { | 635 | { |
| 636 | struct myri10ge_cmd cmd; | 636 | struct myri10ge_cmd cmd; |
| 637 | int status; | 637 | int status; |
diff --git a/drivers/net/pcmcia/fmvj18x_cs.c b/drivers/net/pcmcia/fmvj18x_cs.c index 8f328a03847b..a550c9bd126f 100644 --- a/drivers/net/pcmcia/fmvj18x_cs.c +++ b/drivers/net/pcmcia/fmvj18x_cs.c | |||
| @@ -391,7 +391,9 @@ static int fmvj18x_config(struct pcmcia_device *link) | |||
| 391 | cardtype = CONTEC; | 391 | cardtype = CONTEC; |
| 392 | break; | 392 | break; |
| 393 | case MANFID_FUJITSU: | 393 | case MANFID_FUJITSU: |
| 394 | if (link->card_id == PRODID_FUJITSU_MBH10302) | 394 | if (link->conf.ConfigBase == 0x0fe0) |
| 395 | cardtype = MBH10302; | ||
| 396 | else if (link->card_id == PRODID_FUJITSU_MBH10302) | ||
| 395 | /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), | 397 | /* RATOC REX-5588/9822/4886's PRODID are 0004(=MBH10302), |
| 396 | but these are MBH10304 based card. */ | 398 | but these are MBH10304 based card. */ |
| 397 | cardtype = MBH10304; | 399 | cardtype = MBH10304; |
diff --git a/drivers/net/pcmcia/xirc2ps_cs.c b/drivers/net/pcmcia/xirc2ps_cs.c index d041f831a18d..f6c4698ce738 100644 --- a/drivers/net/pcmcia/xirc2ps_cs.c +++ b/drivers/net/pcmcia/xirc2ps_cs.c | |||
| @@ -1461,22 +1461,25 @@ static void | |||
| 1461 | set_multicast_list(struct net_device *dev) | 1461 | set_multicast_list(struct net_device *dev) |
| 1462 | { | 1462 | { |
| 1463 | unsigned int ioaddr = dev->base_addr; | 1463 | unsigned int ioaddr = dev->base_addr; |
| 1464 | unsigned value; | ||
| 1464 | 1465 | ||
| 1465 | SelectPage(0x42); | 1466 | SelectPage(0x42); |
| 1467 | value = GetByte(XIRCREG42_SWC1) & 0xC0; | ||
| 1468 | |||
| 1466 | if (dev->flags & IFF_PROMISC) { /* snoop */ | 1469 | if (dev->flags & IFF_PROMISC) { /* snoop */ |
| 1467 | PutByte(XIRCREG42_SWC1, 0x06); /* set MPE and PME */ | 1470 | PutByte(XIRCREG42_SWC1, value | 0x06); /* set MPE and PME */ |
| 1468 | } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { | 1471 | } else if (dev->mc_count > 9 || (dev->flags & IFF_ALLMULTI)) { |
| 1469 | PutByte(XIRCREG42_SWC1, 0x02); /* set MPE */ | 1472 | PutByte(XIRCREG42_SWC1, value | 0x02); /* set MPE */ |
| 1470 | } else if (dev->mc_count) { | 1473 | } else if (dev->mc_count) { |
| 1471 | /* the chip can filter 9 addresses perfectly */ | 1474 | /* the chip can filter 9 addresses perfectly */ |
| 1472 | PutByte(XIRCREG42_SWC1, 0x01); | 1475 | PutByte(XIRCREG42_SWC1, value | 0x01); |
| 1473 | SelectPage(0x40); | 1476 | SelectPage(0x40); |
| 1474 | PutByte(XIRCREG40_CMD0, Offline); | 1477 | PutByte(XIRCREG40_CMD0, Offline); |
| 1475 | set_addresses(dev); | 1478 | set_addresses(dev); |
| 1476 | SelectPage(0x40); | 1479 | SelectPage(0x40); |
| 1477 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); | 1480 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); |
| 1478 | } else { /* standard usage */ | 1481 | } else { /* standard usage */ |
| 1479 | PutByte(XIRCREG42_SWC1, 0x00); | 1482 | PutByte(XIRCREG42_SWC1, value | 0x00); |
| 1480 | } | 1483 | } |
| 1481 | SelectPage(0); | 1484 | SelectPage(0); |
| 1482 | } | 1485 | } |
| @@ -1722,6 +1725,7 @@ do_reset(struct net_device *dev, int full) | |||
| 1722 | 1725 | ||
| 1723 | /* enable receiver and put the mac online */ | 1726 | /* enable receiver and put the mac online */ |
| 1724 | if (full) { | 1727 | if (full) { |
| 1728 | set_multicast_list(dev); | ||
| 1725 | SelectPage(0x40); | 1729 | SelectPage(0x40); |
| 1726 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); | 1730 | PutByte(XIRCREG40_CMD0, EnableRecv | Online); |
| 1727 | } | 1731 | } |
diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c index a1c454dbc164..1c89b97f4e09 100644 --- a/drivers/net/pcnet32.c +++ b/drivers/net/pcnet32.c | |||
| @@ -325,7 +325,7 @@ static int pcnet32_get_regs_len(struct net_device *dev); | |||
| 325 | static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs, | 325 | static void pcnet32_get_regs(struct net_device *dev, struct ethtool_regs *regs, |
| 326 | void *ptr); | 326 | void *ptr); |
| 327 | static void pcnet32_purge_tx_ring(struct net_device *dev); | 327 | static void pcnet32_purge_tx_ring(struct net_device *dev); |
| 328 | static int pcnet32_alloc_ring(struct net_device *dev, char *name); | 328 | static int pcnet32_alloc_ring(struct net_device *dev, const char *name); |
| 329 | static void pcnet32_free_ring(struct net_device *dev); | 329 | static void pcnet32_free_ring(struct net_device *dev); |
| 330 | static void pcnet32_check_media(struct net_device *dev, int verbose); | 330 | static void pcnet32_check_media(struct net_device *dev, int verbose); |
| 331 | 331 | ||
| @@ -1983,7 +1983,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev) | |||
| 1983 | } | 1983 | } |
| 1984 | 1984 | ||
| 1985 | /* if any allocation fails, caller must also call pcnet32_free_ring */ | 1985 | /* if any allocation fails, caller must also call pcnet32_free_ring */ |
| 1986 | static int pcnet32_alloc_ring(struct net_device *dev, char *name) | 1986 | static int pcnet32_alloc_ring(struct net_device *dev, const char *name) |
| 1987 | { | 1987 | { |
| 1988 | struct pcnet32_private *lp = netdev_priv(dev); | 1988 | struct pcnet32_private *lp = netdev_priv(dev); |
| 1989 | 1989 | ||
diff --git a/drivers/net/phy/Kconfig b/drivers/net/phy/Kconfig index 6bf9e76b0a00..6eb2d31d1e34 100644 --- a/drivers/net/phy/Kconfig +++ b/drivers/net/phy/Kconfig | |||
| @@ -5,7 +5,7 @@ | |||
| 5 | menuconfig PHYLIB | 5 | menuconfig PHYLIB |
| 6 | tristate "PHY Device support and infrastructure" | 6 | tristate "PHY Device support and infrastructure" |
| 7 | depends on !S390 | 7 | depends on !S390 |
| 8 | depends on NET_ETHERNET && (BROKEN || !S390) | 8 | depends on NET_ETHERNET |
| 9 | help | 9 | help |
| 10 | Ethernet controllers are usually attached to PHY | 10 | Ethernet controllers are usually attached to PHY |
| 11 | devices. This option provides infrastructure for | 11 | devices. This option provides infrastructure for |
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index ac3c01d28fdf..16a0e7de5888 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c | |||
| @@ -207,6 +207,7 @@ int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id) | |||
| 207 | 207 | ||
| 208 | return 0; | 208 | return 0; |
| 209 | } | 209 | } |
| 210 | EXPORT_SYMBOL(get_phy_id); | ||
| 210 | 211 | ||
| 211 | /** | 212 | /** |
| 212 | * get_phy_device - reads the specified PHY device and returns its @phy_device struct | 213 | * get_phy_device - reads the specified PHY device and returns its @phy_device struct |
diff --git a/drivers/net/pppol2tp.c b/drivers/net/pppol2tp.c index 8db342f2fdc9..70cfdb46aa27 100644 --- a/drivers/net/pppol2tp.c +++ b/drivers/net/pppol2tp.c | |||
| @@ -240,12 +240,15 @@ static inline struct pppol2tp_session *pppol2tp_sock_to_session(struct sock *sk) | |||
| 240 | if (sk == NULL) | 240 | if (sk == NULL) |
| 241 | return NULL; | 241 | return NULL; |
| 242 | 242 | ||
| 243 | sock_hold(sk); | ||
| 243 | session = (struct pppol2tp_session *)(sk->sk_user_data); | 244 | session = (struct pppol2tp_session *)(sk->sk_user_data); |
| 244 | if (session == NULL) | 245 | if (session == NULL) { |
| 245 | return NULL; | 246 | sock_put(sk); |
| 247 | goto out; | ||
| 248 | } | ||
| 246 | 249 | ||
| 247 | BUG_ON(session->magic != L2TP_SESSION_MAGIC); | 250 | BUG_ON(session->magic != L2TP_SESSION_MAGIC); |
| 248 | 251 | out: | |
| 249 | return session; | 252 | return session; |
| 250 | } | 253 | } |
| 251 | 254 | ||
| @@ -256,12 +259,15 @@ static inline struct pppol2tp_tunnel *pppol2tp_sock_to_tunnel(struct sock *sk) | |||
| 256 | if (sk == NULL) | 259 | if (sk == NULL) |
| 257 | return NULL; | 260 | return NULL; |
| 258 | 261 | ||
| 262 | sock_hold(sk); | ||
| 259 | tunnel = (struct pppol2tp_tunnel *)(sk->sk_user_data); | 263 | tunnel = (struct pppol2tp_tunnel *)(sk->sk_user_data); |
| 260 | if (tunnel == NULL) | 264 | if (tunnel == NULL) { |
| 261 | return NULL; | 265 | sock_put(sk); |
| 266 | goto out; | ||
| 267 | } | ||
| 262 | 268 | ||
| 263 | BUG_ON(tunnel->magic != L2TP_TUNNEL_MAGIC); | 269 | BUG_ON(tunnel->magic != L2TP_TUNNEL_MAGIC); |
| 264 | 270 | out: | |
| 265 | return tunnel; | 271 | return tunnel; |
| 266 | } | 272 | } |
| 267 | 273 | ||
| @@ -716,12 +722,14 @@ discard: | |||
| 716 | session->stats.rx_errors++; | 722 | session->stats.rx_errors++; |
| 717 | kfree_skb(skb); | 723 | kfree_skb(skb); |
| 718 | sock_put(session->sock); | 724 | sock_put(session->sock); |
| 725 | sock_put(sock); | ||
| 719 | 726 | ||
| 720 | return 0; | 727 | return 0; |
| 721 | 728 | ||
| 722 | error: | 729 | error: |
| 723 | /* Put UDP header back */ | 730 | /* Put UDP header back */ |
| 724 | __skb_push(skb, sizeof(struct udphdr)); | 731 | __skb_push(skb, sizeof(struct udphdr)); |
| 732 | sock_put(sock); | ||
| 725 | 733 | ||
| 726 | no_tunnel: | 734 | no_tunnel: |
| 727 | return 1; | 735 | return 1; |
| @@ -745,10 +753,13 @@ static int pppol2tp_udp_encap_recv(struct sock *sk, struct sk_buff *skb) | |||
| 745 | "%s: received %d bytes\n", tunnel->name, skb->len); | 753 | "%s: received %d bytes\n", tunnel->name, skb->len); |
| 746 | 754 | ||
| 747 | if (pppol2tp_recv_core(sk, skb)) | 755 | if (pppol2tp_recv_core(sk, skb)) |
| 748 | goto pass_up; | 756 | goto pass_up_put; |
| 749 | 757 | ||
| 758 | sock_put(sk); | ||
| 750 | return 0; | 759 | return 0; |
| 751 | 760 | ||
| 761 | pass_up_put: | ||
| 762 | sock_put(sk); | ||
| 752 | pass_up: | 763 | pass_up: |
| 753 | return 1; | 764 | return 1; |
| 754 | } | 765 | } |
| @@ -858,7 +869,7 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh | |||
| 858 | 869 | ||
| 859 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); | 870 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); |
| 860 | if (tunnel == NULL) | 871 | if (tunnel == NULL) |
| 861 | goto error; | 872 | goto error_put_sess; |
| 862 | 873 | ||
| 863 | /* What header length is configured for this session? */ | 874 | /* What header length is configured for this session? */ |
| 864 | hdr_len = pppol2tp_l2tp_header_len(session); | 875 | hdr_len = pppol2tp_l2tp_header_len(session); |
| @@ -870,7 +881,7 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh | |||
| 870 | sizeof(ppph) + total_len, | 881 | sizeof(ppph) + total_len, |
| 871 | 0, GFP_KERNEL); | 882 | 0, GFP_KERNEL); |
| 872 | if (!skb) | 883 | if (!skb) |
| 873 | goto error; | 884 | goto error_put_sess_tun; |
| 874 | 885 | ||
| 875 | /* Reserve space for headers. */ | 886 | /* Reserve space for headers. */ |
| 876 | skb_reserve(skb, NET_SKB_PAD); | 887 | skb_reserve(skb, NET_SKB_PAD); |
| @@ -900,7 +911,7 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh | |||
| 900 | error = memcpy_fromiovec(skb->data, m->msg_iov, total_len); | 911 | error = memcpy_fromiovec(skb->data, m->msg_iov, total_len); |
| 901 | if (error < 0) { | 912 | if (error < 0) { |
| 902 | kfree_skb(skb); | 913 | kfree_skb(skb); |
| 903 | goto error; | 914 | goto error_put_sess_tun; |
| 904 | } | 915 | } |
| 905 | skb_put(skb, total_len); | 916 | skb_put(skb, total_len); |
| 906 | 917 | ||
| @@ -947,10 +958,33 @@ static int pppol2tp_sendmsg(struct kiocb *iocb, struct socket *sock, struct msgh | |||
| 947 | session->stats.tx_errors++; | 958 | session->stats.tx_errors++; |
| 948 | } | 959 | } |
| 949 | 960 | ||
| 961 | return error; | ||
| 962 | |||
| 963 | error_put_sess_tun: | ||
| 964 | sock_put(session->tunnel_sock); | ||
| 965 | error_put_sess: | ||
| 966 | sock_put(sk); | ||
| 950 | error: | 967 | error: |
| 951 | return error; | 968 | return error; |
| 952 | } | 969 | } |
| 953 | 970 | ||
| 971 | /* Automatically called when the skb is freed. | ||
| 972 | */ | ||
| 973 | static void pppol2tp_sock_wfree(struct sk_buff *skb) | ||
| 974 | { | ||
| 975 | sock_put(skb->sk); | ||
| 976 | } | ||
| 977 | |||
| 978 | /* For data skbs that we transmit, we associate with the tunnel socket | ||
| 979 | * but don't do accounting. | ||
| 980 | */ | ||
| 981 | static inline void pppol2tp_skb_set_owner_w(struct sk_buff *skb, struct sock *sk) | ||
| 982 | { | ||
| 983 | sock_hold(sk); | ||
| 984 | skb->sk = sk; | ||
| 985 | skb->destructor = pppol2tp_sock_wfree; | ||
| 986 | } | ||
| 987 | |||
| 954 | /* Transmit function called by generic PPP driver. Sends PPP frame | 988 | /* Transmit function called by generic PPP driver. Sends PPP frame |
| 955 | * over PPPoL2TP socket. | 989 | * over PPPoL2TP socket. |
| 956 | * | 990 | * |
| @@ -993,10 +1027,10 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) | |||
| 993 | 1027 | ||
| 994 | sk_tun = session->tunnel_sock; | 1028 | sk_tun = session->tunnel_sock; |
| 995 | if (sk_tun == NULL) | 1029 | if (sk_tun == NULL) |
| 996 | goto abort; | 1030 | goto abort_put_sess; |
| 997 | tunnel = pppol2tp_sock_to_tunnel(sk_tun); | 1031 | tunnel = pppol2tp_sock_to_tunnel(sk_tun); |
| 998 | if (tunnel == NULL) | 1032 | if (tunnel == NULL) |
| 999 | goto abort; | 1033 | goto abort_put_sess; |
| 1000 | 1034 | ||
| 1001 | /* What header length is configured for this session? */ | 1035 | /* What header length is configured for this session? */ |
| 1002 | hdr_len = pppol2tp_l2tp_header_len(session); | 1036 | hdr_len = pppol2tp_l2tp_header_len(session); |
| @@ -1009,7 +1043,7 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) | |||
| 1009 | sizeof(struct udphdr) + hdr_len + sizeof(ppph); | 1043 | sizeof(struct udphdr) + hdr_len + sizeof(ppph); |
| 1010 | old_headroom = skb_headroom(skb); | 1044 | old_headroom = skb_headroom(skb); |
| 1011 | if (skb_cow_head(skb, headroom)) | 1045 | if (skb_cow_head(skb, headroom)) |
| 1012 | goto abort; | 1046 | goto abort_put_sess_tun; |
| 1013 | 1047 | ||
| 1014 | new_headroom = skb_headroom(skb); | 1048 | new_headroom = skb_headroom(skb); |
| 1015 | skb_orphan(skb); | 1049 | skb_orphan(skb); |
| @@ -1069,7 +1103,7 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) | |||
| 1069 | /* Get routing info from the tunnel socket */ | 1103 | /* Get routing info from the tunnel socket */ |
| 1070 | dst_release(skb->dst); | 1104 | dst_release(skb->dst); |
| 1071 | skb->dst = dst_clone(__sk_dst_get(sk_tun)); | 1105 | skb->dst = dst_clone(__sk_dst_get(sk_tun)); |
| 1072 | skb->sk = sk_tun; | 1106 | pppol2tp_skb_set_owner_w(skb, sk_tun); |
| 1073 | 1107 | ||
| 1074 | /* Queue the packet to IP for output */ | 1108 | /* Queue the packet to IP for output */ |
| 1075 | len = skb->len; | 1109 | len = skb->len; |
| @@ -1086,8 +1120,14 @@ static int pppol2tp_xmit(struct ppp_channel *chan, struct sk_buff *skb) | |||
| 1086 | session->stats.tx_errors++; | 1120 | session->stats.tx_errors++; |
| 1087 | } | 1121 | } |
| 1088 | 1122 | ||
| 1123 | sock_put(sk_tun); | ||
| 1124 | sock_put(sk); | ||
| 1089 | return 1; | 1125 | return 1; |
| 1090 | 1126 | ||
| 1127 | abort_put_sess_tun: | ||
| 1128 | sock_put(sk_tun); | ||
| 1129 | abort_put_sess: | ||
| 1130 | sock_put(sk); | ||
| 1091 | abort: | 1131 | abort: |
| 1092 | /* Free the original skb */ | 1132 | /* Free the original skb */ |
| 1093 | kfree_skb(skb); | 1133 | kfree_skb(skb); |
| @@ -1191,7 +1231,7 @@ static void pppol2tp_tunnel_destruct(struct sock *sk) | |||
| 1191 | { | 1231 | { |
| 1192 | struct pppol2tp_tunnel *tunnel; | 1232 | struct pppol2tp_tunnel *tunnel; |
| 1193 | 1233 | ||
| 1194 | tunnel = pppol2tp_sock_to_tunnel(sk); | 1234 | tunnel = sk->sk_user_data; |
| 1195 | if (tunnel == NULL) | 1235 | if (tunnel == NULL) |
| 1196 | goto end; | 1236 | goto end; |
| 1197 | 1237 | ||
| @@ -1230,10 +1270,12 @@ static void pppol2tp_session_destruct(struct sock *sk) | |||
| 1230 | if (sk->sk_user_data != NULL) { | 1270 | if (sk->sk_user_data != NULL) { |
| 1231 | struct pppol2tp_tunnel *tunnel; | 1271 | struct pppol2tp_tunnel *tunnel; |
| 1232 | 1272 | ||
| 1233 | session = pppol2tp_sock_to_session(sk); | 1273 | session = sk->sk_user_data; |
| 1234 | if (session == NULL) | 1274 | if (session == NULL) |
| 1235 | goto out; | 1275 | goto out; |
| 1236 | 1276 | ||
| 1277 | BUG_ON(session->magic != L2TP_SESSION_MAGIC); | ||
| 1278 | |||
| 1237 | /* Don't use pppol2tp_sock_to_tunnel() here to | 1279 | /* Don't use pppol2tp_sock_to_tunnel() here to |
| 1238 | * get the tunnel context because the tunnel | 1280 | * get the tunnel context because the tunnel |
| 1239 | * socket might have already been closed (its | 1281 | * socket might have already been closed (its |
| @@ -1279,6 +1321,7 @@ out: | |||
| 1279 | static int pppol2tp_release(struct socket *sock) | 1321 | static int pppol2tp_release(struct socket *sock) |
| 1280 | { | 1322 | { |
| 1281 | struct sock *sk = sock->sk; | 1323 | struct sock *sk = sock->sk; |
| 1324 | struct pppol2tp_session *session; | ||
| 1282 | int error; | 1325 | int error; |
| 1283 | 1326 | ||
| 1284 | if (!sk) | 1327 | if (!sk) |
| @@ -1296,9 +1339,18 @@ static int pppol2tp_release(struct socket *sock) | |||
| 1296 | sock_orphan(sk); | 1339 | sock_orphan(sk); |
| 1297 | sock->sk = NULL; | 1340 | sock->sk = NULL; |
| 1298 | 1341 | ||
| 1342 | session = pppol2tp_sock_to_session(sk); | ||
| 1343 | |||
| 1299 | /* Purge any queued data */ | 1344 | /* Purge any queued data */ |
| 1300 | skb_queue_purge(&sk->sk_receive_queue); | 1345 | skb_queue_purge(&sk->sk_receive_queue); |
| 1301 | skb_queue_purge(&sk->sk_write_queue); | 1346 | skb_queue_purge(&sk->sk_write_queue); |
| 1347 | if (session != NULL) { | ||
| 1348 | struct sk_buff *skb; | ||
| 1349 | while ((skb = skb_dequeue(&session->reorder_q))) { | ||
| 1350 | kfree_skb(skb); | ||
| 1351 | sock_put(sk); | ||
| 1352 | } | ||
| 1353 | } | ||
| 1302 | 1354 | ||
| 1303 | release_sock(sk); | 1355 | release_sock(sk); |
| 1304 | 1356 | ||
| @@ -1601,7 +1653,7 @@ static int pppol2tp_connect(struct socket *sock, struct sockaddr *uservaddr, | |||
| 1601 | 1653 | ||
| 1602 | error = ppp_register_channel(&po->chan); | 1654 | error = ppp_register_channel(&po->chan); |
| 1603 | if (error) | 1655 | if (error) |
| 1604 | goto end; | 1656 | goto end_put_tun; |
| 1605 | 1657 | ||
| 1606 | /* This is how we get the session context from the socket. */ | 1658 | /* This is how we get the session context from the socket. */ |
| 1607 | sk->sk_user_data = session; | 1659 | sk->sk_user_data = session; |
| @@ -1621,6 +1673,8 @@ out_no_ppp: | |||
| 1621 | PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO, | 1673 | PRINTK(session->debug, PPPOL2TP_MSG_CONTROL, KERN_INFO, |
| 1622 | "%s: created\n", session->name); | 1674 | "%s: created\n", session->name); |
| 1623 | 1675 | ||
| 1676 | end_put_tun: | ||
| 1677 | sock_put(tunnel_sock); | ||
| 1624 | end: | 1678 | end: |
| 1625 | release_sock(sk); | 1679 | release_sock(sk); |
| 1626 | 1680 | ||
| @@ -1668,6 +1722,7 @@ static int pppol2tp_getname(struct socket *sock, struct sockaddr *uaddr, | |||
| 1668 | *usockaddr_len = len; | 1722 | *usockaddr_len = len; |
| 1669 | 1723 | ||
| 1670 | error = 0; | 1724 | error = 0; |
| 1725 | sock_put(sock->sk); | ||
| 1671 | 1726 | ||
| 1672 | end: | 1727 | end: |
| 1673 | return error; | 1728 | return error; |
| @@ -1906,14 +1961,17 @@ static int pppol2tp_ioctl(struct socket *sock, unsigned int cmd, | |||
| 1906 | err = -EBADF; | 1961 | err = -EBADF; |
| 1907 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); | 1962 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); |
| 1908 | if (tunnel == NULL) | 1963 | if (tunnel == NULL) |
| 1909 | goto end; | 1964 | goto end_put_sess; |
| 1910 | 1965 | ||
| 1911 | err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg); | 1966 | err = pppol2tp_tunnel_ioctl(tunnel, cmd, arg); |
| 1912 | goto end; | 1967 | sock_put(session->tunnel_sock); |
| 1968 | goto end_put_sess; | ||
| 1913 | } | 1969 | } |
| 1914 | 1970 | ||
| 1915 | err = pppol2tp_session_ioctl(session, cmd, arg); | 1971 | err = pppol2tp_session_ioctl(session, cmd, arg); |
| 1916 | 1972 | ||
| 1973 | end_put_sess: | ||
| 1974 | sock_put(sk); | ||
| 1917 | end: | 1975 | end: |
| 1918 | return err; | 1976 | return err; |
| 1919 | } | 1977 | } |
| @@ -2059,14 +2117,17 @@ static int pppol2tp_setsockopt(struct socket *sock, int level, int optname, | |||
| 2059 | err = -EBADF; | 2117 | err = -EBADF; |
| 2060 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); | 2118 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); |
| 2061 | if (tunnel == NULL) | 2119 | if (tunnel == NULL) |
| 2062 | goto end; | 2120 | goto end_put_sess; |
| 2063 | 2121 | ||
| 2064 | err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val); | 2122 | err = pppol2tp_tunnel_setsockopt(sk, tunnel, optname, val); |
| 2123 | sock_put(session->tunnel_sock); | ||
| 2065 | } else | 2124 | } else |
| 2066 | err = pppol2tp_session_setsockopt(sk, session, optname, val); | 2125 | err = pppol2tp_session_setsockopt(sk, session, optname, val); |
| 2067 | 2126 | ||
| 2068 | err = 0; | 2127 | err = 0; |
| 2069 | 2128 | ||
| 2129 | end_put_sess: | ||
| 2130 | sock_put(sk); | ||
| 2070 | end: | 2131 | end: |
| 2071 | return err; | 2132 | return err; |
| 2072 | } | 2133 | } |
| @@ -2181,20 +2242,24 @@ static int pppol2tp_getsockopt(struct socket *sock, int level, | |||
| 2181 | err = -EBADF; | 2242 | err = -EBADF; |
| 2182 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); | 2243 | tunnel = pppol2tp_sock_to_tunnel(session->tunnel_sock); |
| 2183 | if (tunnel == NULL) | 2244 | if (tunnel == NULL) |
| 2184 | goto end; | 2245 | goto end_put_sess; |
| 2185 | 2246 | ||
| 2186 | err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val); | 2247 | err = pppol2tp_tunnel_getsockopt(sk, tunnel, optname, &val); |
| 2248 | sock_put(session->tunnel_sock); | ||
| 2187 | } else | 2249 | } else |
| 2188 | err = pppol2tp_session_getsockopt(sk, session, optname, &val); | 2250 | err = pppol2tp_session_getsockopt(sk, session, optname, &val); |
| 2189 | 2251 | ||
| 2190 | err = -EFAULT; | 2252 | err = -EFAULT; |
| 2191 | if (put_user(len, (int __user *) optlen)) | 2253 | if (put_user(len, (int __user *) optlen)) |
| 2192 | goto end; | 2254 | goto end_put_sess; |
| 2193 | 2255 | ||
| 2194 | if (copy_to_user((void __user *) optval, &val, len)) | 2256 | if (copy_to_user((void __user *) optval, &val, len)) |
| 2195 | goto end; | 2257 | goto end_put_sess; |
| 2196 | 2258 | ||
| 2197 | err = 0; | 2259 | err = 0; |
| 2260 | |||
| 2261 | end_put_sess: | ||
| 2262 | sock_put(sk); | ||
| 2198 | end: | 2263 | end: |
| 2199 | return err; | 2264 | return err; |
| 2200 | } | 2265 | } |
diff --git a/drivers/net/s2io-regs.h b/drivers/net/s2io-regs.h index 2109508c047a..f8274f8941ea 100644 --- a/drivers/net/s2io-regs.h +++ b/drivers/net/s2io-regs.h | |||
| @@ -250,7 +250,7 @@ struct XENA_dev_config { | |||
| 250 | u64 tx_mat0_n[0x8]; | 250 | u64 tx_mat0_n[0x8]; |
| 251 | #define TX_MAT_SET(fifo, msi) vBIT(msi, (8 * fifo), 8) | 251 | #define TX_MAT_SET(fifo, msi) vBIT(msi, (8 * fifo), 8) |
| 252 | 252 | ||
| 253 | u8 unused_1[0x8]; | 253 | u64 xmsi_mask_reg; |
| 254 | u64 stat_byte_cnt; | 254 | u64 stat_byte_cnt; |
| 255 | #define STAT_BC(n) vBIT(n,4,12) | 255 | #define STAT_BC(n) vBIT(n,4,12) |
| 256 | 256 | ||
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c index 523478ebfd69..b5c1e663417d 100644 --- a/drivers/net/s2io.c +++ b/drivers/net/s2io.c | |||
| @@ -86,7 +86,7 @@ | |||
| 86 | #include "s2io.h" | 86 | #include "s2io.h" |
| 87 | #include "s2io-regs.h" | 87 | #include "s2io-regs.h" |
| 88 | 88 | ||
| 89 | #define DRV_VERSION "2.0.26.23" | 89 | #define DRV_VERSION "2.0.26.24" |
| 90 | 90 | ||
| 91 | /* S2io Driver name & version. */ | 91 | /* S2io Driver name & version. */ |
| 92 | static char s2io_driver_name[] = "Neterion"; | 92 | static char s2io_driver_name[] = "Neterion"; |
| @@ -1113,9 +1113,10 @@ static int s2io_on_nec_bridge(struct pci_dev *s2io_pdev) | |||
| 1113 | struct pci_dev *tdev = NULL; | 1113 | struct pci_dev *tdev = NULL; |
| 1114 | while ((tdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, tdev)) != NULL) { | 1114 | while ((tdev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, tdev)) != NULL) { |
| 1115 | if (tdev->vendor == NEC_VENID && tdev->device == NEC_DEVID) { | 1115 | if (tdev->vendor == NEC_VENID && tdev->device == NEC_DEVID) { |
| 1116 | if (tdev->bus == s2io_pdev->bus->parent) | 1116 | if (tdev->bus == s2io_pdev->bus->parent) { |
| 1117 | pci_dev_put(tdev); | 1117 | pci_dev_put(tdev); |
| 1118 | return 1; | 1118 | return 1; |
| 1119 | } | ||
| 1119 | } | 1120 | } |
| 1120 | } | 1121 | } |
| 1121 | return 0; | 1122 | return 0; |
| @@ -1219,15 +1220,33 @@ static int init_tti(struct s2io_nic *nic, int link) | |||
| 1219 | TTI_DATA1_MEM_TX_URNG_B(0x10) | | 1220 | TTI_DATA1_MEM_TX_URNG_B(0x10) | |
| 1220 | TTI_DATA1_MEM_TX_URNG_C(0x30) | | 1221 | TTI_DATA1_MEM_TX_URNG_C(0x30) | |
| 1221 | TTI_DATA1_MEM_TX_TIMER_AC_EN; | 1222 | TTI_DATA1_MEM_TX_TIMER_AC_EN; |
| 1222 | 1223 | if (i == 0) | |
| 1223 | if (use_continuous_tx_intrs && (link == LINK_UP)) | 1224 | if (use_continuous_tx_intrs && (link == LINK_UP)) |
| 1224 | val64 |= TTI_DATA1_MEM_TX_TIMER_CI_EN; | 1225 | val64 |= TTI_DATA1_MEM_TX_TIMER_CI_EN; |
| 1225 | writeq(val64, &bar0->tti_data1_mem); | 1226 | writeq(val64, &bar0->tti_data1_mem); |
| 1226 | 1227 | ||
| 1227 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) | | 1228 | if (nic->config.intr_type == MSI_X) { |
| 1228 | TTI_DATA2_MEM_TX_UFC_B(0x20) | | 1229 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) | |
| 1229 | TTI_DATA2_MEM_TX_UFC_C(0x40) | | 1230 | TTI_DATA2_MEM_TX_UFC_B(0x100) | |
| 1230 | TTI_DATA2_MEM_TX_UFC_D(0x80); | 1231 | TTI_DATA2_MEM_TX_UFC_C(0x200) | |
| 1232 | TTI_DATA2_MEM_TX_UFC_D(0x300); | ||
| 1233 | } else { | ||
| 1234 | if ((nic->config.tx_steering_type == | ||
| 1235 | TX_DEFAULT_STEERING) && | ||
| 1236 | (config->tx_fifo_num > 1) && | ||
| 1237 | (i >= nic->udp_fifo_idx) && | ||
| 1238 | (i < (nic->udp_fifo_idx + | ||
| 1239 | nic->total_udp_fifos))) | ||
| 1240 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x50) | | ||
| 1241 | TTI_DATA2_MEM_TX_UFC_B(0x80) | | ||
| 1242 | TTI_DATA2_MEM_TX_UFC_C(0x100) | | ||
| 1243 | TTI_DATA2_MEM_TX_UFC_D(0x120); | ||
| 1244 | else | ||
| 1245 | val64 = TTI_DATA2_MEM_TX_UFC_A(0x10) | | ||
| 1246 | TTI_DATA2_MEM_TX_UFC_B(0x20) | | ||
| 1247 | TTI_DATA2_MEM_TX_UFC_C(0x40) | | ||
| 1248 | TTI_DATA2_MEM_TX_UFC_D(0x80); | ||
| 1249 | } | ||
| 1231 | 1250 | ||
| 1232 | writeq(val64, &bar0->tti_data2_mem); | 1251 | writeq(val64, &bar0->tti_data2_mem); |
| 1233 | 1252 | ||
| @@ -2813,6 +2832,15 @@ static void free_rx_buffers(struct s2io_nic *sp) | |||
| 2813 | } | 2832 | } |
| 2814 | } | 2833 | } |
| 2815 | 2834 | ||
| 2835 | static int s2io_chk_rx_buffers(struct ring_info *ring) | ||
| 2836 | { | ||
| 2837 | if (fill_rx_buffers(ring) == -ENOMEM) { | ||
| 2838 | DBG_PRINT(INFO_DBG, "%s:Out of memory", ring->dev->name); | ||
| 2839 | DBG_PRINT(INFO_DBG, " in Rx Intr!!\n"); | ||
| 2840 | } | ||
| 2841 | return 0; | ||
| 2842 | } | ||
| 2843 | |||
| 2816 | /** | 2844 | /** |
| 2817 | * s2io_poll - Rx interrupt handler for NAPI support | 2845 | * s2io_poll - Rx interrupt handler for NAPI support |
| 2818 | * @napi : pointer to the napi structure. | 2846 | * @napi : pointer to the napi structure. |
| @@ -2826,57 +2854,73 @@ static void free_rx_buffers(struct s2io_nic *sp) | |||
| 2826 | * 0 on success and 1 if there are No Rx packets to be processed. | 2854 | * 0 on success and 1 if there are No Rx packets to be processed. |
| 2827 | */ | 2855 | */ |
| 2828 | 2856 | ||
| 2829 | static int s2io_poll(struct napi_struct *napi, int budget) | 2857 | static int s2io_poll_msix(struct napi_struct *napi, int budget) |
| 2830 | { | 2858 | { |
| 2831 | struct s2io_nic *nic = container_of(napi, struct s2io_nic, napi); | 2859 | struct ring_info *ring = container_of(napi, struct ring_info, napi); |
| 2832 | struct net_device *dev = nic->dev; | 2860 | struct net_device *dev = ring->dev; |
| 2833 | int pkt_cnt = 0, org_pkts_to_process; | ||
| 2834 | struct mac_info *mac_control; | ||
| 2835 | struct config_param *config; | 2861 | struct config_param *config; |
| 2862 | struct mac_info *mac_control; | ||
| 2863 | int pkts_processed = 0; | ||
| 2864 | u8 __iomem *addr = NULL; | ||
| 2865 | u8 val8 = 0; | ||
| 2866 | struct s2io_nic *nic = dev->priv; | ||
| 2836 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 2867 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 2837 | int i; | 2868 | int budget_org = budget; |
| 2838 | 2869 | ||
| 2839 | mac_control = &nic->mac_control; | ||
| 2840 | config = &nic->config; | 2870 | config = &nic->config; |
| 2871 | mac_control = &nic->mac_control; | ||
| 2841 | 2872 | ||
| 2842 | nic->pkts_to_process = budget; | 2873 | if (unlikely(!is_s2io_card_up(nic))) |
| 2843 | org_pkts_to_process = nic->pkts_to_process; | 2874 | return 0; |
| 2844 | 2875 | ||
| 2845 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); | 2876 | pkts_processed = rx_intr_handler(ring, budget); |
| 2846 | readl(&bar0->rx_traffic_int); | 2877 | s2io_chk_rx_buffers(ring); |
| 2847 | 2878 | ||
| 2848 | for (i = 0; i < config->rx_ring_num; i++) { | 2879 | if (pkts_processed < budget_org) { |
| 2849 | rx_intr_handler(&mac_control->rings[i]); | 2880 | netif_rx_complete(dev, napi); |
| 2850 | pkt_cnt = org_pkts_to_process - nic->pkts_to_process; | 2881 | /*Re Enable MSI-Rx Vector*/ |
| 2851 | if (!nic->pkts_to_process) { | 2882 | addr = (u8 __iomem *)&bar0->xmsi_mask_reg; |
| 2852 | /* Quota for the current iteration has been met */ | 2883 | addr += 7 - ring->ring_no; |
| 2853 | goto no_rx; | 2884 | val8 = (ring->ring_no == 0) ? 0x3f : 0xbf; |
| 2854 | } | 2885 | writeb(val8, addr); |
| 2886 | val8 = readb(addr); | ||
| 2855 | } | 2887 | } |
| 2888 | return pkts_processed; | ||
| 2889 | } | ||
| 2890 | static int s2io_poll_inta(struct napi_struct *napi, int budget) | ||
| 2891 | { | ||
| 2892 | struct s2io_nic *nic = container_of(napi, struct s2io_nic, napi); | ||
| 2893 | struct ring_info *ring; | ||
| 2894 | struct net_device *dev = nic->dev; | ||
| 2895 | struct config_param *config; | ||
| 2896 | struct mac_info *mac_control; | ||
| 2897 | int pkts_processed = 0; | ||
| 2898 | int ring_pkts_processed, i; | ||
| 2899 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | ||
| 2900 | int budget_org = budget; | ||
| 2856 | 2901 | ||
| 2857 | netif_rx_complete(dev, napi); | 2902 | config = &nic->config; |
| 2903 | mac_control = &nic->mac_control; | ||
| 2858 | 2904 | ||
| 2859 | for (i = 0; i < config->rx_ring_num; i++) { | 2905 | if (unlikely(!is_s2io_card_up(nic))) |
| 2860 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { | 2906 | return 0; |
| 2861 | DBG_PRINT(INFO_DBG, "%s:Out of memory", dev->name); | ||
| 2862 | DBG_PRINT(INFO_DBG, " in Rx Poll!!\n"); | ||
| 2863 | break; | ||
| 2864 | } | ||
| 2865 | } | ||
| 2866 | /* Re enable the Rx interrupts. */ | ||
| 2867 | writeq(0x0, &bar0->rx_traffic_mask); | ||
| 2868 | readl(&bar0->rx_traffic_mask); | ||
| 2869 | return pkt_cnt; | ||
| 2870 | 2907 | ||
| 2871 | no_rx: | ||
| 2872 | for (i = 0; i < config->rx_ring_num; i++) { | 2908 | for (i = 0; i < config->rx_ring_num; i++) { |
| 2873 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { | 2909 | ring = &mac_control->rings[i]; |
| 2874 | DBG_PRINT(INFO_DBG, "%s:Out of memory", dev->name); | 2910 | ring_pkts_processed = rx_intr_handler(ring, budget); |
| 2875 | DBG_PRINT(INFO_DBG, " in Rx Poll!!\n"); | 2911 | s2io_chk_rx_buffers(ring); |
| 2912 | pkts_processed += ring_pkts_processed; | ||
| 2913 | budget -= ring_pkts_processed; | ||
| 2914 | if (budget <= 0) | ||
| 2876 | break; | 2915 | break; |
| 2877 | } | ||
| 2878 | } | 2916 | } |
| 2879 | return pkt_cnt; | 2917 | if (pkts_processed < budget_org) { |
| 2918 | netif_rx_complete(dev, napi); | ||
| 2919 | /* Re enable the Rx interrupts for the ring */ | ||
| 2920 | writeq(0, &bar0->rx_traffic_mask); | ||
| 2921 | readl(&bar0->rx_traffic_mask); | ||
| 2922 | } | ||
| 2923 | return pkts_processed; | ||
| 2880 | } | 2924 | } |
| 2881 | 2925 | ||
| 2882 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2926 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| @@ -2918,7 +2962,7 @@ static void s2io_netpoll(struct net_device *dev) | |||
| 2918 | 2962 | ||
| 2919 | /* check for received packet and indicate up to network */ | 2963 | /* check for received packet and indicate up to network */ |
| 2920 | for (i = 0; i < config->rx_ring_num; i++) | 2964 | for (i = 0; i < config->rx_ring_num; i++) |
| 2921 | rx_intr_handler(&mac_control->rings[i]); | 2965 | rx_intr_handler(&mac_control->rings[i], 0); |
| 2922 | 2966 | ||
| 2923 | for (i = 0; i < config->rx_ring_num; i++) { | 2967 | for (i = 0; i < config->rx_ring_num; i++) { |
| 2924 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { | 2968 | if (fill_rx_buffers(&mac_control->rings[i]) == -ENOMEM) { |
| @@ -2934,7 +2978,8 @@ static void s2io_netpoll(struct net_device *dev) | |||
| 2934 | 2978 | ||
| 2935 | /** | 2979 | /** |
| 2936 | * rx_intr_handler - Rx interrupt handler | 2980 | * rx_intr_handler - Rx interrupt handler |
| 2937 | * @nic: device private variable. | 2981 | * @ring_info: per ring structure. |
| 2982 | * @budget: budget for napi processing. | ||
| 2938 | * Description: | 2983 | * Description: |
| 2939 | * If the interrupt is because of a received frame or if the | 2984 | * If the interrupt is because of a received frame or if the |
| 2940 | * receive ring contains fresh as yet un-processed frames,this function is | 2985 | * receive ring contains fresh as yet un-processed frames,this function is |
| @@ -2942,15 +2987,15 @@ static void s2io_netpoll(struct net_device *dev) | |||
| 2942 | * stopped and sends the skb to the OSM's Rx handler and then increments | 2987 | * stopped and sends the skb to the OSM's Rx handler and then increments |
| 2943 | * the offset. | 2988 | * the offset. |
| 2944 | * Return Value: | 2989 | * Return Value: |
| 2945 | * NONE. | 2990 | * No. of napi packets processed. |
| 2946 | */ | 2991 | */ |
| 2947 | static void rx_intr_handler(struct ring_info *ring_data) | 2992 | static int rx_intr_handler(struct ring_info *ring_data, int budget) |
| 2948 | { | 2993 | { |
| 2949 | int get_block, put_block; | 2994 | int get_block, put_block; |
| 2950 | struct rx_curr_get_info get_info, put_info; | 2995 | struct rx_curr_get_info get_info, put_info; |
| 2951 | struct RxD_t *rxdp; | 2996 | struct RxD_t *rxdp; |
| 2952 | struct sk_buff *skb; | 2997 | struct sk_buff *skb; |
| 2953 | int pkt_cnt = 0; | 2998 | int pkt_cnt = 0, napi_pkts = 0; |
| 2954 | int i; | 2999 | int i; |
| 2955 | struct RxD1* rxdp1; | 3000 | struct RxD1* rxdp1; |
| 2956 | struct RxD3* rxdp3; | 3001 | struct RxD3* rxdp3; |
| @@ -2977,7 +3022,7 @@ static void rx_intr_handler(struct ring_info *ring_data) | |||
| 2977 | DBG_PRINT(ERR_DBG, "%s: The skb is ", | 3022 | DBG_PRINT(ERR_DBG, "%s: The skb is ", |
| 2978 | ring_data->dev->name); | 3023 | ring_data->dev->name); |
| 2979 | DBG_PRINT(ERR_DBG, "Null in Rx Intr\n"); | 3024 | DBG_PRINT(ERR_DBG, "Null in Rx Intr\n"); |
| 2980 | return; | 3025 | return 0; |
| 2981 | } | 3026 | } |
| 2982 | if (ring_data->rxd_mode == RXD_MODE_1) { | 3027 | if (ring_data->rxd_mode == RXD_MODE_1) { |
| 2983 | rxdp1 = (struct RxD1*)rxdp; | 3028 | rxdp1 = (struct RxD1*)rxdp; |
| @@ -3014,9 +3059,10 @@ static void rx_intr_handler(struct ring_info *ring_data) | |||
| 3014 | rxdp = ring_data->rx_blocks[get_block].block_virt_addr; | 3059 | rxdp = ring_data->rx_blocks[get_block].block_virt_addr; |
| 3015 | } | 3060 | } |
| 3016 | 3061 | ||
| 3017 | if(ring_data->nic->config.napi){ | 3062 | if (ring_data->nic->config.napi) { |
| 3018 | ring_data->nic->pkts_to_process -= 1; | 3063 | budget--; |
| 3019 | if (!ring_data->nic->pkts_to_process) | 3064 | napi_pkts++; |
| 3065 | if (!budget) | ||
| 3020 | break; | 3066 | break; |
| 3021 | } | 3067 | } |
| 3022 | pkt_cnt++; | 3068 | pkt_cnt++; |
| @@ -3034,6 +3080,7 @@ static void rx_intr_handler(struct ring_info *ring_data) | |||
| 3034 | } | 3080 | } |
| 3035 | } | 3081 | } |
| 3036 | } | 3082 | } |
| 3083 | return(napi_pkts); | ||
| 3037 | } | 3084 | } |
| 3038 | 3085 | ||
| 3039 | /** | 3086 | /** |
| @@ -3730,14 +3777,19 @@ static void restore_xmsi_data(struct s2io_nic *nic) | |||
| 3730 | { | 3777 | { |
| 3731 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 3778 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 3732 | u64 val64; | 3779 | u64 val64; |
| 3733 | int i; | 3780 | int i, msix_index; |
| 3781 | |||
| 3782 | |||
| 3783 | if (nic->device_type == XFRAME_I_DEVICE) | ||
| 3784 | return; | ||
| 3734 | 3785 | ||
| 3735 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { | 3786 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { |
| 3787 | msix_index = (i) ? ((i-1) * 8 + 1): 0; | ||
| 3736 | writeq(nic->msix_info[i].addr, &bar0->xmsi_address); | 3788 | writeq(nic->msix_info[i].addr, &bar0->xmsi_address); |
| 3737 | writeq(nic->msix_info[i].data, &bar0->xmsi_data); | 3789 | writeq(nic->msix_info[i].data, &bar0->xmsi_data); |
| 3738 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(i, 26, 6)); | 3790 | val64 = (s2BIT(7) | s2BIT(15) | vBIT(msix_index, 26, 6)); |
| 3739 | writeq(val64, &bar0->xmsi_access); | 3791 | writeq(val64, &bar0->xmsi_access); |
| 3740 | if (wait_for_msix_trans(nic, i)) { | 3792 | if (wait_for_msix_trans(nic, msix_index)) { |
| 3741 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3793 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); |
| 3742 | continue; | 3794 | continue; |
| 3743 | } | 3795 | } |
| @@ -3748,13 +3800,17 @@ static void store_xmsi_data(struct s2io_nic *nic) | |||
| 3748 | { | 3800 | { |
| 3749 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 3801 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 3750 | u64 val64, addr, data; | 3802 | u64 val64, addr, data; |
| 3751 | int i; | 3803 | int i, msix_index; |
| 3804 | |||
| 3805 | if (nic->device_type == XFRAME_I_DEVICE) | ||
| 3806 | return; | ||
| 3752 | 3807 | ||
| 3753 | /* Store and display */ | 3808 | /* Store and display */ |
| 3754 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { | 3809 | for (i=0; i < MAX_REQUESTED_MSI_X; i++) { |
| 3755 | val64 = (s2BIT(15) | vBIT(i, 26, 6)); | 3810 | msix_index = (i) ? ((i-1) * 8 + 1): 0; |
| 3811 | val64 = (s2BIT(15) | vBIT(msix_index, 26, 6)); | ||
| 3756 | writeq(val64, &bar0->xmsi_access); | 3812 | writeq(val64, &bar0->xmsi_access); |
| 3757 | if (wait_for_msix_trans(nic, i)) { | 3813 | if (wait_for_msix_trans(nic, msix_index)) { |
| 3758 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); | 3814 | DBG_PRINT(ERR_DBG, "failed in %s\n", __FUNCTION__); |
| 3759 | continue; | 3815 | continue; |
| 3760 | } | 3816 | } |
| @@ -3770,11 +3826,11 @@ static void store_xmsi_data(struct s2io_nic *nic) | |||
| 3770 | static int s2io_enable_msi_x(struct s2io_nic *nic) | 3826 | static int s2io_enable_msi_x(struct s2io_nic *nic) |
| 3771 | { | 3827 | { |
| 3772 | struct XENA_dev_config __iomem *bar0 = nic->bar0; | 3828 | struct XENA_dev_config __iomem *bar0 = nic->bar0; |
| 3773 | u64 tx_mat, rx_mat; | 3829 | u64 rx_mat; |
| 3774 | u16 msi_control; /* Temp variable */ | 3830 | u16 msi_control; /* Temp variable */ |
| 3775 | int ret, i, j, msix_indx = 1; | 3831 | int ret, i, j, msix_indx = 1; |
| 3776 | 3832 | ||
| 3777 | nic->entries = kcalloc(MAX_REQUESTED_MSI_X, sizeof(struct msix_entry), | 3833 | nic->entries = kmalloc(nic->num_entries * sizeof(struct msix_entry), |
| 3778 | GFP_KERNEL); | 3834 | GFP_KERNEL); |
| 3779 | if (!nic->entries) { | 3835 | if (!nic->entries) { |
| 3780 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", \ | 3836 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", \ |
| @@ -3783,10 +3839,12 @@ static int s2io_enable_msi_x(struct s2io_nic *nic) | |||
| 3783 | return -ENOMEM; | 3839 | return -ENOMEM; |
| 3784 | } | 3840 | } |
| 3785 | nic->mac_control.stats_info->sw_stat.mem_allocated | 3841 | nic->mac_control.stats_info->sw_stat.mem_allocated |
| 3786 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 3842 | += (nic->num_entries * sizeof(struct msix_entry)); |
| 3843 | |||
| 3844 | memset(nic->entries, 0, nic->num_entries * sizeof(struct msix_entry)); | ||
| 3787 | 3845 | ||
| 3788 | nic->s2io_entries = | 3846 | nic->s2io_entries = |
| 3789 | kcalloc(MAX_REQUESTED_MSI_X, sizeof(struct s2io_msix_entry), | 3847 | kmalloc(nic->num_entries * sizeof(struct s2io_msix_entry), |
| 3790 | GFP_KERNEL); | 3848 | GFP_KERNEL); |
| 3791 | if (!nic->s2io_entries) { | 3849 | if (!nic->s2io_entries) { |
| 3792 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", | 3850 | DBG_PRINT(INFO_DBG, "%s: Memory allocation failed\n", |
| @@ -3794,60 +3852,52 @@ static int s2io_enable_msi_x(struct s2io_nic *nic) | |||
| 3794 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; | 3852 | nic->mac_control.stats_info->sw_stat.mem_alloc_fail_cnt++; |
| 3795 | kfree(nic->entries); | 3853 | kfree(nic->entries); |
| 3796 | nic->mac_control.stats_info->sw_stat.mem_freed | 3854 | nic->mac_control.stats_info->sw_stat.mem_freed |
| 3797 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 3855 | += (nic->num_entries * sizeof(struct msix_entry)); |
| 3798 | return -ENOMEM; | 3856 | return -ENOMEM; |
| 3799 | } | 3857 | } |
| 3800 | nic->mac_control.stats_info->sw_stat.mem_allocated | 3858 | nic->mac_control.stats_info->sw_stat.mem_allocated |
| 3801 | += (MAX_REQUESTED_MSI_X * sizeof(struct s2io_msix_entry)); | 3859 | += (nic->num_entries * sizeof(struct s2io_msix_entry)); |
| 3802 | 3860 | memset(nic->s2io_entries, 0, | |
| 3803 | for (i=0; i< MAX_REQUESTED_MSI_X; i++) { | 3861 | nic->num_entries * sizeof(struct s2io_msix_entry)); |
| 3804 | nic->entries[i].entry = i; | 3862 | |
| 3805 | nic->s2io_entries[i].entry = i; | 3863 | nic->entries[0].entry = 0; |
| 3864 | nic->s2io_entries[0].entry = 0; | ||
| 3865 | nic->s2io_entries[0].in_use = MSIX_FLG; | ||
| 3866 | nic->s2io_entries[0].type = MSIX_ALARM_TYPE; | ||
| 3867 | nic->s2io_entries[0].arg = &nic->mac_control.fifos; | ||
| 3868 | |||
| 3869 | for (i = 1; i < nic->num_entries; i++) { | ||
| 3870 | nic->entries[i].entry = ((i - 1) * 8) + 1; | ||
| 3871 | nic->s2io_entries[i].entry = ((i - 1) * 8) + 1; | ||
| 3806 | nic->s2io_entries[i].arg = NULL; | 3872 | nic->s2io_entries[i].arg = NULL; |
| 3807 | nic->s2io_entries[i].in_use = 0; | 3873 | nic->s2io_entries[i].in_use = 0; |
| 3808 | } | 3874 | } |
| 3809 | 3875 | ||
| 3810 | tx_mat = readq(&bar0->tx_mat0_n[0]); | ||
| 3811 | for (i=0; i<nic->config.tx_fifo_num; i++, msix_indx++) { | ||
| 3812 | tx_mat |= TX_MAT_SET(i, msix_indx); | ||
| 3813 | nic->s2io_entries[msix_indx].arg = &nic->mac_control.fifos[i]; | ||
| 3814 | nic->s2io_entries[msix_indx].type = MSIX_FIFO_TYPE; | ||
| 3815 | nic->s2io_entries[msix_indx].in_use = MSIX_FLG; | ||
| 3816 | } | ||
| 3817 | writeq(tx_mat, &bar0->tx_mat0_n[0]); | ||
| 3818 | |||
| 3819 | rx_mat = readq(&bar0->rx_mat); | 3876 | rx_mat = readq(&bar0->rx_mat); |
| 3820 | for (j = 0; j < nic->config.rx_ring_num; j++, msix_indx++) { | 3877 | for (j = 0; j < nic->config.rx_ring_num; j++) { |
| 3821 | rx_mat |= RX_MAT_SET(j, msix_indx); | 3878 | rx_mat |= RX_MAT_SET(j, msix_indx); |
| 3822 | nic->s2io_entries[msix_indx].arg | 3879 | nic->s2io_entries[j+1].arg = &nic->mac_control.rings[j]; |
| 3823 | = &nic->mac_control.rings[j]; | 3880 | nic->s2io_entries[j+1].type = MSIX_RING_TYPE; |
| 3824 | nic->s2io_entries[msix_indx].type = MSIX_RING_TYPE; | 3881 | nic->s2io_entries[j+1].in_use = MSIX_FLG; |
| 3825 | nic->s2io_entries[msix_indx].in_use = MSIX_FLG; | 3882 | msix_indx += 8; |
| 3826 | } | 3883 | } |
| 3827 | writeq(rx_mat, &bar0->rx_mat); | 3884 | writeq(rx_mat, &bar0->rx_mat); |
| 3885 | readq(&bar0->rx_mat); | ||
| 3828 | 3886 | ||
| 3829 | nic->avail_msix_vectors = 0; | 3887 | ret = pci_enable_msix(nic->pdev, nic->entries, nic->num_entries); |
| 3830 | ret = pci_enable_msix(nic->pdev, nic->entries, MAX_REQUESTED_MSI_X); | ||
| 3831 | /* We fail init if error or we get less vectors than min required */ | 3888 | /* We fail init if error or we get less vectors than min required */ |
| 3832 | if (ret >= (nic->config.tx_fifo_num + nic->config.rx_ring_num + 1)) { | ||
| 3833 | nic->avail_msix_vectors = ret; | ||
| 3834 | ret = pci_enable_msix(nic->pdev, nic->entries, ret); | ||
| 3835 | } | ||
| 3836 | if (ret) { | 3889 | if (ret) { |
| 3837 | DBG_PRINT(ERR_DBG, "%s: Enabling MSIX failed\n", nic->dev->name); | 3890 | DBG_PRINT(ERR_DBG, "%s: Enabling MSIX failed\n", nic->dev->name); |
| 3838 | kfree(nic->entries); | 3891 | kfree(nic->entries); |
| 3839 | nic->mac_control.stats_info->sw_stat.mem_freed | 3892 | nic->mac_control.stats_info->sw_stat.mem_freed |
| 3840 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 3893 | += (nic->num_entries * sizeof(struct msix_entry)); |
| 3841 | kfree(nic->s2io_entries); | 3894 | kfree(nic->s2io_entries); |
| 3842 | nic->mac_control.stats_info->sw_stat.mem_freed | 3895 | nic->mac_control.stats_info->sw_stat.mem_freed |
| 3843 | += (MAX_REQUESTED_MSI_X * sizeof(struct s2io_msix_entry)); | 3896 | += (nic->num_entries * sizeof(struct s2io_msix_entry)); |
| 3844 | nic->entries = NULL; | 3897 | nic->entries = NULL; |
| 3845 | nic->s2io_entries = NULL; | 3898 | nic->s2io_entries = NULL; |
| 3846 | nic->avail_msix_vectors = 0; | ||
| 3847 | return -ENOMEM; | 3899 | return -ENOMEM; |
| 3848 | } | 3900 | } |
| 3849 | if (!nic->avail_msix_vectors) | ||
| 3850 | nic->avail_msix_vectors = MAX_REQUESTED_MSI_X; | ||
| 3851 | 3901 | ||
| 3852 | /* | 3902 | /* |
| 3853 | * To enable MSI-X, MSI also needs to be enabled, due to a bug | 3903 | * To enable MSI-X, MSI also needs to be enabled, due to a bug |
| @@ -3919,7 +3969,7 @@ static void remove_msix_isr(struct s2io_nic *sp) | |||
| 3919 | int i; | 3969 | int i; |
| 3920 | u16 msi_control; | 3970 | u16 msi_control; |
| 3921 | 3971 | ||
| 3922 | for (i = 0; i < MAX_REQUESTED_MSI_X; i++) { | 3972 | for (i = 0; i < sp->num_entries; i++) { |
| 3923 | if (sp->s2io_entries[i].in_use == | 3973 | if (sp->s2io_entries[i].in_use == |
| 3924 | MSIX_REGISTERED_SUCCESS) { | 3974 | MSIX_REGISTERED_SUCCESS) { |
| 3925 | int vector = sp->entries[i].vector; | 3975 | int vector = sp->entries[i].vector; |
| @@ -3975,29 +4025,6 @@ static int s2io_open(struct net_device *dev) | |||
| 3975 | netif_carrier_off(dev); | 4025 | netif_carrier_off(dev); |
| 3976 | sp->last_link_state = 0; | 4026 | sp->last_link_state = 0; |
| 3977 | 4027 | ||
| 3978 | if (sp->config.intr_type == MSI_X) { | ||
| 3979 | int ret = s2io_enable_msi_x(sp); | ||
| 3980 | |||
| 3981 | if (!ret) { | ||
| 3982 | ret = s2io_test_msi(sp); | ||
| 3983 | /* rollback MSI-X, will re-enable during add_isr() */ | ||
| 3984 | remove_msix_isr(sp); | ||
| 3985 | } | ||
| 3986 | if (ret) { | ||
| 3987 | |||
| 3988 | DBG_PRINT(ERR_DBG, | ||
| 3989 | "%s: MSI-X requested but failed to enable\n", | ||
| 3990 | dev->name); | ||
| 3991 | sp->config.intr_type = INTA; | ||
| 3992 | } | ||
| 3993 | } | ||
| 3994 | |||
| 3995 | /* NAPI doesn't work well with MSI(X) */ | ||
| 3996 | if (sp->config.intr_type != INTA) { | ||
| 3997 | if(sp->config.napi) | ||
| 3998 | sp->config.napi = 0; | ||
| 3999 | } | ||
| 4000 | |||
| 4001 | /* Initialize H/W and enable interrupts */ | 4028 | /* Initialize H/W and enable interrupts */ |
| 4002 | err = s2io_card_up(sp); | 4029 | err = s2io_card_up(sp); |
| 4003 | if (err) { | 4030 | if (err) { |
| @@ -4020,12 +4047,12 @@ hw_init_failed: | |||
| 4020 | if (sp->entries) { | 4047 | if (sp->entries) { |
| 4021 | kfree(sp->entries); | 4048 | kfree(sp->entries); |
| 4022 | sp->mac_control.stats_info->sw_stat.mem_freed | 4049 | sp->mac_control.stats_info->sw_stat.mem_freed |
| 4023 | += (MAX_REQUESTED_MSI_X * sizeof(struct msix_entry)); | 4050 | += (sp->num_entries * sizeof(struct msix_entry)); |
| 4024 | } | 4051 | } |
| 4025 | if (sp->s2io_entries) { | 4052 | if (sp->s2io_entries) { |
| 4026 | kfree(sp->s2io_entries); | 4053 | kfree(sp->s2io_entries); |
| 4027 | sp->mac_control.stats_info->sw_stat.mem_freed | 4054 | sp->mac_control.stats_info->sw_stat.mem_freed |
| 4028 | += (MAX_REQUESTED_MSI_X * sizeof(struct s2io_msix_entry)); | 4055 | += (sp->num_entries * sizeof(struct s2io_msix_entry)); |
| 4029 | } | 4056 | } |
| 4030 | } | 4057 | } |
| 4031 | return err; | 4058 | return err; |
| @@ -4327,40 +4354,65 @@ s2io_alarm_handle(unsigned long data) | |||
| 4327 | mod_timer(&sp->alarm_timer, jiffies + HZ / 2); | 4354 | mod_timer(&sp->alarm_timer, jiffies + HZ / 2); |
| 4328 | } | 4355 | } |
| 4329 | 4356 | ||
| 4330 | static int s2io_chk_rx_buffers(struct ring_info *ring) | ||
| 4331 | { | ||
| 4332 | if (fill_rx_buffers(ring) == -ENOMEM) { | ||
| 4333 | DBG_PRINT(INFO_DBG, "%s:Out of memory", ring->dev->name); | ||
| 4334 | DBG_PRINT(INFO_DBG, " in Rx Intr!!\n"); | ||
| 4335 | } | ||
| 4336 | return 0; | ||
| 4337 | } | ||
| 4338 | |||
| 4339 | static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id) | 4357 | static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id) |
| 4340 | { | 4358 | { |
| 4341 | struct ring_info *ring = (struct ring_info *)dev_id; | 4359 | struct ring_info *ring = (struct ring_info *)dev_id; |
| 4342 | struct s2io_nic *sp = ring->nic; | 4360 | struct s2io_nic *sp = ring->nic; |
| 4361 | struct XENA_dev_config __iomem *bar0 = sp->bar0; | ||
| 4362 | struct net_device *dev = sp->dev; | ||
| 4343 | 4363 | ||
| 4344 | if (!is_s2io_card_up(sp)) | 4364 | if (unlikely(!is_s2io_card_up(sp))) |
| 4345 | return IRQ_HANDLED; | 4365 | return IRQ_HANDLED; |
| 4346 | 4366 | ||
| 4347 | rx_intr_handler(ring); | 4367 | if (sp->config.napi) { |
| 4348 | s2io_chk_rx_buffers(ring); | 4368 | u8 __iomem *addr = NULL; |
| 4369 | u8 val8 = 0; | ||
| 4370 | |||
| 4371 | addr = (u8 __iomem *)&bar0->xmsi_mask_reg; | ||
| 4372 | addr += (7 - ring->ring_no); | ||
| 4373 | val8 = (ring->ring_no == 0) ? 0x7f : 0xff; | ||
| 4374 | writeb(val8, addr); | ||
| 4375 | val8 = readb(addr); | ||
| 4376 | netif_rx_schedule(dev, &ring->napi); | ||
| 4377 | } else { | ||
| 4378 | rx_intr_handler(ring, 0); | ||
| 4379 | s2io_chk_rx_buffers(ring); | ||
| 4380 | } | ||
| 4349 | 4381 | ||
| 4350 | return IRQ_HANDLED; | 4382 | return IRQ_HANDLED; |
| 4351 | } | 4383 | } |
| 4352 | 4384 | ||
| 4353 | static irqreturn_t s2io_msix_fifo_handle(int irq, void *dev_id) | 4385 | static irqreturn_t s2io_msix_fifo_handle(int irq, void *dev_id) |
| 4354 | { | 4386 | { |
| 4355 | struct fifo_info *fifo = (struct fifo_info *)dev_id; | 4387 | int i; |
| 4356 | struct s2io_nic *sp = fifo->nic; | 4388 | struct fifo_info *fifos = (struct fifo_info *)dev_id; |
| 4389 | struct s2io_nic *sp = fifos->nic; | ||
| 4390 | struct XENA_dev_config __iomem *bar0 = sp->bar0; | ||
| 4391 | struct config_param *config = &sp->config; | ||
| 4392 | u64 reason; | ||
| 4357 | 4393 | ||
| 4358 | if (!is_s2io_card_up(sp)) | 4394 | if (unlikely(!is_s2io_card_up(sp))) |
| 4395 | return IRQ_NONE; | ||
| 4396 | |||
| 4397 | reason = readq(&bar0->general_int_status); | ||
| 4398 | if (unlikely(reason == S2IO_MINUS_ONE)) | ||
| 4399 | /* Nothing much can be done. Get out */ | ||
| 4359 | return IRQ_HANDLED; | 4400 | return IRQ_HANDLED; |
| 4360 | 4401 | ||
| 4361 | tx_intr_handler(fifo); | 4402 | writeq(S2IO_MINUS_ONE, &bar0->general_int_mask); |
| 4403 | |||
| 4404 | if (reason & GEN_INTR_TXTRAFFIC) | ||
| 4405 | writeq(S2IO_MINUS_ONE, &bar0->tx_traffic_int); | ||
| 4406 | |||
| 4407 | for (i = 0; i < config->tx_fifo_num; i++) | ||
| 4408 | tx_intr_handler(&fifos[i]); | ||
| 4409 | |||
| 4410 | writeq(sp->general_int_mask, &bar0->general_int_mask); | ||
| 4411 | readl(&bar0->general_int_status); | ||
| 4412 | |||
| 4362 | return IRQ_HANDLED; | 4413 | return IRQ_HANDLED; |
| 4363 | } | 4414 | } |
| 4415 | |||
| 4364 | static void s2io_txpic_intr_handle(struct s2io_nic *sp) | 4416 | static void s2io_txpic_intr_handle(struct s2io_nic *sp) |
| 4365 | { | 4417 | { |
| 4366 | struct XENA_dev_config __iomem *bar0 = sp->bar0; | 4418 | struct XENA_dev_config __iomem *bar0 = sp->bar0; |
| @@ -4762,14 +4814,10 @@ static irqreturn_t s2io_isr(int irq, void *dev_id) | |||
| 4762 | 4814 | ||
| 4763 | if (config->napi) { | 4815 | if (config->napi) { |
| 4764 | if (reason & GEN_INTR_RXTRAFFIC) { | 4816 | if (reason & GEN_INTR_RXTRAFFIC) { |
| 4765 | if (likely(netif_rx_schedule_prep(dev, | 4817 | netif_rx_schedule(dev, &sp->napi); |
| 4766 | &sp->napi))) { | 4818 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_mask); |
| 4767 | __netif_rx_schedule(dev, &sp->napi); | 4819 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); |
| 4768 | writeq(S2IO_MINUS_ONE, | 4820 | readl(&bar0->rx_traffic_int); |
| 4769 | &bar0->rx_traffic_mask); | ||
| 4770 | } else | ||
| 4771 | writeq(S2IO_MINUS_ONE, | ||
| 4772 | &bar0->rx_traffic_int); | ||
| 4773 | } | 4821 | } |
| 4774 | } else { | 4822 | } else { |
| 4775 | /* | 4823 | /* |
| @@ -4781,7 +4829,7 @@ static irqreturn_t s2io_isr(int irq, void *dev_id) | |||
| 4781 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); | 4829 | writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int); |
| 4782 | 4830 | ||
| 4783 | for (i = 0; i < config->rx_ring_num; i++) | 4831 | for (i = 0; i < config->rx_ring_num; i++) |
| 4784 | rx_intr_handler(&mac_control->rings[i]); | 4832 | rx_intr_handler(&mac_control->rings[i], 0); |
| 4785 | } | 4833 | } |
| 4786 | 4834 | ||
| 4787 | /* | 4835 | /* |
| @@ -6984,62 +7032,62 @@ static int s2io_add_isr(struct s2io_nic * sp) | |||
| 6984 | 7032 | ||
| 6985 | /* After proper initialization of H/W, register ISR */ | 7033 | /* After proper initialization of H/W, register ISR */ |
| 6986 | if (sp->config.intr_type == MSI_X) { | 7034 | if (sp->config.intr_type == MSI_X) { |
| 6987 | int i, msix_tx_cnt=0,msix_rx_cnt=0; | 7035 | int i, msix_rx_cnt = 0; |
| 6988 | 7036 | ||
| 6989 | for (i=1; (sp->s2io_entries[i].in_use == MSIX_FLG); i++) { | 7037 | for (i = 0; i < sp->num_entries; i++) { |
| 6990 | if (sp->s2io_entries[i].type == MSIX_FIFO_TYPE) { | 7038 | if (sp->s2io_entries[i].in_use == MSIX_FLG) { |
| 6991 | sprintf(sp->desc[i], "%s:MSI-X-%d-TX", | 7039 | if (sp->s2io_entries[i].type == |
| 7040 | MSIX_RING_TYPE) { | ||
| 7041 | sprintf(sp->desc[i], "%s:MSI-X-%d-RX", | ||
| 7042 | dev->name, i); | ||
| 7043 | err = request_irq(sp->entries[i].vector, | ||
| 7044 | s2io_msix_ring_handle, 0, | ||
| 7045 | sp->desc[i], | ||
| 7046 | sp->s2io_entries[i].arg); | ||
| 7047 | } else if (sp->s2io_entries[i].type == | ||
| 7048 | MSIX_ALARM_TYPE) { | ||
| 7049 | sprintf(sp->desc[i], "%s:MSI-X-%d-TX", | ||
| 6992 | dev->name, i); | 7050 | dev->name, i); |
| 6993 | err = request_irq(sp->entries[i].vector, | 7051 | err = request_irq(sp->entries[i].vector, |
| 6994 | s2io_msix_fifo_handle, 0, sp->desc[i], | 7052 | s2io_msix_fifo_handle, 0, |
| 6995 | sp->s2io_entries[i].arg); | 7053 | sp->desc[i], |
| 6996 | /* If either data or addr is zero print it */ | 7054 | sp->s2io_entries[i].arg); |
| 6997 | if(!(sp->msix_info[i].addr && | 7055 | |
| 6998 | sp->msix_info[i].data)) { | ||
| 6999 | DBG_PRINT(ERR_DBG, "%s @ Addr:0x%llx " | ||
| 7000 | "Data:0x%llx\n",sp->desc[i], | ||
| 7001 | (unsigned long long) | ||
| 7002 | sp->msix_info[i].addr, | ||
| 7003 | (unsigned long long) | ||
| 7004 | sp->msix_info[i].data); | ||
| 7005 | } else { | ||
| 7006 | msix_tx_cnt++; | ||
| 7007 | } | 7056 | } |
| 7008 | } else { | 7057 | /* if either data or addr is zero print it. */ |
| 7009 | sprintf(sp->desc[i], "%s:MSI-X-%d-RX", | 7058 | if (!(sp->msix_info[i].addr && |
| 7010 | dev->name, i); | ||
| 7011 | err = request_irq(sp->entries[i].vector, | ||
| 7012 | s2io_msix_ring_handle, 0, sp->desc[i], | ||
| 7013 | sp->s2io_entries[i].arg); | ||
| 7014 | /* If either data or addr is zero print it */ | ||
| 7015 | if(!(sp->msix_info[i].addr && | ||
| 7016 | sp->msix_info[i].data)) { | 7059 | sp->msix_info[i].data)) { |
| 7017 | DBG_PRINT(ERR_DBG, "%s @ Addr:0x%llx " | 7060 | DBG_PRINT(ERR_DBG, |
| 7018 | "Data:0x%llx\n",sp->desc[i], | 7061 | "%s @Addr:0x%llx Data:0x%llx\n", |
| 7062 | sp->desc[i], | ||
| 7019 | (unsigned long long) | 7063 | (unsigned long long) |
| 7020 | sp->msix_info[i].addr, | 7064 | sp->msix_info[i].addr, |
| 7021 | (unsigned long long) | 7065 | (unsigned long long) |
| 7022 | sp->msix_info[i].data); | 7066 | ntohl(sp->msix_info[i].data)); |
| 7023 | } else { | 7067 | } else |
| 7024 | msix_rx_cnt++; | 7068 | msix_rx_cnt++; |
| 7069 | if (err) { | ||
| 7070 | remove_msix_isr(sp); | ||
| 7071 | |||
| 7072 | DBG_PRINT(ERR_DBG, | ||
| 7073 | "%s:MSI-X-%d registration " | ||
| 7074 | "failed\n", dev->name, i); | ||
| 7075 | |||
| 7076 | DBG_PRINT(ERR_DBG, | ||
| 7077 | "%s: Defaulting to INTA\n", | ||
| 7078 | dev->name); | ||
| 7079 | sp->config.intr_type = INTA; | ||
| 7080 | break; | ||
| 7025 | } | 7081 | } |
| 7082 | sp->s2io_entries[i].in_use = | ||
| 7083 | MSIX_REGISTERED_SUCCESS; | ||
| 7026 | } | 7084 | } |
| 7027 | if (err) { | ||
| 7028 | remove_msix_isr(sp); | ||
| 7029 | DBG_PRINT(ERR_DBG,"%s:MSI-X-%d registration " | ||
| 7030 | "failed\n", dev->name, i); | ||
| 7031 | DBG_PRINT(ERR_DBG, "%s: defaulting to INTA\n", | ||
| 7032 | dev->name); | ||
| 7033 | sp->config.intr_type = INTA; | ||
| 7034 | break; | ||
| 7035 | } | ||
| 7036 | sp->s2io_entries[i].in_use = MSIX_REGISTERED_SUCCESS; | ||
| 7037 | } | 7085 | } |
| 7038 | if (!err) { | 7086 | if (!err) { |
| 7039 | printk(KERN_INFO "MSI-X-TX %d entries enabled\n", | ||
| 7040 | msix_tx_cnt); | ||
| 7041 | printk(KERN_INFO "MSI-X-RX %d entries enabled\n", | 7087 | printk(KERN_INFO "MSI-X-RX %d entries enabled\n", |
| 7042 | msix_rx_cnt); | 7088 | --msix_rx_cnt); |
| 7089 | DBG_PRINT(INFO_DBG, "MSI-X-TX entries enabled" | ||
| 7090 | " through alarm vector\n"); | ||
| 7043 | } | 7091 | } |
| 7044 | } | 7092 | } |
| 7045 | if (sp->config.intr_type == INTA) { | 7093 | if (sp->config.intr_type == INTA) { |
| @@ -7080,8 +7128,15 @@ static void do_s2io_card_down(struct s2io_nic * sp, int do_io) | |||
| 7080 | clear_bit(__S2IO_STATE_CARD_UP, &sp->state); | 7128 | clear_bit(__S2IO_STATE_CARD_UP, &sp->state); |
| 7081 | 7129 | ||
| 7082 | /* Disable napi */ | 7130 | /* Disable napi */ |
| 7083 | if (config->napi) | 7131 | if (sp->config.napi) { |
| 7084 | napi_disable(&sp->napi); | 7132 | int off = 0; |
| 7133 | if (config->intr_type == MSI_X) { | ||
| 7134 | for (; off < sp->config.rx_ring_num; off++) | ||
| 7135 | napi_disable(&sp->mac_control.rings[off].napi); | ||
| 7136 | } | ||
| 7137 | else | ||
| 7138 | napi_disable(&sp->napi); | ||
| 7139 | } | ||
| 7085 | 7140 | ||
| 7086 | /* disable Tx and Rx traffic on the NIC */ | 7141 | /* disable Tx and Rx traffic on the NIC */ |
| 7087 | if (do_io) | 7142 | if (do_io) |
| @@ -7173,8 +7228,15 @@ static int s2io_card_up(struct s2io_nic * sp) | |||
| 7173 | } | 7228 | } |
| 7174 | 7229 | ||
| 7175 | /* Initialise napi */ | 7230 | /* Initialise napi */ |
| 7176 | if (config->napi) | 7231 | if (config->napi) { |
| 7177 | napi_enable(&sp->napi); | 7232 | int i; |
| 7233 | if (config->intr_type == MSI_X) { | ||
| 7234 | for (i = 0; i < sp->config.rx_ring_num; i++) | ||
| 7235 | napi_enable(&sp->mac_control.rings[i].napi); | ||
| 7236 | } else { | ||
| 7237 | napi_enable(&sp->napi); | ||
| 7238 | } | ||
| 7239 | } | ||
| 7178 | 7240 | ||
| 7179 | /* Maintain the state prior to the open */ | 7241 | /* Maintain the state prior to the open */ |
| 7180 | if (sp->promisc_flg) | 7242 | if (sp->promisc_flg) |
| @@ -7217,7 +7279,7 @@ static int s2io_card_up(struct s2io_nic * sp) | |||
| 7217 | /* Enable select interrupts */ | 7279 | /* Enable select interrupts */ |
| 7218 | en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS); | 7280 | en_dis_err_alarms(sp, ENA_ALL_INTRS, ENABLE_INTRS); |
| 7219 | if (sp->config.intr_type != INTA) | 7281 | if (sp->config.intr_type != INTA) |
| 7220 | en_dis_able_nic_intrs(sp, ENA_ALL_INTRS, DISABLE_INTRS); | 7282 | en_dis_able_nic_intrs(sp, TX_TRAFFIC_INTR, ENABLE_INTRS); |
| 7221 | else { | 7283 | else { |
| 7222 | interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR; | 7284 | interruptible = TX_TRAFFIC_INTR | RX_TRAFFIC_INTR; |
| 7223 | interruptible |= TX_PIC_INTR; | 7285 | interruptible |= TX_PIC_INTR; |
| @@ -7615,9 +7677,6 @@ static int s2io_verify_parm(struct pci_dev *pdev, u8 *dev_intr_type, | |||
| 7615 | rx_ring_num = MAX_RX_RINGS; | 7677 | rx_ring_num = MAX_RX_RINGS; |
| 7616 | } | 7678 | } |
| 7617 | 7679 | ||
| 7618 | if (*dev_intr_type != INTA) | ||
| 7619 | napi = 0; | ||
| 7620 | |||
| 7621 | if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) { | 7680 | if ((*dev_intr_type != INTA) && (*dev_intr_type != MSI_X)) { |
| 7622 | DBG_PRINT(ERR_DBG, "s2io: Wrong intr_type requested. " | 7681 | DBG_PRINT(ERR_DBG, "s2io: Wrong intr_type requested. " |
| 7623 | "Defaulting to INTA\n"); | 7682 | "Defaulting to INTA\n"); |
| @@ -7918,8 +7977,6 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 7918 | * will use eth_mac_addr() for dev->set_mac_address | 7977 | * will use eth_mac_addr() for dev->set_mac_address |
| 7919 | * mac address will be set every time dev->open() is called | 7978 | * mac address will be set every time dev->open() is called |
| 7920 | */ | 7979 | */ |
| 7921 | netif_napi_add(dev, &sp->napi, s2io_poll, 32); | ||
| 7922 | |||
| 7923 | #ifdef CONFIG_NET_POLL_CONTROLLER | 7980 | #ifdef CONFIG_NET_POLL_CONTROLLER |
| 7924 | dev->poll_controller = s2io_netpoll; | 7981 | dev->poll_controller = s2io_netpoll; |
| 7925 | #endif | 7982 | #endif |
| @@ -7963,6 +8020,32 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 7963 | } | 8020 | } |
| 7964 | } | 8021 | } |
| 7965 | 8022 | ||
| 8023 | if (sp->config.intr_type == MSI_X) { | ||
| 8024 | sp->num_entries = config->rx_ring_num + 1; | ||
| 8025 | ret = s2io_enable_msi_x(sp); | ||
| 8026 | |||
| 8027 | if (!ret) { | ||
| 8028 | ret = s2io_test_msi(sp); | ||
| 8029 | /* rollback MSI-X, will re-enable during add_isr() */ | ||
| 8030 | remove_msix_isr(sp); | ||
| 8031 | } | ||
| 8032 | if (ret) { | ||
| 8033 | |||
| 8034 | DBG_PRINT(ERR_DBG, | ||
| 8035 | "%s: MSI-X requested but failed to enable\n", | ||
| 8036 | dev->name); | ||
| 8037 | sp->config.intr_type = INTA; | ||
| 8038 | } | ||
| 8039 | } | ||
| 8040 | |||
| 8041 | if (config->intr_type == MSI_X) { | ||
| 8042 | for (i = 0; i < config->rx_ring_num ; i++) | ||
| 8043 | netif_napi_add(dev, &mac_control->rings[i].napi, | ||
| 8044 | s2io_poll_msix, 64); | ||
| 8045 | } else { | ||
| 8046 | netif_napi_add(dev, &sp->napi, s2io_poll_inta, 64); | ||
| 8047 | } | ||
| 8048 | |||
| 7966 | /* Not needed for Herc */ | 8049 | /* Not needed for Herc */ |
| 7967 | if (sp->device_type & XFRAME_I_DEVICE) { | 8050 | if (sp->device_type & XFRAME_I_DEVICE) { |
| 7968 | /* | 8051 | /* |
| @@ -8013,6 +8096,11 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 8013 | /* store mac addresses from CAM to s2io_nic structure */ | 8096 | /* store mac addresses from CAM to s2io_nic structure */ |
| 8014 | do_s2io_store_unicast_mc(sp); | 8097 | do_s2io_store_unicast_mc(sp); |
| 8015 | 8098 | ||
| 8099 | /* Configure MSIX vector for number of rings configured plus one */ | ||
| 8100 | if ((sp->device_type == XFRAME_II_DEVICE) && | ||
| 8101 | (config->intr_type == MSI_X)) | ||
| 8102 | sp->num_entries = config->rx_ring_num + 1; | ||
| 8103 | |||
| 8016 | /* Store the values of the MSIX table in the s2io_nic structure */ | 8104 | /* Store the values of the MSIX table in the s2io_nic structure */ |
| 8017 | store_xmsi_data(sp); | 8105 | store_xmsi_data(sp); |
| 8018 | /* reset Nic and bring it to known state */ | 8106 | /* reset Nic and bring it to known state */ |
| @@ -8078,8 +8166,14 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre) | |||
| 8078 | break; | 8166 | break; |
| 8079 | } | 8167 | } |
| 8080 | 8168 | ||
| 8081 | if (napi) | 8169 | switch (sp->config.napi) { |
| 8170 | case 0: | ||
| 8171 | DBG_PRINT(ERR_DBG, "%s: NAPI disabled\n", dev->name); | ||
| 8172 | break; | ||
| 8173 | case 1: | ||
| 8082 | DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name); | 8174 | DBG_PRINT(ERR_DBG, "%s: NAPI enabled\n", dev->name); |
| 8175 | break; | ||
| 8176 | } | ||
| 8083 | 8177 | ||
| 8084 | DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name, | 8178 | DBG_PRINT(ERR_DBG, "%s: Using %d Tx fifo(s)\n", dev->name, |
| 8085 | sp->config.tx_fifo_num); | 8179 | sp->config.tx_fifo_num); |
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h index 0709ebae9139..4706f7f9acb6 100644 --- a/drivers/net/s2io.h +++ b/drivers/net/s2io.h | |||
| @@ -706,7 +706,7 @@ struct ring_info { | |||
| 706 | /* per-ring buffer counter */ | 706 | /* per-ring buffer counter */ |
| 707 | u32 rx_bufs_left; | 707 | u32 rx_bufs_left; |
| 708 | 708 | ||
| 709 | #define MAX_LRO_SESSIONS 32 | 709 | #define MAX_LRO_SESSIONS 32 |
| 710 | struct lro lro0_n[MAX_LRO_SESSIONS]; | 710 | struct lro lro0_n[MAX_LRO_SESSIONS]; |
| 711 | u8 lro; | 711 | u8 lro; |
| 712 | 712 | ||
| @@ -725,6 +725,11 @@ struct ring_info { | |||
| 725 | /* copy of sp->pdev pointer */ | 725 | /* copy of sp->pdev pointer */ |
| 726 | struct pci_dev *pdev; | 726 | struct pci_dev *pdev; |
| 727 | 727 | ||
| 728 | /* Per ring napi struct */ | ||
| 729 | struct napi_struct napi; | ||
| 730 | |||
| 731 | unsigned long interrupt_count; | ||
| 732 | |||
| 728 | /* | 733 | /* |
| 729 | * Place holders for the virtual and physical addresses of | 734 | * Place holders for the virtual and physical addresses of |
| 730 | * all the Rx Blocks | 735 | * all the Rx Blocks |
| @@ -841,7 +846,7 @@ struct usr_addr { | |||
| 841 | * Structure to keep track of the MSI-X vectors and the corresponding | 846 | * Structure to keep track of the MSI-X vectors and the corresponding |
| 842 | * argument registered against each vector | 847 | * argument registered against each vector |
| 843 | */ | 848 | */ |
| 844 | #define MAX_REQUESTED_MSI_X 17 | 849 | #define MAX_REQUESTED_MSI_X 9 |
| 845 | struct s2io_msix_entry | 850 | struct s2io_msix_entry |
| 846 | { | 851 | { |
| 847 | u16 vector; | 852 | u16 vector; |
| @@ -849,8 +854,8 @@ struct s2io_msix_entry | |||
| 849 | void *arg; | 854 | void *arg; |
| 850 | 855 | ||
| 851 | u8 type; | 856 | u8 type; |
| 852 | #define MSIX_FIFO_TYPE 1 | 857 | #define MSIX_ALARM_TYPE 1 |
| 853 | #define MSIX_RING_TYPE 2 | 858 | #define MSIX_RING_TYPE 2 |
| 854 | 859 | ||
| 855 | u8 in_use; | 860 | u8 in_use; |
| 856 | #define MSIX_REGISTERED_SUCCESS 0xAA | 861 | #define MSIX_REGISTERED_SUCCESS 0xAA |
| @@ -877,7 +882,6 @@ struct s2io_nic { | |||
| 877 | */ | 882 | */ |
| 878 | int pkts_to_process; | 883 | int pkts_to_process; |
| 879 | struct net_device *dev; | 884 | struct net_device *dev; |
| 880 | struct napi_struct napi; | ||
| 881 | struct mac_info mac_control; | 885 | struct mac_info mac_control; |
| 882 | struct config_param config; | 886 | struct config_param config; |
| 883 | struct pci_dev *pdev; | 887 | struct pci_dev *pdev; |
| @@ -948,6 +952,7 @@ struct s2io_nic { | |||
| 948 | */ | 952 | */ |
| 949 | u8 other_fifo_idx; | 953 | u8 other_fifo_idx; |
| 950 | 954 | ||
| 955 | struct napi_struct napi; | ||
| 951 | /* after blink, the adapter must be restored with original | 956 | /* after blink, the adapter must be restored with original |
| 952 | * values. | 957 | * values. |
| 953 | */ | 958 | */ |
| @@ -962,6 +967,7 @@ struct s2io_nic { | |||
| 962 | unsigned long long start_time; | 967 | unsigned long long start_time; |
| 963 | struct vlan_group *vlgrp; | 968 | struct vlan_group *vlgrp; |
| 964 | #define MSIX_FLG 0xA5 | 969 | #define MSIX_FLG 0xA5 |
| 970 | int num_entries; | ||
| 965 | struct msix_entry *entries; | 971 | struct msix_entry *entries; |
| 966 | int msi_detected; | 972 | int msi_detected; |
| 967 | wait_queue_head_t msi_wait; | 973 | wait_queue_head_t msi_wait; |
| @@ -982,6 +988,7 @@ struct s2io_nic { | |||
| 982 | u16 lro_max_aggr_per_sess; | 988 | u16 lro_max_aggr_per_sess; |
| 983 | volatile unsigned long state; | 989 | volatile unsigned long state; |
| 984 | u64 general_int_mask; | 990 | u64 general_int_mask; |
| 991 | |||
| 985 | #define VPD_STRING_LEN 80 | 992 | #define VPD_STRING_LEN 80 |
| 986 | u8 product_name[VPD_STRING_LEN]; | 993 | u8 product_name[VPD_STRING_LEN]; |
| 987 | u8 serial_num[VPD_STRING_LEN]; | 994 | u8 serial_num[VPD_STRING_LEN]; |
| @@ -1103,7 +1110,7 @@ static void __devexit s2io_rem_nic(struct pci_dev *pdev); | |||
| 1103 | static int init_shared_mem(struct s2io_nic *sp); | 1110 | static int init_shared_mem(struct s2io_nic *sp); |
| 1104 | static void free_shared_mem(struct s2io_nic *sp); | 1111 | static void free_shared_mem(struct s2io_nic *sp); |
| 1105 | static int init_nic(struct s2io_nic *nic); | 1112 | static int init_nic(struct s2io_nic *nic); |
| 1106 | static void rx_intr_handler(struct ring_info *ring_data); | 1113 | static int rx_intr_handler(struct ring_info *ring_data, int budget); |
| 1107 | static void tx_intr_handler(struct fifo_info *fifo_data); | 1114 | static void tx_intr_handler(struct fifo_info *fifo_data); |
| 1108 | static void s2io_handle_errors(void * dev_id); | 1115 | static void s2io_handle_errors(void * dev_id); |
| 1109 | 1116 | ||
| @@ -1114,7 +1121,8 @@ static void s2io_set_multicast(struct net_device *dev); | |||
| 1114 | static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp); | 1121 | static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp); |
| 1115 | static void s2io_link(struct s2io_nic * sp, int link); | 1122 | static void s2io_link(struct s2io_nic * sp, int link); |
| 1116 | static void s2io_reset(struct s2io_nic * sp); | 1123 | static void s2io_reset(struct s2io_nic * sp); |
| 1117 | static int s2io_poll(struct napi_struct *napi, int budget); | 1124 | static int s2io_poll_msix(struct napi_struct *napi, int budget); |
| 1125 | static int s2io_poll_inta(struct napi_struct *napi, int budget); | ||
| 1118 | static void s2io_init_pci(struct s2io_nic * sp); | 1126 | static void s2io_init_pci(struct s2io_nic * sp); |
| 1119 | static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr); | 1127 | static int do_s2io_prog_unicast(struct net_device *dev, u8 *addr); |
| 1120 | static void s2io_alarm_handle(unsigned long data); | 1128 | static void s2io_alarm_handle(unsigned long data); |
diff --git a/drivers/net/sb1250-mac.c b/drivers/net/sb1250-mac.c index 888b7dec9866..33bb18f810fb 100644 --- a/drivers/net/sb1250-mac.c +++ b/drivers/net/sb1250-mac.c | |||
| @@ -179,8 +179,7 @@ enum sbmac_state { | |||
| 179 | #define SBMAC_MAX_TXDESCR 256 | 179 | #define SBMAC_MAX_TXDESCR 256 |
| 180 | #define SBMAC_MAX_RXDESCR 256 | 180 | #define SBMAC_MAX_RXDESCR 256 |
| 181 | 181 | ||
| 182 | #define ETHER_ALIGN 2 | 182 | #define ETHER_ADDR_LEN 6 |
| 183 | #define ETHER_ADDR_LEN 6 | ||
| 184 | #define ENET_PACKET_SIZE 1518 | 183 | #define ENET_PACKET_SIZE 1518 |
| 185 | /*#define ENET_PACKET_SIZE 9216 */ | 184 | /*#define ENET_PACKET_SIZE 9216 */ |
| 186 | 185 | ||
| @@ -262,8 +261,6 @@ struct sbmac_softc { | |||
| 262 | spinlock_t sbm_lock; /* spin lock */ | 261 | spinlock_t sbm_lock; /* spin lock */ |
| 263 | int sbm_devflags; /* current device flags */ | 262 | int sbm_devflags; /* current device flags */ |
| 264 | 263 | ||
| 265 | int sbm_buffersize; | ||
| 266 | |||
| 267 | /* | 264 | /* |
| 268 | * Controller-specific things | 265 | * Controller-specific things |
| 269 | */ | 266 | */ |
| @@ -305,10 +302,11 @@ struct sbmac_softc { | |||
| 305 | static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan, | 302 | static void sbdma_initctx(struct sbmacdma *d, struct sbmac_softc *s, int chan, |
| 306 | int txrx, int maxdescr); | 303 | int txrx, int maxdescr); |
| 307 | static void sbdma_channel_start(struct sbmacdma *d, int rxtx); | 304 | static void sbdma_channel_start(struct sbmacdma *d, int rxtx); |
| 308 | static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *m); | 305 | static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, |
| 306 | struct sk_buff *m); | ||
| 309 | static int sbdma_add_txbuffer(struct sbmacdma *d, struct sk_buff *m); | 307 | static int sbdma_add_txbuffer(struct sbmacdma *d, struct sk_buff *m); |
| 310 | static void sbdma_emptyring(struct sbmacdma *d); | 308 | static void sbdma_emptyring(struct sbmacdma *d); |
| 311 | static void sbdma_fillring(struct sbmacdma *d); | 309 | static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d); |
| 312 | static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, | 310 | static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
| 313 | int work_to_do, int poll); | 311 | int work_to_do, int poll); |
| 314 | static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, | 312 | static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, |
| @@ -777,16 +775,13 @@ static void sbdma_channel_stop(struct sbmacdma *d) | |||
| 777 | d->sbdma_remptr = NULL; | 775 | d->sbdma_remptr = NULL; |
| 778 | } | 776 | } |
| 779 | 777 | ||
| 780 | static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | 778 | static inline void sbdma_align_skb(struct sk_buff *skb, |
| 779 | unsigned int power2, unsigned int offset) | ||
| 781 | { | 780 | { |
| 782 | unsigned long addr; | 781 | unsigned char *addr = skb->data; |
| 783 | unsigned long newaddr; | 782 | unsigned char *newaddr = PTR_ALIGN(addr, power2); |
| 784 | |||
| 785 | addr = (unsigned long) skb->data; | ||
| 786 | |||
| 787 | newaddr = (addr + power2 - 1) & ~(power2 - 1); | ||
| 788 | 783 | ||
| 789 | skb_reserve(skb,newaddr-addr+offset); | 784 | skb_reserve(skb, newaddr - addr + offset); |
| 790 | } | 785 | } |
| 791 | 786 | ||
| 792 | 787 | ||
| @@ -797,7 +792,8 @@ static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | |||
| 797 | * this queues a buffer for inbound packets. | 792 | * this queues a buffer for inbound packets. |
| 798 | * | 793 | * |
| 799 | * Input parameters: | 794 | * Input parameters: |
| 800 | * d - DMA channel descriptor | 795 | * sc - softc structure |
| 796 | * d - DMA channel descriptor | ||
| 801 | * sb - sk_buff to add, or NULL if we should allocate one | 797 | * sb - sk_buff to add, or NULL if we should allocate one |
| 802 | * | 798 | * |
| 803 | * Return value: | 799 | * Return value: |
| @@ -806,8 +802,10 @@ static void sbdma_align_skb(struct sk_buff *skb,int power2,int offset) | |||
| 806 | ********************************************************************* */ | 802 | ********************************************************************* */ |
| 807 | 803 | ||
| 808 | 804 | ||
| 809 | static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) | 805 | static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, |
| 806 | struct sk_buff *sb) | ||
| 810 | { | 807 | { |
| 808 | struct net_device *dev = sc->sbm_dev; | ||
| 811 | struct sbdmadscr *dsc; | 809 | struct sbdmadscr *dsc; |
| 812 | struct sbdmadscr *nextdsc; | 810 | struct sbdmadscr *nextdsc; |
| 813 | struct sk_buff *sb_new = NULL; | 811 | struct sk_buff *sb_new = NULL; |
| @@ -848,14 +846,16 @@ static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) | |||
| 848 | */ | 846 | */ |
| 849 | 847 | ||
| 850 | if (sb == NULL) { | 848 | if (sb == NULL) { |
| 851 | sb_new = dev_alloc_skb(ENET_PACKET_SIZE + SMP_CACHE_BYTES * 2 + ETHER_ALIGN); | 849 | sb_new = netdev_alloc_skb(dev, ENET_PACKET_SIZE + |
| 850 | SMP_CACHE_BYTES * 2 + | ||
| 851 | NET_IP_ALIGN); | ||
| 852 | if (sb_new == NULL) { | 852 | if (sb_new == NULL) { |
| 853 | pr_info("%s: sk_buff allocation failed\n", | 853 | pr_info("%s: sk_buff allocation failed\n", |
| 854 | d->sbdma_eth->sbm_dev->name); | 854 | d->sbdma_eth->sbm_dev->name); |
| 855 | return -ENOBUFS; | 855 | return -ENOBUFS; |
| 856 | } | 856 | } |
| 857 | 857 | ||
| 858 | sbdma_align_skb(sb_new, SMP_CACHE_BYTES, ETHER_ALIGN); | 858 | sbdma_align_skb(sb_new, SMP_CACHE_BYTES, NET_IP_ALIGN); |
| 859 | } | 859 | } |
| 860 | else { | 860 | else { |
| 861 | sb_new = sb; | 861 | sb_new = sb; |
| @@ -874,10 +874,10 @@ static int sbdma_add_rcvbuffer(struct sbmacdma *d, struct sk_buff *sb) | |||
| 874 | * Do not interrupt per DMA transfer. | 874 | * Do not interrupt per DMA transfer. |
| 875 | */ | 875 | */ |
| 876 | dsc->dscr_a = virt_to_phys(sb_new->data) | | 876 | dsc->dscr_a = virt_to_phys(sb_new->data) | |
| 877 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize+ETHER_ALIGN)) | 0; | 877 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize + NET_IP_ALIGN)) | 0; |
| 878 | #else | 878 | #else |
| 879 | dsc->dscr_a = virt_to_phys(sb_new->data) | | 879 | dsc->dscr_a = virt_to_phys(sb_new->data) | |
| 880 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize+ETHER_ALIGN)) | | 880 | V_DMA_DSCRA_A_SIZE(NUMCACHEBLKS(pktsize + NET_IP_ALIGN)) | |
| 881 | M_DMA_DSCRA_INTERRUPT; | 881 | M_DMA_DSCRA_INTERRUPT; |
| 882 | #endif | 882 | #endif |
| 883 | 883 | ||
| @@ -1032,18 +1032,19 @@ static void sbdma_emptyring(struct sbmacdma *d) | |||
| 1032 | * with sk_buffs | 1032 | * with sk_buffs |
| 1033 | * | 1033 | * |
| 1034 | * Input parameters: | 1034 | * Input parameters: |
| 1035 | * d - DMA channel | 1035 | * sc - softc structure |
| 1036 | * d - DMA channel | ||
| 1036 | * | 1037 | * |
| 1037 | * Return value: | 1038 | * Return value: |
| 1038 | * nothing | 1039 | * nothing |
| 1039 | ********************************************************************* */ | 1040 | ********************************************************************* */ |
| 1040 | 1041 | ||
| 1041 | static void sbdma_fillring(struct sbmacdma *d) | 1042 | static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d) |
| 1042 | { | 1043 | { |
| 1043 | int idx; | 1044 | int idx; |
| 1044 | 1045 | ||
| 1045 | for (idx = 0; idx < SBMAC_MAX_RXDESCR-1; idx++) { | 1046 | for (idx = 0; idx < SBMAC_MAX_RXDESCR - 1; idx++) { |
| 1046 | if (sbdma_add_rcvbuffer(d,NULL) != 0) | 1047 | if (sbdma_add_rcvbuffer(sc, d, NULL) != 0) |
| 1047 | break; | 1048 | break; |
| 1048 | } | 1049 | } |
| 1049 | } | 1050 | } |
| @@ -1159,10 +1160,11 @@ again: | |||
| 1159 | * packet and put it right back on the receive ring. | 1160 | * packet and put it right back on the receive ring. |
| 1160 | */ | 1161 | */ |
| 1161 | 1162 | ||
| 1162 | if (unlikely (sbdma_add_rcvbuffer(d,NULL) == | 1163 | if (unlikely(sbdma_add_rcvbuffer(sc, d, NULL) == |
| 1163 | -ENOBUFS)) { | 1164 | -ENOBUFS)) { |
| 1164 | dev->stats.rx_dropped++; | 1165 | dev->stats.rx_dropped++; |
| 1165 | sbdma_add_rcvbuffer(d,sb); /* re-add old buffer */ | 1166 | /* Re-add old buffer */ |
| 1167 | sbdma_add_rcvbuffer(sc, d, sb); | ||
| 1166 | /* No point in continuing at the moment */ | 1168 | /* No point in continuing at the moment */ |
| 1167 | printk(KERN_ERR "dropped packet (1)\n"); | 1169 | printk(KERN_ERR "dropped packet (1)\n"); |
| 1168 | d->sbdma_remptr = SBDMA_NEXTBUF(d,sbdma_remptr); | 1170 | d->sbdma_remptr = SBDMA_NEXTBUF(d,sbdma_remptr); |
| @@ -1212,7 +1214,7 @@ again: | |||
| 1212 | * put it back on the receive ring. | 1214 | * put it back on the receive ring. |
| 1213 | */ | 1215 | */ |
| 1214 | dev->stats.rx_errors++; | 1216 | dev->stats.rx_errors++; |
| 1215 | sbdma_add_rcvbuffer(d,sb); | 1217 | sbdma_add_rcvbuffer(sc, d, sb); |
| 1216 | } | 1218 | } |
| 1217 | 1219 | ||
| 1218 | 1220 | ||
| @@ -1570,7 +1572,7 @@ static void sbmac_channel_start(struct sbmac_softc *s) | |||
| 1570 | * Fill the receive ring | 1572 | * Fill the receive ring |
| 1571 | */ | 1573 | */ |
| 1572 | 1574 | ||
| 1573 | sbdma_fillring(&(s->sbm_rxdma)); | 1575 | sbdma_fillring(s, &(s->sbm_rxdma)); |
| 1574 | 1576 | ||
| 1575 | /* | 1577 | /* |
| 1576 | * Turn on the rest of the bits in the enable register | 1578 | * Turn on the rest of the bits in the enable register |
| @@ -2312,13 +2314,6 @@ static int sbmac_init(struct platform_device *pldev, long long base) | |||
| 2312 | dev->dev_addr[i] = eaddr[i]; | 2314 | dev->dev_addr[i] = eaddr[i]; |
| 2313 | } | 2315 | } |
| 2314 | 2316 | ||
| 2315 | |||
| 2316 | /* | ||
| 2317 | * Init packet size | ||
| 2318 | */ | ||
| 2319 | |||
| 2320 | sc->sbm_buffersize = ENET_PACKET_SIZE + SMP_CACHE_BYTES * 2 + ETHER_ALIGN; | ||
| 2321 | |||
| 2322 | /* | 2317 | /* |
| 2323 | * Initialize context (get pointers to registers and stuff), then | 2318 | * Initialize context (get pointers to registers and stuff), then |
| 2324 | * allocate the memory for the descriptor tables. | 2319 | * allocate the memory for the descriptor tables. |
diff --git a/drivers/net/sc92031.c b/drivers/net/sc92031.c index f64a860029b7..61955f8d8011 100644 --- a/drivers/net/sc92031.c +++ b/drivers/net/sc92031.c | |||
| @@ -953,9 +953,6 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 953 | unsigned entry; | 953 | unsigned entry; |
| 954 | u32 tx_status; | 954 | u32 tx_status; |
| 955 | 955 | ||
| 956 | if (skb_padto(skb, ETH_ZLEN)) | ||
| 957 | return NETDEV_TX_OK; | ||
| 958 | |||
| 959 | if (unlikely(skb->len > TX_BUF_SIZE)) { | 956 | if (unlikely(skb->len > TX_BUF_SIZE)) { |
| 960 | dev->stats.tx_dropped++; | 957 | dev->stats.tx_dropped++; |
| 961 | goto out; | 958 | goto out; |
| @@ -975,6 +972,11 @@ static int sc92031_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 975 | skb_copy_and_csum_dev(skb, priv->tx_bufs + entry * TX_BUF_SIZE); | 972 | skb_copy_and_csum_dev(skb, priv->tx_bufs + entry * TX_BUF_SIZE); |
| 976 | 973 | ||
| 977 | len = skb->len; | 974 | len = skb->len; |
| 975 | if (len < ETH_ZLEN) { | ||
| 976 | memset(priv->tx_bufs + entry * TX_BUF_SIZE + len, | ||
| 977 | 0, ETH_ZLEN - len); | ||
| 978 | len = ETH_ZLEN; | ||
| 979 | } | ||
| 978 | 980 | ||
| 979 | wmb(); | 981 | wmb(); |
| 980 | 982 | ||
diff --git a/drivers/net/sfc/bitfield.h b/drivers/net/sfc/bitfield.h index 2806201644cc..2c79d27404e0 100644 --- a/drivers/net/sfc/bitfield.h +++ b/drivers/net/sfc/bitfield.h | |||
| @@ -483,7 +483,7 @@ typedef union efx_oword { | |||
| 483 | #endif | 483 | #endif |
| 484 | 484 | ||
| 485 | #define EFX_SET_OWORD_FIELD_VER(efx, oword, field, value) do { \ | 485 | #define EFX_SET_OWORD_FIELD_VER(efx, oword, field, value) do { \ |
| 486 | if (FALCON_REV(efx) >= FALCON_REV_B0) { \ | 486 | if (falcon_rev(efx) >= FALCON_REV_B0) { \ |
| 487 | EFX_SET_OWORD_FIELD((oword), field##_B0, (value)); \ | 487 | EFX_SET_OWORD_FIELD((oword), field##_B0, (value)); \ |
| 488 | } else { \ | 488 | } else { \ |
| 489 | EFX_SET_OWORD_FIELD((oword), field##_A1, (value)); \ | 489 | EFX_SET_OWORD_FIELD((oword), field##_A1, (value)); \ |
| @@ -491,7 +491,7 @@ typedef union efx_oword { | |||
| 491 | } while (0) | 491 | } while (0) |
| 492 | 492 | ||
| 493 | #define EFX_QWORD_FIELD_VER(efx, qword, field) \ | 493 | #define EFX_QWORD_FIELD_VER(efx, qword, field) \ |
| 494 | (FALCON_REV(efx) >= FALCON_REV_B0 ? \ | 494 | (falcon_rev(efx) >= FALCON_REV_B0 ? \ |
| 495 | EFX_QWORD_FIELD((qword), field##_B0) : \ | 495 | EFX_QWORD_FIELD((qword), field##_B0) : \ |
| 496 | EFX_QWORD_FIELD((qword), field##_A1)) | 496 | EFX_QWORD_FIELD((qword), field##_A1)) |
| 497 | 497 | ||
| @@ -501,8 +501,5 @@ typedef union efx_oword { | |||
| 501 | #define DMA_ADDR_T_WIDTH (8 * sizeof(dma_addr_t)) | 501 | #define DMA_ADDR_T_WIDTH (8 * sizeof(dma_addr_t)) |
| 502 | #define EFX_DMA_TYPE_WIDTH(width) \ | 502 | #define EFX_DMA_TYPE_WIDTH(width) \ |
| 503 | (((width) < DMA_ADDR_T_WIDTH) ? (width) : DMA_ADDR_T_WIDTH) | 503 | (((width) < DMA_ADDR_T_WIDTH) ? (width) : DMA_ADDR_T_WIDTH) |
| 504 | #define EFX_DMA_MAX_MASK ((DMA_ADDR_T_WIDTH == 64) ? \ | ||
| 505 | ~((u64) 0) : ~((u32) 0)) | ||
| 506 | #define EFX_DMA_MASK(mask) ((mask) & EFX_DMA_MAX_MASK) | ||
| 507 | 504 | ||
| 508 | #endif /* EFX_BITFIELD_H */ | 505 | #endif /* EFX_BITFIELD_H */ |
diff --git a/drivers/net/sfc/boards.c b/drivers/net/sfc/boards.c index eecaa6d58584..7fc0328dc055 100644 --- a/drivers/net/sfc/boards.c +++ b/drivers/net/sfc/boards.c | |||
| @@ -27,10 +27,8 @@ static void blink_led_timer(unsigned long context) | |||
| 27 | struct efx_blinker *bl = &efx->board_info.blinker; | 27 | struct efx_blinker *bl = &efx->board_info.blinker; |
| 28 | efx->board_info.set_fault_led(efx, bl->state); | 28 | efx->board_info.set_fault_led(efx, bl->state); |
| 29 | bl->state = !bl->state; | 29 | bl->state = !bl->state; |
| 30 | if (bl->resubmit) { | 30 | if (bl->resubmit) |
| 31 | bl->timer.expires = jiffies + BLINK_INTERVAL; | 31 | mod_timer(&bl->timer, jiffies + BLINK_INTERVAL); |
| 32 | add_timer(&bl->timer); | ||
| 33 | } | ||
| 34 | } | 32 | } |
| 35 | 33 | ||
| 36 | static void board_blink(struct efx_nic *efx, int blink) | 34 | static void board_blink(struct efx_nic *efx, int blink) |
| @@ -44,8 +42,7 @@ static void board_blink(struct efx_nic *efx, int blink) | |||
| 44 | blinker->state = 0; | 42 | blinker->state = 0; |
| 45 | setup_timer(&blinker->timer, blink_led_timer, | 43 | setup_timer(&blinker->timer, blink_led_timer, |
| 46 | (unsigned long)efx); | 44 | (unsigned long)efx); |
| 47 | blinker->timer.expires = jiffies + BLINK_INTERVAL; | 45 | mod_timer(&blinker->timer, jiffies + BLINK_INTERVAL); |
| 48 | add_timer(&blinker->timer); | ||
| 49 | } else { | 46 | } else { |
| 50 | blinker->resubmit = 0; | 47 | blinker->resubmit = 0; |
| 51 | if (blinker->timer.function) | 48 | if (blinker->timer.function) |
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c index 418f2e53a95b..449760642e31 100644 --- a/drivers/net/sfc/efx.c +++ b/drivers/net/sfc/efx.c | |||
| @@ -199,11 +199,12 @@ static inline int efx_process_channel(struct efx_channel *channel, int rx_quota) | |||
| 199 | */ | 199 | */ |
| 200 | static inline void efx_channel_processed(struct efx_channel *channel) | 200 | static inline void efx_channel_processed(struct efx_channel *channel) |
| 201 | { | 201 | { |
| 202 | /* Write to EVQ_RPTR_REG. If a new event arrived in a race | 202 | /* The interrupt handler for this channel may set work_pending |
| 203 | * with finishing processing, a new interrupt will be raised. | 203 | * as soon as we acknowledge the events we've seen. Make sure |
| 204 | */ | 204 | * it's cleared before then. */ |
| 205 | channel->work_pending = 0; | 205 | channel->work_pending = 0; |
| 206 | smp_wmb(); /* Ensure channel updated before any new interrupt. */ | 206 | smp_wmb(); |
| 207 | |||
| 207 | falcon_eventq_read_ack(channel); | 208 | falcon_eventq_read_ack(channel); |
| 208 | } | 209 | } |
| 209 | 210 | ||
| @@ -265,7 +266,7 @@ void efx_process_channel_now(struct efx_channel *channel) | |||
| 265 | napi_disable(&channel->napi_str); | 266 | napi_disable(&channel->napi_str); |
| 266 | 267 | ||
| 267 | /* Poll the channel */ | 268 | /* Poll the channel */ |
| 268 | (void) efx_process_channel(channel, efx->type->evq_size); | 269 | efx_process_channel(channel, efx->type->evq_size); |
| 269 | 270 | ||
| 270 | /* Ack the eventq. This may cause an interrupt to be generated | 271 | /* Ack the eventq. This may cause an interrupt to be generated |
| 271 | * when they are reenabled */ | 272 | * when they are reenabled */ |
| @@ -317,26 +318,6 @@ static void efx_remove_eventq(struct efx_channel *channel) | |||
| 317 | * | 318 | * |
| 318 | *************************************************************************/ | 319 | *************************************************************************/ |
| 319 | 320 | ||
| 320 | /* Setup per-NIC RX buffer parameters. | ||
| 321 | * Calculate the rx buffer allocation parameters required to support | ||
| 322 | * the current MTU, including padding for header alignment and overruns. | ||
| 323 | */ | ||
| 324 | static void efx_calc_rx_buffer_params(struct efx_nic *efx) | ||
| 325 | { | ||
| 326 | unsigned int order, len; | ||
| 327 | |||
| 328 | len = (max(EFX_PAGE_IP_ALIGN, NET_IP_ALIGN) + | ||
| 329 | EFX_MAX_FRAME_LEN(efx->net_dev->mtu) + | ||
| 330 | efx->type->rx_buffer_padding); | ||
| 331 | |||
| 332 | /* Calculate page-order */ | ||
| 333 | for (order = 0; ((1u << order) * PAGE_SIZE) < len; ++order) | ||
| 334 | ; | ||
| 335 | |||
| 336 | efx->rx_buffer_len = len; | ||
| 337 | efx->rx_buffer_order = order; | ||
| 338 | } | ||
| 339 | |||
| 340 | static int efx_probe_channel(struct efx_channel *channel) | 321 | static int efx_probe_channel(struct efx_channel *channel) |
| 341 | { | 322 | { |
| 342 | struct efx_tx_queue *tx_queue; | 323 | struct efx_tx_queue *tx_queue; |
| @@ -387,7 +368,14 @@ static int efx_init_channels(struct efx_nic *efx) | |||
| 387 | struct efx_channel *channel; | 368 | struct efx_channel *channel; |
| 388 | int rc = 0; | 369 | int rc = 0; |
| 389 | 370 | ||
| 390 | efx_calc_rx_buffer_params(efx); | 371 | /* Calculate the rx buffer allocation parameters required to |
| 372 | * support the current MTU, including padding for header | ||
| 373 | * alignment and overruns. | ||
| 374 | */ | ||
| 375 | efx->rx_buffer_len = (max(EFX_PAGE_IP_ALIGN, NET_IP_ALIGN) + | ||
| 376 | EFX_MAX_FRAME_LEN(efx->net_dev->mtu) + | ||
| 377 | efx->type->rx_buffer_padding); | ||
| 378 | efx->rx_buffer_order = get_order(efx->rx_buffer_len); | ||
| 391 | 379 | ||
| 392 | /* Initialise the channels */ | 380 | /* Initialise the channels */ |
| 393 | efx_for_each_channel(channel, efx) { | 381 | efx_for_each_channel(channel, efx) { |
| @@ -440,9 +428,12 @@ static void efx_start_channel(struct efx_channel *channel) | |||
| 440 | netif_napi_add(channel->napi_dev, &channel->napi_str, | 428 | netif_napi_add(channel->napi_dev, &channel->napi_str, |
| 441 | efx_poll, napi_weight); | 429 | efx_poll, napi_weight); |
| 442 | 430 | ||
| 431 | /* The interrupt handler for this channel may set work_pending | ||
| 432 | * as soon as we enable it. Make sure it's cleared before | ||
| 433 | * then. Similarly, make sure it sees the enabled flag set. */ | ||
| 443 | channel->work_pending = 0; | 434 | channel->work_pending = 0; |
| 444 | channel->enabled = 1; | 435 | channel->enabled = 1; |
| 445 | smp_wmb(); /* ensure channel updated before first interrupt */ | 436 | smp_wmb(); |
| 446 | 437 | ||
| 447 | napi_enable(&channel->napi_str); | 438 | napi_enable(&channel->napi_str); |
| 448 | 439 | ||
| @@ -704,7 +695,7 @@ static void efx_stop_port(struct efx_nic *efx) | |||
| 704 | mutex_unlock(&efx->mac_lock); | 695 | mutex_unlock(&efx->mac_lock); |
| 705 | 696 | ||
| 706 | /* Serialise against efx_set_multicast_list() */ | 697 | /* Serialise against efx_set_multicast_list() */ |
| 707 | if (NET_DEV_REGISTERED(efx)) { | 698 | if (efx_dev_registered(efx)) { |
| 708 | netif_tx_lock_bh(efx->net_dev); | 699 | netif_tx_lock_bh(efx->net_dev); |
| 709 | netif_tx_unlock_bh(efx->net_dev); | 700 | netif_tx_unlock_bh(efx->net_dev); |
| 710 | } | 701 | } |
| @@ -791,22 +782,23 @@ static int efx_init_io(struct efx_nic *efx) | |||
| 791 | efx->membase = ioremap_nocache(efx->membase_phys, | 782 | efx->membase = ioremap_nocache(efx->membase_phys, |
| 792 | efx->type->mem_map_size); | 783 | efx->type->mem_map_size); |
| 793 | if (!efx->membase) { | 784 | if (!efx->membase) { |
| 794 | EFX_ERR(efx, "could not map memory BAR %d at %lx+%x\n", | 785 | EFX_ERR(efx, "could not map memory BAR %d at %llx+%x\n", |
| 795 | efx->type->mem_bar, efx->membase_phys, | 786 | efx->type->mem_bar, |
| 787 | (unsigned long long)efx->membase_phys, | ||
| 796 | efx->type->mem_map_size); | 788 | efx->type->mem_map_size); |
| 797 | rc = -ENOMEM; | 789 | rc = -ENOMEM; |
| 798 | goto fail4; | 790 | goto fail4; |
| 799 | } | 791 | } |
| 800 | EFX_LOG(efx, "memory BAR %u at %lx+%x (virtual %p)\n", | 792 | EFX_LOG(efx, "memory BAR %u at %llx+%x (virtual %p)\n", |
| 801 | efx->type->mem_bar, efx->membase_phys, efx->type->mem_map_size, | 793 | efx->type->mem_bar, (unsigned long long)efx->membase_phys, |
| 802 | efx->membase); | 794 | efx->type->mem_map_size, efx->membase); |
| 803 | 795 | ||
| 804 | return 0; | 796 | return 0; |
| 805 | 797 | ||
| 806 | fail4: | 798 | fail4: |
| 807 | release_mem_region(efx->membase_phys, efx->type->mem_map_size); | 799 | release_mem_region(efx->membase_phys, efx->type->mem_map_size); |
| 808 | fail3: | 800 | fail3: |
| 809 | efx->membase_phys = 0UL; | 801 | efx->membase_phys = 0; |
| 810 | fail2: | 802 | fail2: |
| 811 | pci_disable_device(efx->pci_dev); | 803 | pci_disable_device(efx->pci_dev); |
| 812 | fail1: | 804 | fail1: |
| @@ -824,7 +816,7 @@ static void efx_fini_io(struct efx_nic *efx) | |||
| 824 | 816 | ||
| 825 | if (efx->membase_phys) { | 817 | if (efx->membase_phys) { |
| 826 | pci_release_region(efx->pci_dev, efx->type->mem_bar); | 818 | pci_release_region(efx->pci_dev, efx->type->mem_bar); |
| 827 | efx->membase_phys = 0UL; | 819 | efx->membase_phys = 0; |
| 828 | } | 820 | } |
| 829 | 821 | ||
| 830 | pci_disable_device(efx->pci_dev); | 822 | pci_disable_device(efx->pci_dev); |
| @@ -1043,7 +1035,7 @@ static void efx_start_all(struct efx_nic *efx) | |||
| 1043 | return; | 1035 | return; |
| 1044 | if ((efx->state != STATE_RUNNING) && (efx->state != STATE_INIT)) | 1036 | if ((efx->state != STATE_RUNNING) && (efx->state != STATE_INIT)) |
| 1045 | return; | 1037 | return; |
| 1046 | if (NET_DEV_REGISTERED(efx) && !netif_running(efx->net_dev)) | 1038 | if (efx_dev_registered(efx) && !netif_running(efx->net_dev)) |
| 1047 | return; | 1039 | return; |
| 1048 | 1040 | ||
| 1049 | /* Mark the port as enabled so port reconfigurations can start, then | 1041 | /* Mark the port as enabled so port reconfigurations can start, then |
| @@ -1073,9 +1065,8 @@ static void efx_flush_all(struct efx_nic *efx) | |||
| 1073 | cancel_delayed_work_sync(&efx->monitor_work); | 1065 | cancel_delayed_work_sync(&efx->monitor_work); |
| 1074 | 1066 | ||
| 1075 | /* Ensure that all RX slow refills are complete. */ | 1067 | /* Ensure that all RX slow refills are complete. */ |
| 1076 | efx_for_each_rx_queue(rx_queue, efx) { | 1068 | efx_for_each_rx_queue(rx_queue, efx) |
| 1077 | cancel_delayed_work_sync(&rx_queue->work); | 1069 | cancel_delayed_work_sync(&rx_queue->work); |
| 1078 | } | ||
| 1079 | 1070 | ||
| 1080 | /* Stop scheduled port reconfigurations */ | 1071 | /* Stop scheduled port reconfigurations */ |
| 1081 | cancel_work_sync(&efx->reconfigure_work); | 1072 | cancel_work_sync(&efx->reconfigure_work); |
| @@ -1101,9 +1092,10 @@ static void efx_stop_all(struct efx_nic *efx) | |||
| 1101 | falcon_disable_interrupts(efx); | 1092 | falcon_disable_interrupts(efx); |
| 1102 | if (efx->legacy_irq) | 1093 | if (efx->legacy_irq) |
| 1103 | synchronize_irq(efx->legacy_irq); | 1094 | synchronize_irq(efx->legacy_irq); |
| 1104 | efx_for_each_channel_with_interrupt(channel, efx) | 1095 | efx_for_each_channel_with_interrupt(channel, efx) { |
| 1105 | if (channel->irq) | 1096 | if (channel->irq) |
| 1106 | synchronize_irq(channel->irq); | 1097 | synchronize_irq(channel->irq); |
| 1098 | } | ||
| 1107 | 1099 | ||
| 1108 | /* Stop all NAPI processing and synchronous rx refills */ | 1100 | /* Stop all NAPI processing and synchronous rx refills */ |
| 1109 | efx_for_each_channel(channel, efx) | 1101 | efx_for_each_channel(channel, efx) |
| @@ -1125,7 +1117,7 @@ static void efx_stop_all(struct efx_nic *efx) | |||
| 1125 | /* Stop the kernel transmit interface late, so the watchdog | 1117 | /* Stop the kernel transmit interface late, so the watchdog |
| 1126 | * timer isn't ticking over the flush */ | 1118 | * timer isn't ticking over the flush */ |
| 1127 | efx_stop_queue(efx); | 1119 | efx_stop_queue(efx); |
| 1128 | if (NET_DEV_REGISTERED(efx)) { | 1120 | if (efx_dev_registered(efx)) { |
| 1129 | netif_tx_lock_bh(efx->net_dev); | 1121 | netif_tx_lock_bh(efx->net_dev); |
| 1130 | netif_tx_unlock_bh(efx->net_dev); | 1122 | netif_tx_unlock_bh(efx->net_dev); |
| 1131 | } | 1123 | } |
| @@ -1344,13 +1336,17 @@ static int efx_net_stop(struct net_device *net_dev) | |||
| 1344 | return 0; | 1336 | return 0; |
| 1345 | } | 1337 | } |
| 1346 | 1338 | ||
| 1347 | /* Context: process, dev_base_lock held, non-blocking. */ | 1339 | /* Context: process, dev_base_lock or RTNL held, non-blocking. */ |
| 1348 | static struct net_device_stats *efx_net_stats(struct net_device *net_dev) | 1340 | static struct net_device_stats *efx_net_stats(struct net_device *net_dev) |
| 1349 | { | 1341 | { |
| 1350 | struct efx_nic *efx = net_dev->priv; | 1342 | struct efx_nic *efx = net_dev->priv; |
| 1351 | struct efx_mac_stats *mac_stats = &efx->mac_stats; | 1343 | struct efx_mac_stats *mac_stats = &efx->mac_stats; |
| 1352 | struct net_device_stats *stats = &net_dev->stats; | 1344 | struct net_device_stats *stats = &net_dev->stats; |
| 1353 | 1345 | ||
| 1346 | /* Update stats if possible, but do not wait if another thread | ||
| 1347 | * is updating them (or resetting the NIC); slightly stale | ||
| 1348 | * stats are acceptable. | ||
| 1349 | */ | ||
| 1354 | if (!spin_trylock(&efx->stats_lock)) | 1350 | if (!spin_trylock(&efx->stats_lock)) |
| 1355 | return stats; | 1351 | return stats; |
| 1356 | if (efx->state == STATE_RUNNING) { | 1352 | if (efx->state == STATE_RUNNING) { |
| @@ -1494,7 +1490,7 @@ static void efx_set_multicast_list(struct net_device *net_dev) | |||
| 1494 | static int efx_netdev_event(struct notifier_block *this, | 1490 | static int efx_netdev_event(struct notifier_block *this, |
| 1495 | unsigned long event, void *ptr) | 1491 | unsigned long event, void *ptr) |
| 1496 | { | 1492 | { |
| 1497 | struct net_device *net_dev = (struct net_device *)ptr; | 1493 | struct net_device *net_dev = ptr; |
| 1498 | 1494 | ||
| 1499 | if (net_dev->open == efx_net_open && event == NETDEV_CHANGENAME) { | 1495 | if (net_dev->open == efx_net_open && event == NETDEV_CHANGENAME) { |
| 1500 | struct efx_nic *efx = net_dev->priv; | 1496 | struct efx_nic *efx = net_dev->priv; |
| @@ -1563,7 +1559,7 @@ static void efx_unregister_netdev(struct efx_nic *efx) | |||
| 1563 | efx_for_each_tx_queue(tx_queue, efx) | 1559 | efx_for_each_tx_queue(tx_queue, efx) |
| 1564 | efx_release_tx_buffers(tx_queue); | 1560 | efx_release_tx_buffers(tx_queue); |
| 1565 | 1561 | ||
| 1566 | if (NET_DEV_REGISTERED(efx)) { | 1562 | if (efx_dev_registered(efx)) { |
| 1567 | strlcpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name)); | 1563 | strlcpy(efx->name, pci_name(efx->pci_dev), sizeof(efx->name)); |
| 1568 | unregister_netdev(efx->net_dev); | 1564 | unregister_netdev(efx->net_dev); |
| 1569 | } | 1565 | } |
| @@ -1688,7 +1684,7 @@ static int efx_reset(struct efx_nic *efx) | |||
| 1688 | if (method == RESET_TYPE_DISABLE) { | 1684 | if (method == RESET_TYPE_DISABLE) { |
| 1689 | /* Reinitialise the device anyway so the driver unload sequence | 1685 | /* Reinitialise the device anyway so the driver unload sequence |
| 1690 | * can talk to the external SRAM */ | 1686 | * can talk to the external SRAM */ |
| 1691 | (void) falcon_init_nic(efx); | 1687 | falcon_init_nic(efx); |
| 1692 | rc = -EIO; | 1688 | rc = -EIO; |
| 1693 | goto fail4; | 1689 | goto fail4; |
| 1694 | } | 1690 | } |
diff --git a/drivers/net/sfc/falcon.c b/drivers/net/sfc/falcon.c index b57cc68058c0..d3f749c72d41 100644 --- a/drivers/net/sfc/falcon.c +++ b/drivers/net/sfc/falcon.c | |||
| @@ -116,17 +116,8 @@ MODULE_PARM_DESC(rx_xon_thresh_bytes, "RX fifo XON threshold"); | |||
| 116 | ************************************************************************** | 116 | ************************************************************************** |
| 117 | */ | 117 | */ |
| 118 | 118 | ||
| 119 | /* DMA address mask (up to 46-bit, avoiding compiler warnings) | 119 | /* DMA address mask */ |
| 120 | * | 120 | #define FALCON_DMA_MASK DMA_BIT_MASK(46) |
| 121 | * Note that it is possible to have a platform with 64-bit longs and | ||
| 122 | * 32-bit DMA addresses, or vice versa. EFX_DMA_MASK takes care of the | ||
| 123 | * platform DMA mask. | ||
| 124 | */ | ||
| 125 | #if BITS_PER_LONG == 64 | ||
| 126 | #define FALCON_DMA_MASK EFX_DMA_MASK(0x00003fffffffffffUL) | ||
| 127 | #else | ||
| 128 | #define FALCON_DMA_MASK EFX_DMA_MASK(0x00003fffffffffffULL) | ||
| 129 | #endif | ||
| 130 | 121 | ||
| 131 | /* TX DMA length mask (13-bit) */ | 122 | /* TX DMA length mask (13-bit) */ |
| 132 | #define FALCON_TX_DMA_MASK (4096 - 1) | 123 | #define FALCON_TX_DMA_MASK (4096 - 1) |
| @@ -145,7 +136,7 @@ MODULE_PARM_DESC(rx_xon_thresh_bytes, "RX fifo XON threshold"); | |||
| 145 | #define PCI_EXP_LNKSTA_LNK_WID_LBN 4 | 136 | #define PCI_EXP_LNKSTA_LNK_WID_LBN 4 |
| 146 | 137 | ||
| 147 | #define FALCON_IS_DUAL_FUNC(efx) \ | 138 | #define FALCON_IS_DUAL_FUNC(efx) \ |
| 148 | (FALCON_REV(efx) < FALCON_REV_B0) | 139 | (falcon_rev(efx) < FALCON_REV_B0) |
| 149 | 140 | ||
| 150 | /************************************************************************** | 141 | /************************************************************************** |
| 151 | * | 142 | * |
| @@ -465,7 +456,7 @@ int falcon_init_tx(struct efx_tx_queue *tx_queue) | |||
| 465 | TX_DESCQ_TYPE, 0, | 456 | TX_DESCQ_TYPE, 0, |
| 466 | TX_NON_IP_DROP_DIS_B0, 1); | 457 | TX_NON_IP_DROP_DIS_B0, 1); |
| 467 | 458 | ||
| 468 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 459 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 469 | int csum = !(efx->net_dev->features & NETIF_F_IP_CSUM); | 460 | int csum = !(efx->net_dev->features & NETIF_F_IP_CSUM); |
| 470 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_IP_CHKSM_DIS_B0, csum); | 461 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_IP_CHKSM_DIS_B0, csum); |
| 471 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_TCP_CHKSM_DIS_B0, csum); | 462 | EFX_SET_OWORD_FIELD(tx_desc_ptr, TX_TCP_CHKSM_DIS_B0, csum); |
| @@ -474,7 +465,7 @@ int falcon_init_tx(struct efx_tx_queue *tx_queue) | |||
| 474 | falcon_write_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, | 465 | falcon_write_table(efx, &tx_desc_ptr, efx->type->txd_ptr_tbl_base, |
| 475 | tx_queue->queue); | 466 | tx_queue->queue); |
| 476 | 467 | ||
| 477 | if (FALCON_REV(efx) < FALCON_REV_B0) { | 468 | if (falcon_rev(efx) < FALCON_REV_B0) { |
| 478 | efx_oword_t reg; | 469 | efx_oword_t reg; |
| 479 | 470 | ||
| 480 | BUG_ON(tx_queue->queue >= 128); /* HW limit */ | 471 | BUG_ON(tx_queue->queue >= 128); /* HW limit */ |
| @@ -635,7 +626,7 @@ int falcon_init_rx(struct efx_rx_queue *rx_queue) | |||
| 635 | efx_oword_t rx_desc_ptr; | 626 | efx_oword_t rx_desc_ptr; |
| 636 | struct efx_nic *efx = rx_queue->efx; | 627 | struct efx_nic *efx = rx_queue->efx; |
| 637 | int rc; | 628 | int rc; |
| 638 | int is_b0 = FALCON_REV(efx) >= FALCON_REV_B0; | 629 | int is_b0 = falcon_rev(efx) >= FALCON_REV_B0; |
| 639 | int iscsi_digest_en = is_b0; | 630 | int iscsi_digest_en = is_b0; |
| 640 | 631 | ||
| 641 | EFX_LOG(efx, "RX queue %d ring in special buffers %d-%d\n", | 632 | EFX_LOG(efx, "RX queue %d ring in special buffers %d-%d\n", |
| @@ -822,10 +813,10 @@ static inline void falcon_handle_tx_event(struct efx_channel *channel, | |||
| 822 | tx_ev_q_label = EFX_QWORD_FIELD(*event, TX_EV_Q_LABEL); | 813 | tx_ev_q_label = EFX_QWORD_FIELD(*event, TX_EV_Q_LABEL); |
| 823 | tx_queue = &efx->tx_queue[tx_ev_q_label]; | 814 | tx_queue = &efx->tx_queue[tx_ev_q_label]; |
| 824 | 815 | ||
| 825 | if (NET_DEV_REGISTERED(efx)) | 816 | if (efx_dev_registered(efx)) |
| 826 | netif_tx_lock(efx->net_dev); | 817 | netif_tx_lock(efx->net_dev); |
| 827 | falcon_notify_tx_desc(tx_queue); | 818 | falcon_notify_tx_desc(tx_queue); |
| 828 | if (NET_DEV_REGISTERED(efx)) | 819 | if (efx_dev_registered(efx)) |
| 829 | netif_tx_unlock(efx->net_dev); | 820 | netif_tx_unlock(efx->net_dev); |
| 830 | } else if (EFX_QWORD_FIELD(*event, TX_EV_PKT_ERR) && | 821 | } else if (EFX_QWORD_FIELD(*event, TX_EV_PKT_ERR) && |
| 831 | EFX_WORKAROUND_10727(efx)) { | 822 | EFX_WORKAROUND_10727(efx)) { |
| @@ -884,7 +875,7 @@ static void falcon_handle_rx_not_ok(struct efx_rx_queue *rx_queue, | |||
| 884 | RX_EV_TCP_UDP_CHKSUM_ERR); | 875 | RX_EV_TCP_UDP_CHKSUM_ERR); |
| 885 | rx_ev_eth_crc_err = EFX_QWORD_FIELD(*event, RX_EV_ETH_CRC_ERR); | 876 | rx_ev_eth_crc_err = EFX_QWORD_FIELD(*event, RX_EV_ETH_CRC_ERR); |
| 886 | rx_ev_frm_trunc = EFX_QWORD_FIELD(*event, RX_EV_FRM_TRUNC); | 877 | rx_ev_frm_trunc = EFX_QWORD_FIELD(*event, RX_EV_FRM_TRUNC); |
| 887 | rx_ev_drib_nib = ((FALCON_REV(efx) >= FALCON_REV_B0) ? | 878 | rx_ev_drib_nib = ((falcon_rev(efx) >= FALCON_REV_B0) ? |
| 888 | 0 : EFX_QWORD_FIELD(*event, RX_EV_DRIB_NIB)); | 879 | 0 : EFX_QWORD_FIELD(*event, RX_EV_DRIB_NIB)); |
| 889 | rx_ev_pause_frm = EFX_QWORD_FIELD(*event, RX_EV_PAUSE_FRM_ERR); | 880 | rx_ev_pause_frm = EFX_QWORD_FIELD(*event, RX_EV_PAUSE_FRM_ERR); |
| 890 | 881 | ||
| @@ -1065,7 +1056,7 @@ static void falcon_handle_global_event(struct efx_channel *channel, | |||
| 1065 | EFX_QWORD_FIELD(*event, XG_PHY_INTR)) | 1056 | EFX_QWORD_FIELD(*event, XG_PHY_INTR)) |
| 1066 | is_phy_event = 1; | 1057 | is_phy_event = 1; |
| 1067 | 1058 | ||
| 1068 | if ((FALCON_REV(efx) >= FALCON_REV_B0) && | 1059 | if ((falcon_rev(efx) >= FALCON_REV_B0) && |
| 1069 | EFX_OWORD_FIELD(*event, XG_MNT_INTR_B0)) | 1060 | EFX_OWORD_FIELD(*event, XG_MNT_INTR_B0)) |
| 1070 | is_phy_event = 1; | 1061 | is_phy_event = 1; |
| 1071 | 1062 | ||
| @@ -1405,7 +1396,7 @@ static inline void falcon_irq_ack_a1(struct efx_nic *efx) | |||
| 1405 | static irqreturn_t falcon_fatal_interrupt(struct efx_nic *efx) | 1396 | static irqreturn_t falcon_fatal_interrupt(struct efx_nic *efx) |
| 1406 | { | 1397 | { |
| 1407 | struct falcon_nic_data *nic_data = efx->nic_data; | 1398 | struct falcon_nic_data *nic_data = efx->nic_data; |
| 1408 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1399 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1409 | efx_oword_t fatal_intr; | 1400 | efx_oword_t fatal_intr; |
| 1410 | int error, mem_perr; | 1401 | int error, mem_perr; |
| 1411 | static int n_int_errors; | 1402 | static int n_int_errors; |
| @@ -1451,8 +1442,8 @@ out: | |||
| 1451 | */ | 1442 | */ |
| 1452 | static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) | 1443 | static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) |
| 1453 | { | 1444 | { |
| 1454 | struct efx_nic *efx = (struct efx_nic *)dev_id; | 1445 | struct efx_nic *efx = dev_id; |
| 1455 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1446 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1456 | struct efx_channel *channel; | 1447 | struct efx_channel *channel; |
| 1457 | efx_dword_t reg; | 1448 | efx_dword_t reg; |
| 1458 | u32 queues; | 1449 | u32 queues; |
| @@ -1489,8 +1480,8 @@ static irqreturn_t falcon_legacy_interrupt_b0(int irq, void *dev_id) | |||
| 1489 | 1480 | ||
| 1490 | static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) | 1481 | static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) |
| 1491 | { | 1482 | { |
| 1492 | struct efx_nic *efx = (struct efx_nic *)dev_id; | 1483 | struct efx_nic *efx = dev_id; |
| 1493 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1484 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1494 | struct efx_channel *channel; | 1485 | struct efx_channel *channel; |
| 1495 | int syserr; | 1486 | int syserr; |
| 1496 | int queues; | 1487 | int queues; |
| @@ -1542,9 +1533,9 @@ static irqreturn_t falcon_legacy_interrupt_a1(int irq, void *dev_id) | |||
| 1542 | */ | 1533 | */ |
| 1543 | static irqreturn_t falcon_msi_interrupt(int irq, void *dev_id) | 1534 | static irqreturn_t falcon_msi_interrupt(int irq, void *dev_id) |
| 1544 | { | 1535 | { |
| 1545 | struct efx_channel *channel = (struct efx_channel *)dev_id; | 1536 | struct efx_channel *channel = dev_id; |
| 1546 | struct efx_nic *efx = channel->efx; | 1537 | struct efx_nic *efx = channel->efx; |
| 1547 | efx_oword_t *int_ker = (efx_oword_t *) efx->irq_status.addr; | 1538 | efx_oword_t *int_ker = efx->irq_status.addr; |
| 1548 | int syserr; | 1539 | int syserr; |
| 1549 | 1540 | ||
| 1550 | efx->last_irq_cpu = raw_smp_processor_id(); | 1541 | efx->last_irq_cpu = raw_smp_processor_id(); |
| @@ -1572,7 +1563,7 @@ static void falcon_setup_rss_indir_table(struct efx_nic *efx) | |||
| 1572 | unsigned long offset; | 1563 | unsigned long offset; |
| 1573 | efx_dword_t dword; | 1564 | efx_dword_t dword; |
| 1574 | 1565 | ||
| 1575 | if (FALCON_REV(efx) < FALCON_REV_B0) | 1566 | if (falcon_rev(efx) < FALCON_REV_B0) |
| 1576 | return; | 1567 | return; |
| 1577 | 1568 | ||
| 1578 | for (offset = RX_RSS_INDIR_TBL_B0; | 1569 | for (offset = RX_RSS_INDIR_TBL_B0; |
| @@ -1595,7 +1586,7 @@ int falcon_init_interrupt(struct efx_nic *efx) | |||
| 1595 | 1586 | ||
| 1596 | if (!EFX_INT_MODE_USE_MSI(efx)) { | 1587 | if (!EFX_INT_MODE_USE_MSI(efx)) { |
| 1597 | irq_handler_t handler; | 1588 | irq_handler_t handler; |
| 1598 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 1589 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 1599 | handler = falcon_legacy_interrupt_b0; | 1590 | handler = falcon_legacy_interrupt_b0; |
| 1600 | else | 1591 | else |
| 1601 | handler = falcon_legacy_interrupt_a1; | 1592 | handler = falcon_legacy_interrupt_a1; |
| @@ -1636,12 +1627,13 @@ void falcon_fini_interrupt(struct efx_nic *efx) | |||
| 1636 | efx_oword_t reg; | 1627 | efx_oword_t reg; |
| 1637 | 1628 | ||
| 1638 | /* Disable MSI/MSI-X interrupts */ | 1629 | /* Disable MSI/MSI-X interrupts */ |
| 1639 | efx_for_each_channel_with_interrupt(channel, efx) | 1630 | efx_for_each_channel_with_interrupt(channel, efx) { |
| 1640 | if (channel->irq) | 1631 | if (channel->irq) |
| 1641 | free_irq(channel->irq, channel); | 1632 | free_irq(channel->irq, channel); |
| 1633 | } | ||
| 1642 | 1634 | ||
| 1643 | /* ACK legacy interrupt */ | 1635 | /* ACK legacy interrupt */ |
| 1644 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 1636 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 1645 | falcon_read(efx, ®, INT_ISR0_B0); | 1637 | falcon_read(efx, ®, INT_ISR0_B0); |
| 1646 | else | 1638 | else |
| 1647 | falcon_irq_ack_a1(efx); | 1639 | falcon_irq_ack_a1(efx); |
| @@ -1732,7 +1724,7 @@ void falcon_drain_tx_fifo(struct efx_nic *efx) | |||
| 1732 | efx_oword_t temp; | 1724 | efx_oword_t temp; |
| 1733 | int count; | 1725 | int count; |
| 1734 | 1726 | ||
| 1735 | if ((FALCON_REV(efx) < FALCON_REV_B0) || | 1727 | if ((falcon_rev(efx) < FALCON_REV_B0) || |
| 1736 | (efx->loopback_mode != LOOPBACK_NONE)) | 1728 | (efx->loopback_mode != LOOPBACK_NONE)) |
| 1737 | return; | 1729 | return; |
| 1738 | 1730 | ||
| @@ -1785,7 +1777,7 @@ void falcon_deconfigure_mac_wrapper(struct efx_nic *efx) | |||
| 1785 | { | 1777 | { |
| 1786 | efx_oword_t temp; | 1778 | efx_oword_t temp; |
| 1787 | 1779 | ||
| 1788 | if (FALCON_REV(efx) < FALCON_REV_B0) | 1780 | if (falcon_rev(efx) < FALCON_REV_B0) |
| 1789 | return; | 1781 | return; |
| 1790 | 1782 | ||
| 1791 | /* Isolate the MAC -> RX */ | 1783 | /* Isolate the MAC -> RX */ |
| @@ -1823,7 +1815,7 @@ void falcon_reconfigure_mac_wrapper(struct efx_nic *efx) | |||
| 1823 | MAC_SPEED, link_speed); | 1815 | MAC_SPEED, link_speed); |
| 1824 | /* On B0, MAC backpressure can be disabled and packets get | 1816 | /* On B0, MAC backpressure can be disabled and packets get |
| 1825 | * discarded. */ | 1817 | * discarded. */ |
| 1826 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 1818 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 1827 | EFX_SET_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0, | 1819 | EFX_SET_OWORD_FIELD(reg, TXFIFO_DRAIN_EN_B0, |
| 1828 | !efx->link_up); | 1820 | !efx->link_up); |
| 1829 | } | 1821 | } |
| @@ -1841,7 +1833,7 @@ void falcon_reconfigure_mac_wrapper(struct efx_nic *efx) | |||
| 1841 | EFX_SET_OWORD_FIELD_VER(efx, reg, RX_XOFF_MAC_EN, tx_fc); | 1833 | EFX_SET_OWORD_FIELD_VER(efx, reg, RX_XOFF_MAC_EN, tx_fc); |
| 1842 | 1834 | ||
| 1843 | /* Unisolate the MAC -> RX */ | 1835 | /* Unisolate the MAC -> RX */ |
| 1844 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 1836 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 1845 | EFX_SET_OWORD_FIELD(reg, RX_INGR_EN_B0, 1); | 1837 | EFX_SET_OWORD_FIELD(reg, RX_INGR_EN_B0, 1); |
| 1846 | falcon_write(efx, ®, RX_CFG_REG_KER); | 1838 | falcon_write(efx, ®, RX_CFG_REG_KER); |
| 1847 | } | 1839 | } |
| @@ -1856,7 +1848,7 @@ int falcon_dma_stats(struct efx_nic *efx, unsigned int done_offset) | |||
| 1856 | return 0; | 1848 | return 0; |
| 1857 | 1849 | ||
| 1858 | /* Statistics fetch will fail if the MAC is in TX drain */ | 1850 | /* Statistics fetch will fail if the MAC is in TX drain */ |
| 1859 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 1851 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 1860 | efx_oword_t temp; | 1852 | efx_oword_t temp; |
| 1861 | falcon_read(efx, &temp, MAC0_CTRL_REG_KER); | 1853 | falcon_read(efx, &temp, MAC0_CTRL_REG_KER); |
| 1862 | if (EFX_OWORD_FIELD(temp, TXFIFO_DRAIN_EN_B0)) | 1854 | if (EFX_OWORD_FIELD(temp, TXFIFO_DRAIN_EN_B0)) |
| @@ -1940,7 +1932,7 @@ static int falcon_gmii_wait(struct efx_nic *efx) | |||
| 1940 | static void falcon_mdio_write(struct net_device *net_dev, int phy_id, | 1932 | static void falcon_mdio_write(struct net_device *net_dev, int phy_id, |
| 1941 | int addr, int value) | 1933 | int addr, int value) |
| 1942 | { | 1934 | { |
| 1943 | struct efx_nic *efx = (struct efx_nic *)net_dev->priv; | 1935 | struct efx_nic *efx = net_dev->priv; |
| 1944 | unsigned int phy_id2 = phy_id & FALCON_PHY_ID_ID_MASK; | 1936 | unsigned int phy_id2 = phy_id & FALCON_PHY_ID_ID_MASK; |
| 1945 | efx_oword_t reg; | 1937 | efx_oword_t reg; |
| 1946 | 1938 | ||
| @@ -2008,7 +2000,7 @@ static void falcon_mdio_write(struct net_device *net_dev, int phy_id, | |||
| 2008 | * could be read, -1 will be returned. */ | 2000 | * could be read, -1 will be returned. */ |
| 2009 | static int falcon_mdio_read(struct net_device *net_dev, int phy_id, int addr) | 2001 | static int falcon_mdio_read(struct net_device *net_dev, int phy_id, int addr) |
| 2010 | { | 2002 | { |
| 2011 | struct efx_nic *efx = (struct efx_nic *)net_dev->priv; | 2003 | struct efx_nic *efx = net_dev->priv; |
| 2012 | unsigned int phy_addr = phy_id & FALCON_PHY_ID_ID_MASK; | 2004 | unsigned int phy_addr = phy_id & FALCON_PHY_ID_ID_MASK; |
| 2013 | efx_oword_t reg; | 2005 | efx_oword_t reg; |
| 2014 | int value = -1; | 2006 | int value = -1; |
| @@ -2113,7 +2105,7 @@ int falcon_probe_port(struct efx_nic *efx) | |||
| 2113 | falcon_init_mdio(&efx->mii); | 2105 | falcon_init_mdio(&efx->mii); |
| 2114 | 2106 | ||
| 2115 | /* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */ | 2107 | /* Hardware flow ctrl. FalconA RX FIFO too small for pause generation */ |
| 2116 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 2108 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 2117 | efx->flow_control = EFX_FC_RX | EFX_FC_TX; | 2109 | efx->flow_control = EFX_FC_RX | EFX_FC_TX; |
| 2118 | else | 2110 | else |
| 2119 | efx->flow_control = EFX_FC_RX; | 2111 | efx->flow_control = EFX_FC_RX; |
| @@ -2373,7 +2365,7 @@ static int falcon_probe_nic_variant(struct efx_nic *efx) | |||
| 2373 | return -ENODEV; | 2365 | return -ENODEV; |
| 2374 | } | 2366 | } |
| 2375 | 2367 | ||
| 2376 | switch (FALCON_REV(efx)) { | 2368 | switch (falcon_rev(efx)) { |
| 2377 | case FALCON_REV_A0: | 2369 | case FALCON_REV_A0: |
| 2378 | case 0xff: | 2370 | case 0xff: |
| 2379 | EFX_ERR(efx, "Falcon rev A0 not supported\n"); | 2371 | EFX_ERR(efx, "Falcon rev A0 not supported\n"); |
| @@ -2399,7 +2391,7 @@ static int falcon_probe_nic_variant(struct efx_nic *efx) | |||
| 2399 | break; | 2391 | break; |
| 2400 | 2392 | ||
| 2401 | default: | 2393 | default: |
| 2402 | EFX_ERR(efx, "Unknown Falcon rev %d\n", FALCON_REV(efx)); | 2394 | EFX_ERR(efx, "Unknown Falcon rev %d\n", falcon_rev(efx)); |
| 2403 | return -ENODEV; | 2395 | return -ENODEV; |
| 2404 | } | 2396 | } |
| 2405 | 2397 | ||
| @@ -2419,7 +2411,7 @@ int falcon_probe_nic(struct efx_nic *efx) | |||
| 2419 | 2411 | ||
| 2420 | /* Allocate storage for hardware specific data */ | 2412 | /* Allocate storage for hardware specific data */ |
| 2421 | nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL); | 2413 | nic_data = kzalloc(sizeof(*nic_data), GFP_KERNEL); |
| 2422 | efx->nic_data = (void *) nic_data; | 2414 | efx->nic_data = nic_data; |
| 2423 | 2415 | ||
| 2424 | /* Determine number of ports etc. */ | 2416 | /* Determine number of ports etc. */ |
| 2425 | rc = falcon_probe_nic_variant(efx); | 2417 | rc = falcon_probe_nic_variant(efx); |
| @@ -2489,13 +2481,10 @@ int falcon_probe_nic(struct efx_nic *efx) | |||
| 2489 | */ | 2481 | */ |
| 2490 | int falcon_init_nic(struct efx_nic *efx) | 2482 | int falcon_init_nic(struct efx_nic *efx) |
| 2491 | { | 2483 | { |
| 2492 | struct falcon_nic_data *data; | ||
| 2493 | efx_oword_t temp; | 2484 | efx_oword_t temp; |
| 2494 | unsigned thresh; | 2485 | unsigned thresh; |
| 2495 | int rc; | 2486 | int rc; |
| 2496 | 2487 | ||
| 2497 | data = (struct falcon_nic_data *)efx->nic_data; | ||
| 2498 | |||
| 2499 | /* Set up the address region register. This is only needed | 2488 | /* Set up the address region register. This is only needed |
| 2500 | * for the B0 FPGA, but since we are just pushing in the | 2489 | * for the B0 FPGA, but since we are just pushing in the |
| 2501 | * reset defaults this may as well be unconditional. */ | 2490 | * reset defaults this may as well be unconditional. */ |
| @@ -2562,7 +2551,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2562 | 2551 | ||
| 2563 | /* Set number of RSS queues for receive path. */ | 2552 | /* Set number of RSS queues for receive path. */ |
| 2564 | falcon_read(efx, &temp, RX_FILTER_CTL_REG); | 2553 | falcon_read(efx, &temp, RX_FILTER_CTL_REG); |
| 2565 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 2554 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 2566 | EFX_SET_OWORD_FIELD(temp, NUM_KER, 0); | 2555 | EFX_SET_OWORD_FIELD(temp, NUM_KER, 0); |
| 2567 | else | 2556 | else |
| 2568 | EFX_SET_OWORD_FIELD(temp, NUM_KER, efx->rss_queues - 1); | 2557 | EFX_SET_OWORD_FIELD(temp, NUM_KER, efx->rss_queues - 1); |
| @@ -2600,7 +2589,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2600 | /* Prefetch threshold 2 => fetch when descriptor cache half empty */ | 2589 | /* Prefetch threshold 2 => fetch when descriptor cache half empty */ |
| 2601 | EFX_SET_OWORD_FIELD(temp, TX_PREF_THRESHOLD, 2); | 2590 | EFX_SET_OWORD_FIELD(temp, TX_PREF_THRESHOLD, 2); |
| 2602 | /* Squash TX of packets of 16 bytes or less */ | 2591 | /* Squash TX of packets of 16 bytes or less */ |
| 2603 | if (FALCON_REV(efx) >= FALCON_REV_B0 && EFX_WORKAROUND_9141(efx)) | 2592 | if (falcon_rev(efx) >= FALCON_REV_B0 && EFX_WORKAROUND_9141(efx)) |
| 2604 | EFX_SET_OWORD_FIELD(temp, TX_FLUSH_MIN_LEN_EN_B0, 1); | 2593 | EFX_SET_OWORD_FIELD(temp, TX_FLUSH_MIN_LEN_EN_B0, 1); |
| 2605 | falcon_write(efx, &temp, TX_CFG2_REG_KER); | 2594 | falcon_write(efx, &temp, TX_CFG2_REG_KER); |
| 2606 | 2595 | ||
| @@ -2617,7 +2606,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2617 | if (EFX_WORKAROUND_7575(efx)) | 2606 | if (EFX_WORKAROUND_7575(efx)) |
| 2618 | EFX_SET_OWORD_FIELD_VER(efx, temp, RX_USR_BUF_SIZE, | 2607 | EFX_SET_OWORD_FIELD_VER(efx, temp, RX_USR_BUF_SIZE, |
| 2619 | (3 * 4096) / 32); | 2608 | (3 * 4096) / 32); |
| 2620 | if (FALCON_REV(efx) >= FALCON_REV_B0) | 2609 | if (falcon_rev(efx) >= FALCON_REV_B0) |
| 2621 | EFX_SET_OWORD_FIELD(temp, RX_INGR_EN_B0, 1); | 2610 | EFX_SET_OWORD_FIELD(temp, RX_INGR_EN_B0, 1); |
| 2622 | 2611 | ||
| 2623 | /* RX FIFO flow control thresholds */ | 2612 | /* RX FIFO flow control thresholds */ |
| @@ -2633,7 +2622,7 @@ int falcon_init_nic(struct efx_nic *efx) | |||
| 2633 | falcon_write(efx, &temp, RX_CFG_REG_KER); | 2622 | falcon_write(efx, &temp, RX_CFG_REG_KER); |
| 2634 | 2623 | ||
| 2635 | /* Set destination of both TX and RX Flush events */ | 2624 | /* Set destination of both TX and RX Flush events */ |
| 2636 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 2625 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 2637 | EFX_POPULATE_OWORD_1(temp, FLS_EVQ_ID, 0); | 2626 | EFX_POPULATE_OWORD_1(temp, FLS_EVQ_ID, 0); |
| 2638 | falcon_write(efx, &temp, DP_CTRL_REG); | 2627 | falcon_write(efx, &temp, DP_CTRL_REG); |
| 2639 | } | 2628 | } |
| @@ -2647,7 +2636,7 @@ void falcon_remove_nic(struct efx_nic *efx) | |||
| 2647 | 2636 | ||
| 2648 | falcon_free_buffer(efx, &efx->irq_status); | 2637 | falcon_free_buffer(efx, &efx->irq_status); |
| 2649 | 2638 | ||
| 2650 | (void) falcon_reset_hw(efx, RESET_TYPE_ALL); | 2639 | falcon_reset_hw(efx, RESET_TYPE_ALL); |
| 2651 | 2640 | ||
| 2652 | /* Release the second function after the reset */ | 2641 | /* Release the second function after the reset */ |
| 2653 | if (nic_data->pci_dev2) { | 2642 | if (nic_data->pci_dev2) { |
diff --git a/drivers/net/sfc/falcon.h b/drivers/net/sfc/falcon.h index 6117403b0c03..492f9bc28840 100644 --- a/drivers/net/sfc/falcon.h +++ b/drivers/net/sfc/falcon.h | |||
| @@ -23,7 +23,10 @@ enum falcon_revision { | |||
| 23 | FALCON_REV_B0 = 2, | 23 | FALCON_REV_B0 = 2, |
| 24 | }; | 24 | }; |
| 25 | 25 | ||
| 26 | #define FALCON_REV(efx) ((efx)->pci_dev->revision) | 26 | static inline int falcon_rev(struct efx_nic *efx) |
| 27 | { | ||
| 28 | return efx->pci_dev->revision; | ||
| 29 | } | ||
| 27 | 30 | ||
| 28 | extern struct efx_nic_type falcon_a_nic_type; | 31 | extern struct efx_nic_type falcon_a_nic_type; |
| 29 | extern struct efx_nic_type falcon_b_nic_type; | 32 | extern struct efx_nic_type falcon_b_nic_type; |
diff --git a/drivers/net/sfc/falcon_hwdefs.h b/drivers/net/sfc/falcon_hwdefs.h index 06e2d68fc3d1..6d003114eeab 100644 --- a/drivers/net/sfc/falcon_hwdefs.h +++ b/drivers/net/sfc/falcon_hwdefs.h | |||
| @@ -1125,7 +1125,7 @@ struct falcon_nvconfig_board_v2 { | |||
| 1125 | u8 port1_phy_type; | 1125 | u8 port1_phy_type; |
| 1126 | __le16 asic_sub_revision; | 1126 | __le16 asic_sub_revision; |
| 1127 | __le16 board_revision; | 1127 | __le16 board_revision; |
| 1128 | } __attribute__ ((packed)); | 1128 | } __packed; |
| 1129 | 1129 | ||
| 1130 | #define NVCONFIG_BASE 0x300 | 1130 | #define NVCONFIG_BASE 0x300 |
| 1131 | #define NVCONFIG_BOARD_MAGIC_NUM 0xFA1C | 1131 | #define NVCONFIG_BOARD_MAGIC_NUM 0xFA1C |
| @@ -1144,6 +1144,6 @@ struct falcon_nvconfig { | |||
| 1144 | __le16 board_struct_ver; | 1144 | __le16 board_struct_ver; |
| 1145 | __le16 board_checksum; | 1145 | __le16 board_checksum; |
| 1146 | struct falcon_nvconfig_board_v2 board_v2; | 1146 | struct falcon_nvconfig_board_v2 board_v2; |
| 1147 | } __attribute__ ((packed)); | 1147 | } __packed; |
| 1148 | 1148 | ||
| 1149 | #endif /* EFX_FALCON_HWDEFS_H */ | 1149 | #endif /* EFX_FALCON_HWDEFS_H */ |
diff --git a/drivers/net/sfc/falcon_io.h b/drivers/net/sfc/falcon_io.h index ea08184ddfa9..6670cdfc41ab 100644 --- a/drivers/net/sfc/falcon_io.h +++ b/drivers/net/sfc/falcon_io.h | |||
| @@ -56,14 +56,27 @@ | |||
| 56 | #define FALCON_USE_QWORD_IO 1 | 56 | #define FALCON_USE_QWORD_IO 1 |
| 57 | #endif | 57 | #endif |
| 58 | 58 | ||
| 59 | #define _falcon_writeq(efx, value, reg) \ | 59 | #ifdef FALCON_USE_QWORD_IO |
| 60 | __raw_writeq((__force u64) (value), (efx)->membase + (reg)) | 60 | static inline void _falcon_writeq(struct efx_nic *efx, __le64 value, |
| 61 | #define _falcon_writel(efx, value, reg) \ | 61 | unsigned int reg) |
| 62 | __raw_writel((__force u32) (value), (efx)->membase + (reg)) | 62 | { |
| 63 | #define _falcon_readq(efx, reg) \ | 63 | __raw_writeq((__force u64)value, efx->membase + reg); |
| 64 | ((__force __le64) __raw_readq((efx)->membase + (reg))) | 64 | } |
| 65 | #define _falcon_readl(efx, reg) \ | 65 | static inline __le64 _falcon_readq(struct efx_nic *efx, unsigned int reg) |
| 66 | ((__force __le32) __raw_readl((efx)->membase + (reg))) | 66 | { |
| 67 | return (__force __le64)__raw_readq(efx->membase + reg); | ||
| 68 | } | ||
| 69 | #endif | ||
| 70 | |||
| 71 | static inline void _falcon_writel(struct efx_nic *efx, __le32 value, | ||
| 72 | unsigned int reg) | ||
| 73 | { | ||
| 74 | __raw_writel((__force u32)value, efx->membase + reg); | ||
| 75 | } | ||
| 76 | static inline __le32 _falcon_readl(struct efx_nic *efx, unsigned int reg) | ||
| 77 | { | ||
| 78 | return (__force __le32)__raw_readl(efx->membase + reg); | ||
| 79 | } | ||
| 67 | 80 | ||
| 68 | /* Writes to a normal 16-byte Falcon register, locking as appropriate. */ | 81 | /* Writes to a normal 16-byte Falcon register, locking as appropriate. */ |
| 69 | static inline void falcon_write(struct efx_nic *efx, efx_oword_t *value, | 82 | static inline void falcon_write(struct efx_nic *efx, efx_oword_t *value, |
diff --git a/drivers/net/sfc/falcon_xmac.c b/drivers/net/sfc/falcon_xmac.c index a74b7931a3c4..55c0d9760be8 100644 --- a/drivers/net/sfc/falcon_xmac.c +++ b/drivers/net/sfc/falcon_xmac.c | |||
| @@ -221,7 +221,7 @@ static int falcon_xgmii_status(struct efx_nic *efx) | |||
| 221 | { | 221 | { |
| 222 | efx_dword_t reg; | 222 | efx_dword_t reg; |
| 223 | 223 | ||
| 224 | if (FALCON_REV(efx) < FALCON_REV_B0) | 224 | if (falcon_rev(efx) < FALCON_REV_B0) |
| 225 | return 1; | 225 | return 1; |
| 226 | 226 | ||
| 227 | /* The ISR latches, so clear it and re-read */ | 227 | /* The ISR latches, so clear it and re-read */ |
| @@ -241,7 +241,7 @@ static void falcon_mask_status_intr(struct efx_nic *efx, int enable) | |||
| 241 | { | 241 | { |
| 242 | efx_dword_t reg; | 242 | efx_dword_t reg; |
| 243 | 243 | ||
| 244 | if ((FALCON_REV(efx) < FALCON_REV_B0) || LOOPBACK_INTERNAL(efx)) | 244 | if ((falcon_rev(efx) < FALCON_REV_B0) || LOOPBACK_INTERNAL(efx)) |
| 245 | return; | 245 | return; |
| 246 | 246 | ||
| 247 | /* Flush the ISR */ | 247 | /* Flush the ISR */ |
| @@ -454,12 +454,12 @@ static int falcon_check_xaui_link_up(struct efx_nic *efx) | |||
| 454 | 454 | ||
| 455 | EFX_LOG(efx, "%s Clobbering XAUI (%d tries left).\n", | 455 | EFX_LOG(efx, "%s Clobbering XAUI (%d tries left).\n", |
| 456 | __func__, tries); | 456 | __func__, tries); |
| 457 | (void) falcon_reset_xaui(efx); | 457 | falcon_reset_xaui(efx); |
| 458 | udelay(200); | 458 | udelay(200); |
| 459 | tries--; | 459 | tries--; |
| 460 | } | 460 | } |
| 461 | 461 | ||
| 462 | EFX_ERR(efx, "Failed to bring XAUI link back up in %d tries!\n", | 462 | EFX_LOG(efx, "Failed to bring XAUI link back up in %d tries!\n", |
| 463 | max_tries); | 463 | max_tries); |
| 464 | return 0; | 464 | return 0; |
| 465 | } | 465 | } |
| @@ -572,7 +572,7 @@ int falcon_check_xmac(struct efx_nic *efx) | |||
| 572 | xaui_link_ok = falcon_xaui_link_ok(efx); | 572 | xaui_link_ok = falcon_xaui_link_ok(efx); |
| 573 | 573 | ||
| 574 | if (EFX_WORKAROUND_5147(efx) && !xaui_link_ok) | 574 | if (EFX_WORKAROUND_5147(efx) && !xaui_link_ok) |
| 575 | (void) falcon_reset_xaui(efx); | 575 | falcon_reset_xaui(efx); |
| 576 | 576 | ||
| 577 | /* Call the PHY check_hw routine */ | 577 | /* Call the PHY check_hw routine */ |
| 578 | rc = efx->phy_op->check_hw(efx); | 578 | rc = efx->phy_op->check_hw(efx); |
| @@ -639,7 +639,7 @@ int falcon_xmac_set_pause(struct efx_nic *efx, enum efx_fc_type flow_control) | |||
| 639 | reset = ((flow_control & EFX_FC_TX) && | 639 | reset = ((flow_control & EFX_FC_TX) && |
| 640 | !(efx->flow_control & EFX_FC_TX)); | 640 | !(efx->flow_control & EFX_FC_TX)); |
| 641 | if (EFX_WORKAROUND_11482(efx) && reset) { | 641 | if (EFX_WORKAROUND_11482(efx) && reset) { |
| 642 | if (FALCON_REV(efx) >= FALCON_REV_B0) { | 642 | if (falcon_rev(efx) >= FALCON_REV_B0) { |
| 643 | /* Recover by resetting the EM block */ | 643 | /* Recover by resetting the EM block */ |
| 644 | if (efx->link_up) | 644 | if (efx->link_up) |
| 645 | falcon_drain_tx_fifo(efx); | 645 | falcon_drain_tx_fifo(efx); |
diff --git a/drivers/net/sfc/net_driver.h b/drivers/net/sfc/net_driver.h index 59f261b4171f..5e20e7551dae 100644 --- a/drivers/net/sfc/net_driver.h +++ b/drivers/net/sfc/net_driver.h | |||
| @@ -42,7 +42,7 @@ | |||
| 42 | #ifndef EFX_DRIVER_NAME | 42 | #ifndef EFX_DRIVER_NAME |
| 43 | #define EFX_DRIVER_NAME "sfc" | 43 | #define EFX_DRIVER_NAME "sfc" |
| 44 | #endif | 44 | #endif |
| 45 | #define EFX_DRIVER_VERSION "2.2.0136" | 45 | #define EFX_DRIVER_VERSION "2.2" |
| 46 | 46 | ||
| 47 | #ifdef EFX_ENABLE_DEBUG | 47 | #ifdef EFX_ENABLE_DEBUG |
| 48 | #define EFX_BUG_ON_PARANOID(x) BUG_ON(x) | 48 | #define EFX_BUG_ON_PARANOID(x) BUG_ON(x) |
| @@ -52,28 +52,19 @@ | |||
| 52 | #define EFX_WARN_ON_PARANOID(x) do {} while (0) | 52 | #define EFX_WARN_ON_PARANOID(x) do {} while (0) |
| 53 | #endif | 53 | #endif |
| 54 | 54 | ||
| 55 | #define NET_DEV_REGISTERED(efx) \ | ||
| 56 | ((efx)->net_dev->reg_state == NETREG_REGISTERED) | ||
| 57 | |||
| 58 | /* Include net device name in log messages if it has been registered. | ||
| 59 | * Use efx->name not efx->net_dev->name so that races with (un)registration | ||
| 60 | * are harmless. | ||
| 61 | */ | ||
| 62 | #define NET_DEV_NAME(efx) (NET_DEV_REGISTERED(efx) ? (efx)->name : "") | ||
| 63 | |||
| 64 | /* Un-rate-limited logging */ | 55 | /* Un-rate-limited logging */ |
| 65 | #define EFX_ERR(efx, fmt, args...) \ | 56 | #define EFX_ERR(efx, fmt, args...) \ |
| 66 | dev_err(&((efx)->pci_dev->dev), "ERR: %s " fmt, NET_DEV_NAME(efx), ##args) | 57 | dev_err(&((efx)->pci_dev->dev), "ERR: %s " fmt, efx_dev_name(efx), ##args) |
| 67 | 58 | ||
| 68 | #define EFX_INFO(efx, fmt, args...) \ | 59 | #define EFX_INFO(efx, fmt, args...) \ |
| 69 | dev_info(&((efx)->pci_dev->dev), "INFO: %s " fmt, NET_DEV_NAME(efx), ##args) | 60 | dev_info(&((efx)->pci_dev->dev), "INFO: %s " fmt, efx_dev_name(efx), ##args) |
| 70 | 61 | ||
| 71 | #ifdef EFX_ENABLE_DEBUG | 62 | #ifdef EFX_ENABLE_DEBUG |
| 72 | #define EFX_LOG(efx, fmt, args...) \ | 63 | #define EFX_LOG(efx, fmt, args...) \ |
| 73 | dev_info(&((efx)->pci_dev->dev), "DBG: %s " fmt, NET_DEV_NAME(efx), ##args) | 64 | dev_info(&((efx)->pci_dev->dev), "DBG: %s " fmt, efx_dev_name(efx), ##args) |
| 74 | #else | 65 | #else |
| 75 | #define EFX_LOG(efx, fmt, args...) \ | 66 | #define EFX_LOG(efx, fmt, args...) \ |
| 76 | dev_dbg(&((efx)->pci_dev->dev), "DBG: %s " fmt, NET_DEV_NAME(efx), ##args) | 67 | dev_dbg(&((efx)->pci_dev->dev), "DBG: %s " fmt, efx_dev_name(efx), ##args) |
| 77 | #endif | 68 | #endif |
| 78 | 69 | ||
| 79 | #define EFX_TRACE(efx, fmt, args...) do {} while (0) | 70 | #define EFX_TRACE(efx, fmt, args...) do {} while (0) |
| @@ -90,11 +81,6 @@ do {if (net_ratelimit()) EFX_INFO(efx, fmt, ##args); } while (0) | |||
| 90 | #define EFX_LOG_RL(efx, fmt, args...) \ | 81 | #define EFX_LOG_RL(efx, fmt, args...) \ |
| 91 | do {if (net_ratelimit()) EFX_LOG(efx, fmt, ##args); } while (0) | 82 | do {if (net_ratelimit()) EFX_LOG(efx, fmt, ##args); } while (0) |
| 92 | 83 | ||
| 93 | /* Kernel headers may redefine inline anyway */ | ||
| 94 | #ifndef inline | ||
| 95 | #define inline inline __attribute__ ((always_inline)) | ||
| 96 | #endif | ||
| 97 | |||
| 98 | /************************************************************************** | 84 | /************************************************************************** |
| 99 | * | 85 | * |
| 100 | * Efx data structures | 86 | * Efx data structures |
| @@ -695,7 +681,7 @@ struct efx_nic { | |||
| 695 | struct workqueue_struct *workqueue; | 681 | struct workqueue_struct *workqueue; |
| 696 | struct work_struct reset_work; | 682 | struct work_struct reset_work; |
| 697 | struct delayed_work monitor_work; | 683 | struct delayed_work monitor_work; |
| 698 | unsigned long membase_phys; | 684 | resource_size_t membase_phys; |
| 699 | void __iomem *membase; | 685 | void __iomem *membase; |
| 700 | spinlock_t biu_lock; | 686 | spinlock_t biu_lock; |
| 701 | enum efx_int_mode interrupt_mode; | 687 | enum efx_int_mode interrupt_mode; |
| @@ -719,7 +705,7 @@ struct efx_nic { | |||
| 719 | 705 | ||
| 720 | unsigned n_rx_nodesc_drop_cnt; | 706 | unsigned n_rx_nodesc_drop_cnt; |
| 721 | 707 | ||
| 722 | void *nic_data; | 708 | struct falcon_nic_data *nic_data; |
| 723 | 709 | ||
| 724 | struct mutex mac_lock; | 710 | struct mutex mac_lock; |
| 725 | int port_enabled; | 711 | int port_enabled; |
| @@ -760,6 +746,20 @@ struct efx_nic { | |||
| 760 | void *loopback_selftest; | 746 | void *loopback_selftest; |
| 761 | }; | 747 | }; |
| 762 | 748 | ||
| 749 | static inline int efx_dev_registered(struct efx_nic *efx) | ||
| 750 | { | ||
| 751 | return efx->net_dev->reg_state == NETREG_REGISTERED; | ||
| 752 | } | ||
| 753 | |||
| 754 | /* Net device name, for inclusion in log messages if it has been registered. | ||
| 755 | * Use efx->name not efx->net_dev->name so that races with (un)registration | ||
| 756 | * are harmless. | ||
| 757 | */ | ||
| 758 | static inline const char *efx_dev_name(struct efx_nic *efx) | ||
| 759 | { | ||
| 760 | return efx_dev_registered(efx) ? efx->name : ""; | ||
| 761 | } | ||
| 762 | |||
| 763 | /** | 763 | /** |
| 764 | * struct efx_nic_type - Efx device type definition | 764 | * struct efx_nic_type - Efx device type definition |
| 765 | * @mem_bar: Memory BAR number | 765 | * @mem_bar: Memory BAR number |
| @@ -795,7 +795,7 @@ struct efx_nic_type { | |||
| 795 | unsigned int txd_ring_mask; | 795 | unsigned int txd_ring_mask; |
| 796 | unsigned int rxd_ring_mask; | 796 | unsigned int rxd_ring_mask; |
| 797 | unsigned int evq_size; | 797 | unsigned int evq_size; |
| 798 | dma_addr_t max_dma_mask; | 798 | u64 max_dma_mask; |
| 799 | unsigned int tx_dma_mask; | 799 | unsigned int tx_dma_mask; |
| 800 | unsigned bug5391_mask; | 800 | unsigned bug5391_mask; |
| 801 | 801 | ||
diff --git a/drivers/net/sfc/rx.c b/drivers/net/sfc/rx.c index 670622373ddf..601b001437c0 100644 --- a/drivers/net/sfc/rx.c +++ b/drivers/net/sfc/rx.c | |||
| @@ -86,14 +86,17 @@ static unsigned int rx_refill_limit = 95; | |||
| 86 | */ | 86 | */ |
| 87 | #define EFX_RXD_HEAD_ROOM 2 | 87 | #define EFX_RXD_HEAD_ROOM 2 |
| 88 | 88 | ||
| 89 | /* Macros for zero-order pages (potentially) containing multiple RX buffers */ | 89 | static inline unsigned int efx_rx_buf_offset(struct efx_rx_buffer *buf) |
| 90 | #define RX_DATA_OFFSET(_data) \ | 90 | { |
| 91 | (((unsigned long) (_data)) & (PAGE_SIZE-1)) | 91 | /* Offset is always within one page, so we don't need to consider |
| 92 | #define RX_BUF_OFFSET(_rx_buf) \ | 92 | * the page order. |
| 93 | RX_DATA_OFFSET((_rx_buf)->data) | 93 | */ |
| 94 | 94 | return (__force unsigned long) buf->data & (PAGE_SIZE - 1); | |
| 95 | #define RX_PAGE_SIZE(_efx) \ | 95 | } |
| 96 | (PAGE_SIZE * (1u << (_efx)->rx_buffer_order)) | 96 | static inline unsigned int efx_rx_buf_size(struct efx_nic *efx) |
| 97 | { | ||
| 98 | return PAGE_SIZE << efx->rx_buffer_order; | ||
| 99 | } | ||
| 97 | 100 | ||
| 98 | 101 | ||
| 99 | /************************************************************************** | 102 | /************************************************************************** |
| @@ -106,7 +109,7 @@ static unsigned int rx_refill_limit = 95; | |||
| 106 | static int efx_lro_get_skb_hdr(struct sk_buff *skb, void **ip_hdr, | 109 | static int efx_lro_get_skb_hdr(struct sk_buff *skb, void **ip_hdr, |
| 107 | void **tcpudp_hdr, u64 *hdr_flags, void *priv) | 110 | void **tcpudp_hdr, u64 *hdr_flags, void *priv) |
| 108 | { | 111 | { |
| 109 | struct efx_channel *channel = (struct efx_channel *)priv; | 112 | struct efx_channel *channel = priv; |
| 110 | struct iphdr *iph; | 113 | struct iphdr *iph; |
| 111 | struct tcphdr *th; | 114 | struct tcphdr *th; |
| 112 | 115 | ||
| @@ -131,12 +134,12 @@ static int efx_get_frag_hdr(struct skb_frag_struct *frag, void **mac_hdr, | |||
| 131 | void **ip_hdr, void **tcpudp_hdr, u64 *hdr_flags, | 134 | void **ip_hdr, void **tcpudp_hdr, u64 *hdr_flags, |
| 132 | void *priv) | 135 | void *priv) |
| 133 | { | 136 | { |
| 134 | struct efx_channel *channel = (struct efx_channel *)priv; | 137 | struct efx_channel *channel = priv; |
| 135 | struct ethhdr *eh; | 138 | struct ethhdr *eh; |
| 136 | struct iphdr *iph; | 139 | struct iphdr *iph; |
| 137 | 140 | ||
| 138 | /* We support EtherII and VLAN encapsulated IPv4 */ | 141 | /* We support EtherII and VLAN encapsulated IPv4 */ |
| 139 | eh = (struct ethhdr *)(page_address(frag->page) + frag->page_offset); | 142 | eh = page_address(frag->page) + frag->page_offset; |
| 140 | *mac_hdr = eh; | 143 | *mac_hdr = eh; |
| 141 | 144 | ||
| 142 | if (eh->h_proto == htons(ETH_P_IP)) { | 145 | if (eh->h_proto == htons(ETH_P_IP)) { |
| @@ -269,7 +272,7 @@ static inline int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, | |||
| 269 | return -ENOMEM; | 272 | return -ENOMEM; |
| 270 | 273 | ||
| 271 | dma_addr = pci_map_page(efx->pci_dev, rx_buf->page, | 274 | dma_addr = pci_map_page(efx->pci_dev, rx_buf->page, |
| 272 | 0, RX_PAGE_SIZE(efx), | 275 | 0, efx_rx_buf_size(efx), |
| 273 | PCI_DMA_FROMDEVICE); | 276 | PCI_DMA_FROMDEVICE); |
| 274 | 277 | ||
| 275 | if (unlikely(pci_dma_mapping_error(dma_addr))) { | 278 | if (unlikely(pci_dma_mapping_error(dma_addr))) { |
| @@ -280,14 +283,14 @@ static inline int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, | |||
| 280 | 283 | ||
| 281 | rx_queue->buf_page = rx_buf->page; | 284 | rx_queue->buf_page = rx_buf->page; |
| 282 | rx_queue->buf_dma_addr = dma_addr; | 285 | rx_queue->buf_dma_addr = dma_addr; |
| 283 | rx_queue->buf_data = ((char *) page_address(rx_buf->page) + | 286 | rx_queue->buf_data = (page_address(rx_buf->page) + |
| 284 | EFX_PAGE_IP_ALIGN); | 287 | EFX_PAGE_IP_ALIGN); |
| 285 | } | 288 | } |
| 286 | 289 | ||
| 287 | offset = RX_DATA_OFFSET(rx_queue->buf_data); | ||
| 288 | rx_buf->len = bytes; | 290 | rx_buf->len = bytes; |
| 289 | rx_buf->dma_addr = rx_queue->buf_dma_addr + offset; | ||
| 290 | rx_buf->data = rx_queue->buf_data; | 291 | rx_buf->data = rx_queue->buf_data; |
| 292 | offset = efx_rx_buf_offset(rx_buf); | ||
| 293 | rx_buf->dma_addr = rx_queue->buf_dma_addr + offset; | ||
| 291 | 294 | ||
| 292 | /* Try to pack multiple buffers per page */ | 295 | /* Try to pack multiple buffers per page */ |
| 293 | if (efx->rx_buffer_order == 0) { | 296 | if (efx->rx_buffer_order == 0) { |
| @@ -295,7 +298,7 @@ static inline int efx_init_rx_buffer_page(struct efx_rx_queue *rx_queue, | |||
| 295 | rx_queue->buf_data += ((bytes + 0x1ff) & ~0x1ff); | 298 | rx_queue->buf_data += ((bytes + 0x1ff) & ~0x1ff); |
| 296 | offset += ((bytes + 0x1ff) & ~0x1ff); | 299 | offset += ((bytes + 0x1ff) & ~0x1ff); |
| 297 | 300 | ||
| 298 | space = RX_PAGE_SIZE(efx) - offset; | 301 | space = efx_rx_buf_size(efx) - offset; |
| 299 | if (space >= bytes) { | 302 | if (space >= bytes) { |
| 300 | /* Refs dropped on kernel releasing each skb */ | 303 | /* Refs dropped on kernel releasing each skb */ |
| 301 | get_page(rx_queue->buf_page); | 304 | get_page(rx_queue->buf_page); |
| @@ -344,7 +347,8 @@ static inline void efx_unmap_rx_buffer(struct efx_nic *efx, | |||
| 344 | EFX_BUG_ON_PARANOID(rx_buf->skb); | 347 | EFX_BUG_ON_PARANOID(rx_buf->skb); |
| 345 | if (rx_buf->unmap_addr) { | 348 | if (rx_buf->unmap_addr) { |
| 346 | pci_unmap_page(efx->pci_dev, rx_buf->unmap_addr, | 349 | pci_unmap_page(efx->pci_dev, rx_buf->unmap_addr, |
| 347 | RX_PAGE_SIZE(efx), PCI_DMA_FROMDEVICE); | 350 | efx_rx_buf_size(efx), |
| 351 | PCI_DMA_FROMDEVICE); | ||
| 348 | rx_buf->unmap_addr = 0; | 352 | rx_buf->unmap_addr = 0; |
| 349 | } | 353 | } |
| 350 | } else if (likely(rx_buf->skb)) { | 354 | } else if (likely(rx_buf->skb)) { |
| @@ -400,9 +404,10 @@ static int __efx_fast_push_rx_descriptors(struct efx_rx_queue *rx_queue, | |||
| 400 | return 0; | 404 | return 0; |
| 401 | 405 | ||
| 402 | /* Record minimum fill level */ | 406 | /* Record minimum fill level */ |
| 403 | if (unlikely(fill_level < rx_queue->min_fill)) | 407 | if (unlikely(fill_level < rx_queue->min_fill)) { |
| 404 | if (fill_level) | 408 | if (fill_level) |
| 405 | rx_queue->min_fill = fill_level; | 409 | rx_queue->min_fill = fill_level; |
| 410 | } | ||
| 406 | 411 | ||
| 407 | /* Acquire RX add lock. If this lock is contended, then a fast | 412 | /* Acquire RX add lock. If this lock is contended, then a fast |
| 408 | * fill must already be in progress (e.g. in the refill | 413 | * fill must already be in progress (e.g. in the refill |
| @@ -552,7 +557,7 @@ static inline void efx_rx_packet_lro(struct efx_channel *channel, | |||
| 552 | struct skb_frag_struct frags; | 557 | struct skb_frag_struct frags; |
| 553 | 558 | ||
| 554 | frags.page = rx_buf->page; | 559 | frags.page = rx_buf->page; |
| 555 | frags.page_offset = RX_BUF_OFFSET(rx_buf); | 560 | frags.page_offset = efx_rx_buf_offset(rx_buf); |
| 556 | frags.size = rx_buf->len; | 561 | frags.size = rx_buf->len; |
| 557 | 562 | ||
| 558 | lro_receive_frags(lro_mgr, &frags, rx_buf->len, | 563 | lro_receive_frags(lro_mgr, &frags, rx_buf->len, |
| @@ -597,7 +602,7 @@ static inline struct sk_buff *efx_rx_mk_skb(struct efx_rx_buffer *rx_buf, | |||
| 597 | if (unlikely(rx_buf->len > hdr_len)) { | 602 | if (unlikely(rx_buf->len > hdr_len)) { |
| 598 | struct skb_frag_struct *frag = skb_shinfo(skb)->frags; | 603 | struct skb_frag_struct *frag = skb_shinfo(skb)->frags; |
| 599 | frag->page = rx_buf->page; | 604 | frag->page = rx_buf->page; |
| 600 | frag->page_offset = RX_BUF_OFFSET(rx_buf) + hdr_len; | 605 | frag->page_offset = efx_rx_buf_offset(rx_buf) + hdr_len; |
| 601 | frag->size = skb->len - hdr_len; | 606 | frag->size = skb->len - hdr_len; |
| 602 | skb_shinfo(skb)->nr_frags = 1; | 607 | skb_shinfo(skb)->nr_frags = 1; |
| 603 | skb->data_len = frag->size; | 608 | skb->data_len = frag->size; |
| @@ -851,7 +856,8 @@ void efx_fini_rx_queue(struct efx_rx_queue *rx_queue) | |||
| 851 | /* For a page that is part-way through splitting into RX buffers */ | 856 | /* For a page that is part-way through splitting into RX buffers */ |
| 852 | if (rx_queue->buf_page != NULL) { | 857 | if (rx_queue->buf_page != NULL) { |
| 853 | pci_unmap_page(rx_queue->efx->pci_dev, rx_queue->buf_dma_addr, | 858 | pci_unmap_page(rx_queue->efx->pci_dev, rx_queue->buf_dma_addr, |
| 854 | RX_PAGE_SIZE(rx_queue->efx), PCI_DMA_FROMDEVICE); | 859 | efx_rx_buf_size(rx_queue->efx), |
| 860 | PCI_DMA_FROMDEVICE); | ||
| 855 | __free_pages(rx_queue->buf_page, | 861 | __free_pages(rx_queue->buf_page, |
| 856 | rx_queue->efx->rx_buffer_order); | 862 | rx_queue->efx->rx_buffer_order); |
| 857 | rx_queue->buf_page = NULL; | 863 | rx_queue->buf_page = NULL; |
diff --git a/drivers/net/sfc/selftest.c b/drivers/net/sfc/selftest.c index cbda15946e8f..3b2de9fe7f27 100644 --- a/drivers/net/sfc/selftest.c +++ b/drivers/net/sfc/selftest.c | |||
| @@ -290,7 +290,7 @@ void efx_loopback_rx_packet(struct efx_nic *efx, | |||
| 290 | 290 | ||
| 291 | payload = &state->payload; | 291 | payload = &state->payload; |
| 292 | 292 | ||
| 293 | received = (struct efx_loopback_payload *)(char *) buf_ptr; | 293 | received = (struct efx_loopback_payload *) buf_ptr; |
| 294 | received->ip.saddr = payload->ip.saddr; | 294 | received->ip.saddr = payload->ip.saddr; |
| 295 | received->ip.check = payload->ip.check; | 295 | received->ip.check = payload->ip.check; |
| 296 | 296 | ||
| @@ -424,10 +424,10 @@ static int efx_tx_loopback(struct efx_tx_queue *tx_queue) | |||
| 424 | * interrupt handler. */ | 424 | * interrupt handler. */ |
| 425 | smp_wmb(); | 425 | smp_wmb(); |
| 426 | 426 | ||
| 427 | if (NET_DEV_REGISTERED(efx)) | 427 | if (efx_dev_registered(efx)) |
| 428 | netif_tx_lock_bh(efx->net_dev); | 428 | netif_tx_lock_bh(efx->net_dev); |
| 429 | rc = efx_xmit(efx, tx_queue, skb); | 429 | rc = efx_xmit(efx, tx_queue, skb); |
| 430 | if (NET_DEV_REGISTERED(efx)) | 430 | if (efx_dev_registered(efx)) |
| 431 | netif_tx_unlock_bh(efx->net_dev); | 431 | netif_tx_unlock_bh(efx->net_dev); |
| 432 | 432 | ||
| 433 | if (rc != NETDEV_TX_OK) { | 433 | if (rc != NETDEV_TX_OK) { |
| @@ -453,7 +453,7 @@ static int efx_rx_loopback(struct efx_tx_queue *tx_queue, | |||
| 453 | int tx_done = 0, rx_good, rx_bad; | 453 | int tx_done = 0, rx_good, rx_bad; |
| 454 | int i, rc = 0; | 454 | int i, rc = 0; |
| 455 | 455 | ||
| 456 | if (NET_DEV_REGISTERED(efx)) | 456 | if (efx_dev_registered(efx)) |
| 457 | netif_tx_lock_bh(efx->net_dev); | 457 | netif_tx_lock_bh(efx->net_dev); |
| 458 | 458 | ||
| 459 | /* Count the number of tx completions, and decrement the refcnt. Any | 459 | /* Count the number of tx completions, and decrement the refcnt. Any |
| @@ -465,7 +465,7 @@ static int efx_rx_loopback(struct efx_tx_queue *tx_queue, | |||
| 465 | dev_kfree_skb_any(skb); | 465 | dev_kfree_skb_any(skb); |
| 466 | } | 466 | } |
| 467 | 467 | ||
| 468 | if (NET_DEV_REGISTERED(efx)) | 468 | if (efx_dev_registered(efx)) |
| 469 | netif_tx_unlock_bh(efx->net_dev); | 469 | netif_tx_unlock_bh(efx->net_dev); |
| 470 | 470 | ||
| 471 | /* Check TX completion and received packet counts */ | 471 | /* Check TX completion and received packet counts */ |
| @@ -517,6 +517,8 @@ efx_test_loopback(struct efx_tx_queue *tx_queue, | |||
| 517 | state->packet_count = min(1 << (i << 2), state->packet_count); | 517 | state->packet_count = min(1 << (i << 2), state->packet_count); |
| 518 | state->skbs = kzalloc(sizeof(state->skbs[0]) * | 518 | state->skbs = kzalloc(sizeof(state->skbs[0]) * |
| 519 | state->packet_count, GFP_KERNEL); | 519 | state->packet_count, GFP_KERNEL); |
| 520 | if (!state->skbs) | ||
| 521 | return -ENOMEM; | ||
| 520 | state->flush = 0; | 522 | state->flush = 0; |
| 521 | 523 | ||
| 522 | EFX_LOG(efx, "TX queue %d testing %s loopback with %d " | 524 | EFX_LOG(efx, "TX queue %d testing %s loopback with %d " |
| @@ -700,7 +702,7 @@ int efx_offline_test(struct efx_nic *efx, | |||
| 700 | * "flushing" so all inflight packets are dropped */ | 702 | * "flushing" so all inflight packets are dropped */ |
| 701 | BUG_ON(efx->loopback_selftest); | 703 | BUG_ON(efx->loopback_selftest); |
| 702 | state->flush = 1; | 704 | state->flush = 1; |
| 703 | efx->loopback_selftest = (void *)state; | 705 | efx->loopback_selftest = state; |
| 704 | 706 | ||
| 705 | rc = efx_test_loopbacks(efx, tests, loopback_modes); | 707 | rc = efx_test_loopbacks(efx, tests, loopback_modes); |
| 706 | 708 | ||
diff --git a/drivers/net/sfc/sfe4001.c b/drivers/net/sfc/sfe4001.c index 725d1a539c49..66a0d1442aba 100644 --- a/drivers/net/sfc/sfe4001.c +++ b/drivers/net/sfc/sfe4001.c | |||
| @@ -116,18 +116,18 @@ void sfe4001_poweroff(struct efx_nic *efx) | |||
| 116 | 116 | ||
| 117 | /* Turn off all power rails */ | 117 | /* Turn off all power rails */ |
| 118 | out = 0xff; | 118 | out = 0xff; |
| 119 | (void) efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); | 119 | efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); |
| 120 | 120 | ||
| 121 | /* Disable port 1 outputs on IO expander */ | 121 | /* Disable port 1 outputs on IO expander */ |
| 122 | cfg = 0xff; | 122 | cfg = 0xff; |
| 123 | (void) efx_i2c_write(i2c, PCA9539, P1_CONFIG, &cfg, 1); | 123 | efx_i2c_write(i2c, PCA9539, P1_CONFIG, &cfg, 1); |
| 124 | 124 | ||
| 125 | /* Disable port 0 outputs on IO expander */ | 125 | /* Disable port 0 outputs on IO expander */ |
| 126 | cfg = 0xff; | 126 | cfg = 0xff; |
| 127 | (void) efx_i2c_write(i2c, PCA9539, P0_CONFIG, &cfg, 1); | 127 | efx_i2c_write(i2c, PCA9539, P0_CONFIG, &cfg, 1); |
| 128 | 128 | ||
| 129 | /* Clear any over-temperature alert */ | 129 | /* Clear any over-temperature alert */ |
| 130 | (void) efx_i2c_read(i2c, MAX6647, RSL, &in, 1); | 130 | efx_i2c_read(i2c, MAX6647, RSL, &in, 1); |
| 131 | } | 131 | } |
| 132 | 132 | ||
| 133 | /* The P0_EN_3V3X line on SFE4001 boards (from A2 onward) is connected | 133 | /* The P0_EN_3V3X line on SFE4001 boards (from A2 onward) is connected |
| @@ -253,14 +253,14 @@ done: | |||
| 253 | fail3: | 253 | fail3: |
| 254 | /* Turn off all power rails */ | 254 | /* Turn off all power rails */ |
| 255 | out = 0xff; | 255 | out = 0xff; |
| 256 | (void) efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); | 256 | efx_i2c_write(i2c, PCA9539, P0_OUT, &out, 1); |
| 257 | /* Disable port 1 outputs on IO expander */ | 257 | /* Disable port 1 outputs on IO expander */ |
| 258 | out = 0xff; | 258 | out = 0xff; |
| 259 | (void) efx_i2c_write(i2c, PCA9539, P1_CONFIG, &out, 1); | 259 | efx_i2c_write(i2c, PCA9539, P1_CONFIG, &out, 1); |
| 260 | fail2: | 260 | fail2: |
| 261 | /* Disable port 0 outputs on IO expander */ | 261 | /* Disable port 0 outputs on IO expander */ |
| 262 | out = 0xff; | 262 | out = 0xff; |
| 263 | (void) efx_i2c_write(i2c, PCA9539, P0_CONFIG, &out, 1); | 263 | efx_i2c_write(i2c, PCA9539, P0_CONFIG, &out, 1); |
| 264 | fail1: | 264 | fail1: |
| 265 | return rc; | 265 | return rc; |
| 266 | } | 266 | } |
diff --git a/drivers/net/sfc/tenxpress.c b/drivers/net/sfc/tenxpress.c index b1cd6deec01f..c0146061c326 100644 --- a/drivers/net/sfc/tenxpress.c +++ b/drivers/net/sfc/tenxpress.c | |||
| @@ -211,6 +211,8 @@ static int tenxpress_phy_init(struct efx_nic *efx) | |||
| 211 | int rc = 0; | 211 | int rc = 0; |
| 212 | 212 | ||
| 213 | phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL); | 213 | phy_data = kzalloc(sizeof(*phy_data), GFP_KERNEL); |
| 214 | if (!phy_data) | ||
| 215 | return -ENOMEM; | ||
| 214 | efx->phy_data = phy_data; | 216 | efx->phy_data = phy_data; |
| 215 | 217 | ||
| 216 | tenxpress_set_state(efx, TENXPRESS_STATUS_NORMAL); | 218 | tenxpress_set_state(efx, TENXPRESS_STATUS_NORMAL); |
| @@ -376,7 +378,7 @@ static void tenxpress_phy_reconfigure(struct efx_nic *efx) | |||
| 376 | * perform a special software reset */ | 378 | * perform a special software reset */ |
| 377 | if ((phy_data->tx_disabled && !efx->tx_disabled) || | 379 | if ((phy_data->tx_disabled && !efx->tx_disabled) || |
| 378 | loop_change) { | 380 | loop_change) { |
| 379 | (void) tenxpress_special_reset(efx); | 381 | tenxpress_special_reset(efx); |
| 380 | falcon_reset_xaui(efx); | 382 | falcon_reset_xaui(efx); |
| 381 | } | 383 | } |
| 382 | 384 | ||
diff --git a/drivers/net/sfc/tx.c b/drivers/net/sfc/tx.c index 9b436f5b4888..5cdd082ab8f6 100644 --- a/drivers/net/sfc/tx.c +++ b/drivers/net/sfc/tx.c | |||
| @@ -387,7 +387,7 @@ void efx_xmit_done(struct efx_tx_queue *tx_queue, unsigned int index) | |||
| 387 | if (unlikely(tx_queue->stopped)) { | 387 | if (unlikely(tx_queue->stopped)) { |
| 388 | fill_level = tx_queue->insert_count - tx_queue->read_count; | 388 | fill_level = tx_queue->insert_count - tx_queue->read_count; |
| 389 | if (fill_level < EFX_NETDEV_TX_THRESHOLD(tx_queue)) { | 389 | if (fill_level < EFX_NETDEV_TX_THRESHOLD(tx_queue)) { |
| 390 | EFX_BUG_ON_PARANOID(!NET_DEV_REGISTERED(efx)); | 390 | EFX_BUG_ON_PARANOID(!efx_dev_registered(efx)); |
| 391 | 391 | ||
| 392 | /* Do this under netif_tx_lock(), to avoid racing | 392 | /* Do this under netif_tx_lock(), to avoid racing |
| 393 | * with efx_xmit(). */ | 393 | * with efx_xmit(). */ |
| @@ -639,11 +639,12 @@ static void efx_tsoh_block_free(struct efx_tx_queue *tx_queue, | |||
| 639 | base_dma = tsoh->dma_addr & PAGE_MASK; | 639 | base_dma = tsoh->dma_addr & PAGE_MASK; |
| 640 | 640 | ||
| 641 | p = &tx_queue->tso_headers_free; | 641 | p = &tx_queue->tso_headers_free; |
| 642 | while (*p != NULL) | 642 | while (*p != NULL) { |
| 643 | if (((unsigned long)*p & PAGE_MASK) == base_kva) | 643 | if (((unsigned long)*p & PAGE_MASK) == base_kva) |
| 644 | *p = (*p)->next; | 644 | *p = (*p)->next; |
| 645 | else | 645 | else |
| 646 | p = &(*p)->next; | 646 | p = &(*p)->next; |
| 647 | } | ||
| 647 | 648 | ||
| 648 | pci_free_consistent(pci_dev, PAGE_SIZE, (void *)base_kva, base_dma); | 649 | pci_free_consistent(pci_dev, PAGE_SIZE, (void *)base_kva, base_dma); |
| 649 | } | 650 | } |
| @@ -939,9 +940,10 @@ static inline int tso_start_new_packet(struct efx_tx_queue *tx_queue, | |||
| 939 | 940 | ||
| 940 | /* Allocate a DMA-mapped header buffer. */ | 941 | /* Allocate a DMA-mapped header buffer. */ |
| 941 | if (likely(TSOH_SIZE(st->p.header_length) <= TSOH_STD_SIZE)) { | 942 | if (likely(TSOH_SIZE(st->p.header_length) <= TSOH_STD_SIZE)) { |
| 942 | if (tx_queue->tso_headers_free == NULL) | 943 | if (tx_queue->tso_headers_free == NULL) { |
| 943 | if (efx_tsoh_block_alloc(tx_queue)) | 944 | if (efx_tsoh_block_alloc(tx_queue)) |
| 944 | return -1; | 945 | return -1; |
| 946 | } | ||
| 945 | EFX_BUG_ON_PARANOID(!tx_queue->tso_headers_free); | 947 | EFX_BUG_ON_PARANOID(!tx_queue->tso_headers_free); |
| 946 | tsoh = tx_queue->tso_headers_free; | 948 | tsoh = tx_queue->tso_headers_free; |
| 947 | tx_queue->tso_headers_free = tsoh->next; | 949 | tx_queue->tso_headers_free = tsoh->next; |
| @@ -1106,9 +1108,10 @@ static void efx_fini_tso(struct efx_tx_queue *tx_queue) | |||
| 1106 | { | 1108 | { |
| 1107 | unsigned i; | 1109 | unsigned i; |
| 1108 | 1110 | ||
| 1109 | if (tx_queue->buffer) | 1111 | if (tx_queue->buffer) { |
| 1110 | for (i = 0; i <= tx_queue->efx->type->txd_ring_mask; ++i) | 1112 | for (i = 0; i <= tx_queue->efx->type->txd_ring_mask; ++i) |
| 1111 | efx_tsoh_free(tx_queue, &tx_queue->buffer[i]); | 1113 | efx_tsoh_free(tx_queue, &tx_queue->buffer[i]); |
| 1114 | } | ||
| 1112 | 1115 | ||
| 1113 | while (tx_queue->tso_headers_free != NULL) | 1116 | while (tx_queue->tso_headers_free != NULL) |
| 1114 | efx_tsoh_block_free(tx_queue, tx_queue->tso_headers_free, | 1117 | efx_tsoh_block_free(tx_queue, tx_queue->tso_headers_free, |
diff --git a/drivers/net/sfc/workarounds.h b/drivers/net/sfc/workarounds.h index dca62f190198..35ab19c27f8d 100644 --- a/drivers/net/sfc/workarounds.h +++ b/drivers/net/sfc/workarounds.h | |||
| @@ -16,7 +16,7 @@ | |||
| 16 | */ | 16 | */ |
| 17 | 17 | ||
| 18 | #define EFX_WORKAROUND_ALWAYS(efx) 1 | 18 | #define EFX_WORKAROUND_ALWAYS(efx) 1 |
| 19 | #define EFX_WORKAROUND_FALCON_A(efx) (FALCON_REV(efx) <= FALCON_REV_A1) | 19 | #define EFX_WORKAROUND_FALCON_A(efx) (falcon_rev(efx) <= FALCON_REV_A1) |
| 20 | 20 | ||
| 21 | /* XAUI resets if link not detected */ | 21 | /* XAUI resets if link not detected */ |
| 22 | #define EFX_WORKAROUND_5147 EFX_WORKAROUND_ALWAYS | 22 | #define EFX_WORKAROUND_5147 EFX_WORKAROUND_ALWAYS |
diff --git a/drivers/net/sfc/xfp_phy.c b/drivers/net/sfc/xfp_phy.c index 3b9f9ddbc372..f3684ad28887 100644 --- a/drivers/net/sfc/xfp_phy.c +++ b/drivers/net/sfc/xfp_phy.c | |||
| @@ -85,7 +85,9 @@ static int xfp_phy_init(struct efx_nic *efx) | |||
| 85 | int rc; | 85 | int rc; |
| 86 | 86 | ||
| 87 | phy_data = kzalloc(sizeof(struct xfp_phy_data), GFP_KERNEL); | 87 | phy_data = kzalloc(sizeof(struct xfp_phy_data), GFP_KERNEL); |
| 88 | efx->phy_data = (void *) phy_data; | 88 | if (!phy_data) |
| 89 | return -ENOMEM; | ||
| 90 | efx->phy_data = phy_data; | ||
| 89 | 91 | ||
| 90 | EFX_INFO(efx, "XFP: PHY ID reg %x (OUI %x model %x revision" | 92 | EFX_INFO(efx, "XFP: PHY ID reg %x (OUI %x model %x revision" |
| 91 | " %x)\n", devid, MDIO_ID_OUI(devid), MDIO_ID_MODEL(devid), | 93 | " %x)\n", devid, MDIO_ID_OUI(devid), MDIO_ID_MODEL(devid), |
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c index f226bcac7d17..3bb60530d4d7 100644 --- a/drivers/net/sky2.c +++ b/drivers/net/sky2.c | |||
| @@ -1159,17 +1159,9 @@ static int sky2_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |||
| 1159 | } | 1159 | } |
| 1160 | 1160 | ||
| 1161 | #ifdef SKY2_VLAN_TAG_USED | 1161 | #ifdef SKY2_VLAN_TAG_USED |
| 1162 | static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) | 1162 | static void sky2_set_vlan_mode(struct sky2_hw *hw, u16 port, bool onoff) |
| 1163 | { | 1163 | { |
| 1164 | struct sky2_port *sky2 = netdev_priv(dev); | 1164 | if (onoff) { |
| 1165 | struct sky2_hw *hw = sky2->hw; | ||
| 1166 | u16 port = sky2->port; | ||
| 1167 | |||
| 1168 | netif_tx_lock_bh(dev); | ||
| 1169 | napi_disable(&hw->napi); | ||
| 1170 | |||
| 1171 | sky2->vlgrp = grp; | ||
| 1172 | if (grp) { | ||
| 1173 | sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), | 1165 | sky2_write32(hw, SK_REG(port, RX_GMF_CTRL_T), |
| 1174 | RX_VLAN_STRIP_ON); | 1166 | RX_VLAN_STRIP_ON); |
| 1175 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), | 1167 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), |
| @@ -1180,6 +1172,19 @@ static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp | |||
| 1180 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), | 1172 | sky2_write32(hw, SK_REG(port, TX_GMF_CTRL_T), |
| 1181 | TX_VLAN_TAG_OFF); | 1173 | TX_VLAN_TAG_OFF); |
| 1182 | } | 1174 | } |
| 1175 | } | ||
| 1176 | |||
| 1177 | static void sky2_vlan_rx_register(struct net_device *dev, struct vlan_group *grp) | ||
| 1178 | { | ||
| 1179 | struct sky2_port *sky2 = netdev_priv(dev); | ||
| 1180 | struct sky2_hw *hw = sky2->hw; | ||
| 1181 | u16 port = sky2->port; | ||
| 1182 | |||
| 1183 | netif_tx_lock_bh(dev); | ||
| 1184 | napi_disable(&hw->napi); | ||
| 1185 | |||
| 1186 | sky2->vlgrp = grp; | ||
| 1187 | sky2_set_vlan_mode(hw, port, grp != NULL); | ||
| 1183 | 1188 | ||
| 1184 | sky2_read32(hw, B0_Y2_SP_LISR); | 1189 | sky2_read32(hw, B0_Y2_SP_LISR); |
| 1185 | napi_enable(&hw->napi); | 1190 | napi_enable(&hw->napi); |
| @@ -1418,6 +1423,10 @@ static int sky2_up(struct net_device *dev) | |||
| 1418 | sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map, | 1423 | sky2_prefetch_init(hw, txqaddr[port], sky2->tx_le_map, |
| 1419 | TX_RING_SIZE - 1); | 1424 | TX_RING_SIZE - 1); |
| 1420 | 1425 | ||
| 1426 | #ifdef SKY2_VLAN_TAG_USED | ||
| 1427 | sky2_set_vlan_mode(hw, port, sky2->vlgrp != NULL); | ||
| 1428 | #endif | ||
| 1429 | |||
| 1421 | err = sky2_rx_start(sky2); | 1430 | err = sky2_rx_start(sky2); |
| 1422 | if (err) | 1431 | if (err) |
| 1423 | goto err_out; | 1432 | goto err_out; |
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c index b4e7f30ea4e8..1aa425be3067 100644 --- a/drivers/net/sunhme.c +++ b/drivers/net/sunhme.c | |||
| @@ -111,7 +111,7 @@ static __inline__ void tx_add_log(struct happy_meal *hp, unsigned int a, unsigne | |||
| 111 | struct hme_tx_logent *tlp; | 111 | struct hme_tx_logent *tlp; |
| 112 | unsigned long flags; | 112 | unsigned long flags; |
| 113 | 113 | ||
| 114 | save_and_cli(flags); | 114 | local_irq_save(flags); |
| 115 | tlp = &tx_log[txlog_cur_entry]; | 115 | tlp = &tx_log[txlog_cur_entry]; |
| 116 | tlp->tstamp = (unsigned int)jiffies; | 116 | tlp->tstamp = (unsigned int)jiffies; |
| 117 | tlp->tx_new = hp->tx_new; | 117 | tlp->tx_new = hp->tx_new; |
| @@ -119,7 +119,7 @@ static __inline__ void tx_add_log(struct happy_meal *hp, unsigned int a, unsigne | |||
| 119 | tlp->action = a; | 119 | tlp->action = a; |
| 120 | tlp->status = s; | 120 | tlp->status = s; |
| 121 | txlog_cur_entry = (txlog_cur_entry + 1) & (TX_LOG_LEN - 1); | 121 | txlog_cur_entry = (txlog_cur_entry + 1) & (TX_LOG_LEN - 1); |
| 122 | restore_flags(flags); | 122 | local_irq_restore(flags); |
| 123 | } | 123 | } |
| 124 | static __inline__ void tx_dump_log(void) | 124 | static __inline__ void tx_dump_log(void) |
| 125 | { | 125 | { |
diff --git a/drivers/net/tokenring/3c359.h b/drivers/net/tokenring/3c359.h index b880cba0f6fd..74cf8e1a181b 100644 --- a/drivers/net/tokenring/3c359.h +++ b/drivers/net/tokenring/3c359.h | |||
| @@ -264,7 +264,7 @@ struct xl_private { | |||
| 264 | u16 asb; | 264 | u16 asb; |
| 265 | 265 | ||
| 266 | u8 __iomem *xl_mmio; | 266 | u8 __iomem *xl_mmio; |
| 267 | char *xl_card_name; | 267 | const char *xl_card_name; |
| 268 | struct pci_dev *pdev ; | 268 | struct pci_dev *pdev ; |
| 269 | 269 | ||
| 270 | spinlock_t xl_lock ; | 270 | spinlock_t xl_lock ; |
diff --git a/drivers/net/tokenring/olympic.h b/drivers/net/tokenring/olympic.h index c91956310fb2..10fbba08978f 100644 --- a/drivers/net/tokenring/olympic.h +++ b/drivers/net/tokenring/olympic.h | |||
| @@ -254,7 +254,7 @@ struct olympic_private { | |||
| 254 | u8 __iomem *olympic_mmio; | 254 | u8 __iomem *olympic_mmio; |
| 255 | u8 __iomem *olympic_lap; | 255 | u8 __iomem *olympic_lap; |
| 256 | struct pci_dev *pdev ; | 256 | struct pci_dev *pdev ; |
| 257 | char *olympic_card_name ; | 257 | const char *olympic_card_name; |
| 258 | 258 | ||
| 259 | spinlock_t olympic_lock ; | 259 | spinlock_t olympic_lock ; |
| 260 | 260 | ||
diff --git a/drivers/net/tulip/tulip_core.c b/drivers/net/tulip/tulip_core.c index f9d13fa05d64..55670b5eb611 100644 --- a/drivers/net/tulip/tulip_core.c +++ b/drivers/net/tulip/tulip_core.c | |||
| @@ -1729,12 +1729,15 @@ static int tulip_suspend (struct pci_dev *pdev, pm_message_t state) | |||
| 1729 | if (!dev) | 1729 | if (!dev) |
| 1730 | return -EINVAL; | 1730 | return -EINVAL; |
| 1731 | 1731 | ||
| 1732 | if (netif_running(dev)) | 1732 | if (!netif_running(dev)) |
| 1733 | tulip_down(dev); | 1733 | goto save_state; |
| 1734 | |||
| 1735 | tulip_down(dev); | ||
| 1734 | 1736 | ||
| 1735 | netif_device_detach(dev); | 1737 | netif_device_detach(dev); |
| 1736 | free_irq(dev->irq, dev); | 1738 | free_irq(dev->irq, dev); |
| 1737 | 1739 | ||
| 1740 | save_state: | ||
| 1738 | pci_save_state(pdev); | 1741 | pci_save_state(pdev); |
| 1739 | pci_disable_device(pdev); | 1742 | pci_disable_device(pdev); |
| 1740 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | 1743 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); |
| @@ -1754,6 +1757,9 @@ static int tulip_resume(struct pci_dev *pdev) | |||
| 1754 | pci_set_power_state(pdev, PCI_D0); | 1757 | pci_set_power_state(pdev, PCI_D0); |
| 1755 | pci_restore_state(pdev); | 1758 | pci_restore_state(pdev); |
| 1756 | 1759 | ||
| 1760 | if (!netif_running(dev)) | ||
| 1761 | return 0; | ||
| 1762 | |||
| 1757 | if ((retval = pci_enable_device(pdev))) { | 1763 | if ((retval = pci_enable_device(pdev))) { |
| 1758 | printk (KERN_ERR "tulip: pci_enable_device failed in resume\n"); | 1764 | printk (KERN_ERR "tulip: pci_enable_device failed in resume\n"); |
| 1759 | return retval; | 1765 | return retval; |
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c index 2511ca7a12aa..e9e628621639 100644 --- a/drivers/net/tulip/uli526x.c +++ b/drivers/net/tulip/uli526x.c | |||
| @@ -225,6 +225,9 @@ static void uli526x_set_filter_mode(struct net_device *); | |||
| 225 | static const struct ethtool_ops netdev_ethtool_ops; | 225 | static const struct ethtool_ops netdev_ethtool_ops; |
| 226 | static u16 read_srom_word(long, int); | 226 | static u16 read_srom_word(long, int); |
| 227 | static irqreturn_t uli526x_interrupt(int, void *); | 227 | static irqreturn_t uli526x_interrupt(int, void *); |
| 228 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 229 | static void uli526x_poll(struct net_device *dev); | ||
| 230 | #endif | ||
| 228 | static void uli526x_descriptor_init(struct uli526x_board_info *, unsigned long); | 231 | static void uli526x_descriptor_init(struct uli526x_board_info *, unsigned long); |
| 229 | static void allocate_rx_buffer(struct uli526x_board_info *); | 232 | static void allocate_rx_buffer(struct uli526x_board_info *); |
| 230 | static void update_cr6(u32, unsigned long); | 233 | static void update_cr6(u32, unsigned long); |
| @@ -339,6 +342,9 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev, | |||
| 339 | dev->get_stats = &uli526x_get_stats; | 342 | dev->get_stats = &uli526x_get_stats; |
| 340 | dev->set_multicast_list = &uli526x_set_filter_mode; | 343 | dev->set_multicast_list = &uli526x_set_filter_mode; |
| 341 | dev->ethtool_ops = &netdev_ethtool_ops; | 344 | dev->ethtool_ops = &netdev_ethtool_ops; |
| 345 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 346 | dev->poll_controller = &uli526x_poll; | ||
| 347 | #endif | ||
| 342 | spin_lock_init(&db->lock); | 348 | spin_lock_init(&db->lock); |
| 343 | 349 | ||
| 344 | 350 | ||
| @@ -681,8 +687,9 @@ static irqreturn_t uli526x_interrupt(int irq, void *dev_id) | |||
| 681 | db->cr5_data = inl(ioaddr + DCR5); | 687 | db->cr5_data = inl(ioaddr + DCR5); |
| 682 | outl(db->cr5_data, ioaddr + DCR5); | 688 | outl(db->cr5_data, ioaddr + DCR5); |
| 683 | if ( !(db->cr5_data & 0x180c1) ) { | 689 | if ( !(db->cr5_data & 0x180c1) ) { |
| 684 | spin_unlock_irqrestore(&db->lock, flags); | 690 | /* Restore CR7 to enable interrupt mask */ |
| 685 | outl(db->cr7_data, ioaddr + DCR7); | 691 | outl(db->cr7_data, ioaddr + DCR7); |
| 692 | spin_unlock_irqrestore(&db->lock, flags); | ||
| 686 | return IRQ_HANDLED; | 693 | return IRQ_HANDLED; |
| 687 | } | 694 | } |
| 688 | 695 | ||
| @@ -715,6 +722,13 @@ static irqreturn_t uli526x_interrupt(int irq, void *dev_id) | |||
| 715 | return IRQ_HANDLED; | 722 | return IRQ_HANDLED; |
| 716 | } | 723 | } |
| 717 | 724 | ||
| 725 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 726 | static void uli526x_poll(struct net_device *dev) | ||
| 727 | { | ||
| 728 | /* ISR grabs the irqsave lock, so this should be safe */ | ||
| 729 | uli526x_interrupt(dev->irq, dev); | ||
| 730 | } | ||
| 731 | #endif | ||
| 718 | 732 | ||
| 719 | /* | 733 | /* |
| 720 | * Free TX resource after TX complete | 734 | * Free TX resource after TX complete |
diff --git a/drivers/net/ucc_geth.c b/drivers/net/ucc_geth.c index ca0bdac07a78..fb0b918e5ccb 100644 --- a/drivers/net/ucc_geth.c +++ b/drivers/net/ucc_geth.c | |||
| @@ -237,7 +237,7 @@ static struct sk_buff *get_new_skb(struct ucc_geth_private *ugeth, | |||
| 237 | skb->dev = ugeth->dev; | 237 | skb->dev = ugeth->dev; |
| 238 | 238 | ||
| 239 | out_be32(&((struct qe_bd __iomem *)bd)->buf, | 239 | out_be32(&((struct qe_bd __iomem *)bd)->buf, |
| 240 | dma_map_single(NULL, | 240 | dma_map_single(&ugeth->dev->dev, |
| 241 | skb->data, | 241 | skb->data, |
| 242 | ugeth->ug_info->uf_info.max_rx_buf_length + | 242 | ugeth->ug_info->uf_info.max_rx_buf_length + |
| 243 | UCC_GETH_RX_DATA_BUF_ALIGNMENT, | 243 | UCC_GETH_RX_DATA_BUF_ALIGNMENT, |
| @@ -2158,7 +2158,7 @@ static void ucc_geth_memclean(struct ucc_geth_private *ugeth) | |||
| 2158 | continue; | 2158 | continue; |
| 2159 | for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { | 2159 | for (j = 0; j < ugeth->ug_info->bdRingLenTx[i]; j++) { |
| 2160 | if (ugeth->tx_skbuff[i][j]) { | 2160 | if (ugeth->tx_skbuff[i][j]) { |
| 2161 | dma_unmap_single(NULL, | 2161 | dma_unmap_single(&ugeth->dev->dev, |
| 2162 | in_be32(&((struct qe_bd __iomem *)bd)->buf), | 2162 | in_be32(&((struct qe_bd __iomem *)bd)->buf), |
| 2163 | (in_be32((u32 __iomem *)bd) & | 2163 | (in_be32((u32 __iomem *)bd) & |
| 2164 | BD_LENGTH_MASK), | 2164 | BD_LENGTH_MASK), |
| @@ -2186,7 +2186,7 @@ static void ucc_geth_memclean(struct ucc_geth_private *ugeth) | |||
| 2186 | bd = ugeth->p_rx_bd_ring[i]; | 2186 | bd = ugeth->p_rx_bd_ring[i]; |
| 2187 | for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { | 2187 | for (j = 0; j < ugeth->ug_info->bdRingLenRx[i]; j++) { |
| 2188 | if (ugeth->rx_skbuff[i][j]) { | 2188 | if (ugeth->rx_skbuff[i][j]) { |
| 2189 | dma_unmap_single(NULL, | 2189 | dma_unmap_single(&ugeth->dev->dev, |
| 2190 | in_be32(&((struct qe_bd __iomem *)bd)->buf), | 2190 | in_be32(&((struct qe_bd __iomem *)bd)->buf), |
| 2191 | ugeth->ug_info-> | 2191 | ugeth->ug_info-> |
| 2192 | uf_info.max_rx_buf_length + | 2192 | uf_info.max_rx_buf_length + |
| @@ -3406,7 +3406,8 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
| 3406 | 3406 | ||
| 3407 | /* set up the buffer descriptor */ | 3407 | /* set up the buffer descriptor */ |
| 3408 | out_be32(&((struct qe_bd __iomem *)bd)->buf, | 3408 | out_be32(&((struct qe_bd __iomem *)bd)->buf, |
| 3409 | dma_map_single(NULL, skb->data, skb->len, DMA_TO_DEVICE)); | 3409 | dma_map_single(&ugeth->dev->dev, skb->data, |
| 3410 | skb->len, DMA_TO_DEVICE)); | ||
| 3410 | 3411 | ||
| 3411 | /* printk(KERN_DEBUG"skb->data is 0x%x\n",skb->data); */ | 3412 | /* printk(KERN_DEBUG"skb->data is 0x%x\n",skb->data); */ |
| 3412 | 3413 | ||
diff --git a/drivers/net/ucc_geth_ethtool.c b/drivers/net/ucc_geth_ethtool.c index 299b7f176950..f5839c4a5cbd 100644 --- a/drivers/net/ucc_geth_ethtool.c +++ b/drivers/net/ucc_geth_ethtool.c | |||
| @@ -73,6 +73,7 @@ static char tx_fw_stat_gstrings[][ETH_GSTRING_LEN] = { | |||
| 73 | "tx-frames-ok", | 73 | "tx-frames-ok", |
| 74 | "tx-excessive-differ-frames", | 74 | "tx-excessive-differ-frames", |
| 75 | "tx-256-511-frames", | 75 | "tx-256-511-frames", |
| 76 | "tx-512-1023-frames", | ||
| 76 | "tx-1024-1518-frames", | 77 | "tx-1024-1518-frames", |
| 77 | "tx-jumbo-frames", | 78 | "tx-jumbo-frames", |
| 78 | }; | 79 | }; |
| @@ -308,7 +309,7 @@ static void uec_get_strings(struct net_device *netdev, u32 stringset, u8 *buf) | |||
| 308 | buf += UEC_TX_FW_STATS_LEN * ETH_GSTRING_LEN; | 309 | buf += UEC_TX_FW_STATS_LEN * ETH_GSTRING_LEN; |
| 309 | } | 310 | } |
| 310 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) | 311 | if (stats_mode & UCC_GETH_STATISTICS_GATHERING_MODE_FIRMWARE_RX) |
| 311 | memcpy(buf, tx_fw_stat_gstrings, UEC_RX_FW_STATS_LEN * | 312 | memcpy(buf, rx_fw_stat_gstrings, UEC_RX_FW_STATS_LEN * |
| 312 | ETH_GSTRING_LEN); | 313 | ETH_GSTRING_LEN); |
| 313 | } | 314 | } |
| 314 | 315 | ||
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index dc6f097062df..37ecf845edfe 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c | |||
| @@ -1440,6 +1440,10 @@ static const struct usb_device_id products [] = { | |||
| 1440 | // Belkin F5D5055 | 1440 | // Belkin F5D5055 |
| 1441 | USB_DEVICE(0x050d, 0x5055), | 1441 | USB_DEVICE(0x050d, 0x5055), |
| 1442 | .driver_info = (unsigned long) &ax88178_info, | 1442 | .driver_info = (unsigned long) &ax88178_info, |
| 1443 | }, { | ||
| 1444 | // Apple USB Ethernet Adapter | ||
| 1445 | USB_DEVICE(0x05ac, 0x1402), | ||
| 1446 | .driver_info = (unsigned long) &ax88772_info, | ||
| 1443 | }, | 1447 | }, |
| 1444 | { }, // END | 1448 | { }, // END |
| 1445 | }; | 1449 | }; |
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c index 3969b7a2b8e6..ae467f182c40 100644 --- a/drivers/net/usb/rndis_host.c +++ b/drivers/net/usb/rndis_host.c | |||
| @@ -194,7 +194,7 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf) | |||
| 194 | dev_dbg(&info->control->dev, | 194 | dev_dbg(&info->control->dev, |
| 195 | "rndis response error, code %d\n", retval); | 195 | "rndis response error, code %d\n", retval); |
| 196 | } | 196 | } |
| 197 | msleep(2); | 197 | msleep(20); |
| 198 | } | 198 | } |
| 199 | dev_dbg(&info->control->dev, "rndis response timeout\n"); | 199 | dev_dbg(&info->control->dev, "rndis response timeout\n"); |
| 200 | return -ETIMEDOUT; | 200 | return -ETIMEDOUT; |
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index f926b5ab3d09..5450eac9e263 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c | |||
| @@ -47,6 +47,9 @@ struct virtnet_info | |||
| 47 | /* Number of input buffers, and max we've ever had. */ | 47 | /* Number of input buffers, and max we've ever had. */ |
| 48 | unsigned int num, max; | 48 | unsigned int num, max; |
| 49 | 49 | ||
| 50 | /* For cleaning up after transmission. */ | ||
| 51 | struct tasklet_struct tasklet; | ||
| 52 | |||
| 50 | /* Receive & send queues. */ | 53 | /* Receive & send queues. */ |
| 51 | struct sk_buff_head recv; | 54 | struct sk_buff_head recv; |
| 52 | struct sk_buff_head send; | 55 | struct sk_buff_head send; |
| @@ -68,8 +71,13 @@ static void skb_xmit_done(struct virtqueue *svq) | |||
| 68 | 71 | ||
| 69 | /* Suppress further interrupts. */ | 72 | /* Suppress further interrupts. */ |
| 70 | svq->vq_ops->disable_cb(svq); | 73 | svq->vq_ops->disable_cb(svq); |
| 74 | |||
| 71 | /* We were waiting for more output buffers. */ | 75 | /* We were waiting for more output buffers. */ |
| 72 | netif_wake_queue(vi->dev); | 76 | netif_wake_queue(vi->dev); |
| 77 | |||
| 78 | /* Make sure we re-xmit last_xmit_skb: if there are no more packets | ||
| 79 | * queued, start_xmit won't be called. */ | ||
| 80 | tasklet_schedule(&vi->tasklet); | ||
| 73 | } | 81 | } |
| 74 | 82 | ||
| 75 | static void receive_skb(struct net_device *dev, struct sk_buff *skb, | 83 | static void receive_skb(struct net_device *dev, struct sk_buff *skb, |
| @@ -278,6 +286,18 @@ static int xmit_skb(struct virtnet_info *vi, struct sk_buff *skb) | |||
| 278 | return vi->svq->vq_ops->add_buf(vi->svq, sg, num, 0, skb); | 286 | return vi->svq->vq_ops->add_buf(vi->svq, sg, num, 0, skb); |
| 279 | } | 287 | } |
| 280 | 288 | ||
| 289 | static void xmit_tasklet(unsigned long data) | ||
| 290 | { | ||
| 291 | struct virtnet_info *vi = (void *)data; | ||
| 292 | |||
| 293 | netif_tx_lock_bh(vi->dev); | ||
| 294 | if (vi->last_xmit_skb && xmit_skb(vi, vi->last_xmit_skb) == 0) { | ||
| 295 | vi->svq->vq_ops->kick(vi->svq); | ||
| 296 | vi->last_xmit_skb = NULL; | ||
| 297 | } | ||
| 298 | netif_tx_unlock_bh(vi->dev); | ||
| 299 | } | ||
| 300 | |||
| 281 | static int start_xmit(struct sk_buff *skb, struct net_device *dev) | 301 | static int start_xmit(struct sk_buff *skb, struct net_device *dev) |
| 282 | { | 302 | { |
| 283 | struct virtnet_info *vi = netdev_priv(dev); | 303 | struct virtnet_info *vi = netdev_priv(dev); |
| @@ -287,21 +307,25 @@ again: | |||
| 287 | free_old_xmit_skbs(vi); | 307 | free_old_xmit_skbs(vi); |
| 288 | 308 | ||
| 289 | /* If we has a buffer left over from last time, send it now. */ | 309 | /* If we has a buffer left over from last time, send it now. */ |
| 290 | if (vi->last_xmit_skb) { | 310 | if (unlikely(vi->last_xmit_skb)) { |
| 291 | if (xmit_skb(vi, vi->last_xmit_skb) != 0) { | 311 | if (xmit_skb(vi, vi->last_xmit_skb) != 0) { |
| 292 | /* Drop this skb: we only queue one. */ | 312 | /* Drop this skb: we only queue one. */ |
| 293 | vi->dev->stats.tx_dropped++; | 313 | vi->dev->stats.tx_dropped++; |
| 294 | kfree_skb(skb); | 314 | kfree_skb(skb); |
| 315 | skb = NULL; | ||
| 295 | goto stop_queue; | 316 | goto stop_queue; |
| 296 | } | 317 | } |
| 297 | vi->last_xmit_skb = NULL; | 318 | vi->last_xmit_skb = NULL; |
| 298 | } | 319 | } |
| 299 | 320 | ||
| 300 | /* Put new one in send queue and do transmit */ | 321 | /* Put new one in send queue and do transmit */ |
| 301 | __skb_queue_head(&vi->send, skb); | 322 | if (likely(skb)) { |
| 302 | if (xmit_skb(vi, skb) != 0) { | 323 | __skb_queue_head(&vi->send, skb); |
| 303 | vi->last_xmit_skb = skb; | 324 | if (xmit_skb(vi, skb) != 0) { |
| 304 | goto stop_queue; | 325 | vi->last_xmit_skb = skb; |
| 326 | skb = NULL; | ||
| 327 | goto stop_queue; | ||
| 328 | } | ||
| 305 | } | 329 | } |
| 306 | done: | 330 | done: |
| 307 | vi->svq->vq_ops->kick(vi->svq); | 331 | vi->svq->vq_ops->kick(vi->svq); |
| @@ -428,6 +452,8 @@ static int virtnet_probe(struct virtio_device *vdev) | |||
| 428 | skb_queue_head_init(&vi->recv); | 452 | skb_queue_head_init(&vi->recv); |
| 429 | skb_queue_head_init(&vi->send); | 453 | skb_queue_head_init(&vi->send); |
| 430 | 454 | ||
| 455 | tasklet_init(&vi->tasklet, xmit_tasklet, (unsigned long)vi); | ||
| 456 | |||
| 431 | err = register_netdev(dev); | 457 | err = register_netdev(dev); |
| 432 | if (err) { | 458 | if (err) { |
| 433 | pr_debug("virtio_net: registering device failed\n"); | 459 | pr_debug("virtio_net: registering device failed\n"); |
| @@ -470,8 +496,7 @@ static void virtnet_remove(struct virtio_device *vdev) | |||
| 470 | kfree_skb(skb); | 496 | kfree_skb(skb); |
| 471 | vi->num--; | 497 | vi->num--; |
| 472 | } | 498 | } |
| 473 | while ((skb = __skb_dequeue(&vi->send)) != NULL) | 499 | __skb_queue_purge(&vi->send); |
| 474 | kfree_skb(skb); | ||
| 475 | 500 | ||
| 476 | BUG_ON(vi->num != 0); | 501 | BUG_ON(vi->num != 0); |
| 477 | 502 | ||
diff --git a/drivers/net/wan/hdlc.c b/drivers/net/wan/hdlc.c index 9a83c9d5b8cf..7f984895b0d5 100644 --- a/drivers/net/wan/hdlc.c +++ b/drivers/net/wan/hdlc.c | |||
| @@ -43,8 +43,7 @@ static const char* version = "HDLC support module revision 1.22"; | |||
| 43 | 43 | ||
| 44 | #undef DEBUG_LINK | 44 | #undef DEBUG_LINK |
| 45 | 45 | ||
| 46 | static struct hdlc_proto *first_proto = NULL; | 46 | static struct hdlc_proto *first_proto; |
| 47 | |||
| 48 | 47 | ||
| 49 | static int hdlc_change_mtu(struct net_device *dev, int new_mtu) | 48 | static int hdlc_change_mtu(struct net_device *dev, int new_mtu) |
| 50 | { | 49 | { |
| @@ -314,21 +313,25 @@ void detach_hdlc_protocol(struct net_device *dev) | |||
| 314 | 313 | ||
| 315 | void register_hdlc_protocol(struct hdlc_proto *proto) | 314 | void register_hdlc_protocol(struct hdlc_proto *proto) |
| 316 | { | 315 | { |
| 316 | rtnl_lock(); | ||
| 317 | proto->next = first_proto; | 317 | proto->next = first_proto; |
| 318 | first_proto = proto; | 318 | first_proto = proto; |
| 319 | rtnl_unlock(); | ||
| 319 | } | 320 | } |
| 320 | 321 | ||
| 321 | 322 | ||
| 322 | void unregister_hdlc_protocol(struct hdlc_proto *proto) | 323 | void unregister_hdlc_protocol(struct hdlc_proto *proto) |
| 323 | { | 324 | { |
| 324 | struct hdlc_proto **p = &first_proto; | 325 | struct hdlc_proto **p; |
| 325 | while (*p) { | 326 | |
| 326 | if (*p == proto) { | 327 | rtnl_lock(); |
| 327 | *p = proto->next; | 328 | p = &first_proto; |
| 328 | return; | 329 | while (*p != proto) { |
| 329 | } | 330 | BUG_ON(!*p); |
| 330 | p = &((*p)->next); | 331 | p = &((*p)->next); |
| 331 | } | 332 | } |
| 333 | *p = proto->next; | ||
| 334 | rtnl_unlock(); | ||
| 332 | } | 335 | } |
| 333 | 336 | ||
| 334 | 337 | ||
diff --git a/drivers/net/wan/hdlc_cisco.c b/drivers/net/wan/hdlc_cisco.c index 7133c688cf20..762d21c1c703 100644 --- a/drivers/net/wan/hdlc_cisco.c +++ b/drivers/net/wan/hdlc_cisco.c | |||
| @@ -56,6 +56,7 @@ struct cisco_state { | |||
| 56 | cisco_proto settings; | 56 | cisco_proto settings; |
| 57 | 57 | ||
| 58 | struct timer_list timer; | 58 | struct timer_list timer; |
| 59 | spinlock_t lock; | ||
| 59 | unsigned long last_poll; | 60 | unsigned long last_poll; |
| 60 | int up; | 61 | int up; |
| 61 | int request_sent; | 62 | int request_sent; |
| @@ -158,6 +159,7 @@ static int cisco_rx(struct sk_buff *skb) | |||
| 158 | { | 159 | { |
| 159 | struct net_device *dev = skb->dev; | 160 | struct net_device *dev = skb->dev; |
| 160 | hdlc_device *hdlc = dev_to_hdlc(dev); | 161 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 162 | struct cisco_state *st = state(hdlc); | ||
| 161 | struct hdlc_header *data = (struct hdlc_header*)skb->data; | 163 | struct hdlc_header *data = (struct hdlc_header*)skb->data; |
| 162 | struct cisco_packet *cisco_data; | 164 | struct cisco_packet *cisco_data; |
| 163 | struct in_device *in_dev; | 165 | struct in_device *in_dev; |
| @@ -220,11 +222,12 @@ static int cisco_rx(struct sk_buff *skb) | |||
| 220 | goto rx_error; | 222 | goto rx_error; |
| 221 | 223 | ||
| 222 | case CISCO_KEEPALIVE_REQ: | 224 | case CISCO_KEEPALIVE_REQ: |
| 223 | state(hdlc)->rxseq = ntohl(cisco_data->par1); | 225 | spin_lock(&st->lock); |
| 224 | if (state(hdlc)->request_sent && | 226 | st->rxseq = ntohl(cisco_data->par1); |
| 225 | ntohl(cisco_data->par2) == state(hdlc)->txseq) { | 227 | if (st->request_sent && |
| 226 | state(hdlc)->last_poll = jiffies; | 228 | ntohl(cisco_data->par2) == st->txseq) { |
| 227 | if (!state(hdlc)->up) { | 229 | st->last_poll = jiffies; |
| 230 | if (!st->up) { | ||
| 228 | u32 sec, min, hrs, days; | 231 | u32 sec, min, hrs, days; |
| 229 | sec = ntohl(cisco_data->time) / 1000; | 232 | sec = ntohl(cisco_data->time) / 1000; |
| 230 | min = sec / 60; sec -= min * 60; | 233 | min = sec / 60; sec -= min * 60; |
| @@ -232,12 +235,12 @@ static int cisco_rx(struct sk_buff *skb) | |||
| 232 | days = hrs / 24; hrs -= days * 24; | 235 | days = hrs / 24; hrs -= days * 24; |
| 233 | printk(KERN_INFO "%s: Link up (peer " | 236 | printk(KERN_INFO "%s: Link up (peer " |
| 234 | "uptime %ud%uh%um%us)\n", | 237 | "uptime %ud%uh%um%us)\n", |
| 235 | dev->name, days, hrs, | 238 | dev->name, days, hrs, min, sec); |
| 236 | min, sec); | ||
| 237 | netif_dormant_off(dev); | 239 | netif_dormant_off(dev); |
| 238 | state(hdlc)->up = 1; | 240 | st->up = 1; |
| 239 | } | 241 | } |
| 240 | } | 242 | } |
| 243 | spin_unlock(&st->lock); | ||
| 241 | 244 | ||
| 242 | dev_kfree_skb_any(skb); | 245 | dev_kfree_skb_any(skb); |
| 243 | return NET_RX_SUCCESS; | 246 | return NET_RX_SUCCESS; |
| @@ -261,24 +264,25 @@ static void cisco_timer(unsigned long arg) | |||
| 261 | { | 264 | { |
| 262 | struct net_device *dev = (struct net_device *)arg; | 265 | struct net_device *dev = (struct net_device *)arg; |
| 263 | hdlc_device *hdlc = dev_to_hdlc(dev); | 266 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 267 | struct cisco_state *st = state(hdlc); | ||
| 264 | 268 | ||
| 265 | if (state(hdlc)->up && | 269 | spin_lock(&st->lock); |
| 266 | time_after(jiffies, state(hdlc)->last_poll + | 270 | if (st->up && |
| 267 | state(hdlc)->settings.timeout * HZ)) { | 271 | time_after(jiffies, st->last_poll + st->settings.timeout * HZ)) { |
| 268 | state(hdlc)->up = 0; | 272 | st->up = 0; |
| 269 | printk(KERN_INFO "%s: Link down\n", dev->name); | 273 | printk(KERN_INFO "%s: Link down\n", dev->name); |
| 270 | netif_dormant_on(dev); | 274 | netif_dormant_on(dev); |
| 271 | } | 275 | } |
| 272 | 276 | ||
| 273 | cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ, | 277 | cisco_keepalive_send(dev, CISCO_KEEPALIVE_REQ, htonl(++st->txseq), |
| 274 | htonl(++state(hdlc)->txseq), | 278 | htonl(st->rxseq)); |
| 275 | htonl(state(hdlc)->rxseq)); | 279 | st->request_sent = 1; |
| 276 | state(hdlc)->request_sent = 1; | 280 | spin_unlock(&st->lock); |
| 277 | state(hdlc)->timer.expires = jiffies + | 281 | |
| 278 | state(hdlc)->settings.interval * HZ; | 282 | st->timer.expires = jiffies + st->settings.interval * HZ; |
| 279 | state(hdlc)->timer.function = cisco_timer; | 283 | st->timer.function = cisco_timer; |
| 280 | state(hdlc)->timer.data = arg; | 284 | st->timer.data = arg; |
| 281 | add_timer(&state(hdlc)->timer); | 285 | add_timer(&st->timer); |
| 282 | } | 286 | } |
| 283 | 287 | ||
| 284 | 288 | ||
| @@ -286,15 +290,20 @@ static void cisco_timer(unsigned long arg) | |||
| 286 | static void cisco_start(struct net_device *dev) | 290 | static void cisco_start(struct net_device *dev) |
| 287 | { | 291 | { |
| 288 | hdlc_device *hdlc = dev_to_hdlc(dev); | 292 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 289 | state(hdlc)->up = 0; | 293 | struct cisco_state *st = state(hdlc); |
| 290 | state(hdlc)->request_sent = 0; | 294 | unsigned long flags; |
| 291 | state(hdlc)->txseq = state(hdlc)->rxseq = 0; | 295 | |
| 292 | 296 | spin_lock_irqsave(&st->lock, flags); | |
| 293 | init_timer(&state(hdlc)->timer); | 297 | st->up = 0; |
| 294 | state(hdlc)->timer.expires = jiffies + HZ; /*First poll after 1s*/ | 298 | st->request_sent = 0; |
| 295 | state(hdlc)->timer.function = cisco_timer; | 299 | st->txseq = st->rxseq = 0; |
| 296 | state(hdlc)->timer.data = (unsigned long)dev; | 300 | spin_unlock_irqrestore(&st->lock, flags); |
| 297 | add_timer(&state(hdlc)->timer); | 301 | |
| 302 | init_timer(&st->timer); | ||
| 303 | st->timer.expires = jiffies + HZ; /* First poll after 1 s */ | ||
| 304 | st->timer.function = cisco_timer; | ||
| 305 | st->timer.data = (unsigned long)dev; | ||
| 306 | add_timer(&st->timer); | ||
| 298 | } | 307 | } |
| 299 | 308 | ||
| 300 | 309 | ||
| @@ -302,10 +311,16 @@ static void cisco_start(struct net_device *dev) | |||
| 302 | static void cisco_stop(struct net_device *dev) | 311 | static void cisco_stop(struct net_device *dev) |
| 303 | { | 312 | { |
| 304 | hdlc_device *hdlc = dev_to_hdlc(dev); | 313 | hdlc_device *hdlc = dev_to_hdlc(dev); |
| 305 | del_timer_sync(&state(hdlc)->timer); | 314 | struct cisco_state *st = state(hdlc); |
| 315 | unsigned long flags; | ||
| 316 | |||
| 317 | del_timer_sync(&st->timer); | ||
| 318 | |||
| 319 | spin_lock_irqsave(&st->lock, flags); | ||
| 306 | netif_dormant_on(dev); | 320 | netif_dormant_on(dev); |
| 307 | state(hdlc)->up = 0; | 321 | st->up = 0; |
| 308 | state(hdlc)->request_sent = 0; | 322 | st->request_sent = 0; |
| 323 | spin_unlock_irqrestore(&st->lock, flags); | ||
| 309 | } | 324 | } |
| 310 | 325 | ||
| 311 | 326 | ||
| @@ -367,6 +382,7 @@ static int cisco_ioctl(struct net_device *dev, struct ifreq *ifr) | |||
| 367 | return result; | 382 | return result; |
| 368 | 383 | ||
| 369 | memcpy(&state(hdlc)->settings, &new_settings, size); | 384 | memcpy(&state(hdlc)->settings, &new_settings, size); |
| 385 | spin_lock_init(&state(hdlc)->lock); | ||
| 370 | dev->hard_start_xmit = hdlc->xmit; | 386 | dev->hard_start_xmit = hdlc->xmit; |
| 371 | dev->header_ops = &cisco_header_ops; | 387 | dev->header_ops = &cisco_header_ops; |
| 372 | dev->type = ARPHRD_CISCO; | 388 | dev->type = ARPHRD_CISCO; |
diff --git a/drivers/net/wireless/airo.c b/drivers/net/wireless/airo.c index 4e1c690ff45f..32019fb878d8 100644 --- a/drivers/net/wireless/airo.c +++ b/drivers/net/wireless/airo.c | |||
| @@ -2905,7 +2905,7 @@ EXPORT_SYMBOL(init_airo_card); | |||
| 2905 | 2905 | ||
| 2906 | static int waitbusy (struct airo_info *ai) { | 2906 | static int waitbusy (struct airo_info *ai) { |
| 2907 | int delay = 0; | 2907 | int delay = 0; |
| 2908 | while ((IN4500 (ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { | 2908 | while ((IN4500(ai, COMMAND) & COMMAND_BUSY) && (delay < 10000)) { |
| 2909 | udelay (10); | 2909 | udelay (10); |
| 2910 | if ((++delay % 20) == 0) | 2910 | if ((++delay % 20) == 0) |
| 2911 | OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY); | 2911 | OUT4500(ai, EVACK, EV_CLEARCOMMANDBUSY); |
diff --git a/drivers/net/wireless/b43/b43.h b/drivers/net/wireless/b43/b43.h index 37783cdd301a..dfa4bdd5597c 100644 --- a/drivers/net/wireless/b43/b43.h +++ b/drivers/net/wireless/b43/b43.h | |||
| @@ -737,6 +737,7 @@ struct b43_wl { | |||
| 737 | struct ieee80211_tx_control beacon_txctl; | 737 | struct ieee80211_tx_control beacon_txctl; |
| 738 | bool beacon0_uploaded; | 738 | bool beacon0_uploaded; |
| 739 | bool beacon1_uploaded; | 739 | bool beacon1_uploaded; |
| 740 | bool beacon_templates_virgin; /* Never wrote the templates? */ | ||
| 740 | struct work_struct beacon_update_trigger; | 741 | struct work_struct beacon_update_trigger; |
| 741 | 742 | ||
| 742 | /* The current QOS parameters for the 4 queues. | 743 | /* The current QOS parameters for the 4 queues. |
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c index 8fdba9415c04..6c3d9ea0a9f8 100644 --- a/drivers/net/wireless/b43/main.c +++ b/drivers/net/wireless/b43/main.c | |||
| @@ -1544,6 +1544,30 @@ static void b43_write_probe_resp_template(struct b43_wldev *dev, | |||
| 1544 | kfree(probe_resp_data); | 1544 | kfree(probe_resp_data); |
| 1545 | } | 1545 | } |
| 1546 | 1546 | ||
| 1547 | static void b43_upload_beacon0(struct b43_wldev *dev) | ||
| 1548 | { | ||
| 1549 | struct b43_wl *wl = dev->wl; | ||
| 1550 | |||
| 1551 | if (wl->beacon0_uploaded) | ||
| 1552 | return; | ||
| 1553 | b43_write_beacon_template(dev, 0x68, 0x18); | ||
| 1554 | /* FIXME: Probe resp upload doesn't really belong here, | ||
| 1555 | * but we don't use that feature anyway. */ | ||
| 1556 | b43_write_probe_resp_template(dev, 0x268, 0x4A, | ||
| 1557 | &__b43_ratetable[3]); | ||
| 1558 | wl->beacon0_uploaded = 1; | ||
| 1559 | } | ||
| 1560 | |||
| 1561 | static void b43_upload_beacon1(struct b43_wldev *dev) | ||
| 1562 | { | ||
| 1563 | struct b43_wl *wl = dev->wl; | ||
| 1564 | |||
| 1565 | if (wl->beacon1_uploaded) | ||
| 1566 | return; | ||
| 1567 | b43_write_beacon_template(dev, 0x468, 0x1A); | ||
| 1568 | wl->beacon1_uploaded = 1; | ||
| 1569 | } | ||
| 1570 | |||
| 1547 | static void handle_irq_beacon(struct b43_wldev *dev) | 1571 | static void handle_irq_beacon(struct b43_wldev *dev) |
| 1548 | { | 1572 | { |
| 1549 | struct b43_wl *wl = dev->wl; | 1573 | struct b43_wl *wl = dev->wl; |
| @@ -1568,24 +1592,27 @@ static void handle_irq_beacon(struct b43_wldev *dev) | |||
| 1568 | return; | 1592 | return; |
| 1569 | } | 1593 | } |
| 1570 | 1594 | ||
| 1571 | if (!beacon0_valid) { | 1595 | if (unlikely(wl->beacon_templates_virgin)) { |
| 1572 | if (!wl->beacon0_uploaded) { | 1596 | /* We never uploaded a beacon before. |
| 1573 | b43_write_beacon_template(dev, 0x68, 0x18); | 1597 | * Upload both templates now, but only mark one valid. */ |
| 1574 | b43_write_probe_resp_template(dev, 0x268, 0x4A, | 1598 | wl->beacon_templates_virgin = 0; |
| 1575 | &__b43_ratetable[3]); | 1599 | b43_upload_beacon0(dev); |
| 1576 | wl->beacon0_uploaded = 1; | 1600 | b43_upload_beacon1(dev); |
| 1577 | } | ||
| 1578 | cmd = b43_read32(dev, B43_MMIO_MACCMD); | 1601 | cmd = b43_read32(dev, B43_MMIO_MACCMD); |
| 1579 | cmd |= B43_MACCMD_BEACON0_VALID; | 1602 | cmd |= B43_MACCMD_BEACON0_VALID; |
| 1580 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | 1603 | b43_write32(dev, B43_MMIO_MACCMD, cmd); |
| 1581 | } else if (!beacon1_valid) { | 1604 | } else { |
| 1582 | if (!wl->beacon1_uploaded) { | 1605 | if (!beacon0_valid) { |
| 1583 | b43_write_beacon_template(dev, 0x468, 0x1A); | 1606 | b43_upload_beacon0(dev); |
| 1584 | wl->beacon1_uploaded = 1; | 1607 | cmd = b43_read32(dev, B43_MMIO_MACCMD); |
| 1608 | cmd |= B43_MACCMD_BEACON0_VALID; | ||
| 1609 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | ||
| 1610 | } else if (!beacon1_valid) { | ||
| 1611 | b43_upload_beacon1(dev); | ||
| 1612 | cmd = b43_read32(dev, B43_MMIO_MACCMD); | ||
| 1613 | cmd |= B43_MACCMD_BEACON1_VALID; | ||
| 1614 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | ||
| 1585 | } | 1615 | } |
| 1586 | cmd = b43_read32(dev, B43_MMIO_MACCMD); | ||
| 1587 | cmd |= B43_MACCMD_BEACON1_VALID; | ||
| 1588 | b43_write32(dev, B43_MMIO_MACCMD, cmd); | ||
| 1589 | } | 1616 | } |
| 1590 | } | 1617 | } |
| 1591 | 1618 | ||
| @@ -4073,6 +4100,9 @@ static int b43_op_start(struct ieee80211_hw *hw) | |||
| 4073 | wl->filter_flags = 0; | 4100 | wl->filter_flags = 0; |
| 4074 | wl->radiotap_enabled = 0; | 4101 | wl->radiotap_enabled = 0; |
| 4075 | b43_qos_clear(wl); | 4102 | b43_qos_clear(wl); |
| 4103 | wl->beacon0_uploaded = 0; | ||
| 4104 | wl->beacon1_uploaded = 0; | ||
| 4105 | wl->beacon_templates_virgin = 1; | ||
| 4076 | 4106 | ||
| 4077 | /* First register RFkill. | 4107 | /* First register RFkill. |
| 4078 | * LEDs that are registered later depend on it. */ | 4108 | * LEDs that are registered later depend on it. */ |
| @@ -4241,7 +4271,9 @@ static void b43_chip_reset(struct work_struct *work) | |||
| 4241 | goto out; | 4271 | goto out; |
| 4242 | } | 4272 | } |
| 4243 | } | 4273 | } |
| 4244 | out: | 4274 | out: |
| 4275 | if (err) | ||
| 4276 | wl->current_dev = NULL; /* Failed to init the dev. */ | ||
| 4245 | mutex_unlock(&wl->mutex); | 4277 | mutex_unlock(&wl->mutex); |
| 4246 | if (err) | 4278 | if (err) |
| 4247 | b43err(wl, "Controller restart FAILED\n"); | 4279 | b43err(wl, "Controller restart FAILED\n"); |
| @@ -4382,9 +4414,11 @@ static void b43_one_core_detach(struct ssb_device *dev) | |||
| 4382 | struct b43_wldev *wldev; | 4414 | struct b43_wldev *wldev; |
| 4383 | struct b43_wl *wl; | 4415 | struct b43_wl *wl; |
| 4384 | 4416 | ||
| 4417 | /* Do not cancel ieee80211-workqueue based work here. | ||
| 4418 | * See comment in b43_remove(). */ | ||
| 4419 | |||
| 4385 | wldev = ssb_get_drvdata(dev); | 4420 | wldev = ssb_get_drvdata(dev); |
| 4386 | wl = wldev->wl; | 4421 | wl = wldev->wl; |
| 4387 | cancel_work_sync(&wldev->restart_work); | ||
| 4388 | b43_debugfs_remove_device(wldev); | 4422 | b43_debugfs_remove_device(wldev); |
| 4389 | b43_wireless_core_detach(wldev); | 4423 | b43_wireless_core_detach(wldev); |
| 4390 | list_del(&wldev->list); | 4424 | list_del(&wldev->list); |
| @@ -4569,6 +4603,10 @@ static void b43_remove(struct ssb_device *dev) | |||
| 4569 | struct b43_wl *wl = ssb_get_devtypedata(dev); | 4603 | struct b43_wl *wl = ssb_get_devtypedata(dev); |
| 4570 | struct b43_wldev *wldev = ssb_get_drvdata(dev); | 4604 | struct b43_wldev *wldev = ssb_get_drvdata(dev); |
| 4571 | 4605 | ||
| 4606 | /* We must cancel any work here before unregistering from ieee80211, | ||
| 4607 | * as the ieee80211 unreg will destroy the workqueue. */ | ||
| 4608 | cancel_work_sync(&wldev->restart_work); | ||
| 4609 | |||
| 4572 | B43_WARN_ON(!wl); | 4610 | B43_WARN_ON(!wl); |
| 4573 | if (wl->current_dev == wldev) | 4611 | if (wl->current_dev == wldev) |
| 4574 | ieee80211_unregister_hw(wl->hw); | 4612 | ieee80211_unregister_hw(wl->hw); |
diff --git a/drivers/net/wireless/b43legacy/main.c b/drivers/net/wireless/b43legacy/main.c index 14a5eea2573e..204077c13870 100644 --- a/drivers/net/wireless/b43legacy/main.c +++ b/drivers/net/wireless/b43legacy/main.c | |||
| @@ -3039,7 +3039,6 @@ static void b43legacy_set_pretbtt(struct b43legacy_wldev *dev) | |||
| 3039 | /* Locking: wl->mutex */ | 3039 | /* Locking: wl->mutex */ |
| 3040 | static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) | 3040 | static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) |
| 3041 | { | 3041 | { |
| 3042 | struct b43legacy_wl *wl = dev->wl; | ||
| 3043 | struct b43legacy_phy *phy = &dev->phy; | 3042 | struct b43legacy_phy *phy = &dev->phy; |
| 3044 | u32 macctl; | 3043 | u32 macctl; |
| 3045 | 3044 | ||
| @@ -3054,12 +3053,6 @@ static void b43legacy_wireless_core_exit(struct b43legacy_wldev *dev) | |||
| 3054 | macctl |= B43legacy_MACCTL_PSM_JMP0; | 3053 | macctl |= B43legacy_MACCTL_PSM_JMP0; |
| 3055 | b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); | 3054 | b43legacy_write32(dev, B43legacy_MMIO_MACCTL, macctl); |
| 3056 | 3055 | ||
| 3057 | mutex_unlock(&wl->mutex); | ||
| 3058 | /* Must unlock as it would otherwise deadlock. No races here. | ||
| 3059 | * Cancel possibly pending workqueues. */ | ||
| 3060 | cancel_work_sync(&dev->restart_work); | ||
| 3061 | mutex_lock(&wl->mutex); | ||
| 3062 | |||
| 3063 | b43legacy_leds_exit(dev); | 3056 | b43legacy_leds_exit(dev); |
| 3064 | b43legacy_rng_exit(dev->wl); | 3057 | b43legacy_rng_exit(dev->wl); |
| 3065 | b43legacy_pio_free(dev); | 3058 | b43legacy_pio_free(dev); |
| @@ -3486,6 +3479,8 @@ static void b43legacy_chip_reset(struct work_struct *work) | |||
| 3486 | } | 3479 | } |
| 3487 | } | 3480 | } |
| 3488 | out: | 3481 | out: |
| 3482 | if (err) | ||
| 3483 | wl->current_dev = NULL; /* Failed to init the dev. */ | ||
| 3489 | mutex_unlock(&wl->mutex); | 3484 | mutex_unlock(&wl->mutex); |
| 3490 | if (err) | 3485 | if (err) |
| 3491 | b43legacyerr(wl, "Controller restart FAILED\n"); | 3486 | b43legacyerr(wl, "Controller restart FAILED\n"); |
| @@ -3618,9 +3613,11 @@ static void b43legacy_one_core_detach(struct ssb_device *dev) | |||
| 3618 | struct b43legacy_wldev *wldev; | 3613 | struct b43legacy_wldev *wldev; |
| 3619 | struct b43legacy_wl *wl; | 3614 | struct b43legacy_wl *wl; |
| 3620 | 3615 | ||
| 3616 | /* Do not cancel ieee80211-workqueue based work here. | ||
| 3617 | * See comment in b43legacy_remove(). */ | ||
| 3618 | |||
| 3621 | wldev = ssb_get_drvdata(dev); | 3619 | wldev = ssb_get_drvdata(dev); |
| 3622 | wl = wldev->wl; | 3620 | wl = wldev->wl; |
| 3623 | cancel_work_sync(&wldev->restart_work); | ||
| 3624 | b43legacy_debugfs_remove_device(wldev); | 3621 | b43legacy_debugfs_remove_device(wldev); |
| 3625 | b43legacy_wireless_core_detach(wldev); | 3622 | b43legacy_wireless_core_detach(wldev); |
| 3626 | list_del(&wldev->list); | 3623 | list_del(&wldev->list); |
| @@ -3789,6 +3786,10 @@ static void b43legacy_remove(struct ssb_device *dev) | |||
| 3789 | struct b43legacy_wl *wl = ssb_get_devtypedata(dev); | 3786 | struct b43legacy_wl *wl = ssb_get_devtypedata(dev); |
| 3790 | struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); | 3787 | struct b43legacy_wldev *wldev = ssb_get_drvdata(dev); |
| 3791 | 3788 | ||
| 3789 | /* We must cancel any work here before unregistering from ieee80211, | ||
| 3790 | * as the ieee80211 unreg will destroy the workqueue. */ | ||
| 3791 | cancel_work_sync(&wldev->restart_work); | ||
| 3792 | |||
| 3792 | B43legacy_WARN_ON(!wl); | 3793 | B43legacy_WARN_ON(!wl); |
| 3793 | if (wl->current_dev == wldev) | 3794 | if (wl->current_dev == wldev) |
| 3794 | ieee80211_unregister_hw(wl->hw); | 3795 | ieee80211_unregister_hw(wl->hw); |
diff --git a/drivers/net/wireless/ipw2200.c b/drivers/net/wireless/ipw2200.c index d74c061994ae..729336774828 100644 --- a/drivers/net/wireless/ipw2200.c +++ b/drivers/net/wireless/ipw2200.c | |||
| @@ -7558,8 +7558,31 @@ static int ipw_associate(void *data) | |||
| 7558 | priv->ieee->iw_mode == IW_MODE_ADHOC && | 7558 | priv->ieee->iw_mode == IW_MODE_ADHOC && |
| 7559 | priv->config & CFG_ADHOC_CREATE && | 7559 | priv->config & CFG_ADHOC_CREATE && |
| 7560 | priv->config & CFG_STATIC_ESSID && | 7560 | priv->config & CFG_STATIC_ESSID && |
| 7561 | priv->config & CFG_STATIC_CHANNEL && | 7561 | priv->config & CFG_STATIC_CHANNEL) { |
| 7562 | !list_empty(&priv->ieee->network_free_list)) { | 7562 | /* Use oldest network if the free list is empty */ |
| 7563 | if (list_empty(&priv->ieee->network_free_list)) { | ||
| 7564 | struct ieee80211_network *oldest = NULL; | ||
| 7565 | struct ieee80211_network *target; | ||
| 7566 | DECLARE_MAC_BUF(mac); | ||
| 7567 | |||
| 7568 | list_for_each_entry(target, &priv->ieee->network_list, list) { | ||
| 7569 | if ((oldest == NULL) || | ||
| 7570 | (target->last_scanned < oldest->last_scanned)) | ||
| 7571 | oldest = target; | ||
| 7572 | } | ||
| 7573 | |||
| 7574 | /* If there are no more slots, expire the oldest */ | ||
| 7575 | list_del(&oldest->list); | ||
| 7576 | target = oldest; | ||
| 7577 | IPW_DEBUG_ASSOC("Expired '%s' (%s) from " | ||
| 7578 | "network list.\n", | ||
| 7579 | escape_essid(target->ssid, | ||
| 7580 | target->ssid_len), | ||
| 7581 | print_mac(mac, target->bssid)); | ||
| 7582 | list_add_tail(&target->list, | ||
| 7583 | &priv->ieee->network_free_list); | ||
| 7584 | } | ||
| 7585 | |||
| 7563 | element = priv->ieee->network_free_list.next; | 7586 | element = priv->ieee->network_free_list.next; |
| 7564 | network = list_entry(element, struct ieee80211_network, list); | 7587 | network = list_entry(element, struct ieee80211_network, list); |
| 7565 | ipw_adhoc_create(priv, network); | 7588 | ipw_adhoc_create(priv, network); |
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c index c9847b1a67f7..3a7f0cb710ec 100644 --- a/drivers/net/wireless/iwlwifi/iwl-4965-rs.c +++ b/drivers/net/wireless/iwlwifi/iwl-4965-rs.c | |||
| @@ -1162,7 +1162,6 @@ static s32 rs_get_best_rate(struct iwl_priv *priv, | |||
| 1162 | 1162 | ||
| 1163 | /* Higher rate not available, use the original */ | 1163 | /* Higher rate not available, use the original */ |
| 1164 | } else { | 1164 | } else { |
| 1165 | new_rate = rate; | ||
| 1166 | break; | 1165 | break; |
| 1167 | } | 1166 | } |
| 1168 | } | 1167 | } |
| @@ -2009,7 +2008,7 @@ static void rs_rate_scale_perform(struct iwl_priv *priv, | |||
| 2009 | * 2) Not just finishing up a search | 2008 | * 2) Not just finishing up a search |
| 2010 | * 3) Allowing a new search | 2009 | * 3) Allowing a new search |
| 2011 | */ | 2010 | */ |
| 2012 | if (!update_lq && !done_search && !lq_sta->stay_in_tbl) { | 2011 | if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { |
| 2013 | /* Save current throughput to compare with "search" throughput*/ | 2012 | /* Save current throughput to compare with "search" throughput*/ |
| 2014 | lq_sta->last_tpt = current_tpt; | 2013 | lq_sta->last_tpt = current_tpt; |
| 2015 | 2014 | ||
diff --git a/drivers/net/wireless/libertas/debugfs.c b/drivers/net/wireless/libertas/debugfs.c index ad2fabca9116..0aa0ce3b2c42 100644 --- a/drivers/net/wireless/libertas/debugfs.c +++ b/drivers/net/wireless/libertas/debugfs.c | |||
| @@ -312,8 +312,8 @@ static ssize_t lbs_threshold_write(uint16_t tlv_type, uint16_t event_mask, | |||
| 312 | if (tlv_type != TLV_TYPE_BCNMISS) | 312 | if (tlv_type != TLV_TYPE_BCNMISS) |
| 313 | tlv->freq = freq; | 313 | tlv->freq = freq; |
| 314 | 314 | ||
| 315 | /* The command header, the event mask, and the one TLV */ | 315 | /* The command header, the action, the event mask, and one TLV */ |
| 316 | events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 2 + sizeof(*tlv)); | 316 | events->hdr.size = cpu_to_le16(sizeof(events->hdr) + 4 + sizeof(*tlv)); |
| 317 | 317 | ||
| 318 | ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events); | 318 | ret = lbs_cmd_with_response(priv, CMD_802_11_SUBSCRIBE_EVENT, events); |
| 319 | 319 | ||
diff --git a/drivers/net/wireless/p54/p54usb.c b/drivers/net/wireless/p54/p54usb.c index 98ddbb3b3273..1610a7308c1d 100644 --- a/drivers/net/wireless/p54/p54usb.c +++ b/drivers/net/wireless/p54/p54usb.c | |||
| @@ -49,6 +49,7 @@ static struct usb_device_id p54u_table[] __devinitdata = { | |||
| 49 | {USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */ | 49 | {USB_DEVICE(0x5041, 0x2235)}, /* Linksys WUSB54G Portable */ |
| 50 | 50 | ||
| 51 | /* Version 2 devices (3887) */ | 51 | /* Version 2 devices (3887) */ |
| 52 | {USB_DEVICE(0x0471, 0x1230)}, /* Philips CPWUA054/00 */ | ||
| 52 | {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */ | 53 | {USB_DEVICE(0x050d, 0x7050)}, /* Belkin F5D7050 ver 1000 */ |
| 53 | {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */ | 54 | {USB_DEVICE(0x0572, 0x2000)}, /* Cohiba Proto board */ |
| 54 | {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */ | 55 | {USB_DEVICE(0x0572, 0x2002)}, /* Cohiba Proto board */ |
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index d0b1fb15c709..18c9931e3267 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c | |||
| @@ -116,6 +116,7 @@ MODULE_PARM_DESC(workaround_interval, | |||
| 116 | #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) | 116 | #define OID_802_11_ENCRYPTION_STATUS ccpu2(0x0d01011b) |
| 117 | #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) | 117 | #define OID_802_11_ADD_KEY ccpu2(0x0d01011d) |
| 118 | #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) | 118 | #define OID_802_11_REMOVE_KEY ccpu2(0x0d01011e) |
| 119 | #define OID_802_11_ASSOCIATION_INFORMATION ccpu2(0x0d01011f) | ||
| 119 | #define OID_802_11_PMKID ccpu2(0x0d010123) | 120 | #define OID_802_11_PMKID ccpu2(0x0d010123) |
| 120 | #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) | 121 | #define OID_802_11_NETWORK_TYPES_SUPPORTED ccpu2(0x0d010203) |
| 121 | #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) | 122 | #define OID_802_11_NETWORK_TYPE_IN_USE ccpu2(0x0d010204) |
| @@ -271,6 +272,26 @@ struct ndis_config_param { | |||
| 271 | __le32 value_length; | 272 | __le32 value_length; |
| 272 | } __attribute__((packed)); | 273 | } __attribute__((packed)); |
| 273 | 274 | ||
| 275 | struct ndis_80211_assoc_info { | ||
| 276 | __le32 length; | ||
| 277 | __le16 req_ies; | ||
| 278 | struct req_ie { | ||
| 279 | __le16 capa; | ||
| 280 | __le16 listen_interval; | ||
| 281 | u8 cur_ap_address[6]; | ||
| 282 | } req_ie; | ||
| 283 | __le32 req_ie_length; | ||
| 284 | __le32 offset_req_ies; | ||
| 285 | __le16 resp_ies; | ||
| 286 | struct resp_ie { | ||
| 287 | __le16 capa; | ||
| 288 | __le16 status_code; | ||
| 289 | __le16 assoc_id; | ||
| 290 | } resp_ie; | ||
| 291 | __le32 resp_ie_length; | ||
| 292 | __le32 offset_resp_ies; | ||
| 293 | } __attribute__((packed)); | ||
| 294 | |||
| 274 | /* these have to match what is in wpa_supplicant */ | 295 | /* these have to match what is in wpa_supplicant */ |
| 275 | enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; | 296 | enum wpa_alg { WPA_ALG_NONE, WPA_ALG_WEP, WPA_ALG_TKIP, WPA_ALG_CCMP }; |
| 276 | enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, | 297 | enum wpa_cipher { CIPHER_NONE, CIPHER_WEP40, CIPHER_TKIP, CIPHER_CCMP, |
| @@ -674,6 +695,12 @@ static int get_bssid(struct usbnet *usbdev, u8 bssid[ETH_ALEN]) | |||
| 674 | return ret; | 695 | return ret; |
| 675 | } | 696 | } |
| 676 | 697 | ||
| 698 | static int get_association_info(struct usbnet *usbdev, | ||
| 699 | struct ndis_80211_assoc_info *info, int len) | ||
| 700 | { | ||
| 701 | return rndis_query_oid(usbdev, OID_802_11_ASSOCIATION_INFORMATION, | ||
| 702 | info, &len); | ||
| 703 | } | ||
| 677 | 704 | ||
| 678 | static int is_associated(struct usbnet *usbdev) | 705 | static int is_associated(struct usbnet *usbdev) |
| 679 | { | 706 | { |
| @@ -2182,11 +2209,40 @@ static void rndis_wext_worker(struct work_struct *work) | |||
| 2182 | struct usbnet *usbdev = priv->usbdev; | 2209 | struct usbnet *usbdev = priv->usbdev; |
| 2183 | union iwreq_data evt; | 2210 | union iwreq_data evt; |
| 2184 | unsigned char bssid[ETH_ALEN]; | 2211 | unsigned char bssid[ETH_ALEN]; |
| 2185 | int ret; | 2212 | struct ndis_80211_assoc_info *info; |
| 2213 | int assoc_size = sizeof(*info) + IW_CUSTOM_MAX + 32; | ||
| 2214 | int ret, offset; | ||
| 2186 | 2215 | ||
| 2187 | if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { | 2216 | if (test_and_clear_bit(WORK_CONNECTION_EVENT, &priv->work_pending)) { |
| 2188 | ret = get_bssid(usbdev, bssid); | 2217 | info = kzalloc(assoc_size, GFP_KERNEL); |
| 2218 | if (!info) | ||
| 2219 | goto get_bssid; | ||
| 2220 | |||
| 2221 | /* Get association info IEs from device and send them back to | ||
| 2222 | * userspace. */ | ||
| 2223 | ret = get_association_info(usbdev, info, assoc_size); | ||
| 2224 | if (!ret) { | ||
| 2225 | evt.data.length = le32_to_cpu(info->req_ie_length); | ||
| 2226 | if (evt.data.length > 0) { | ||
| 2227 | offset = le32_to_cpu(info->offset_req_ies); | ||
| 2228 | wireless_send_event(usbdev->net, | ||
| 2229 | IWEVASSOCREQIE, &evt, | ||
| 2230 | (char *)info + offset); | ||
| 2231 | } | ||
| 2232 | |||
| 2233 | evt.data.length = le32_to_cpu(info->resp_ie_length); | ||
| 2234 | if (evt.data.length > 0) { | ||
| 2235 | offset = le32_to_cpu(info->offset_resp_ies); | ||
| 2236 | wireless_send_event(usbdev->net, | ||
| 2237 | IWEVASSOCRESPIE, &evt, | ||
| 2238 | (char *)info + offset); | ||
| 2239 | } | ||
| 2240 | } | ||
| 2241 | |||
| 2242 | kfree(info); | ||
| 2189 | 2243 | ||
| 2244 | get_bssid: | ||
| 2245 | ret = get_bssid(usbdev, bssid); | ||
| 2190 | if (!ret) { | 2246 | if (!ret) { |
| 2191 | evt.data.flags = 0; | 2247 | evt.data.flags = 0; |
| 2192 | evt.data.length = 0; | 2248 | evt.data.length = 0; |
| @@ -2414,6 +2470,11 @@ static int bcm4320_early_init(struct usbnet *dev) | |||
| 2414 | else if (priv->param_power_save > 2) | 2470 | else if (priv->param_power_save > 2) |
| 2415 | priv->param_power_save = 2; | 2471 | priv->param_power_save = 2; |
| 2416 | 2472 | ||
| 2473 | if (priv->param_power_output < 0) | ||
| 2474 | priv->param_power_output = 0; | ||
| 2475 | else if (priv->param_power_output > 3) | ||
| 2476 | priv->param_power_output = 3; | ||
| 2477 | |||
| 2417 | if (priv->param_roamtrigger < -80) | 2478 | if (priv->param_roamtrigger < -80) |
| 2418 | priv->param_roamtrigger = -80; | 2479 | priv->param_roamtrigger = -80; |
| 2419 | else if (priv->param_roamtrigger > -60) | 2480 | else if (priv->param_roamtrigger > -60) |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 57bdc153952f..611d98320593 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
| @@ -328,6 +328,11 @@ static inline int rt2x00_get_link_ant_rssi(struct link *link) | |||
| 328 | return DEFAULT_RSSI; | 328 | return DEFAULT_RSSI; |
| 329 | } | 329 | } |
| 330 | 330 | ||
| 331 | static inline void rt2x00_reset_link_ant_rssi(struct link *link) | ||
| 332 | { | ||
| 333 | link->ant.rssi_ant = 0; | ||
| 334 | } | ||
| 335 | |||
| 331 | static inline int rt2x00_get_link_ant_rssi_history(struct link *link, | 336 | static inline int rt2x00_get_link_ant_rssi_history(struct link *link, |
| 332 | enum antenna ant) | 337 | enum antenna ant) |
| 333 | { | 338 | { |
diff --git a/drivers/net/wireless/rt2x00/rt2x00config.c b/drivers/net/wireless/rt2x00/rt2x00config.c index a9930a03f450..48608e8cc8b4 100644 --- a/drivers/net/wireless/rt2x00/rt2x00config.c +++ b/drivers/net/wireless/rt2x00/rt2x00config.c | |||
| @@ -129,6 +129,7 @@ void rt2x00lib_config_antenna(struct rt2x00_dev *rt2x00dev, | |||
| 129 | */ | 129 | */ |
| 130 | rt2x00dev->ops->lib->config(rt2x00dev, &libconf, CONFIG_UPDATE_ANTENNA); | 130 | rt2x00dev->ops->lib->config(rt2x00dev, &libconf, CONFIG_UPDATE_ANTENNA); |
| 131 | rt2x00lib_reset_link_tuner(rt2x00dev); | 131 | rt2x00lib_reset_link_tuner(rt2x00dev); |
| 132 | rt2x00_reset_link_ant_rssi(&rt2x00dev->link); | ||
| 132 | 133 | ||
| 133 | rt2x00dev->link.ant.active.rx = libconf.ant.rx; | 134 | rt2x00dev->link.ant.active.rx = libconf.ant.rx; |
| 134 | rt2x00dev->link.ant.active.tx = libconf.ant.tx; | 135 | rt2x00dev->link.ant.active.tx = libconf.ant.tx; |
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index b22c02737185..2673d568bcac 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
| @@ -483,9 +483,9 @@ void rt2x00lib_beacondone(struct rt2x00_dev *rt2x00dev) | |||
| 483 | if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) | 483 | if (!test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags)) |
| 484 | return; | 484 | return; |
| 485 | 485 | ||
| 486 | ieee80211_iterate_active_interfaces(rt2x00dev->hw, | 486 | ieee80211_iterate_active_interfaces_atomic(rt2x00dev->hw, |
| 487 | rt2x00lib_beacondone_iter, | 487 | rt2x00lib_beacondone_iter, |
| 488 | rt2x00dev); | 488 | rt2x00dev); |
| 489 | 489 | ||
| 490 | queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work); | 490 | queue_work(rt2x00dev->hw->workqueue, &rt2x00dev->intf_work); |
| 491 | } | 491 | } |
| @@ -507,7 +507,7 @@ void rt2x00lib_txdone(struct queue_entry *entry, | |||
| 507 | * Update TX statistics. | 507 | * Update TX statistics. |
| 508 | */ | 508 | */ |
| 509 | rt2x00dev->link.qual.tx_success += success; | 509 | rt2x00dev->link.qual.tx_success += success; |
| 510 | rt2x00dev->link.qual.tx_failed += txdesc->retry + fail; | 510 | rt2x00dev->link.qual.tx_failed += fail; |
| 511 | 511 | ||
| 512 | /* | 512 | /* |
| 513 | * Initialize TX status | 513 | * Initialize TX status |
diff --git a/drivers/net/wireless/rt2x00/rt2x00mac.c b/drivers/net/wireless/rt2x00/rt2x00mac.c index c206b5092070..87e280a21971 100644 --- a/drivers/net/wireless/rt2x00/rt2x00mac.c +++ b/drivers/net/wireless/rt2x00/rt2x00mac.c | |||
| @@ -93,6 +93,7 @@ int rt2x00mac_tx(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
| 93 | */ | 93 | */ |
| 94 | if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) { | 94 | if (!test_bit(DEVICE_PRESENT, &rt2x00dev->flags)) { |
| 95 | ieee80211_stop_queues(hw); | 95 | ieee80211_stop_queues(hw); |
| 96 | dev_kfree_skb_any(skb); | ||
| 96 | return NETDEV_TX_OK; | 97 | return NETDEV_TX_OK; |
| 97 | } | 98 | } |
| 98 | 99 | ||
diff --git a/drivers/net/wireless/rtl8180_grf5101.c b/drivers/net/wireless/rtl8180_grf5101.c index 5d47935dbac3..947ee55f18b2 100644 --- a/drivers/net/wireless/rtl8180_grf5101.c +++ b/drivers/net/wireless/rtl8180_grf5101.c | |||
| @@ -88,7 +88,7 @@ static void grf5101_rf_set_channel(struct ieee80211_hw *dev, | |||
| 88 | write_grf5101(dev, 0x0B, chan); | 88 | write_grf5101(dev, 0x0B, chan); |
| 89 | write_grf5101(dev, 0x07, 0x1000); | 89 | write_grf5101(dev, 0x07, 0x1000); |
| 90 | 90 | ||
| 91 | grf5101_write_phy_antenna(dev, chan); | 91 | grf5101_write_phy_antenna(dev, channel); |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | static void grf5101_rf_stop(struct ieee80211_hw *dev) | 94 | static void grf5101_rf_stop(struct ieee80211_hw *dev) |
diff --git a/drivers/net/wireless/rtl8180_max2820.c b/drivers/net/wireless/rtl8180_max2820.c index a34dfd382b6d..6c825fd7f3b6 100644 --- a/drivers/net/wireless/rtl8180_max2820.c +++ b/drivers/net/wireless/rtl8180_max2820.c | |||
| @@ -78,7 +78,8 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev, | |||
| 78 | struct ieee80211_conf *conf) | 78 | struct ieee80211_conf *conf) |
| 79 | { | 79 | { |
| 80 | struct rtl8180_priv *priv = dev->priv; | 80 | struct rtl8180_priv *priv = dev->priv; |
| 81 | int channel = ieee80211_frequency_to_channel(conf->channel->center_freq); | 81 | int channel = conf ? |
| 82 | ieee80211_frequency_to_channel(conf->channel->center_freq) : 1; | ||
| 82 | unsigned int chan_idx = channel - 1; | 83 | unsigned int chan_idx = channel - 1; |
| 83 | u32 txpw = priv->channels[chan_idx].hw_value & 0xFF; | 84 | u32 txpw = priv->channels[chan_idx].hw_value & 0xFF; |
| 84 | u32 chan = max2820_chan[chan_idx]; | 85 | u32 chan = max2820_chan[chan_idx]; |
| @@ -87,7 +88,7 @@ static void max2820_rf_set_channel(struct ieee80211_hw *dev, | |||
| 87 | * sa2400, for MAXIM we do this directly from BB */ | 88 | * sa2400, for MAXIM we do this directly from BB */ |
| 88 | rtl8180_write_phy(dev, 3, txpw); | 89 | rtl8180_write_phy(dev, 3, txpw); |
| 89 | 90 | ||
| 90 | max2820_write_phy_antenna(dev, chan); | 91 | max2820_write_phy_antenna(dev, channel); |
| 91 | write_max2820(dev, 3, chan); | 92 | write_max2820(dev, 3, chan); |
| 92 | } | 93 | } |
| 93 | 94 | ||
diff --git a/drivers/net/wireless/rtl8180_sa2400.c b/drivers/net/wireless/rtl8180_sa2400.c index 0311b4ea124c..cea4e0ccb92d 100644 --- a/drivers/net/wireless/rtl8180_sa2400.c +++ b/drivers/net/wireless/rtl8180_sa2400.c | |||
| @@ -86,7 +86,7 @@ static void sa2400_rf_set_channel(struct ieee80211_hw *dev, | |||
| 86 | 86 | ||
| 87 | write_sa2400(dev, 7, txpw); | 87 | write_sa2400(dev, 7, txpw); |
| 88 | 88 | ||
| 89 | sa2400_write_phy_antenna(dev, chan); | 89 | sa2400_write_phy_antenna(dev, channel); |
| 90 | 90 | ||
| 91 | write_sa2400(dev, 0, chan); | 91 | write_sa2400(dev, 0, chan); |
| 92 | write_sa2400(dev, 1, 0xbb50); | 92 | write_sa2400(dev, 1, 0xbb50); |
diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c index 8bddff150c70..d26f69b0184f 100644 --- a/drivers/net/xen-netfront.c +++ b/drivers/net/xen-netfront.c | |||
| @@ -946,8 +946,7 @@ err: | |||
| 946 | work_done++; | 946 | work_done++; |
| 947 | } | 947 | } |
| 948 | 948 | ||
| 949 | while ((skb = __skb_dequeue(&errq))) | 949 | __skb_queue_purge(&errq); |
| 950 | kfree_skb(skb); | ||
| 951 | 950 | ||
| 952 | work_done -= handle_incoming_queue(dev, &rxq); | 951 | work_done -= handle_incoming_queue(dev, &rxq); |
| 953 | 952 | ||
| @@ -1079,8 +1078,7 @@ static void xennet_release_rx_bufs(struct netfront_info *np) | |||
| 1079 | } | 1078 | } |
| 1080 | } | 1079 | } |
| 1081 | 1080 | ||
| 1082 | while ((skb = __skb_dequeue(&free_list)) != NULL) | 1081 | __skb_queue_purge(&free_list); |
| 1083 | dev_kfree_skb(skb); | ||
| 1084 | 1082 | ||
| 1085 | spin_unlock_bh(&np->rx_lock); | 1083 | spin_unlock_bh(&np->rx_lock); |
| 1086 | } | 1084 | } |
diff --git a/drivers/of/of_i2c.c b/drivers/of/of_i2c.c index 715a44471617..b2ccdcbeb896 100644 --- a/drivers/of/of_i2c.c +++ b/drivers/of/of_i2c.c | |||
| @@ -21,7 +21,6 @@ struct i2c_driver_device { | |||
| 21 | }; | 21 | }; |
| 22 | 22 | ||
| 23 | static struct i2c_driver_device i2c_devices[] = { | 23 | static struct i2c_driver_device i2c_devices[] = { |
| 24 | { "dallas,ds1374", "rtc-ds1374" }, | ||
| 25 | }; | 24 | }; |
| 26 | 25 | ||
| 27 | static int of_find_i2c_driver(struct device_node *node, | 26 | static int of_find_i2c_driver(struct device_node *node, |
diff --git a/drivers/pci/hotplug/pci_hotplug_core.c b/drivers/pci/hotplug/pci_hotplug_core.c index 925ba16355ce..a11021e8ce37 100644 --- a/drivers/pci/hotplug/pci_hotplug_core.c +++ b/drivers/pci/hotplug/pci_hotplug_core.c | |||
| @@ -619,6 +619,7 @@ static struct hotplug_slot *get_slot_from_name (const char *name) | |||
| 619 | int pci_hp_register (struct hotplug_slot *slot) | 619 | int pci_hp_register (struct hotplug_slot *slot) |
| 620 | { | 620 | { |
| 621 | int result; | 621 | int result; |
| 622 | struct hotplug_slot *tmp; | ||
| 622 | 623 | ||
| 623 | if (slot == NULL) | 624 | if (slot == NULL) |
| 624 | return -ENODEV; | 625 | return -ENODEV; |
| @@ -630,7 +631,11 @@ int pci_hp_register (struct hotplug_slot *slot) | |||
| 630 | return -EINVAL; | 631 | return -EINVAL; |
| 631 | } | 632 | } |
| 632 | 633 | ||
| 633 | /* this can fail if we have already registered a slot with the same name */ | 634 | /* Check if we have already registered a slot with the same name. */ |
| 635 | tmp = get_slot_from_name(slot->name); | ||
| 636 | if (tmp) | ||
| 637 | return -EEXIST; | ||
| 638 | |||
| 634 | slot->kobj.kset = pci_hotplug_slots_kset; | 639 | slot->kobj.kset = pci_hotplug_slots_kset; |
| 635 | result = kobject_init_and_add(&slot->kobj, &hotplug_slot_ktype, NULL, | 640 | result = kobject_init_and_add(&slot->kobj, &hotplug_slot_ktype, NULL, |
| 636 | "%s", slot->name); | 641 | "%s", slot->name); |
diff --git a/drivers/pci/hotplug/pciehp.h b/drivers/pci/hotplug/pciehp.h index 8264a7680435..79c9ddaad3fb 100644 --- a/drivers/pci/hotplug/pciehp.h +++ b/drivers/pci/hotplug/pciehp.h | |||
| @@ -97,6 +97,7 @@ struct controller { | |||
| 97 | u8 cap_base; | 97 | u8 cap_base; |
| 98 | struct timer_list poll_timer; | 98 | struct timer_list poll_timer; |
| 99 | volatile int cmd_busy; | 99 | volatile int cmd_busy; |
| 100 | unsigned int no_cmd_complete:1; | ||
| 100 | }; | 101 | }; |
| 101 | 102 | ||
| 102 | #define INT_BUTTON_IGNORE 0 | 103 | #define INT_BUTTON_IGNORE 0 |
| @@ -135,6 +136,7 @@ struct controller { | |||
| 135 | #define PWR_LED_PRSN 0x00000010 | 136 | #define PWR_LED_PRSN 0x00000010 |
| 136 | #define HP_SUPR_RM_SUP 0x00000020 | 137 | #define HP_SUPR_RM_SUP 0x00000020 |
| 137 | #define EMI_PRSN 0x00020000 | 138 | #define EMI_PRSN 0x00020000 |
| 139 | #define NO_CMD_CMPL_SUP 0x00040000 | ||
| 138 | 140 | ||
| 139 | #define ATTN_BUTTN(ctrl) ((ctrl)->slot_cap & ATTN_BUTTN_PRSN) | 141 | #define ATTN_BUTTN(ctrl) ((ctrl)->slot_cap & ATTN_BUTTN_PRSN) |
| 140 | #define POWER_CTRL(ctrl) ((ctrl)->slot_cap & PWR_CTRL_PRSN) | 142 | #define POWER_CTRL(ctrl) ((ctrl)->slot_cap & PWR_CTRL_PRSN) |
| @@ -143,13 +145,14 @@ struct controller { | |||
| 143 | #define PWR_LED(ctrl) ((ctrl)->slot_cap & PWR_LED_PRSN) | 145 | #define PWR_LED(ctrl) ((ctrl)->slot_cap & PWR_LED_PRSN) |
| 144 | #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & HP_SUPR_RM_SUP) | 146 | #define HP_SUPR_RM(ctrl) ((ctrl)->slot_cap & HP_SUPR_RM_SUP) |
| 145 | #define EMI(ctrl) ((ctrl)->slot_cap & EMI_PRSN) | 147 | #define EMI(ctrl) ((ctrl)->slot_cap & EMI_PRSN) |
| 148 | #define NO_CMD_CMPL(ctrl) ((ctrl)->slot_cap & NO_CMD_CMPL_SUP) | ||
| 146 | 149 | ||
| 147 | extern int pciehp_sysfs_enable_slot(struct slot *slot); | 150 | extern int pciehp_sysfs_enable_slot(struct slot *slot); |
| 148 | extern int pciehp_sysfs_disable_slot(struct slot *slot); | 151 | extern int pciehp_sysfs_disable_slot(struct slot *slot); |
| 149 | extern u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl); | 152 | extern u8 pciehp_handle_attention_button(struct slot *p_slot); |
| 150 | extern u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl); | 153 | extern u8 pciehp_handle_switch_change(struct slot *p_slot); |
| 151 | extern u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl); | 154 | extern u8 pciehp_handle_presence_change(struct slot *p_slot); |
| 152 | extern u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl); | 155 | extern u8 pciehp_handle_power_fault(struct slot *p_slot); |
| 153 | extern int pciehp_configure_device(struct slot *p_slot); | 156 | extern int pciehp_configure_device(struct slot *p_slot); |
| 154 | extern int pciehp_unconfigure_device(struct slot *p_slot); | 157 | extern int pciehp_unconfigure_device(struct slot *p_slot); |
| 155 | extern void pciehp_queue_pushbutton_work(struct work_struct *work); | 158 | extern void pciehp_queue_pushbutton_work(struct work_struct *work); |
diff --git a/drivers/pci/hotplug/pciehp_core.c b/drivers/pci/hotplug/pciehp_core.c index 43d8ddb2d679..48a2ed378914 100644 --- a/drivers/pci/hotplug/pciehp_core.c +++ b/drivers/pci/hotplug/pciehp_core.c | |||
| @@ -254,7 +254,11 @@ static int init_slots(struct controller *ctrl) | |||
| 254 | slot->hp_slot, slot->number, ctrl->slot_device_offset); | 254 | slot->hp_slot, slot->number, ctrl->slot_device_offset); |
| 255 | retval = pci_hp_register(hotplug_slot); | 255 | retval = pci_hp_register(hotplug_slot); |
| 256 | if (retval) { | 256 | if (retval) { |
| 257 | err ("pci_hp_register failed with error %d\n", retval); | 257 | err("pci_hp_register failed with error %d\n", retval); |
| 258 | if (retval == -EEXIST) | ||
| 259 | err("Failed to register slot because of name " | ||
| 260 | "collision. Try \'pciehp_slot_with_bus\' " | ||
| 261 | "module option.\n"); | ||
| 258 | goto error_info; | 262 | goto error_info; |
| 259 | } | 263 | } |
| 260 | /* create additional sysfs entries */ | 264 | /* create additional sysfs entries */ |
diff --git a/drivers/pci/hotplug/pciehp_ctrl.c b/drivers/pci/hotplug/pciehp_ctrl.c index 0a7aa628e955..96a5d55a4983 100644 --- a/drivers/pci/hotplug/pciehp_ctrl.c +++ b/drivers/pci/hotplug/pciehp_ctrl.c | |||
| @@ -55,16 +55,13 @@ static int queue_interrupt_event(struct slot *p_slot, u32 event_type) | |||
| 55 | return 0; | 55 | return 0; |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl) | 58 | u8 pciehp_handle_attention_button(struct slot *p_slot) |
| 59 | { | 59 | { |
| 60 | struct slot *p_slot; | ||
| 61 | u32 event_type; | 60 | u32 event_type; |
| 62 | 61 | ||
| 63 | /* Attention Button Change */ | 62 | /* Attention Button Change */ |
| 64 | dbg("pciehp: Attention button interrupt received.\n"); | 63 | dbg("pciehp: Attention button interrupt received.\n"); |
| 65 | 64 | ||
| 66 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 67 | |||
| 68 | /* | 65 | /* |
| 69 | * Button pressed - See if need to TAKE ACTION!!! | 66 | * Button pressed - See if need to TAKE ACTION!!! |
| 70 | */ | 67 | */ |
| @@ -76,18 +73,15 @@ u8 pciehp_handle_attention_button(u8 hp_slot, struct controller *ctrl) | |||
| 76 | return 0; | 73 | return 0; |
| 77 | } | 74 | } |
| 78 | 75 | ||
| 79 | u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl) | 76 | u8 pciehp_handle_switch_change(struct slot *p_slot) |
| 80 | { | 77 | { |
| 81 | struct slot *p_slot; | ||
| 82 | u8 getstatus; | 78 | u8 getstatus; |
| 83 | u32 event_type; | 79 | u32 event_type; |
| 84 | 80 | ||
| 85 | /* Switch Change */ | 81 | /* Switch Change */ |
| 86 | dbg("pciehp: Switch interrupt received.\n"); | 82 | dbg("pciehp: Switch interrupt received.\n"); |
| 87 | 83 | ||
| 88 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 89 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); | 84 | p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); |
| 90 | |||
| 91 | if (getstatus) { | 85 | if (getstatus) { |
| 92 | /* | 86 | /* |
| 93 | * Switch opened | 87 | * Switch opened |
| @@ -107,17 +101,14 @@ u8 pciehp_handle_switch_change(u8 hp_slot, struct controller *ctrl) | |||
| 107 | return 1; | 101 | return 1; |
| 108 | } | 102 | } |
| 109 | 103 | ||
| 110 | u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl) | 104 | u8 pciehp_handle_presence_change(struct slot *p_slot) |
| 111 | { | 105 | { |
| 112 | struct slot *p_slot; | ||
| 113 | u32 event_type; | 106 | u32 event_type; |
| 114 | u8 presence_save; | 107 | u8 presence_save; |
| 115 | 108 | ||
| 116 | /* Presence Change */ | 109 | /* Presence Change */ |
| 117 | dbg("pciehp: Presence/Notify input change.\n"); | 110 | dbg("pciehp: Presence/Notify input change.\n"); |
| 118 | 111 | ||
| 119 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 120 | |||
| 121 | /* Switch is open, assume a presence change | 112 | /* Switch is open, assume a presence change |
| 122 | * Save the presence state | 113 | * Save the presence state |
| 123 | */ | 114 | */ |
| @@ -141,16 +132,13 @@ u8 pciehp_handle_presence_change(u8 hp_slot, struct controller *ctrl) | |||
| 141 | return 1; | 132 | return 1; |
| 142 | } | 133 | } |
| 143 | 134 | ||
| 144 | u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl) | 135 | u8 pciehp_handle_power_fault(struct slot *p_slot) |
| 145 | { | 136 | { |
| 146 | struct slot *p_slot; | ||
| 147 | u32 event_type; | 137 | u32 event_type; |
| 148 | 138 | ||
| 149 | /* power fault */ | 139 | /* power fault */ |
| 150 | dbg("pciehp: Power fault interrupt received.\n"); | 140 | dbg("pciehp: Power fault interrupt received.\n"); |
| 151 | 141 | ||
| 152 | p_slot = pciehp_find_slot(ctrl, hp_slot + ctrl->slot_device_offset); | ||
| 153 | |||
| 154 | if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { | 142 | if ( !(p_slot->hpc_ops->query_power_fault(p_slot))) { |
| 155 | /* | 143 | /* |
| 156 | * power fault Cleared | 144 | * power fault Cleared |
| @@ -163,7 +151,7 @@ u8 pciehp_handle_power_fault(u8 hp_slot, struct controller *ctrl) | |||
| 163 | */ | 151 | */ |
| 164 | info("Power fault on Slot(%s)\n", p_slot->name); | 152 | info("Power fault on Slot(%s)\n", p_slot->name); |
| 165 | event_type = INT_POWER_FAULT; | 153 | event_type = INT_POWER_FAULT; |
| 166 | info("power fault bit %x set\n", hp_slot); | 154 | info("power fault bit %x set\n", 0); |
| 167 | } | 155 | } |
| 168 | 156 | ||
| 169 | queue_interrupt_event(p_slot, event_type); | 157 | queue_interrupt_event(p_slot, event_type); |
| @@ -186,6 +174,13 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) | |||
| 186 | } | 174 | } |
| 187 | } | 175 | } |
| 188 | 176 | ||
| 177 | /* | ||
| 178 | * After turning power off, we must wait for at least 1 second | ||
| 179 | * before taking any action that relies on power having been | ||
| 180 | * removed from the slot/adapter. | ||
| 181 | */ | ||
| 182 | msleep(1000); | ||
| 183 | |||
| 189 | if (PWR_LED(ctrl)) | 184 | if (PWR_LED(ctrl)) |
| 190 | pslot->hpc_ops->green_led_off(pslot); | 185 | pslot->hpc_ops->green_led_off(pslot); |
| 191 | 186 | ||
| @@ -289,6 +284,13 @@ static int remove_board(struct slot *p_slot) | |||
| 289 | } | 284 | } |
| 290 | } | 285 | } |
| 291 | 286 | ||
| 287 | /* | ||
| 288 | * After turning power off, we must wait for at least 1 second | ||
| 289 | * before taking any action that relies on power having been | ||
| 290 | * removed from the slot/adapter. | ||
| 291 | */ | ||
| 292 | msleep(1000); | ||
| 293 | |||
| 292 | if (PWR_LED(ctrl)) | 294 | if (PWR_LED(ctrl)) |
| 293 | /* turn off Green LED */ | 295 | /* turn off Green LED */ |
| 294 | p_slot->hpc_ops->green_led_off(p_slot); | 296 | p_slot->hpc_ops->green_led_off(p_slot); |
diff --git a/drivers/pci/hotplug/pciehp_hpc.c b/drivers/pci/hotplug/pciehp_hpc.c index 891f81a0400c..79f104963166 100644 --- a/drivers/pci/hotplug/pciehp_hpc.c +++ b/drivers/pci/hotplug/pciehp_hpc.c | |||
| @@ -247,14 +247,38 @@ static inline void pciehp_free_irq(struct controller *ctrl) | |||
| 247 | free_irq(ctrl->pci_dev->irq, ctrl); | 247 | free_irq(ctrl->pci_dev->irq, ctrl); |
| 248 | } | 248 | } |
| 249 | 249 | ||
| 250 | static inline int pcie_wait_cmd(struct controller *ctrl) | 250 | static inline int pcie_poll_cmd(struct controller *ctrl) |
| 251 | { | ||
| 252 | u16 slot_status; | ||
| 253 | int timeout = 1000; | ||
| 254 | |||
| 255 | if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) | ||
| 256 | if (slot_status & CMD_COMPLETED) | ||
| 257 | goto completed; | ||
| 258 | for (timeout = 1000; timeout > 0; timeout -= 100) { | ||
| 259 | msleep(100); | ||
| 260 | if (!pciehp_readw(ctrl, SLOTSTATUS, &slot_status)) | ||
| 261 | if (slot_status & CMD_COMPLETED) | ||
| 262 | goto completed; | ||
| 263 | } | ||
| 264 | return 0; /* timeout */ | ||
| 265 | |||
| 266 | completed: | ||
| 267 | pciehp_writew(ctrl, SLOTSTATUS, CMD_COMPLETED); | ||
| 268 | return timeout; | ||
| 269 | } | ||
| 270 | |||
| 271 | static inline int pcie_wait_cmd(struct controller *ctrl, int poll) | ||
| 251 | { | 272 | { |
| 252 | int retval = 0; | 273 | int retval = 0; |
| 253 | unsigned int msecs = pciehp_poll_mode ? 2500 : 1000; | 274 | unsigned int msecs = pciehp_poll_mode ? 2500 : 1000; |
| 254 | unsigned long timeout = msecs_to_jiffies(msecs); | 275 | unsigned long timeout = msecs_to_jiffies(msecs); |
| 255 | int rc; | 276 | int rc; |
| 256 | 277 | ||
| 257 | rc = wait_event_interruptible_timeout(ctrl->queue, | 278 | if (poll) |
| 279 | rc = pcie_poll_cmd(ctrl); | ||
| 280 | else | ||
| 281 | rc = wait_event_interruptible_timeout(ctrl->queue, | ||
| 258 | !ctrl->cmd_busy, timeout); | 282 | !ctrl->cmd_busy, timeout); |
| 259 | if (!rc) | 283 | if (!rc) |
| 260 | dbg("Command not completed in 1000 msec\n"); | 284 | dbg("Command not completed in 1000 msec\n"); |
| @@ -286,12 +310,28 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) | |||
| 286 | goto out; | 310 | goto out; |
| 287 | } | 311 | } |
| 288 | 312 | ||
| 289 | if ((slot_status & CMD_COMPLETED) == CMD_COMPLETED ) { | 313 | if (slot_status & CMD_COMPLETED) { |
| 290 | /* After 1 sec and CMD_COMPLETED still not set, just | 314 | if (!ctrl->no_cmd_complete) { |
| 291 | proceed forward to issue the next command according | 315 | /* |
| 292 | to spec. Just print out the error message */ | 316 | * After 1 sec and CMD_COMPLETED still not set, just |
| 293 | dbg("%s: CMD_COMPLETED not clear after 1 sec.\n", | 317 | * proceed forward to issue the next command according |
| 294 | __func__); | 318 | * to spec. Just print out the error message. |
| 319 | */ | ||
| 320 | dbg("%s: CMD_COMPLETED not clear after 1 sec.\n", | ||
| 321 | __func__); | ||
| 322 | } else if (!NO_CMD_CMPL(ctrl)) { | ||
| 323 | /* | ||
| 324 | * This controller semms to notify of command completed | ||
| 325 | * event even though it supports none of power | ||
| 326 | * controller, attention led, power led and EMI. | ||
| 327 | */ | ||
| 328 | dbg("%s: Unexpected CMD_COMPLETED. Need to wait for " | ||
| 329 | "command completed event.\n", __func__); | ||
| 330 | ctrl->no_cmd_complete = 0; | ||
| 331 | } else { | ||
| 332 | dbg("%s: Unexpected CMD_COMPLETED. Maybe the " | ||
| 333 | "controller is broken.\n", __func__); | ||
| 334 | } | ||
| 295 | } | 335 | } |
| 296 | 336 | ||
| 297 | retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); | 337 | retval = pciehp_readw(ctrl, SLOTCTRL, &slot_ctrl); |
| @@ -315,8 +355,18 @@ static int pcie_write_cmd(struct controller *ctrl, u16 cmd, u16 mask) | |||
| 315 | /* | 355 | /* |
| 316 | * Wait for command completion. | 356 | * Wait for command completion. |
| 317 | */ | 357 | */ |
| 318 | if (!retval) | 358 | if (!retval && !ctrl->no_cmd_complete) { |
| 319 | retval = pcie_wait_cmd(ctrl); | 359 | int poll = 0; |
| 360 | /* | ||
| 361 | * if hotplug interrupt is not enabled or command | ||
| 362 | * completed interrupt is not enabled, we need to poll | ||
| 363 | * command completed event. | ||
| 364 | */ | ||
| 365 | if (!(slot_ctrl & HP_INTR_ENABLE) || | ||
| 366 | !(slot_ctrl & CMD_CMPL_INTR_ENABLE)) | ||
| 367 | poll = 1; | ||
| 368 | retval = pcie_wait_cmd(ctrl, poll); | ||
| 369 | } | ||
| 320 | out: | 370 | out: |
| 321 | mutex_unlock(&ctrl->ctrl_lock); | 371 | mutex_unlock(&ctrl->ctrl_lock); |
| 322 | return retval; | 372 | return retval; |
| @@ -704,13 +754,6 @@ static int hpc_power_off_slot(struct slot * slot) | |||
| 704 | } | 754 | } |
| 705 | dbg("%s: SLOTCTRL %x write cmd %x\n", | 755 | dbg("%s: SLOTCTRL %x write cmd %x\n", |
| 706 | __func__, ctrl->cap_base + SLOTCTRL, slot_cmd); | 756 | __func__, ctrl->cap_base + SLOTCTRL, slot_cmd); |
| 707 | |||
| 708 | /* | ||
| 709 | * After turning power off, we must wait for at least 1 second | ||
| 710 | * before taking any action that relies on power having been | ||
| 711 | * removed from the slot/adapter. | ||
| 712 | */ | ||
| 713 | msleep(1000); | ||
| 714 | out: | 757 | out: |
| 715 | if (changed) | 758 | if (changed) |
| 716 | pcie_unmask_bad_dllp(ctrl); | 759 | pcie_unmask_bad_dllp(ctrl); |
| @@ -722,6 +765,7 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 722 | { | 765 | { |
| 723 | struct controller *ctrl = (struct controller *)dev_id; | 766 | struct controller *ctrl = (struct controller *)dev_id; |
| 724 | u16 detected, intr_loc; | 767 | u16 detected, intr_loc; |
| 768 | struct slot *p_slot; | ||
| 725 | 769 | ||
| 726 | /* | 770 | /* |
| 727 | * In order to guarantee that all interrupt events are | 771 | * In order to guarantee that all interrupt events are |
| @@ -756,21 +800,38 @@ static irqreturn_t pcie_isr(int irq, void *dev_id) | |||
| 756 | wake_up_interruptible(&ctrl->queue); | 800 | wake_up_interruptible(&ctrl->queue); |
| 757 | } | 801 | } |
| 758 | 802 | ||
| 803 | if (!(intr_loc & ~CMD_COMPLETED)) | ||
| 804 | return IRQ_HANDLED; | ||
| 805 | |||
| 806 | /* | ||
| 807 | * Return without handling events if this handler routine is | ||
| 808 | * called before controller initialization is done. This may | ||
| 809 | * happen if hotplug event or another interrupt that shares | ||
| 810 | * the IRQ with pciehp arrives before slot initialization is | ||
| 811 | * done after interrupt handler is registered. | ||
| 812 | * | ||
| 813 | * FIXME - Need more structural fixes. We need to be ready to | ||
| 814 | * handle the event before installing interrupt handler. | ||
| 815 | */ | ||
| 816 | p_slot = pciehp_find_slot(ctrl, ctrl->slot_device_offset); | ||
| 817 | if (!p_slot || !p_slot->hpc_ops) | ||
| 818 | return IRQ_HANDLED; | ||
| 819 | |||
| 759 | /* Check MRL Sensor Changed */ | 820 | /* Check MRL Sensor Changed */ |
| 760 | if (intr_loc & MRL_SENS_CHANGED) | 821 | if (intr_loc & MRL_SENS_CHANGED) |
| 761 | pciehp_handle_switch_change(0, ctrl); | 822 | pciehp_handle_switch_change(p_slot); |
| 762 | 823 | ||
| 763 | /* Check Attention Button Pressed */ | 824 | /* Check Attention Button Pressed */ |
| 764 | if (intr_loc & ATTN_BUTTN_PRESSED) | 825 | if (intr_loc & ATTN_BUTTN_PRESSED) |
| 765 | pciehp_handle_attention_button(0, ctrl); | 826 | pciehp_handle_attention_button(p_slot); |
| 766 | 827 | ||
| 767 | /* Check Presence Detect Changed */ | 828 | /* Check Presence Detect Changed */ |
| 768 | if (intr_loc & PRSN_DETECT_CHANGED) | 829 | if (intr_loc & PRSN_DETECT_CHANGED) |
| 769 | pciehp_handle_presence_change(0, ctrl); | 830 | pciehp_handle_presence_change(p_slot); |
| 770 | 831 | ||
| 771 | /* Check Power Fault Detected */ | 832 | /* Check Power Fault Detected */ |
| 772 | if (intr_loc & PWR_FAULT_DETECTED) | 833 | if (intr_loc & PWR_FAULT_DETECTED) |
| 773 | pciehp_handle_power_fault(0, ctrl); | 834 | pciehp_handle_power_fault(p_slot); |
| 774 | 835 | ||
| 775 | return IRQ_HANDLED; | 836 | return IRQ_HANDLED; |
| 776 | } | 837 | } |
| @@ -1028,6 +1089,12 @@ static int pciehp_acpi_get_hp_hw_control_from_firmware(struct pci_dev *dev) | |||
| 1028 | static int pcie_init_hardware_part1(struct controller *ctrl, | 1089 | static int pcie_init_hardware_part1(struct controller *ctrl, |
| 1029 | struct pcie_device *dev) | 1090 | struct pcie_device *dev) |
| 1030 | { | 1091 | { |
| 1092 | /* Clear all remaining event bits in Slot Status register */ | ||
| 1093 | if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) { | ||
| 1094 | err("%s: Cannot write to SLOTSTATUS register\n", __func__); | ||
| 1095 | return -1; | ||
| 1096 | } | ||
| 1097 | |||
| 1031 | /* Mask Hot-plug Interrupt Enable */ | 1098 | /* Mask Hot-plug Interrupt Enable */ |
| 1032 | if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE)) { | 1099 | if (pcie_write_cmd(ctrl, 0, HP_INTR_ENABLE | CMD_CMPL_INTR_ENABLE)) { |
| 1033 | err("%s: Cannot mask hotplug interrupt enable\n", __func__); | 1100 | err("%s: Cannot mask hotplug interrupt enable\n", __func__); |
| @@ -1040,16 +1107,6 @@ int pcie_init_hardware_part2(struct controller *ctrl, struct pcie_device *dev) | |||
| 1040 | { | 1107 | { |
| 1041 | u16 cmd, mask; | 1108 | u16 cmd, mask; |
| 1042 | 1109 | ||
| 1043 | /* | ||
| 1044 | * We need to clear all events before enabling hotplug interrupt | ||
| 1045 | * notification mechanism in order for hotplug controler to | ||
| 1046 | * generate interrupts. | ||
| 1047 | */ | ||
| 1048 | if (pciehp_writew(ctrl, SLOTSTATUS, 0x1f)) { | ||
| 1049 | err("%s: Cannot write to SLOTSTATUS register\n", __FUNCTION__); | ||
| 1050 | return -1; | ||
| 1051 | } | ||
| 1052 | |||
| 1053 | cmd = PRSN_DETECT_ENABLE; | 1110 | cmd = PRSN_DETECT_ENABLE; |
| 1054 | if (ATTN_BUTTN(ctrl)) | 1111 | if (ATTN_BUTTN(ctrl)) |
| 1055 | cmd |= ATTN_BUTTN_ENABLE; | 1112 | cmd |= ATTN_BUTTN_ENABLE; |
| @@ -1116,6 +1173,7 @@ static inline void dbg_ctrl(struct controller *ctrl) | |||
| 1116 | dbg(" Power Indicator : %3s\n", PWR_LED(ctrl) ? "yes" : "no"); | 1173 | dbg(" Power Indicator : %3s\n", PWR_LED(ctrl) ? "yes" : "no"); |
| 1117 | dbg(" Hot-Plug Surprise : %3s\n", HP_SUPR_RM(ctrl) ? "yes" : "no"); | 1174 | dbg(" Hot-Plug Surprise : %3s\n", HP_SUPR_RM(ctrl) ? "yes" : "no"); |
| 1118 | dbg(" EMI Present : %3s\n", EMI(ctrl) ? "yes" : "no"); | 1175 | dbg(" EMI Present : %3s\n", EMI(ctrl) ? "yes" : "no"); |
| 1176 | dbg(" Comamnd Completed : %3s\n", NO_CMD_CMPL(ctrl)? "no" : "yes"); | ||
| 1119 | pciehp_readw(ctrl, SLOTSTATUS, ®16); | 1177 | pciehp_readw(ctrl, SLOTSTATUS, ®16); |
| 1120 | dbg("Slot Status : 0x%04x\n", reg16); | 1178 | dbg("Slot Status : 0x%04x\n", reg16); |
| 1121 | pciehp_readw(ctrl, SLOTSTATUS, ®16); | 1179 | pciehp_readw(ctrl, SLOTSTATUS, ®16); |
| @@ -1147,6 +1205,15 @@ int pcie_init(struct controller *ctrl, struct pcie_device *dev) | |||
| 1147 | mutex_init(&ctrl->ctrl_lock); | 1205 | mutex_init(&ctrl->ctrl_lock); |
| 1148 | init_waitqueue_head(&ctrl->queue); | 1206 | init_waitqueue_head(&ctrl->queue); |
| 1149 | dbg_ctrl(ctrl); | 1207 | dbg_ctrl(ctrl); |
| 1208 | /* | ||
| 1209 | * Controller doesn't notify of command completion if the "No | ||
| 1210 | * Command Completed Support" bit is set in Slot Capability | ||
| 1211 | * register or the controller supports none of power | ||
| 1212 | * controller, attention led, power led and EMI. | ||
| 1213 | */ | ||
| 1214 | if (NO_CMD_CMPL(ctrl) || | ||
| 1215 | !(POWER_CTRL(ctrl) | ATTN_LED(ctrl) | PWR_LED(ctrl) | EMI(ctrl))) | ||
| 1216 | ctrl->no_cmd_complete = 1; | ||
| 1150 | 1217 | ||
| 1151 | info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", | 1218 | info("HPC vendor_id %x device_id %x ss_vid %x ss_did %x\n", |
| 1152 | pdev->vendor, pdev->device, | 1219 | pdev->vendor, pdev->device, |
diff --git a/drivers/pci/hotplug/rpadlpar_sysfs.c b/drivers/pci/hotplug/rpadlpar_sysfs.c index e32148a8fa12..779c5db71be4 100644 --- a/drivers/pci/hotplug/rpadlpar_sysfs.c +++ b/drivers/pci/hotplug/rpadlpar_sysfs.c | |||
| @@ -18,8 +18,12 @@ | |||
| 18 | #include "rpadlpar.h" | 18 | #include "rpadlpar.h" |
| 19 | 19 | ||
| 20 | #define DLPAR_KOBJ_NAME "control" | 20 | #define DLPAR_KOBJ_NAME "control" |
| 21 | #define ADD_SLOT_ATTR_NAME "add_slot" | 21 | |
| 22 | #define REMOVE_SLOT_ATTR_NAME "remove_slot" | 22 | /* Those two have no quotes because they are passed to __ATTR() which |
| 23 | * stringifies the argument (yuck !) | ||
| 24 | */ | ||
| 25 | #define ADD_SLOT_ATTR_NAME add_slot | ||
| 26 | #define REMOVE_SLOT_ATTR_NAME remove_slot | ||
| 23 | 27 | ||
| 24 | #define MAX_DRC_NAME_LEN 64 | 28 | #define MAX_DRC_NAME_LEN 64 |
| 25 | 29 | ||
diff --git a/drivers/pci/hotplug/shpchp_core.c b/drivers/pci/hotplug/shpchp_core.c index 1648076600fc..97848654652a 100644 --- a/drivers/pci/hotplug/shpchp_core.c +++ b/drivers/pci/hotplug/shpchp_core.c | |||
| @@ -162,6 +162,10 @@ static int init_slots(struct controller *ctrl) | |||
| 162 | retval = pci_hp_register(slot->hotplug_slot); | 162 | retval = pci_hp_register(slot->hotplug_slot); |
| 163 | if (retval) { | 163 | if (retval) { |
| 164 | err("pci_hp_register failed with error %d\n", retval); | 164 | err("pci_hp_register failed with error %d\n", retval); |
| 165 | if (retval == -EEXIST) | ||
| 166 | err("Failed to register slot because of name " | ||
| 167 | "collision. Try \'shpchp_slot_with_bus\' " | ||
| 168 | "module option.\n"); | ||
| 165 | goto error_info; | 169 | goto error_info; |
| 166 | } | 170 | } |
| 167 | 171 | ||
diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index 61fedb2448b6..f82495583e63 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c | |||
| @@ -506,6 +506,23 @@ static void free_link_state(struct pci_dev *pdev) | |||
| 506 | pdev->link_state = NULL; | 506 | pdev->link_state = NULL; |
| 507 | } | 507 | } |
| 508 | 508 | ||
| 509 | static int pcie_aspm_sanity_check(struct pci_dev *pdev) | ||
| 510 | { | ||
| 511 | struct pci_dev *child_dev; | ||
| 512 | int child_pos; | ||
| 513 | |||
| 514 | /* | ||
| 515 | * Some functions in a slot might not all be PCIE functions, very | ||
| 516 | * strange. Disable ASPM for the whole slot | ||
| 517 | */ | ||
| 518 | list_for_each_entry(child_dev, &pdev->subordinate->devices, bus_list) { | ||
| 519 | child_pos = pci_find_capability(child_dev, PCI_CAP_ID_EXP); | ||
| 520 | if (!child_pos) | ||
| 521 | return -EINVAL; | ||
| 522 | } | ||
| 523 | return 0; | ||
| 524 | } | ||
| 525 | |||
| 509 | /* | 526 | /* |
| 510 | * pcie_aspm_init_link_state: Initiate PCI express link state. | 527 | * pcie_aspm_init_link_state: Initiate PCI express link state. |
| 511 | * It is called after the pcie and its children devices are scaned. | 528 | * It is called after the pcie and its children devices are scaned. |
| @@ -526,6 +543,9 @@ void pcie_aspm_init_link_state(struct pci_dev *pdev) | |||
| 526 | if (list_empty(&pdev->subordinate->devices)) | 543 | if (list_empty(&pdev->subordinate->devices)) |
| 527 | goto out; | 544 | goto out; |
| 528 | 545 | ||
| 546 | if (pcie_aspm_sanity_check(pdev)) | ||
| 547 | goto out; | ||
| 548 | |||
| 529 | mutex_lock(&aspm_lock); | 549 | mutex_lock(&aspm_lock); |
| 530 | 550 | ||
| 531 | link_state = kzalloc(sizeof(*link_state), GFP_KERNEL); | 551 | link_state = kzalloc(sizeof(*link_state), GFP_KERNEL); |
diff --git a/drivers/pcmcia/electra_cf.c b/drivers/pcmcia/electra_cf.c index 0a6cea1316b4..52d0aa8c2e7a 100644 --- a/drivers/pcmcia/electra_cf.c +++ b/drivers/pcmcia/electra_cf.c | |||
| @@ -352,6 +352,7 @@ static struct of_device_id electra_cf_match[] = { | |||
| 352 | }, | 352 | }, |
| 353 | {}, | 353 | {}, |
| 354 | }; | 354 | }; |
| 355 | MODULE_DEVICE_TABLE(of, electra_cf_match); | ||
| 355 | 356 | ||
| 356 | static struct of_platform_driver electra_cf_driver = { | 357 | static struct of_platform_driver electra_cf_driver = { |
| 357 | .name = (char *)driver_name, | 358 | .name = (char *)driver_name, |
diff --git a/drivers/pnp/quirks.c b/drivers/pnp/quirks.c index e2b7de4cb05e..1ff3bb585ab2 100644 --- a/drivers/pnp/quirks.c +++ b/drivers/pnp/quirks.c | |||
| @@ -286,7 +286,7 @@ static void quirk_system_pci_resources(struct pnp_dev *dev) | |||
| 286 | pci_name(pdev), i, | 286 | pci_name(pdev), i, |
| 287 | (unsigned long long) pci_start, | 287 | (unsigned long long) pci_start, |
| 288 | (unsigned long long) pci_end); | 288 | (unsigned long long) pci_end); |
| 289 | res->flags = 0; | 289 | res->flags |= IORESOURCE_DISABLED; |
| 290 | } | 290 | } |
| 291 | } | 291 | } |
| 292 | } | 292 | } |
diff --git a/drivers/pnp/system.c b/drivers/pnp/system.c index 9c2496dbeee4..cf4e07b01d48 100644 --- a/drivers/pnp/system.c +++ b/drivers/pnp/system.c | |||
| @@ -81,7 +81,7 @@ static void reserve_resources_of_dev(struct pnp_dev *dev) | |||
| 81 | } | 81 | } |
| 82 | 82 | ||
| 83 | for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) { | 83 | for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) { |
| 84 | if (res->flags & IORESOURCE_UNSET) | 84 | if (res->flags & (IORESOURCE_UNSET | IORESOURCE_DISABLED)) |
| 85 | continue; | 85 | continue; |
| 86 | 86 | ||
| 87 | reserve_range(dev, res->start, res->end, 0); | 87 | reserve_range(dev, res->start, res->end, 0); |
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 6cc2c0330230..60f8afc7a56e 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
| @@ -534,4 +534,12 @@ config RTC_DRV_RS5C313 | |||
| 534 | help | 534 | help |
| 535 | If you say yes here you get support for the Ricoh RS5C313 RTC chips. | 535 | If you say yes here you get support for the Ricoh RS5C313 RTC chips. |
| 536 | 536 | ||
| 537 | config RTC_DRV_PPC | ||
| 538 | tristate "PowerPC machine dependent RTC support" | ||
| 539 | depends on PPC_MERGE | ||
| 540 | help | ||
| 541 | The PowerPC kernel has machine-specific functions for accessing | ||
| 542 | the RTC. This exposes that functionality through the generic RTC | ||
| 543 | class. | ||
| 544 | |||
| 537 | endif # RTC_CLASS | 545 | endif # RTC_CLASS |
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index 872f1218ff9f..ebe871cf16c1 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile | |||
| @@ -54,3 +54,4 @@ obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o | |||
| 54 | obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o | 54 | obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o |
| 55 | obj-$(CONFIG_RTC_DRV_VR41XX) += rtc-vr41xx.o | 55 | obj-$(CONFIG_RTC_DRV_VR41XX) += rtc-vr41xx.o |
| 56 | obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o | 56 | obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o |
| 57 | obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o | ||
diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index fa2d2f8b3f4d..640acd20fdde 100644 --- a/drivers/rtc/rtc-ds1374.c +++ b/drivers/rtc/rtc-ds1374.c | |||
| @@ -42,7 +42,7 @@ | |||
| 42 | #define DS1374_REG_TCR 0x09 /* Trickle Charge */ | 42 | #define DS1374_REG_TCR 0x09 /* Trickle Charge */ |
| 43 | 43 | ||
| 44 | static const struct i2c_device_id ds1374_id[] = { | 44 | static const struct i2c_device_id ds1374_id[] = { |
| 45 | { "rtc-ds1374", 0 }, | 45 | { "ds1374", 0 }, |
| 46 | { } | 46 | { } |
| 47 | }; | 47 | }; |
| 48 | MODULE_DEVICE_TABLE(i2c, ds1374_id); | 48 | MODULE_DEVICE_TABLE(i2c, ds1374_id); |
diff --git a/drivers/rtc/rtc-ppc.c b/drivers/rtc/rtc-ppc.c new file mode 100644 index 000000000000..c8e97e25ef7e --- /dev/null +++ b/drivers/rtc/rtc-ppc.c | |||
| @@ -0,0 +1,69 @@ | |||
| 1 | /* | ||
| 2 | * RTC driver for ppc_md RTC functions | ||
| 3 | * | ||
| 4 | * © 2007 Red Hat, Inc. | ||
| 5 | * | ||
| 6 | * Author: David Woodhouse <dwmw2@infradead.org> | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or modify | ||
| 9 | * it under the terms of the GNU General Public License version 2 as | ||
| 10 | * published by the Free Software Foundation. | ||
| 11 | */ | ||
| 12 | |||
| 13 | |||
| 14 | #include <linux/module.h> | ||
| 15 | #include <linux/err.h> | ||
| 16 | #include <linux/rtc.h> | ||
| 17 | #include <linux/platform_device.h> | ||
| 18 | #include <asm/machdep.h> | ||
| 19 | |||
| 20 | static int ppc_rtc_read_time(struct device *dev, struct rtc_time *tm) | ||
| 21 | { | ||
| 22 | ppc_md.get_rtc_time(tm); | ||
| 23 | return 0; | ||
| 24 | } | ||
| 25 | |||
| 26 | static int ppc_rtc_set_time(struct device *dev, struct rtc_time *tm) | ||
| 27 | { | ||
| 28 | return ppc_md.set_rtc_time(tm); | ||
| 29 | } | ||
| 30 | |||
| 31 | static const struct rtc_class_ops ppc_rtc_ops = { | ||
| 32 | .set_time = ppc_rtc_set_time, | ||
| 33 | .read_time = ppc_rtc_read_time, | ||
| 34 | }; | ||
| 35 | |||
| 36 | static struct rtc_device *rtc; | ||
| 37 | static struct platform_device *ppc_rtc_pdev; | ||
| 38 | |||
| 39 | static int __init ppc_rtc_init(void) | ||
| 40 | { | ||
| 41 | if (!ppc_md.get_rtc_time || !ppc_md.set_rtc_time) | ||
| 42 | return -ENODEV; | ||
| 43 | |||
| 44 | ppc_rtc_pdev = platform_device_register_simple("ppc-rtc", 0, NULL, 0); | ||
| 45 | if (IS_ERR(ppc_rtc_pdev)) | ||
| 46 | return PTR_ERR(ppc_rtc_pdev); | ||
| 47 | |||
| 48 | rtc = rtc_device_register("ppc_md", &ppc_rtc_pdev->dev, | ||
| 49 | &ppc_rtc_ops, THIS_MODULE); | ||
| 50 | if (IS_ERR(rtc)) { | ||
| 51 | platform_device_unregister(ppc_rtc_pdev); | ||
| 52 | return PTR_ERR(rtc); | ||
| 53 | } | ||
| 54 | |||
| 55 | return 0; | ||
| 56 | } | ||
| 57 | |||
| 58 | static void __exit ppc_rtc_exit(void) | ||
| 59 | { | ||
| 60 | rtc_device_unregister(rtc); | ||
| 61 | platform_device_unregister(ppc_rtc_pdev); | ||
| 62 | } | ||
| 63 | |||
| 64 | module_init(ppc_rtc_init); | ||
| 65 | module_exit(ppc_rtc_exit); | ||
| 66 | |||
| 67 | MODULE_LICENSE("GPL"); | ||
| 68 | MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>"); | ||
| 69 | MODULE_DESCRIPTION("Generic RTC class driver for PowerPC"); | ||
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index 8ba3f135da22..1a4025683362 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
| @@ -63,6 +63,7 @@ static void dasd_return_cqr_cb(struct dasd_ccw_req *, void *); | |||
| 63 | */ | 63 | */ |
| 64 | static wait_queue_head_t dasd_init_waitq; | 64 | static wait_queue_head_t dasd_init_waitq; |
| 65 | static wait_queue_head_t dasd_flush_wq; | 65 | static wait_queue_head_t dasd_flush_wq; |
| 66 | static wait_queue_head_t generic_waitq; | ||
| 66 | 67 | ||
| 67 | /* | 68 | /* |
| 68 | * Allocate memory for a new device structure. | 69 | * Allocate memory for a new device structure. |
| @@ -1151,11 +1152,15 @@ static void __dasd_device_process_final_queue(struct dasd_device *device, | |||
| 1151 | struct list_head *l, *n; | 1152 | struct list_head *l, *n; |
| 1152 | struct dasd_ccw_req *cqr; | 1153 | struct dasd_ccw_req *cqr; |
| 1153 | struct dasd_block *block; | 1154 | struct dasd_block *block; |
| 1155 | void (*callback)(struct dasd_ccw_req *, void *data); | ||
| 1156 | void *callback_data; | ||
| 1154 | 1157 | ||
| 1155 | list_for_each_safe(l, n, final_queue) { | 1158 | list_for_each_safe(l, n, final_queue) { |
| 1156 | cqr = list_entry(l, struct dasd_ccw_req, devlist); | 1159 | cqr = list_entry(l, struct dasd_ccw_req, devlist); |
| 1157 | list_del_init(&cqr->devlist); | 1160 | list_del_init(&cqr->devlist); |
| 1158 | block = cqr->block; | 1161 | block = cqr->block; |
| 1162 | callback = cqr->callback; | ||
| 1163 | callback_data = cqr->callback_data; | ||
| 1159 | if (block) | 1164 | if (block) |
| 1160 | spin_lock_bh(&block->queue_lock); | 1165 | spin_lock_bh(&block->queue_lock); |
| 1161 | switch (cqr->status) { | 1166 | switch (cqr->status) { |
| @@ -1176,7 +1181,7 @@ static void __dasd_device_process_final_queue(struct dasd_device *device, | |||
| 1176 | BUG(); | 1181 | BUG(); |
| 1177 | } | 1182 | } |
| 1178 | if (cqr->callback != NULL) | 1183 | if (cqr->callback != NULL) |
| 1179 | (cqr->callback)(cqr, cqr->callback_data); | 1184 | (callback)(cqr, callback_data); |
| 1180 | if (block) | 1185 | if (block) |
| 1181 | spin_unlock_bh(&block->queue_lock); | 1186 | spin_unlock_bh(&block->queue_lock); |
| 1182 | } | 1187 | } |
| @@ -1406,17 +1411,15 @@ static inline int _wait_for_wakeup(struct dasd_ccw_req *cqr) | |||
| 1406 | */ | 1411 | */ |
| 1407 | int dasd_sleep_on(struct dasd_ccw_req *cqr) | 1412 | int dasd_sleep_on(struct dasd_ccw_req *cqr) |
| 1408 | { | 1413 | { |
| 1409 | wait_queue_head_t wait_q; | ||
| 1410 | struct dasd_device *device; | 1414 | struct dasd_device *device; |
| 1411 | int rc; | 1415 | int rc; |
| 1412 | 1416 | ||
| 1413 | device = cqr->startdev; | 1417 | device = cqr->startdev; |
| 1414 | 1418 | ||
| 1415 | init_waitqueue_head (&wait_q); | ||
| 1416 | cqr->callback = dasd_wakeup_cb; | 1419 | cqr->callback = dasd_wakeup_cb; |
| 1417 | cqr->callback_data = (void *) &wait_q; | 1420 | cqr->callback_data = (void *) &generic_waitq; |
| 1418 | dasd_add_request_tail(cqr); | 1421 | dasd_add_request_tail(cqr); |
| 1419 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1422 | wait_event(generic_waitq, _wait_for_wakeup(cqr)); |
| 1420 | 1423 | ||
| 1421 | /* Request status is either done or failed. */ | 1424 | /* Request status is either done or failed. */ |
| 1422 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | 1425 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
| @@ -1429,20 +1432,18 @@ int dasd_sleep_on(struct dasd_ccw_req *cqr) | |||
| 1429 | */ | 1432 | */ |
| 1430 | int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) | 1433 | int dasd_sleep_on_interruptible(struct dasd_ccw_req *cqr) |
| 1431 | { | 1434 | { |
| 1432 | wait_queue_head_t wait_q; | ||
| 1433 | struct dasd_device *device; | 1435 | struct dasd_device *device; |
| 1434 | int rc; | 1436 | int rc; |
| 1435 | 1437 | ||
| 1436 | device = cqr->startdev; | 1438 | device = cqr->startdev; |
| 1437 | init_waitqueue_head (&wait_q); | ||
| 1438 | cqr->callback = dasd_wakeup_cb; | 1439 | cqr->callback = dasd_wakeup_cb; |
| 1439 | cqr->callback_data = (void *) &wait_q; | 1440 | cqr->callback_data = (void *) &generic_waitq; |
| 1440 | dasd_add_request_tail(cqr); | 1441 | dasd_add_request_tail(cqr); |
| 1441 | rc = wait_event_interruptible(wait_q, _wait_for_wakeup(cqr)); | 1442 | rc = wait_event_interruptible(generic_waitq, _wait_for_wakeup(cqr)); |
| 1442 | if (rc == -ERESTARTSYS) { | 1443 | if (rc == -ERESTARTSYS) { |
| 1443 | dasd_cancel_req(cqr); | 1444 | dasd_cancel_req(cqr); |
| 1444 | /* wait (non-interruptible) for final status */ | 1445 | /* wait (non-interruptible) for final status */ |
| 1445 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1446 | wait_event(generic_waitq, _wait_for_wakeup(cqr)); |
| 1446 | } | 1447 | } |
| 1447 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | 1448 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
| 1448 | return rc; | 1449 | return rc; |
| @@ -1466,7 +1467,6 @@ static inline int _dasd_term_running_cqr(struct dasd_device *device) | |||
| 1466 | 1467 | ||
| 1467 | int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) | 1468 | int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) |
| 1468 | { | 1469 | { |
| 1469 | wait_queue_head_t wait_q; | ||
| 1470 | struct dasd_device *device; | 1470 | struct dasd_device *device; |
| 1471 | int rc; | 1471 | int rc; |
| 1472 | 1472 | ||
| @@ -1478,9 +1478,8 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) | |||
| 1478 | return rc; | 1478 | return rc; |
| 1479 | } | 1479 | } |
| 1480 | 1480 | ||
| 1481 | init_waitqueue_head (&wait_q); | ||
| 1482 | cqr->callback = dasd_wakeup_cb; | 1481 | cqr->callback = dasd_wakeup_cb; |
| 1483 | cqr->callback_data = (void *) &wait_q; | 1482 | cqr->callback_data = (void *) &generic_waitq; |
| 1484 | cqr->status = DASD_CQR_QUEUED; | 1483 | cqr->status = DASD_CQR_QUEUED; |
| 1485 | list_add(&cqr->devlist, &device->ccw_queue); | 1484 | list_add(&cqr->devlist, &device->ccw_queue); |
| 1486 | 1485 | ||
| @@ -1489,7 +1488,7 @@ int dasd_sleep_on_immediatly(struct dasd_ccw_req *cqr) | |||
| 1489 | 1488 | ||
| 1490 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 1489 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
| 1491 | 1490 | ||
| 1492 | wait_event(wait_q, _wait_for_wakeup(cqr)); | 1491 | wait_event(generic_waitq, _wait_for_wakeup(cqr)); |
| 1493 | 1492 | ||
| 1494 | /* Request status is either done or failed. */ | 1493 | /* Request status is either done or failed. */ |
| 1495 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; | 1494 | rc = (cqr->status == DASD_CQR_DONE) ? 0 : -EIO; |
| @@ -2430,6 +2429,7 @@ static int __init dasd_init(void) | |||
| 2430 | 2429 | ||
| 2431 | init_waitqueue_head(&dasd_init_waitq); | 2430 | init_waitqueue_head(&dasd_init_waitq); |
| 2432 | init_waitqueue_head(&dasd_flush_wq); | 2431 | init_waitqueue_head(&dasd_flush_wq); |
| 2432 | init_waitqueue_head(&generic_waitq); | ||
| 2433 | 2433 | ||
| 2434 | /* register 'common' DASD debug area, used for all DBF_XXX calls */ | 2434 | /* register 'common' DASD debug area, used for all DBF_XXX calls */ |
| 2435 | dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long)); | 2435 | dasd_debug_area = debug_register("dasd", 1, 1, 8 * sizeof(long)); |
diff --git a/drivers/s390/char/raw3270.c b/drivers/s390/char/raw3270.c index 0d98f1ff2edd..848ef7e8523f 100644 --- a/drivers/s390/char/raw3270.c +++ b/drivers/s390/char/raw3270.c | |||
| @@ -549,7 +549,6 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view, | |||
| 549 | struct raw3270_request *rq) | 549 | struct raw3270_request *rq) |
| 550 | { | 550 | { |
| 551 | unsigned long flags; | 551 | unsigned long flags; |
| 552 | wait_queue_head_t wq; | ||
| 553 | int rc; | 552 | int rc; |
| 554 | 553 | ||
| 555 | #ifdef CONFIG_TN3270_CONSOLE | 554 | #ifdef CONFIG_TN3270_CONSOLE |
| @@ -566,20 +565,20 @@ raw3270_start_init(struct raw3270 *rp, struct raw3270_view *view, | |||
| 566 | return rq->rc; | 565 | return rq->rc; |
| 567 | } | 566 | } |
| 568 | #endif | 567 | #endif |
| 569 | init_waitqueue_head(&wq); | ||
| 570 | rq->callback = raw3270_wake_init; | 568 | rq->callback = raw3270_wake_init; |
| 571 | rq->callback_data = &wq; | 569 | rq->callback_data = &raw3270_wait_queue; |
| 572 | spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags); | 570 | spin_lock_irqsave(get_ccwdev_lock(view->dev->cdev), flags); |
| 573 | rc = __raw3270_start(rp, view, rq); | 571 | rc = __raw3270_start(rp, view, rq); |
| 574 | spin_unlock_irqrestore(get_ccwdev_lock(view->dev->cdev), flags); | 572 | spin_unlock_irqrestore(get_ccwdev_lock(view->dev->cdev), flags); |
| 575 | if (rc) | 573 | if (rc) |
| 576 | return rc; | 574 | return rc; |
| 577 | /* Now wait for the completion. */ | 575 | /* Now wait for the completion. */ |
| 578 | rc = wait_event_interruptible(wq, raw3270_request_final(rq)); | 576 | rc = wait_event_interruptible(raw3270_wait_queue, |
| 577 | raw3270_request_final(rq)); | ||
| 579 | if (rc == -ERESTARTSYS) { /* Interrupted by a signal. */ | 578 | if (rc == -ERESTARTSYS) { /* Interrupted by a signal. */ |
| 580 | raw3270_halt_io(view->dev, rq); | 579 | raw3270_halt_io(view->dev, rq); |
| 581 | /* No wait for the halt to complete. */ | 580 | /* No wait for the halt to complete. */ |
| 582 | wait_event(wq, raw3270_request_final(rq)); | 581 | wait_event(raw3270_wait_queue, raw3270_request_final(rq)); |
| 583 | return -ERESTARTSYS; | 582 | return -ERESTARTSYS; |
| 584 | } | 583 | } |
| 585 | return rq->rc; | 584 | return rq->rc; |
diff --git a/drivers/s390/char/sclp_config.c b/drivers/s390/char/sclp_config.c index 9e784d5f7f57..ad05a87bc480 100644 --- a/drivers/s390/char/sclp_config.c +++ b/drivers/s390/char/sclp_config.c | |||
| @@ -40,7 +40,7 @@ static void sclp_cpu_capability_notify(struct work_struct *work) | |||
| 40 | put_online_cpus(); | 40 | put_online_cpus(); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| 43 | static void sclp_cpu_change_notify(struct work_struct *work) | 43 | static void __ref sclp_cpu_change_notify(struct work_struct *work) |
| 44 | { | 44 | { |
| 45 | smp_rescan_cpus(); | 45 | smp_rescan_cpus(); |
| 46 | } | 46 | } |
diff --git a/drivers/s390/char/sclp_vt220.c b/drivers/s390/char/sclp_vt220.c index 35707c04e613..62576af36f47 100644 --- a/drivers/s390/char/sclp_vt220.c +++ b/drivers/s390/char/sclp_vt220.c | |||
| @@ -71,9 +71,6 @@ static struct list_head sclp_vt220_outqueue; | |||
| 71 | /* Number of requests in outqueue */ | 71 | /* Number of requests in outqueue */ |
| 72 | static int sclp_vt220_outqueue_count; | 72 | static int sclp_vt220_outqueue_count; |
| 73 | 73 | ||
| 74 | /* Wait queue used to delay write requests while we've run out of buffers */ | ||
| 75 | static wait_queue_head_t sclp_vt220_waitq; | ||
| 76 | |||
| 77 | /* Timer used for delaying write requests to merge subsequent messages into | 74 | /* Timer used for delaying write requests to merge subsequent messages into |
| 78 | * a single buffer */ | 75 | * a single buffer */ |
| 79 | static struct timer_list sclp_vt220_timer; | 76 | static struct timer_list sclp_vt220_timer; |
| @@ -133,7 +130,6 @@ sclp_vt220_process_queue(struct sclp_vt220_request *request) | |||
| 133 | } while (request && __sclp_vt220_emit(request)); | 130 | } while (request && __sclp_vt220_emit(request)); |
| 134 | if (request == NULL && sclp_vt220_flush_later) | 131 | if (request == NULL && sclp_vt220_flush_later) |
| 135 | sclp_vt220_emit_current(); | 132 | sclp_vt220_emit_current(); |
| 136 | wake_up(&sclp_vt220_waitq); | ||
| 137 | /* Check if the tty needs a wake up call */ | 133 | /* Check if the tty needs a wake up call */ |
| 138 | if (sclp_vt220_tty != NULL) { | 134 | if (sclp_vt220_tty != NULL) { |
| 139 | tty_wakeup(sclp_vt220_tty); | 135 | tty_wakeup(sclp_vt220_tty); |
| @@ -383,7 +379,7 @@ sclp_vt220_timeout(unsigned long data) | |||
| 383 | */ | 379 | */ |
| 384 | static int | 380 | static int |
| 385 | __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, | 381 | __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, |
| 386 | int convertlf, int may_schedule) | 382 | int convertlf, int may_fail) |
| 387 | { | 383 | { |
| 388 | unsigned long flags; | 384 | unsigned long flags; |
| 389 | void *page; | 385 | void *page; |
| @@ -395,15 +391,14 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, | |||
| 395 | overall_written = 0; | 391 | overall_written = 0; |
| 396 | spin_lock_irqsave(&sclp_vt220_lock, flags); | 392 | spin_lock_irqsave(&sclp_vt220_lock, flags); |
| 397 | do { | 393 | do { |
| 398 | /* Create a sclp output buffer if none exists yet */ | 394 | /* Create an sclp output buffer if none exists yet */ |
| 399 | if (sclp_vt220_current_request == NULL) { | 395 | if (sclp_vt220_current_request == NULL) { |
| 400 | while (list_empty(&sclp_vt220_empty)) { | 396 | while (list_empty(&sclp_vt220_empty)) { |
| 401 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); | 397 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); |
| 402 | if (in_interrupt() || !may_schedule) | 398 | if (may_fail) |
| 403 | sclp_sync_wait(); | 399 | goto out; |
| 404 | else | 400 | else |
| 405 | wait_event(sclp_vt220_waitq, | 401 | sclp_sync_wait(); |
| 406 | !list_empty(&sclp_vt220_empty)); | ||
| 407 | spin_lock_irqsave(&sclp_vt220_lock, flags); | 402 | spin_lock_irqsave(&sclp_vt220_lock, flags); |
| 408 | } | 403 | } |
| 409 | page = (void *) sclp_vt220_empty.next; | 404 | page = (void *) sclp_vt220_empty.next; |
| @@ -437,6 +432,7 @@ __sclp_vt220_write(const unsigned char *buf, int count, int do_schedule, | |||
| 437 | add_timer(&sclp_vt220_timer); | 432 | add_timer(&sclp_vt220_timer); |
| 438 | } | 433 | } |
| 439 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); | 434 | spin_unlock_irqrestore(&sclp_vt220_lock, flags); |
| 435 | out: | ||
| 440 | return overall_written; | 436 | return overall_written; |
| 441 | } | 437 | } |
| 442 | 438 | ||
| @@ -520,19 +516,11 @@ sclp_vt220_close(struct tty_struct *tty, struct file *filp) | |||
| 520 | * character to the tty device. If the kernel uses this routine, | 516 | * character to the tty device. If the kernel uses this routine, |
| 521 | * it must call the flush_chars() routine (if defined) when it is | 517 | * it must call the flush_chars() routine (if defined) when it is |
| 522 | * done stuffing characters into the driver. | 518 | * done stuffing characters into the driver. |
| 523 | * | ||
| 524 | * NOTE: include/linux/tty_driver.h specifies that a character should be | ||
| 525 | * ignored if there is no room in the queue. This driver implements a different | ||
| 526 | * semantic in that it will block when there is no more room left. | ||
| 527 | * | ||
| 528 | * FIXME: putchar can currently be called from BH and other non blocking | ||
| 529 | * handlers so this semantic isn't a good idea. | ||
| 530 | */ | 519 | */ |
| 531 | static int | 520 | static int |
| 532 | sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) | 521 | sclp_vt220_put_char(struct tty_struct *tty, unsigned char ch) |
| 533 | { | 522 | { |
| 534 | __sclp_vt220_write(&ch, 1, 0, 0, 1); | 523 | return __sclp_vt220_write(&ch, 1, 0, 0, 1); |
| 535 | return 1; | ||
| 536 | } | 524 | } |
| 537 | 525 | ||
| 538 | /* | 526 | /* |
| @@ -653,7 +641,6 @@ static int __init __sclp_vt220_init(void) | |||
| 653 | spin_lock_init(&sclp_vt220_lock); | 641 | spin_lock_init(&sclp_vt220_lock); |
| 654 | INIT_LIST_HEAD(&sclp_vt220_empty); | 642 | INIT_LIST_HEAD(&sclp_vt220_empty); |
| 655 | INIT_LIST_HEAD(&sclp_vt220_outqueue); | 643 | INIT_LIST_HEAD(&sclp_vt220_outqueue); |
| 656 | init_waitqueue_head(&sclp_vt220_waitq); | ||
| 657 | init_timer(&sclp_vt220_timer); | 644 | init_timer(&sclp_vt220_timer); |
| 658 | sclp_vt220_current_request = NULL; | 645 | sclp_vt220_current_request = NULL; |
| 659 | sclp_vt220_buffered_chars = 0; | 646 | sclp_vt220_buffered_chars = 0; |
diff --git a/drivers/s390/char/tape.h b/drivers/s390/char/tape.h index dddf8d62c153..d0d565a05dfe 100644 --- a/drivers/s390/char/tape.h +++ b/drivers/s390/char/tape.h | |||
| @@ -231,6 +231,9 @@ struct tape_device { | |||
| 231 | /* Request queue. */ | 231 | /* Request queue. */ |
| 232 | struct list_head req_queue; | 232 | struct list_head req_queue; |
| 233 | 233 | ||
| 234 | /* Request wait queue. */ | ||
| 235 | wait_queue_head_t wait_queue; | ||
| 236 | |||
| 234 | /* Each tape device has (currently) two minor numbers. */ | 237 | /* Each tape device has (currently) two minor numbers. */ |
| 235 | int first_minor; | 238 | int first_minor; |
| 236 | 239 | ||
diff --git a/drivers/s390/char/tape_block.c b/drivers/s390/char/tape_block.c index ddc4a114e7f4..95da72bc17e8 100644 --- a/drivers/s390/char/tape_block.c +++ b/drivers/s390/char/tape_block.c | |||
| @@ -179,11 +179,11 @@ tapeblock_requeue(struct work_struct *work) { | |||
| 179 | tapeblock_end_request(req, -EIO); | 179 | tapeblock_end_request(req, -EIO); |
| 180 | continue; | 180 | continue; |
| 181 | } | 181 | } |
| 182 | blkdev_dequeue_request(req); | ||
| 183 | nr_queued++; | ||
| 182 | spin_unlock_irq(&device->blk_data.request_queue_lock); | 184 | spin_unlock_irq(&device->blk_data.request_queue_lock); |
| 183 | rc = tapeblock_start_request(device, req); | 185 | rc = tapeblock_start_request(device, req); |
| 184 | spin_lock_irq(&device->blk_data.request_queue_lock); | 186 | spin_lock_irq(&device->blk_data.request_queue_lock); |
| 185 | blkdev_dequeue_request(req); | ||
| 186 | nr_queued++; | ||
| 187 | } | 187 | } |
| 188 | spin_unlock_irq(&device->blk_data.request_queue_lock); | 188 | spin_unlock_irq(&device->blk_data.request_queue_lock); |
| 189 | atomic_set(&device->blk_data.requeue_scheduled, 0); | 189 | atomic_set(&device->blk_data.requeue_scheduled, 0); |
diff --git a/drivers/s390/char/tape_core.c b/drivers/s390/char/tape_core.c index 76e44eb7c47f..c20e3c548343 100644 --- a/drivers/s390/char/tape_core.c +++ b/drivers/s390/char/tape_core.c | |||
| @@ -449,6 +449,7 @@ tape_alloc_device(void) | |||
| 449 | INIT_LIST_HEAD(&device->req_queue); | 449 | INIT_LIST_HEAD(&device->req_queue); |
| 450 | INIT_LIST_HEAD(&device->node); | 450 | INIT_LIST_HEAD(&device->node); |
| 451 | init_waitqueue_head(&device->state_change_wq); | 451 | init_waitqueue_head(&device->state_change_wq); |
| 452 | init_waitqueue_head(&device->wait_queue); | ||
| 452 | device->tape_state = TS_INIT; | 453 | device->tape_state = TS_INIT; |
| 453 | device->medium_state = MS_UNKNOWN; | 454 | device->medium_state = MS_UNKNOWN; |
| 454 | *device->modeset_byte = 0; | 455 | *device->modeset_byte = 0; |
| @@ -954,21 +955,19 @@ __tape_wake_up(struct tape_request *request, void *data) | |||
| 954 | int | 955 | int |
| 955 | tape_do_io(struct tape_device *device, struct tape_request *request) | 956 | tape_do_io(struct tape_device *device, struct tape_request *request) |
| 956 | { | 957 | { |
| 957 | wait_queue_head_t wq; | ||
| 958 | int rc; | 958 | int rc; |
| 959 | 959 | ||
| 960 | init_waitqueue_head(&wq); | ||
| 961 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 960 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
| 962 | /* Setup callback */ | 961 | /* Setup callback */ |
| 963 | request->callback = __tape_wake_up; | 962 | request->callback = __tape_wake_up; |
| 964 | request->callback_data = &wq; | 963 | request->callback_data = &device->wait_queue; |
| 965 | /* Add request to request queue and try to start it. */ | 964 | /* Add request to request queue and try to start it. */ |
| 966 | rc = __tape_start_request(device, request); | 965 | rc = __tape_start_request(device, request); |
| 967 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 966 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
| 968 | if (rc) | 967 | if (rc) |
| 969 | return rc; | 968 | return rc; |
| 970 | /* Request added to the queue. Wait for its completion. */ | 969 | /* Request added to the queue. Wait for its completion. */ |
| 971 | wait_event(wq, (request->callback == NULL)); | 970 | wait_event(device->wait_queue, (request->callback == NULL)); |
| 972 | /* Get rc from request */ | 971 | /* Get rc from request */ |
| 973 | return request->rc; | 972 | return request->rc; |
| 974 | } | 973 | } |
| @@ -989,20 +988,19 @@ int | |||
| 989 | tape_do_io_interruptible(struct tape_device *device, | 988 | tape_do_io_interruptible(struct tape_device *device, |
| 990 | struct tape_request *request) | 989 | struct tape_request *request) |
| 991 | { | 990 | { |
| 992 | wait_queue_head_t wq; | ||
| 993 | int rc; | 991 | int rc; |
| 994 | 992 | ||
| 995 | init_waitqueue_head(&wq); | ||
| 996 | spin_lock_irq(get_ccwdev_lock(device->cdev)); | 993 | spin_lock_irq(get_ccwdev_lock(device->cdev)); |
| 997 | /* Setup callback */ | 994 | /* Setup callback */ |
| 998 | request->callback = __tape_wake_up_interruptible; | 995 | request->callback = __tape_wake_up_interruptible; |
| 999 | request->callback_data = &wq; | 996 | request->callback_data = &device->wait_queue; |
| 1000 | rc = __tape_start_request(device, request); | 997 | rc = __tape_start_request(device, request); |
| 1001 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); | 998 | spin_unlock_irq(get_ccwdev_lock(device->cdev)); |
| 1002 | if (rc) | 999 | if (rc) |
| 1003 | return rc; | 1000 | return rc; |
| 1004 | /* Request added to the queue. Wait for its completion. */ | 1001 | /* Request added to the queue. Wait for its completion. */ |
| 1005 | rc = wait_event_interruptible(wq, (request->callback == NULL)); | 1002 | rc = wait_event_interruptible(device->wait_queue, |
| 1003 | (request->callback == NULL)); | ||
| 1006 | if (rc != -ERESTARTSYS) | 1004 | if (rc != -ERESTARTSYS) |
| 1007 | /* Request finished normally. */ | 1005 | /* Request finished normally. */ |
| 1008 | return request->rc; | 1006 | return request->rc; |
| @@ -1015,7 +1013,7 @@ tape_do_io_interruptible(struct tape_device *device, | |||
| 1015 | /* Wait for the interrupt that acknowledges the halt. */ | 1013 | /* Wait for the interrupt that acknowledges the halt. */ |
| 1016 | do { | 1014 | do { |
| 1017 | rc = wait_event_interruptible( | 1015 | rc = wait_event_interruptible( |
| 1018 | wq, | 1016 | device->wait_queue, |
| 1019 | (request->callback == NULL) | 1017 | (request->callback == NULL) |
| 1020 | ); | 1018 | ); |
| 1021 | } while (rc == -ERESTARTSYS); | 1019 | } while (rc == -ERESTARTSYS); |
diff --git a/drivers/s390/kvm/kvm_virtio.c b/drivers/s390/kvm/kvm_virtio.c index 9f55ce6f3c78..5ab34340919b 100644 --- a/drivers/s390/kvm/kvm_virtio.c +++ b/drivers/s390/kvm/kvm_virtio.c | |||
| @@ -31,11 +31,6 @@ | |||
| 31 | */ | 31 | */ |
| 32 | static void *kvm_devices; | 32 | static void *kvm_devices; |
| 33 | 33 | ||
| 34 | /* | ||
| 35 | * Unique numbering for kvm devices. | ||
| 36 | */ | ||
| 37 | static unsigned int dev_index; | ||
| 38 | |||
| 39 | struct kvm_device { | 34 | struct kvm_device { |
| 40 | struct virtio_device vdev; | 35 | struct virtio_device vdev; |
| 41 | struct kvm_device_desc *desc; | 36 | struct kvm_device_desc *desc; |
| @@ -250,26 +245,25 @@ static struct device kvm_root = { | |||
| 250 | * adds a new device and register it with virtio | 245 | * adds a new device and register it with virtio |
| 251 | * appropriate drivers are loaded by the device model | 246 | * appropriate drivers are loaded by the device model |
| 252 | */ | 247 | */ |
| 253 | static void add_kvm_device(struct kvm_device_desc *d) | 248 | static void add_kvm_device(struct kvm_device_desc *d, unsigned int offset) |
| 254 | { | 249 | { |
| 255 | struct kvm_device *kdev; | 250 | struct kvm_device *kdev; |
| 256 | 251 | ||
| 257 | kdev = kzalloc(sizeof(*kdev), GFP_KERNEL); | 252 | kdev = kzalloc(sizeof(*kdev), GFP_KERNEL); |
| 258 | if (!kdev) { | 253 | if (!kdev) { |
| 259 | printk(KERN_EMERG "Cannot allocate kvm dev %u\n", | 254 | printk(KERN_EMERG "Cannot allocate kvm dev %u type %u\n", |
| 260 | dev_index++); | 255 | offset, d->type); |
| 261 | return; | 256 | return; |
| 262 | } | 257 | } |
| 263 | 258 | ||
| 264 | kdev->vdev.dev.parent = &kvm_root; | 259 | kdev->vdev.dev.parent = &kvm_root; |
| 265 | kdev->vdev.index = dev_index++; | ||
| 266 | kdev->vdev.id.device = d->type; | 260 | kdev->vdev.id.device = d->type; |
| 267 | kdev->vdev.config = &kvm_vq_configspace_ops; | 261 | kdev->vdev.config = &kvm_vq_configspace_ops; |
| 268 | kdev->desc = d; | 262 | kdev->desc = d; |
| 269 | 263 | ||
| 270 | if (register_virtio_device(&kdev->vdev) != 0) { | 264 | if (register_virtio_device(&kdev->vdev) != 0) { |
| 271 | printk(KERN_ERR "Failed to register kvm device %u\n", | 265 | printk(KERN_ERR "Failed to register kvm device %u type %u\n", |
| 272 | kdev->vdev.index); | 266 | offset, d->type); |
| 273 | kfree(kdev); | 267 | kfree(kdev); |
| 274 | } | 268 | } |
| 275 | } | 269 | } |
| @@ -289,7 +283,7 @@ static void scan_devices(void) | |||
| 289 | if (d->type == 0) | 283 | if (d->type == 0) |
| 290 | break; | 284 | break; |
| 291 | 285 | ||
| 292 | add_kvm_device(d); | 286 | add_kvm_device(d, i); |
| 293 | } | 287 | } |
| 294 | } | 288 | } |
| 295 | 289 | ||
diff --git a/drivers/scsi/ibmvscsi/ibmvscsi.c b/drivers/scsi/ibmvscsi/ibmvscsi.c index ccfd8aca3765..5d23368a1bce 100644 --- a/drivers/scsi/ibmvscsi/ibmvscsi.c +++ b/drivers/scsi/ibmvscsi/ibmvscsi.c | |||
| @@ -1348,7 +1348,7 @@ void ibmvscsi_handle_crq(struct viosrp_crq *crq, | |||
| 1348 | 1348 | ||
| 1349 | del_timer(&evt_struct->timer); | 1349 | del_timer(&evt_struct->timer); |
| 1350 | 1350 | ||
| 1351 | if (crq->status != VIOSRP_OK && evt_struct->cmnd) | 1351 | if ((crq->status != VIOSRP_OK && crq->status != VIOSRP_OK2) && evt_struct->cmnd) |
| 1352 | evt_struct->cmnd->result = DID_ERROR << 16; | 1352 | evt_struct->cmnd->result = DID_ERROR << 16; |
| 1353 | if (evt_struct->done) | 1353 | if (evt_struct->done) |
| 1354 | evt_struct->done(evt_struct); | 1354 | evt_struct->done(evt_struct); |
diff --git a/drivers/scsi/ibmvscsi/viosrp.h b/drivers/scsi/ibmvscsi/viosrp.h index 4c4aadb3e405..204604501ad8 100644 --- a/drivers/scsi/ibmvscsi/viosrp.h +++ b/drivers/scsi/ibmvscsi/viosrp.h | |||
| @@ -65,7 +65,8 @@ enum viosrp_crq_status { | |||
| 65 | VIOSRP_VIOLATES_MAX_XFER = 0x2, | 65 | VIOSRP_VIOLATES_MAX_XFER = 0x2, |
| 66 | VIOSRP_PARTNER_PANIC = 0x3, | 66 | VIOSRP_PARTNER_PANIC = 0x3, |
| 67 | VIOSRP_DEVICE_BUSY = 0x8, | 67 | VIOSRP_DEVICE_BUSY = 0x8, |
| 68 | VIOSRP_ADAPTER_FAIL = 0x10 | 68 | VIOSRP_ADAPTER_FAIL = 0x10, |
| 69 | VIOSRP_OK2 = 0x99, | ||
| 69 | }; | 70 | }; |
| 70 | 71 | ||
| 71 | struct viosrp_crq { | 72 | struct viosrp_crq { |
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 287690853caf..8dd88fc1244a 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
| @@ -70,6 +70,9 @@ qla2x00_sysfs_write_fw_dump(struct kobject *kobj, | |||
| 70 | case 2: | 70 | case 2: |
| 71 | qla2x00_alloc_fw_dump(ha); | 71 | qla2x00_alloc_fw_dump(ha); |
| 72 | break; | 72 | break; |
| 73 | case 3: | ||
| 74 | qla2x00_system_error(ha); | ||
| 75 | break; | ||
| 73 | } | 76 | } |
| 74 | return (count); | 77 | return (count); |
| 75 | } | 78 | } |
| @@ -886,9 +889,13 @@ qla2x00_get_host_speed(struct Scsi_Host *shost) | |||
| 886 | static void | 889 | static void |
| 887 | qla2x00_get_host_port_type(struct Scsi_Host *shost) | 890 | qla2x00_get_host_port_type(struct Scsi_Host *shost) |
| 888 | { | 891 | { |
| 889 | scsi_qla_host_t *ha = to_qla_parent(shost_priv(shost)); | 892 | scsi_qla_host_t *ha = shost_priv(shost); |
| 890 | uint32_t port_type = FC_PORTTYPE_UNKNOWN; | 893 | uint32_t port_type = FC_PORTTYPE_UNKNOWN; |
| 891 | 894 | ||
| 895 | if (ha->parent) { | ||
| 896 | fc_host_port_type(shost) = FC_PORTTYPE_NPIV; | ||
| 897 | return; | ||
| 898 | } | ||
| 892 | switch (ha->current_topology) { | 899 | switch (ha->current_topology) { |
| 893 | case ISP_CFG_NL: | 900 | case ISP_CFG_NL: |
| 894 | port_type = FC_PORTTYPE_LPORT; | 901 | port_type = FC_PORTTYPE_LPORT; |
| @@ -1172,10 +1179,10 @@ qla24xx_vport_delete(struct fc_vport *fc_vport) | |||
| 1172 | qla24xx_disable_vp(vha); | 1179 | qla24xx_disable_vp(vha); |
| 1173 | qla24xx_deallocate_vp_id(vha); | 1180 | qla24xx_deallocate_vp_id(vha); |
| 1174 | 1181 | ||
| 1175 | down(&ha->vport_sem); | 1182 | mutex_lock(&ha->vport_lock); |
| 1176 | ha->cur_vport_count--; | 1183 | ha->cur_vport_count--; |
| 1177 | clear_bit(vha->vp_idx, ha->vp_idx_map); | 1184 | clear_bit(vha->vp_idx, ha->vp_idx_map); |
| 1178 | up(&ha->vport_sem); | 1185 | mutex_unlock(&ha->vport_lock); |
| 1179 | 1186 | ||
| 1180 | kfree(vha->node_name); | 1187 | kfree(vha->node_name); |
| 1181 | kfree(vha->port_name); | 1188 | kfree(vha->port_name); |
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 299eccf6cabd..8dd600013bd1 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
| @@ -2457,7 +2457,7 @@ typedef struct scsi_qla_host { | |||
| 2457 | #define MBX_INTR_WAIT 2 | 2457 | #define MBX_INTR_WAIT 2 |
| 2458 | #define MBX_UPDATE_FLASH_ACTIVE 3 | 2458 | #define MBX_UPDATE_FLASH_ACTIVE 3 |
| 2459 | 2459 | ||
| 2460 | struct semaphore vport_sem; /* Virtual port synchronization */ | 2460 | struct mutex vport_lock; /* Virtual port synchronization */ |
| 2461 | struct completion mbx_cmd_comp; /* Serialize mbx access */ | 2461 | struct completion mbx_cmd_comp; /* Serialize mbx access */ |
| 2462 | struct completion mbx_intr_comp; /* Used for completion notification */ | 2462 | struct completion mbx_intr_comp; /* Used for completion notification */ |
| 2463 | 2463 | ||
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index f8827068d30f..9b4bebee6879 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
| @@ -228,6 +228,9 @@ extern int qla24xx_abort_target(struct fc_port *, unsigned int); | |||
| 228 | extern int qla24xx_lun_reset(struct fc_port *, unsigned int); | 228 | extern int qla24xx_lun_reset(struct fc_port *, unsigned int); |
| 229 | 229 | ||
| 230 | extern int | 230 | extern int |
| 231 | qla2x00_system_error(scsi_qla_host_t *); | ||
| 232 | |||
| 233 | extern int | ||
| 231 | qla2x00_set_serdes_params(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t); | 234 | qla2x00_set_serdes_params(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t); |
| 232 | 235 | ||
| 233 | extern int | 236 | extern int |
diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index e9bae27737d1..92fafbdbbaab 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h | |||
| @@ -34,7 +34,11 @@ qla2x00_debounce_register(volatile uint16_t __iomem *addr) | |||
| 34 | static inline void | 34 | static inline void |
| 35 | qla2x00_poll(scsi_qla_host_t *ha) | 35 | qla2x00_poll(scsi_qla_host_t *ha) |
| 36 | { | 36 | { |
| 37 | unsigned long flags; | ||
| 38 | |||
| 39 | local_irq_save(flags); | ||
| 37 | ha->isp_ops->intr_handler(0, ha); | 40 | ha->isp_ops->intr_handler(0, ha); |
| 41 | local_irq_restore(flags); | ||
| 38 | } | 42 | } |
| 39 | 43 | ||
| 40 | static __inline__ scsi_qla_host_t * | 44 | static __inline__ scsi_qla_host_t * |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 5d9a64a7879b..ec63b79f900a 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
| @@ -272,8 +272,6 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
| 272 | uint32_t rscn_entry, host_pid; | 272 | uint32_t rscn_entry, host_pid; |
| 273 | uint8_t rscn_queue_index; | 273 | uint8_t rscn_queue_index; |
| 274 | unsigned long flags; | 274 | unsigned long flags; |
| 275 | scsi_qla_host_t *vha; | ||
| 276 | int i; | ||
| 277 | 275 | ||
| 278 | /* Setup to process RIO completion. */ | 276 | /* Setup to process RIO completion. */ |
| 279 | handle_cnt = 0; | 277 | handle_cnt = 0; |
| @@ -544,18 +542,10 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
| 544 | break; | 542 | break; |
| 545 | 543 | ||
| 546 | case MBA_PORT_UPDATE: /* Port database update */ | 544 | case MBA_PORT_UPDATE: /* Port database update */ |
| 547 | if ((ha->flags.npiv_supported) && (ha->num_vhosts)) { | 545 | /* Only handle SCNs for our Vport index. */ |
| 548 | for_each_mapped_vp_idx(ha, i) { | 546 | if (ha->parent && ha->vp_idx != (mb[3] & 0xff)) |
| 549 | list_for_each_entry(vha, &ha->vp_list, | 547 | break; |
| 550 | vp_list) { | 548 | |
| 551 | if ((mb[3] & 0xff) | ||
| 552 | == vha->vp_idx) { | ||
| 553 | ha = vha; | ||
| 554 | break; | ||
| 555 | } | ||
| 556 | } | ||
| 557 | } | ||
| 558 | } | ||
| 559 | /* | 549 | /* |
| 560 | * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET | 550 | * If PORT UPDATE is global (recieved LIP_OCCURED/LIP_RESET |
| 561 | * event etc. earlier indicating loop is down) then process | 551 | * event etc. earlier indicating loop is down) then process |
| @@ -590,18 +580,12 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
| 590 | break; | 580 | break; |
| 591 | 581 | ||
| 592 | case MBA_RSCN_UPDATE: /* State Change Registration */ | 582 | case MBA_RSCN_UPDATE: /* State Change Registration */ |
| 593 | if ((ha->flags.npiv_supported) && (ha->num_vhosts)) { | 583 | /* Check if the Vport has issued a SCR */ |
| 594 | for_each_mapped_vp_idx(ha, i) { | 584 | if (ha->parent && test_bit(VP_SCR_NEEDED, &ha->vp_flags)) |
| 595 | list_for_each_entry(vha, &ha->vp_list, | 585 | break; |
| 596 | vp_list) { | 586 | /* Only handle SCNs for our Vport index. */ |
| 597 | if ((mb[3] & 0xff) | 587 | if (ha->parent && ha->vp_idx != (mb[3] & 0xff)) |
| 598 | == vha->vp_idx) { | 588 | break; |
| 599 | ha = vha; | ||
| 600 | break; | ||
| 601 | } | ||
| 602 | } | ||
| 603 | } | ||
| 604 | } | ||
| 605 | 589 | ||
| 606 | DEBUG2(printk("scsi(%ld): Asynchronous RSCR UPDATE.\n", | 590 | DEBUG2(printk("scsi(%ld): Asynchronous RSCR UPDATE.\n", |
| 607 | ha->host_no)); | 591 | ha->host_no)); |
| @@ -1132,25 +1116,6 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt) | |||
| 1132 | break; | 1116 | break; |
| 1133 | 1117 | ||
| 1134 | qla2x00_handle_sense(sp, sense_data, sense_len); | 1118 | qla2x00_handle_sense(sp, sense_data, sense_len); |
| 1135 | |||
| 1136 | /* | ||
| 1137 | * In case of a Underrun condition, set both the lscsi | ||
| 1138 | * status and the completion status to appropriate | ||
| 1139 | * values. | ||
| 1140 | */ | ||
| 1141 | if (resid && | ||
| 1142 | ((unsigned)(scsi_bufflen(cp) - resid) < | ||
| 1143 | cp->underflow)) { | ||
| 1144 | DEBUG2(qla_printk(KERN_INFO, ha, | ||
| 1145 | "scsi(%ld:%d:%d:%d): Mid-layer underflow " | ||
| 1146 | "detected (%x of %x bytes)...returning " | ||
| 1147 | "error status.\n", ha->host_no, | ||
| 1148 | cp->device->channel, cp->device->id, | ||
| 1149 | cp->device->lun, resid, | ||
| 1150 | scsi_bufflen(cp))); | ||
| 1151 | |||
| 1152 | cp->result = DID_ERROR << 16 | lscsi_status; | ||
| 1153 | } | ||
| 1154 | } else { | 1119 | } else { |
| 1155 | /* | 1120 | /* |
| 1156 | * If RISC reports underrun and target does not report | 1121 | * If RISC reports underrun and target does not report |
| @@ -1639,12 +1604,12 @@ qla24xx_msix_rsp_q(int irq, void *dev_id) | |||
| 1639 | ha = dev_id; | 1604 | ha = dev_id; |
| 1640 | reg = &ha->iobase->isp24; | 1605 | reg = &ha->iobase->isp24; |
| 1641 | 1606 | ||
| 1642 | spin_lock(&ha->hardware_lock); | 1607 | spin_lock_irq(&ha->hardware_lock); |
| 1643 | 1608 | ||
| 1644 | qla24xx_process_response_queue(ha); | 1609 | qla24xx_process_response_queue(ha); |
| 1645 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); | 1610 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); |
| 1646 | 1611 | ||
| 1647 | spin_unlock(&ha->hardware_lock); | 1612 | spin_unlock_irq(&ha->hardware_lock); |
| 1648 | 1613 | ||
| 1649 | return IRQ_HANDLED; | 1614 | return IRQ_HANDLED; |
| 1650 | } | 1615 | } |
| @@ -1663,7 +1628,7 @@ qla24xx_msix_default(int irq, void *dev_id) | |||
| 1663 | reg = &ha->iobase->isp24; | 1628 | reg = &ha->iobase->isp24; |
| 1664 | status = 0; | 1629 | status = 0; |
| 1665 | 1630 | ||
| 1666 | spin_lock(&ha->hardware_lock); | 1631 | spin_lock_irq(&ha->hardware_lock); |
| 1667 | do { | 1632 | do { |
| 1668 | stat = RD_REG_DWORD(®->host_status); | 1633 | stat = RD_REG_DWORD(®->host_status); |
| 1669 | if (stat & HSRX_RISC_PAUSED) { | 1634 | if (stat & HSRX_RISC_PAUSED) { |
| @@ -1716,7 +1681,7 @@ qla24xx_msix_default(int irq, void *dev_id) | |||
| 1716 | } | 1681 | } |
| 1717 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); | 1682 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); |
| 1718 | } while (0); | 1683 | } while (0); |
| 1719 | spin_unlock(&ha->hardware_lock); | 1684 | spin_unlock_irq(&ha->hardware_lock); |
| 1720 | 1685 | ||
| 1721 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && | 1686 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && |
| 1722 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { | 1687 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 210060420809..250d2f604397 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
| @@ -2303,8 +2303,6 @@ qla24xx_lun_reset(struct fc_port *fcport, unsigned int l) | |||
| 2303 | return __qla24xx_issue_tmf("Lun", TCF_LUN_RESET, fcport, l); | 2303 | return __qla24xx_issue_tmf("Lun", TCF_LUN_RESET, fcport, l); |
| 2304 | } | 2304 | } |
| 2305 | 2305 | ||
| 2306 | #if 0 | ||
| 2307 | |||
| 2308 | int | 2306 | int |
| 2309 | qla2x00_system_error(scsi_qla_host_t *ha) | 2307 | qla2x00_system_error(scsi_qla_host_t *ha) |
| 2310 | { | 2308 | { |
| @@ -2312,7 +2310,7 @@ qla2x00_system_error(scsi_qla_host_t *ha) | |||
| 2312 | mbx_cmd_t mc; | 2310 | mbx_cmd_t mc; |
| 2313 | mbx_cmd_t *mcp = &mc; | 2311 | mbx_cmd_t *mcp = &mc; |
| 2314 | 2312 | ||
| 2315 | if (!IS_FWI2_CAPABLE(ha)) | 2313 | if (!IS_QLA23XX(ha) && !IS_FWI2_CAPABLE(ha)) |
| 2316 | return QLA_FUNCTION_FAILED; | 2314 | return QLA_FUNCTION_FAILED; |
| 2317 | 2315 | ||
| 2318 | DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no)); | 2316 | DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no)); |
| @@ -2334,8 +2332,6 @@ qla2x00_system_error(scsi_qla_host_t *ha) | |||
| 2334 | return rval; | 2332 | return rval; |
| 2335 | } | 2333 | } |
| 2336 | 2334 | ||
| 2337 | #endif /* 0 */ | ||
| 2338 | |||
| 2339 | /** | 2335 | /** |
| 2340 | * qla2x00_set_serdes_params() - | 2336 | * qla2x00_set_serdes_params() - |
| 2341 | * @ha: HA context | 2337 | * @ha: HA context |
| @@ -2508,7 +2504,7 @@ qla2x00_enable_fce_trace(scsi_qla_host_t *ha, dma_addr_t fce_dma, | |||
| 2508 | if (mb) | 2504 | if (mb) |
| 2509 | memcpy(mb, mcp->mb, 8 * sizeof(*mb)); | 2505 | memcpy(mb, mcp->mb, 8 * sizeof(*mb)); |
| 2510 | if (dwords) | 2506 | if (dwords) |
| 2511 | *dwords = mcp->mb[6]; | 2507 | *dwords = buffers; |
| 2512 | } | 2508 | } |
| 2513 | 2509 | ||
| 2514 | return rval; | 2510 | return rval; |
| @@ -2807,9 +2803,9 @@ qla24xx_control_vp(scsi_qla_host_t *vha, int cmd) | |||
| 2807 | */ | 2803 | */ |
| 2808 | map = (vp_index - 1) / 8; | 2804 | map = (vp_index - 1) / 8; |
| 2809 | pos = (vp_index - 1) & 7; | 2805 | pos = (vp_index - 1) & 7; |
| 2810 | down(&ha->vport_sem); | 2806 | mutex_lock(&ha->vport_lock); |
| 2811 | vce->vp_idx_map[map] |= 1 << pos; | 2807 | vce->vp_idx_map[map] |= 1 << pos; |
| 2812 | up(&ha->vport_sem); | 2808 | mutex_unlock(&ha->vport_lock); |
| 2813 | 2809 | ||
| 2814 | rval = qla2x00_issue_iocb(ha, vce, vce_dma, 0); | 2810 | rval = qla2x00_issue_iocb(ha, vce, vce_dma, 0); |
| 2815 | if (rval != QLA_SUCCESS) { | 2811 | if (rval != QLA_SUCCESS) { |
diff --git a/drivers/scsi/qla2xxx/qla_mid.c b/drivers/scsi/qla2xxx/qla_mid.c index f2b04979e5f0..62a3ad6e8ecb 100644 --- a/drivers/scsi/qla2xxx/qla_mid.c +++ b/drivers/scsi/qla2xxx/qla_mid.c | |||
| @@ -32,12 +32,12 @@ qla24xx_allocate_vp_id(scsi_qla_host_t *vha) | |||
| 32 | scsi_qla_host_t *ha = vha->parent; | 32 | scsi_qla_host_t *ha = vha->parent; |
| 33 | 33 | ||
| 34 | /* Find an empty slot and assign an vp_id */ | 34 | /* Find an empty slot and assign an vp_id */ |
| 35 | down(&ha->vport_sem); | 35 | mutex_lock(&ha->vport_lock); |
| 36 | vp_id = find_first_zero_bit(ha->vp_idx_map, ha->max_npiv_vports + 1); | 36 | vp_id = find_first_zero_bit(ha->vp_idx_map, ha->max_npiv_vports + 1); |
| 37 | if (vp_id > ha->max_npiv_vports) { | 37 | if (vp_id > ha->max_npiv_vports) { |
| 38 | DEBUG15(printk ("vp_id %d is bigger than max-supported %d.\n", | 38 | DEBUG15(printk ("vp_id %d is bigger than max-supported %d.\n", |
| 39 | vp_id, ha->max_npiv_vports)); | 39 | vp_id, ha->max_npiv_vports)); |
| 40 | up(&ha->vport_sem); | 40 | mutex_unlock(&ha->vport_lock); |
| 41 | return vp_id; | 41 | return vp_id; |
| 42 | } | 42 | } |
| 43 | 43 | ||
| @@ -45,7 +45,7 @@ qla24xx_allocate_vp_id(scsi_qla_host_t *vha) | |||
| 45 | ha->num_vhosts++; | 45 | ha->num_vhosts++; |
| 46 | vha->vp_idx = vp_id; | 46 | vha->vp_idx = vp_id; |
| 47 | list_add_tail(&vha->vp_list, &ha->vp_list); | 47 | list_add_tail(&vha->vp_list, &ha->vp_list); |
| 48 | up(&ha->vport_sem); | 48 | mutex_unlock(&ha->vport_lock); |
| 49 | return vp_id; | 49 | return vp_id; |
| 50 | } | 50 | } |
| 51 | 51 | ||
| @@ -55,12 +55,12 @@ qla24xx_deallocate_vp_id(scsi_qla_host_t *vha) | |||
| 55 | uint16_t vp_id; | 55 | uint16_t vp_id; |
| 56 | scsi_qla_host_t *ha = vha->parent; | 56 | scsi_qla_host_t *ha = vha->parent; |
| 57 | 57 | ||
| 58 | down(&ha->vport_sem); | 58 | mutex_lock(&ha->vport_lock); |
| 59 | vp_id = vha->vp_idx; | 59 | vp_id = vha->vp_idx; |
| 60 | ha->num_vhosts--; | 60 | ha->num_vhosts--; |
| 61 | clear_bit(vp_id, ha->vp_idx_map); | 61 | clear_bit(vp_id, ha->vp_idx_map); |
| 62 | list_del(&vha->vp_list); | 62 | list_del(&vha->vp_list); |
| 63 | up(&ha->vport_sem); | 63 | mutex_unlock(&ha->vport_lock); |
| 64 | } | 64 | } |
| 65 | 65 | ||
| 66 | static scsi_qla_host_t * | 66 | static scsi_qla_host_t * |
| @@ -145,9 +145,9 @@ qla24xx_enable_vp(scsi_qla_host_t *vha) | |||
| 145 | } | 145 | } |
| 146 | 146 | ||
| 147 | /* Initialize the new vport unless it is a persistent port */ | 147 | /* Initialize the new vport unless it is a persistent port */ |
| 148 | down(&ha->vport_sem); | 148 | mutex_lock(&ha->vport_lock); |
| 149 | ret = qla24xx_modify_vp_config(vha); | 149 | ret = qla24xx_modify_vp_config(vha); |
| 150 | up(&ha->vport_sem); | 150 | mutex_unlock(&ha->vport_lock); |
| 151 | 151 | ||
| 152 | if (ret != QLA_SUCCESS) { | 152 | if (ret != QLA_SUCCESS) { |
| 153 | fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); | 153 | fc_vport_set_state(vha->fc_vport, FC_VPORT_FAILED); |
| @@ -406,6 +406,7 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
| 406 | INIT_LIST_HEAD(&vha->list); | 406 | INIT_LIST_HEAD(&vha->list); |
| 407 | INIT_LIST_HEAD(&vha->fcports); | 407 | INIT_LIST_HEAD(&vha->fcports); |
| 408 | INIT_LIST_HEAD(&vha->vp_fcports); | 408 | INIT_LIST_HEAD(&vha->vp_fcports); |
| 409 | INIT_LIST_HEAD(&vha->work_list); | ||
| 409 | 410 | ||
| 410 | vha->dpc_flags = 0L; | 411 | vha->dpc_flags = 0L; |
| 411 | set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); | 412 | set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); |
| @@ -437,10 +438,10 @@ qla24xx_create_vhost(struct fc_vport *fc_vport) | |||
| 437 | vha->flags.init_done = 1; | 438 | vha->flags.init_done = 1; |
| 438 | num_hosts++; | 439 | num_hosts++; |
| 439 | 440 | ||
| 440 | down(&ha->vport_sem); | 441 | mutex_lock(&ha->vport_lock); |
| 441 | set_bit(vha->vp_idx, ha->vp_idx_map); | 442 | set_bit(vha->vp_idx, ha->vp_idx_map); |
| 442 | ha->cur_vport_count++; | 443 | ha->cur_vport_count++; |
| 443 | up(&ha->vport_sem); | 444 | mutex_unlock(&ha->vport_lock); |
| 444 | 445 | ||
| 445 | return vha; | 446 | return vha; |
| 446 | 447 | ||
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 3223fd16bcfe..48eaa3bb5433 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <linux/vmalloc.h> | 10 | #include <linux/vmalloc.h> |
| 11 | #include <linux/delay.h> | 11 | #include <linux/delay.h> |
| 12 | #include <linux/kthread.h> | 12 | #include <linux/kthread.h> |
| 13 | #include <linux/mutex.h> | ||
| 13 | 14 | ||
| 14 | #include <scsi/scsi_tcq.h> | 15 | #include <scsi/scsi_tcq.h> |
| 15 | #include <scsi/scsicam.h> | 16 | #include <scsi/scsicam.h> |
| @@ -1631,7 +1632,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
| 1631 | /* load the F/W, read paramaters, and init the H/W */ | 1632 | /* load the F/W, read paramaters, and init the H/W */ |
| 1632 | ha->instance = num_hosts; | 1633 | ha->instance = num_hosts; |
| 1633 | 1634 | ||
| 1634 | init_MUTEX(&ha->vport_sem); | 1635 | mutex_init(&ha->vport_lock); |
| 1635 | init_completion(&ha->mbx_cmd_comp); | 1636 | init_completion(&ha->mbx_cmd_comp); |
| 1636 | complete(&ha->mbx_cmd_comp); | 1637 | complete(&ha->mbx_cmd_comp); |
| 1637 | init_completion(&ha->mbx_intr_comp); | 1638 | init_completion(&ha->mbx_intr_comp); |
| @@ -2156,13 +2157,14 @@ static int | |||
| 2156 | qla2x00_post_work(struct scsi_qla_host *ha, struct qla_work_evt *e, int locked) | 2157 | qla2x00_post_work(struct scsi_qla_host *ha, struct qla_work_evt *e, int locked) |
| 2157 | { | 2158 | { |
| 2158 | unsigned long flags; | 2159 | unsigned long flags; |
| 2160 | scsi_qla_host_t *pha = to_qla_parent(ha); | ||
| 2159 | 2161 | ||
| 2160 | if (!locked) | 2162 | if (!locked) |
| 2161 | spin_lock_irqsave(&ha->hardware_lock, flags); | 2163 | spin_lock_irqsave(&pha->hardware_lock, flags); |
| 2162 | list_add_tail(&e->list, &ha->work_list); | 2164 | list_add_tail(&e->list, &ha->work_list); |
| 2163 | qla2xxx_wake_dpc(ha); | 2165 | qla2xxx_wake_dpc(ha); |
| 2164 | if (!locked) | 2166 | if (!locked) |
| 2165 | spin_unlock_irqrestore(&ha->hardware_lock, flags); | 2167 | spin_unlock_irqrestore(&pha->hardware_lock, flags); |
| 2166 | return QLA_SUCCESS; | 2168 | return QLA_SUCCESS; |
| 2167 | } | 2169 | } |
| 2168 | 2170 | ||
| @@ -2202,12 +2204,13 @@ static void | |||
| 2202 | qla2x00_do_work(struct scsi_qla_host *ha) | 2204 | qla2x00_do_work(struct scsi_qla_host *ha) |
| 2203 | { | 2205 | { |
| 2204 | struct qla_work_evt *e; | 2206 | struct qla_work_evt *e; |
| 2207 | scsi_qla_host_t *pha = to_qla_parent(ha); | ||
| 2205 | 2208 | ||
| 2206 | spin_lock_irq(&ha->hardware_lock); | 2209 | spin_lock_irq(&pha->hardware_lock); |
| 2207 | while (!list_empty(&ha->work_list)) { | 2210 | while (!list_empty(&ha->work_list)) { |
| 2208 | e = list_entry(ha->work_list.next, struct qla_work_evt, list); | 2211 | e = list_entry(ha->work_list.next, struct qla_work_evt, list); |
| 2209 | list_del_init(&e->list); | 2212 | list_del_init(&e->list); |
| 2210 | spin_unlock_irq(&ha->hardware_lock); | 2213 | spin_unlock_irq(&pha->hardware_lock); |
| 2211 | 2214 | ||
| 2212 | switch (e->type) { | 2215 | switch (e->type) { |
| 2213 | case QLA_EVT_AEN: | 2216 | case QLA_EVT_AEN: |
| @@ -2221,9 +2224,9 @@ qla2x00_do_work(struct scsi_qla_host *ha) | |||
| 2221 | } | 2224 | } |
| 2222 | if (e->flags & QLA_EVT_FLAG_FREE) | 2225 | if (e->flags & QLA_EVT_FLAG_FREE) |
| 2223 | kfree(e); | 2226 | kfree(e); |
| 2224 | spin_lock_irq(&ha->hardware_lock); | 2227 | spin_lock_irq(&pha->hardware_lock); |
| 2225 | } | 2228 | } |
| 2226 | spin_unlock_irq(&ha->hardware_lock); | 2229 | spin_unlock_irq(&pha->hardware_lock); |
| 2227 | } | 2230 | } |
| 2228 | 2231 | ||
| 2229 | /************************************************************************** | 2232 | /************************************************************************** |
| @@ -2634,7 +2637,7 @@ qla2x00_timer(scsi_qla_host_t *ha) | |||
| 2634 | #define FW_FILE_ISP24XX "ql2400_fw.bin" | 2637 | #define FW_FILE_ISP24XX "ql2400_fw.bin" |
| 2635 | #define FW_FILE_ISP25XX "ql2500_fw.bin" | 2638 | #define FW_FILE_ISP25XX "ql2500_fw.bin" |
| 2636 | 2639 | ||
| 2637 | static DECLARE_MUTEX(qla_fw_lock); | 2640 | static DEFINE_MUTEX(qla_fw_lock); |
| 2638 | 2641 | ||
| 2639 | static struct fw_blob qla_fw_blobs[FW_BLOBS] = { | 2642 | static struct fw_blob qla_fw_blobs[FW_BLOBS] = { |
| 2640 | { .name = FW_FILE_ISP21XX, .segs = { 0x1000, 0 }, }, | 2643 | { .name = FW_FILE_ISP21XX, .segs = { 0x1000, 0 }, }, |
| @@ -2665,7 +2668,7 @@ qla2x00_request_firmware(scsi_qla_host_t *ha) | |||
| 2665 | blob = &qla_fw_blobs[FW_ISP25XX]; | 2668 | blob = &qla_fw_blobs[FW_ISP25XX]; |
| 2666 | } | 2669 | } |
| 2667 | 2670 | ||
| 2668 | down(&qla_fw_lock); | 2671 | mutex_lock(&qla_fw_lock); |
| 2669 | if (blob->fw) | 2672 | if (blob->fw) |
| 2670 | goto out; | 2673 | goto out; |
| 2671 | 2674 | ||
| @@ -2678,7 +2681,7 @@ qla2x00_request_firmware(scsi_qla_host_t *ha) | |||
| 2678 | } | 2681 | } |
| 2679 | 2682 | ||
| 2680 | out: | 2683 | out: |
| 2681 | up(&qla_fw_lock); | 2684 | mutex_unlock(&qla_fw_lock); |
| 2682 | return blob; | 2685 | return blob; |
| 2683 | } | 2686 | } |
| 2684 | 2687 | ||
| @@ -2687,11 +2690,11 @@ qla2x00_release_firmware(void) | |||
| 2687 | { | 2690 | { |
| 2688 | int idx; | 2691 | int idx; |
| 2689 | 2692 | ||
| 2690 | down(&qla_fw_lock); | 2693 | mutex_lock(&qla_fw_lock); |
| 2691 | for (idx = 0; idx < FW_BLOBS; idx++) | 2694 | for (idx = 0; idx < FW_BLOBS; idx++) |
| 2692 | if (qla_fw_blobs[idx].fw) | 2695 | if (qla_fw_blobs[idx].fw) |
| 2693 | release_firmware(qla_fw_blobs[idx].fw); | 2696 | release_firmware(qla_fw_blobs[idx].fw); |
| 2694 | up(&qla_fw_lock); | 2697 | mutex_unlock(&qla_fw_lock); |
| 2695 | } | 2698 | } |
| 2696 | 2699 | ||
| 2697 | static pci_ers_result_t | 2700 | static pci_ers_result_t |
| @@ -2864,7 +2867,8 @@ qla2x00_module_init(void) | |||
| 2864 | return -ENODEV; | 2867 | return -ENODEV; |
| 2865 | } | 2868 | } |
| 2866 | 2869 | ||
| 2867 | printk(KERN_INFO "QLogic Fibre Channel HBA Driver\n"); | 2870 | printk(KERN_INFO "QLogic Fibre Channel HBA Driver: %s\n", |
| 2871 | qla2x00_version_str); | ||
| 2868 | ret = pci_register_driver(&qla2xxx_pci_driver); | 2872 | ret = pci_register_driver(&qla2xxx_pci_driver); |
| 2869 | if (ret) { | 2873 | if (ret) { |
| 2870 | kmem_cache_destroy(srb_cachep); | 2874 | kmem_cache_destroy(srb_cachep); |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index afeae2bfe7eb..d058c8862b35 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
| @@ -7,7 +7,7 @@ | |||
| 7 | /* | 7 | /* |
| 8 | * Driver version | 8 | * Driver version |
| 9 | */ | 9 | */ |
| 10 | #define QLA2XXX_VERSION "8.02.01-k2" | 10 | #define QLA2XXX_VERSION "8.02.01-k4" |
| 11 | 11 | ||
| 12 | #define QLA_DRIVER_MAJOR_VER 8 | 12 | #define QLA_DRIVER_MAJOR_VER 8 |
| 13 | #define QLA_DRIVER_MINOR_VER 2 | 13 | #define QLA_DRIVER_MINOR_VER 2 |
diff --git a/drivers/scsi/scsi_sysfs.c b/drivers/scsi/scsi_sysfs.c index 049103f1d16f..93d2b6714453 100644 --- a/drivers/scsi/scsi_sysfs.c +++ b/drivers/scsi/scsi_sysfs.c | |||
| @@ -359,7 +359,12 @@ static int scsi_bus_match(struct device *dev, struct device_driver *gendrv) | |||
| 359 | 359 | ||
| 360 | static int scsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env) | 360 | static int scsi_bus_uevent(struct device *dev, struct kobj_uevent_env *env) |
| 361 | { | 361 | { |
| 362 | struct scsi_device *sdev = to_scsi_device(dev); | 362 | struct scsi_device *sdev; |
| 363 | |||
| 364 | if (dev->type != &scsi_dev_type) | ||
| 365 | return 0; | ||
| 366 | |||
| 367 | sdev = to_scsi_device(dev); | ||
| 363 | 368 | ||
| 364 | add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type); | 369 | add_uevent_var(env, "MODALIAS=" SCSI_DEVICE_MODALIAS_FMT, sdev->type); |
| 365 | return 0; | 370 | return 0; |
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 1400ea6a2491..1bc00b721e9d 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c | |||
| @@ -43,7 +43,6 @@ | |||
| 43 | 43 | ||
| 44 | #include <asm/io.h> | 44 | #include <asm/io.h> |
| 45 | #include <asm/irq.h> | 45 | #include <asm/irq.h> |
| 46 | #include <asm/serial.h> | ||
| 47 | 46 | ||
| 48 | #include "8250.h" | 47 | #include "8250.h" |
| 49 | 48 | ||
| @@ -93,6 +92,7 @@ static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS; | |||
| 93 | */ | 92 | */ |
| 94 | #define CONFIG_HUB6 1 | 93 | #define CONFIG_HUB6 1 |
| 95 | 94 | ||
| 95 | #include <asm/serial.h> | ||
| 96 | /* | 96 | /* |
| 97 | * SERIAL_PORT_DFNS tells us about built-in ports that have no | 97 | * SERIAL_PORT_DFNS tells us about built-in ports that have no |
| 98 | * standard enumeration mechanism. Platforms that can find all | 98 | * standard enumeration mechanism. Platforms that can find all |
| @@ -1547,8 +1547,6 @@ static int serial_link_irq_chain(struct uart_8250_port *up) | |||
| 1547 | i->head = &up->list; | 1547 | i->head = &up->list; |
| 1548 | spin_unlock_irq(&i->lock); | 1548 | spin_unlock_irq(&i->lock); |
| 1549 | 1549 | ||
| 1550 | irq_flags |= SERIAL_EXTRA_IRQ_FLAGS; | ||
| 1551 | |||
| 1552 | ret = request_irq(up->port.irq, serial8250_interrupt, | 1550 | ret = request_irq(up->port.irq, serial8250_interrupt, |
| 1553 | irq_flags, "serial", i); | 1551 | irq_flags, "serial", i); |
| 1554 | if (ret < 0) | 1552 | if (ret < 0) |
diff --git a/drivers/serial/8250.h b/drivers/serial/8250.h index a10a40cc0d9e..91bd28f2bb47 100644 --- a/drivers/serial/8250.h +++ b/drivers/serial/8250.h | |||
| @@ -78,8 +78,3 @@ struct serial8250_config { | |||
| 78 | #else | 78 | #else |
| 79 | #define ALPHA_KLUDGE_MCR 0 | 79 | #define ALPHA_KLUDGE_MCR 0 |
| 80 | #endif | 80 | #endif |
| 81 | |||
| 82 | #ifndef SERIAL_EXTRA_IRQ_FLAGS | ||
| 83 | #define SERIAL_EXTRA_IRQ_FLAGS 0 | ||
| 84 | #endif | ||
| 85 | |||
diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c index c065a704a93a..42be8b01a40f 100644 --- a/drivers/serial/atmel_serial.c +++ b/drivers/serial/atmel_serial.c | |||
| @@ -1318,7 +1318,7 @@ static void __init atmel_console_get_options(struct uart_port *port, int *baud, | |||
| 1318 | * If the baud rate generator isn't running, the port wasn't | 1318 | * If the baud rate generator isn't running, the port wasn't |
| 1319 | * initialized by the boot loader. | 1319 | * initialized by the boot loader. |
| 1320 | */ | 1320 | */ |
| 1321 | quot = UART_GET_BRGR(port); | 1321 | quot = UART_GET_BRGR(port) & ATMEL_US_CD; |
| 1322 | if (!quot) | 1322 | if (!quot) |
| 1323 | return; | 1323 | return; |
| 1324 | 1324 | ||
diff --git a/drivers/serial/sb1250-duart.c b/drivers/serial/sb1250-duart.c index 2d6c08b3dbcf..f8e1447a022a 100644 --- a/drivers/serial/sb1250-duart.c +++ b/drivers/serial/sb1250-duart.c | |||
| @@ -924,7 +924,7 @@ console_initcall(sbd_serial_console_init); | |||
| 924 | 924 | ||
| 925 | static struct uart_driver sbd_reg = { | 925 | static struct uart_driver sbd_reg = { |
| 926 | .owner = THIS_MODULE, | 926 | .owner = THIS_MODULE, |
| 927 | .driver_name = "serial", | 927 | .driver_name = "sb1250_duart", |
| 928 | .dev_name = "duart", | 928 | .dev_name = "duart", |
| 929 | .major = TTY_MAJOR, | 929 | .major = TTY_MAJOR, |
| 930 | .minor = SB1250_DUART_MINOR_BASE, | 930 | .minor = SB1250_DUART_MINOR_BASE, |
diff --git a/drivers/serial/serial_core.c b/drivers/serial/serial_core.c index 53b03c629aff..c9b64e73c987 100644 --- a/drivers/serial/serial_core.c +++ b/drivers/serial/serial_core.c | |||
| @@ -1165,6 +1165,15 @@ out: | |||
| 1165 | return ret; | 1165 | return ret; |
| 1166 | } | 1166 | } |
| 1167 | 1167 | ||
| 1168 | static void uart_set_ldisc(struct tty_struct *tty) | ||
| 1169 | { | ||
| 1170 | struct uart_state *state = tty->driver_data; | ||
| 1171 | struct uart_port *port = state->port; | ||
| 1172 | |||
| 1173 | if (port->ops->set_ldisc) | ||
| 1174 | port->ops->set_ldisc(port); | ||
| 1175 | } | ||
| 1176 | |||
| 1168 | static void uart_set_termios(struct tty_struct *tty, | 1177 | static void uart_set_termios(struct tty_struct *tty, |
| 1169 | struct ktermios *old_termios) | 1178 | struct ktermios *old_termios) |
| 1170 | { | 1179 | { |
| @@ -2288,6 +2297,7 @@ static const struct tty_operations uart_ops = { | |||
| 2288 | .unthrottle = uart_unthrottle, | 2297 | .unthrottle = uart_unthrottle, |
| 2289 | .send_xchar = uart_send_xchar, | 2298 | .send_xchar = uart_send_xchar, |
| 2290 | .set_termios = uart_set_termios, | 2299 | .set_termios = uart_set_termios, |
| 2300 | .set_ldisc = uart_set_ldisc, | ||
| 2291 | .stop = uart_stop, | 2301 | .stop = uart_stop, |
| 2292 | .start = uart_start, | 2302 | .start = uart_start, |
| 2293 | .hangup = uart_hangup, | 2303 | .hangup = uart_hangup, |
diff --git a/drivers/serial/ucc_uart.c b/drivers/serial/ucc_uart.c index 01917c433f17..566a8b42e05a 100644 --- a/drivers/serial/ucc_uart.c +++ b/drivers/serial/ucc_uart.c | |||
| @@ -195,7 +195,7 @@ struct uart_qe_port { | |||
| 195 | 195 | ||
| 196 | static struct uart_driver ucc_uart_driver = { | 196 | static struct uart_driver ucc_uart_driver = { |
| 197 | .owner = THIS_MODULE, | 197 | .owner = THIS_MODULE, |
| 198 | .driver_name = "serial", | 198 | .driver_name = "ucc_uart", |
| 199 | .dev_name = "ttyQE", | 199 | .dev_name = "ttyQE", |
| 200 | .major = SERIAL_QE_MAJOR, | 200 | .major = SERIAL_QE_MAJOR, |
| 201 | .minor = SERIAL_QE_MINOR, | 201 | .minor = SERIAL_QE_MINOR, |
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c index 41620c0fb046..799337f7fde1 100644 --- a/drivers/spi/spidev.c +++ b/drivers/spi/spidev.c | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/ioctl.h> | 25 | #include <linux/ioctl.h> |
| 26 | #include <linux/fs.h> | 26 | #include <linux/fs.h> |
| 27 | #include <linux/device.h> | 27 | #include <linux/device.h> |
| 28 | #include <linux/err.h> | ||
| 28 | #include <linux/list.h> | 29 | #include <linux/list.h> |
| 29 | #include <linux/errno.h> | 30 | #include <linux/errno.h> |
| 30 | #include <linux/mutex.h> | 31 | #include <linux/mutex.h> |
| @@ -67,11 +68,12 @@ static unsigned long minors[N_SPI_MINORS / BITS_PER_LONG]; | |||
| 67 | | SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP) | 68 | | SPI_LSB_FIRST | SPI_3WIRE | SPI_LOOP) |
| 68 | 69 | ||
| 69 | struct spidev_data { | 70 | struct spidev_data { |
| 70 | struct device dev; | 71 | dev_t devt; |
| 71 | spinlock_t spi_lock; | 72 | spinlock_t spi_lock; |
| 72 | struct spi_device *spi; | 73 | struct spi_device *spi; |
| 73 | struct list_head device_entry; | 74 | struct list_head device_entry; |
| 74 | 75 | ||
| 76 | /* buffer is NULL unless this device is open (users > 0) */ | ||
| 75 | struct mutex buf_lock; | 77 | struct mutex buf_lock; |
| 76 | unsigned users; | 78 | unsigned users; |
| 77 | u8 *buffer; | 79 | u8 *buffer; |
| @@ -467,7 +469,7 @@ static int spidev_open(struct inode *inode, struct file *filp) | |||
| 467 | mutex_lock(&device_list_lock); | 469 | mutex_lock(&device_list_lock); |
| 468 | 470 | ||
| 469 | list_for_each_entry(spidev, &device_list, device_entry) { | 471 | list_for_each_entry(spidev, &device_list, device_entry) { |
| 470 | if (spidev->dev.devt == inode->i_rdev) { | 472 | if (spidev->devt == inode->i_rdev) { |
| 471 | status = 0; | 473 | status = 0; |
| 472 | break; | 474 | break; |
| 473 | } | 475 | } |
| @@ -500,10 +502,22 @@ static int spidev_release(struct inode *inode, struct file *filp) | |||
| 500 | mutex_lock(&device_list_lock); | 502 | mutex_lock(&device_list_lock); |
| 501 | spidev = filp->private_data; | 503 | spidev = filp->private_data; |
| 502 | filp->private_data = NULL; | 504 | filp->private_data = NULL; |
| 505 | |||
| 506 | /* last close? */ | ||
| 503 | spidev->users--; | 507 | spidev->users--; |
| 504 | if (!spidev->users) { | 508 | if (!spidev->users) { |
| 509 | int dofree; | ||
| 510 | |||
| 505 | kfree(spidev->buffer); | 511 | kfree(spidev->buffer); |
| 506 | spidev->buffer = NULL; | 512 | spidev->buffer = NULL; |
| 513 | |||
| 514 | /* ... after we unbound from the underlying device? */ | ||
| 515 | spin_lock_irq(&spidev->spi_lock); | ||
| 516 | dofree = (spidev->spi == NULL); | ||
| 517 | spin_unlock_irq(&spidev->spi_lock); | ||
| 518 | |||
| 519 | if (dofree) | ||
| 520 | kfree(spidev); | ||
| 507 | } | 521 | } |
| 508 | mutex_unlock(&device_list_lock); | 522 | mutex_unlock(&device_list_lock); |
| 509 | 523 | ||
| @@ -530,19 +544,7 @@ static struct file_operations spidev_fops = { | |||
| 530 | * It also simplifies memory management. | 544 | * It also simplifies memory management. |
| 531 | */ | 545 | */ |
| 532 | 546 | ||
| 533 | static void spidev_classdev_release(struct device *dev) | 547 | static struct class *spidev_class; |
| 534 | { | ||
| 535 | struct spidev_data *spidev; | ||
| 536 | |||
| 537 | spidev = container_of(dev, struct spidev_data, dev); | ||
| 538 | kfree(spidev); | ||
| 539 | } | ||
| 540 | |||
| 541 | static struct class spidev_class = { | ||
| 542 | .name = "spidev", | ||
| 543 | .owner = THIS_MODULE, | ||
| 544 | .dev_release = spidev_classdev_release, | ||
| 545 | }; | ||
| 546 | 548 | ||
| 547 | /*-------------------------------------------------------------------------*/ | 549 | /*-------------------------------------------------------------------------*/ |
| 548 | 550 | ||
| @@ -570,20 +572,20 @@ static int spidev_probe(struct spi_device *spi) | |||
| 570 | mutex_lock(&device_list_lock); | 572 | mutex_lock(&device_list_lock); |
| 571 | minor = find_first_zero_bit(minors, N_SPI_MINORS); | 573 | minor = find_first_zero_bit(minors, N_SPI_MINORS); |
| 572 | if (minor < N_SPI_MINORS) { | 574 | if (minor < N_SPI_MINORS) { |
| 573 | spidev->dev.parent = &spi->dev; | 575 | struct device *dev; |
| 574 | spidev->dev.class = &spidev_class; | 576 | |
| 575 | spidev->dev.devt = MKDEV(SPIDEV_MAJOR, minor); | 577 | spidev->devt = MKDEV(SPIDEV_MAJOR, minor); |
| 576 | snprintf(spidev->dev.bus_id, sizeof spidev->dev.bus_id, | 578 | dev = device_create(spidev_class, &spi->dev, spidev->devt, |
| 577 | "spidev%d.%d", | 579 | "spidev%d.%d", |
| 578 | spi->master->bus_num, spi->chip_select); | 580 | spi->master->bus_num, spi->chip_select); |
| 579 | status = device_register(&spidev->dev); | 581 | status = IS_ERR(dev) ? PTR_ERR(dev) : 0; |
| 580 | } else { | 582 | } else { |
| 581 | dev_dbg(&spi->dev, "no minor number available!\n"); | 583 | dev_dbg(&spi->dev, "no minor number available!\n"); |
| 582 | status = -ENODEV; | 584 | status = -ENODEV; |
| 583 | } | 585 | } |
| 584 | if (status == 0) { | 586 | if (status == 0) { |
| 585 | set_bit(minor, minors); | 587 | set_bit(minor, minors); |
| 586 | dev_set_drvdata(&spi->dev, spidev); | 588 | spi_set_drvdata(spi, spidev); |
| 587 | list_add(&spidev->device_entry, &device_list); | 589 | list_add(&spidev->device_entry, &device_list); |
| 588 | } | 590 | } |
| 589 | mutex_unlock(&device_list_lock); | 591 | mutex_unlock(&device_list_lock); |
| @@ -596,19 +598,21 @@ static int spidev_probe(struct spi_device *spi) | |||
| 596 | 598 | ||
| 597 | static int spidev_remove(struct spi_device *spi) | 599 | static int spidev_remove(struct spi_device *spi) |
| 598 | { | 600 | { |
| 599 | struct spidev_data *spidev = dev_get_drvdata(&spi->dev); | 601 | struct spidev_data *spidev = spi_get_drvdata(spi); |
| 600 | 602 | ||
| 601 | /* make sure ops on existing fds can abort cleanly */ | 603 | /* make sure ops on existing fds can abort cleanly */ |
| 602 | spin_lock_irq(&spidev->spi_lock); | 604 | spin_lock_irq(&spidev->spi_lock); |
| 603 | spidev->spi = NULL; | 605 | spidev->spi = NULL; |
| 606 | spi_set_drvdata(spi, NULL); | ||
| 604 | spin_unlock_irq(&spidev->spi_lock); | 607 | spin_unlock_irq(&spidev->spi_lock); |
| 605 | 608 | ||
| 606 | /* prevent new opens */ | 609 | /* prevent new opens */ |
| 607 | mutex_lock(&device_list_lock); | 610 | mutex_lock(&device_list_lock); |
| 608 | list_del(&spidev->device_entry); | 611 | list_del(&spidev->device_entry); |
| 609 | dev_set_drvdata(&spi->dev, NULL); | 612 | device_destroy(spidev_class, spidev->devt); |
| 610 | clear_bit(MINOR(spidev->dev.devt), minors); | 613 | clear_bit(MINOR(spidev->devt), minors); |
| 611 | device_unregister(&spidev->dev); | 614 | if (spidev->users == 0) |
| 615 | kfree(spidev); | ||
| 612 | mutex_unlock(&device_list_lock); | 616 | mutex_unlock(&device_list_lock); |
| 613 | 617 | ||
| 614 | return 0; | 618 | return 0; |
| @@ -644,15 +648,15 @@ static int __init spidev_init(void) | |||
| 644 | if (status < 0) | 648 | if (status < 0) |
| 645 | return status; | 649 | return status; |
| 646 | 650 | ||
| 647 | status = class_register(&spidev_class); | 651 | spidev_class = class_create(THIS_MODULE, "spidev"); |
| 648 | if (status < 0) { | 652 | if (IS_ERR(spidev_class)) { |
| 649 | unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name); | 653 | unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name); |
| 650 | return status; | 654 | return PTR_ERR(spidev_class); |
| 651 | } | 655 | } |
| 652 | 656 | ||
| 653 | status = spi_register_driver(&spidev_spi); | 657 | status = spi_register_driver(&spidev_spi); |
| 654 | if (status < 0) { | 658 | if (status < 0) { |
| 655 | class_unregister(&spidev_class); | 659 | class_destroy(spidev_class); |
| 656 | unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name); | 660 | unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name); |
| 657 | } | 661 | } |
| 658 | return status; | 662 | return status; |
| @@ -662,7 +666,7 @@ module_init(spidev_init); | |||
| 662 | static void __exit spidev_exit(void) | 666 | static void __exit spidev_exit(void) |
| 663 | { | 667 | { |
| 664 | spi_unregister_driver(&spidev_spi); | 668 | spi_unregister_driver(&spidev_spi); |
| 665 | class_unregister(&spidev_class); | 669 | class_destroy(spidev_class); |
| 666 | unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name); | 670 | unregister_chrdev(SPIDEV_MAJOR, spidev_spi.driver.name); |
| 667 | } | 671 | } |
| 668 | module_exit(spidev_exit); | 672 | module_exit(spidev_exit); |
diff --git a/drivers/ssb/driver_pcicore.c b/drivers/ssb/driver_pcicore.c index 75def13e797d..d28c53868093 100644 --- a/drivers/ssb/driver_pcicore.c +++ b/drivers/ssb/driver_pcicore.c | |||
| @@ -537,12 +537,12 @@ int ssb_pcicore_dev_irqvecs_enable(struct ssb_pcicore *pc, | |||
| 537 | int err = 0; | 537 | int err = 0; |
| 538 | u32 tmp; | 538 | u32 tmp; |
| 539 | 539 | ||
| 540 | might_sleep(); | ||
| 541 | |||
| 542 | if (!pdev) | 540 | if (!pdev) |
| 543 | goto out; | 541 | goto out; |
| 544 | bus = pdev->bus; | 542 | bus = pdev->bus; |
| 545 | 543 | ||
| 544 | might_sleep_if(pdev->id.coreid != SSB_DEV_PCI); | ||
| 545 | |||
| 546 | /* Enable interrupts for this device. */ | 546 | /* Enable interrupts for this device. */ |
| 547 | if (bus->host_pci && | 547 | if (bus->host_pci && |
| 548 | ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) { | 548 | ((pdev->id.revision >= 6) || (pdev->id.coreid == SSB_DEV_PCIE))) { |
diff --git a/drivers/usb/c67x00/c67x00-ll-hpi.c b/drivers/usb/c67x00/c67x00-ll-hpi.c index 5100fbbf6cb0..a9636f43bca2 100644 --- a/drivers/usb/c67x00/c67x00-ll-hpi.c +++ b/drivers/usb/c67x00/c67x00-ll-hpi.c | |||
| @@ -120,7 +120,7 @@ static void hpi_write_word(struct c67x00_device *dev, u16 reg, u16 value) | |||
| 120 | * Only data is little endian, addr has cpu endianess | 120 | * Only data is little endian, addr has cpu endianess |
| 121 | */ | 121 | */ |
| 122 | static void hpi_write_words_le16(struct c67x00_device *dev, u16 addr, | 122 | static void hpi_write_words_le16(struct c67x00_device *dev, u16 addr, |
| 123 | u16 *data, u16 count) | 123 | __le16 *data, u16 count) |
| 124 | { | 124 | { |
| 125 | unsigned long flags; | 125 | unsigned long flags; |
| 126 | int i; | 126 | int i; |
| @@ -129,7 +129,7 @@ static void hpi_write_words_le16(struct c67x00_device *dev, u16 addr, | |||
| 129 | 129 | ||
| 130 | hpi_write_reg(dev, HPI_ADDR, addr); | 130 | hpi_write_reg(dev, HPI_ADDR, addr); |
| 131 | for (i = 0; i < count; i++) | 131 | for (i = 0; i < count; i++) |
| 132 | hpi_write_reg(dev, HPI_DATA, cpu_to_le16(*data++)); | 132 | hpi_write_reg(dev, HPI_DATA, le16_to_cpu(*data++)); |
| 133 | 133 | ||
| 134 | spin_unlock_irqrestore(&dev->hpi.lock, flags); | 134 | spin_unlock_irqrestore(&dev->hpi.lock, flags); |
| 135 | } | 135 | } |
| @@ -138,7 +138,7 @@ static void hpi_write_words_le16(struct c67x00_device *dev, u16 addr, | |||
| 138 | * Only data is little endian, addr has cpu endianess | 138 | * Only data is little endian, addr has cpu endianess |
| 139 | */ | 139 | */ |
| 140 | static void hpi_read_words_le16(struct c67x00_device *dev, u16 addr, | 140 | static void hpi_read_words_le16(struct c67x00_device *dev, u16 addr, |
| 141 | u16 *data, u16 count) | 141 | __le16 *data, u16 count) |
| 142 | { | 142 | { |
| 143 | unsigned long flags; | 143 | unsigned long flags; |
| 144 | int i; | 144 | int i; |
| @@ -146,7 +146,7 @@ static void hpi_read_words_le16(struct c67x00_device *dev, u16 addr, | |||
| 146 | spin_lock_irqsave(&dev->hpi.lock, flags); | 146 | spin_lock_irqsave(&dev->hpi.lock, flags); |
| 147 | hpi_write_reg(dev, HPI_ADDR, addr); | 147 | hpi_write_reg(dev, HPI_ADDR, addr); |
| 148 | for (i = 0; i < count; i++) | 148 | for (i = 0; i < count; i++) |
| 149 | *data++ = le16_to_cpu(hpi_read_reg(dev, HPI_DATA)); | 149 | *data++ = cpu_to_le16(hpi_read_reg(dev, HPI_DATA)); |
| 150 | 150 | ||
| 151 | spin_unlock_irqrestore(&dev->hpi.lock, flags); | 151 | spin_unlock_irqrestore(&dev->hpi.lock, flags); |
| 152 | } | 152 | } |
| @@ -425,7 +425,7 @@ void c67x00_ll_write_mem_le16(struct c67x00_device *dev, u16 addr, | |||
| 425 | len--; | 425 | len--; |
| 426 | } | 426 | } |
| 427 | 427 | ||
| 428 | hpi_write_words_le16(dev, addr, (u16 *)buf, len / 2); | 428 | hpi_write_words_le16(dev, addr, (__le16 *)buf, len / 2); |
| 429 | buf += len & ~0x01; | 429 | buf += len & ~0x01; |
| 430 | addr += len & ~0x01; | 430 | addr += len & ~0x01; |
| 431 | len &= 0x01; | 431 | len &= 0x01; |
| @@ -456,7 +456,7 @@ void c67x00_ll_read_mem_le16(struct c67x00_device *dev, u16 addr, | |||
| 456 | len--; | 456 | len--; |
| 457 | } | 457 | } |
| 458 | 458 | ||
| 459 | hpi_read_words_le16(dev, addr, (u16 *)buf, len / 2); | 459 | hpi_read_words_le16(dev, addr, (__le16 *)buf, len / 2); |
| 460 | buf += len & ~0x01; | 460 | buf += len & ~0x01; |
| 461 | addr += len & ~0x01; | 461 | addr += len & ~0x01; |
| 462 | len &= 0x01; | 462 | len &= 0x01; |
diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index 107666d4e2ec..731db051070a 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c | |||
| @@ -611,8 +611,8 @@ next_desc: | |||
| 611 | goto err; | 611 | goto err; |
| 612 | } | 612 | } |
| 613 | 613 | ||
| 614 | desc->wMaxPacketSize = ep->wMaxPacketSize; | 614 | desc->wMaxPacketSize = le16_to_cpu(ep->wMaxPacketSize); |
| 615 | desc->bMaxPacketSize0 = cpu_to_le16(udev->descriptor.bMaxPacketSize0); | 615 | desc->bMaxPacketSize0 = udev->descriptor.bMaxPacketSize0; |
| 616 | 616 | ||
| 617 | desc->orq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL); | 617 | desc->orq = kmalloc(sizeof(struct usb_ctrlrequest), GFP_KERNEL); |
| 618 | if (!desc->orq) | 618 | if (!desc->orq) |
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c index c1cb94e9f242..7e912f21fd36 100644 --- a/drivers/usb/core/generic.c +++ b/drivers/usb/core/generic.c | |||
| @@ -155,9 +155,6 @@ static int generic_probe(struct usb_device *udev) | |||
| 155 | { | 155 | { |
| 156 | int err, c; | 156 | int err, c; |
| 157 | 157 | ||
| 158 | /* put device-specific files into sysfs */ | ||
| 159 | usb_create_sysfs_dev_files(udev); | ||
| 160 | |||
| 161 | /* Choose and set the configuration. This registers the interfaces | 158 | /* Choose and set the configuration. This registers the interfaces |
| 162 | * with the driver core and lets interface drivers bind to them. | 159 | * with the driver core and lets interface drivers bind to them. |
| 163 | */ | 160 | */ |
| @@ -189,8 +186,6 @@ static void generic_disconnect(struct usb_device *udev) | |||
| 189 | * unconfigure the device */ | 186 | * unconfigure the device */ |
| 190 | if (udev->actconfig) | 187 | if (udev->actconfig) |
| 191 | usb_set_configuration(udev, -1); | 188 | usb_set_configuration(udev, -1); |
| 192 | |||
| 193 | usb_remove_sysfs_dev_files(udev); | ||
| 194 | } | 189 | } |
| 195 | 190 | ||
| 196 | #ifdef CONFIG_PM | 191 | #ifdef CONFIG_PM |
diff --git a/drivers/usb/core/hcd.h b/drivers/usb/core/hcd.h index 1e4b81e9eb50..a0bf5df6cb6f 100644 --- a/drivers/usb/core/hcd.h +++ b/drivers/usb/core/hcd.h | |||
| @@ -213,6 +213,8 @@ struct hc_driver { | |||
| 213 | 213 | ||
| 214 | /* force handover of high-speed port to full-speed companion */ | 214 | /* force handover of high-speed port to full-speed companion */ |
| 215 | void (*relinquish_port)(struct usb_hcd *, int); | 215 | void (*relinquish_port)(struct usb_hcd *, int); |
| 216 | /* has a port been handed over to a companion? */ | ||
| 217 | int (*port_handed_over)(struct usb_hcd *, int); | ||
| 216 | }; | 218 | }; |
| 217 | 219 | ||
| 218 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); | 220 | extern int usb_hcd_link_urb_to_ep(struct usb_hcd *hcd, struct urb *urb); |
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index eb57fcc701d7..8eb4da332f56 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c | |||
| @@ -1326,6 +1326,12 @@ void usb_disconnect(struct usb_device **pdev) | |||
| 1326 | 1326 | ||
| 1327 | usb_unlock_device(udev); | 1327 | usb_unlock_device(udev); |
| 1328 | 1328 | ||
| 1329 | /* Remove the device-specific files from sysfs. This must be | ||
| 1330 | * done with udev unlocked, because some of the attribute | ||
| 1331 | * routines try to acquire the device lock. | ||
| 1332 | */ | ||
| 1333 | usb_remove_sysfs_dev_files(udev); | ||
| 1334 | |||
| 1329 | /* Unregister the device. The device driver is responsible | 1335 | /* Unregister the device. The device driver is responsible |
| 1330 | * for removing the device files from usbfs and sysfs and for | 1336 | * for removing the device files from usbfs and sysfs and for |
| 1331 | * de-configuring the device. | 1337 | * de-configuring the device. |
| @@ -1541,6 +1547,9 @@ int usb_new_device(struct usb_device *udev) | |||
| 1541 | goto fail; | 1547 | goto fail; |
| 1542 | } | 1548 | } |
| 1543 | 1549 | ||
| 1550 | /* put device-specific files into sysfs */ | ||
| 1551 | usb_create_sysfs_dev_files(udev); | ||
| 1552 | |||
| 1544 | /* Tell the world! */ | 1553 | /* Tell the world! */ |
| 1545 | announce_device(udev); | 1554 | announce_device(udev); |
| 1546 | return err; | 1555 | return err; |
| @@ -2744,7 +2753,11 @@ loop: | |||
| 2744 | if ((status == -ENOTCONN) || (status == -ENOTSUPP)) | 2753 | if ((status == -ENOTCONN) || (status == -ENOTSUPP)) |
| 2745 | break; | 2754 | break; |
| 2746 | } | 2755 | } |
| 2747 | dev_err(hub_dev, "unable to enumerate USB device on port %d\n", port1); | 2756 | if (hub->hdev->parent || |
| 2757 | !hcd->driver->port_handed_over || | ||
| 2758 | !(hcd->driver->port_handed_over)(hcd, port1)) | ||
| 2759 | dev_err(hub_dev, "unable to enumerate USB device on port %d\n", | ||
| 2760 | port1); | ||
| 2748 | 2761 | ||
| 2749 | done: | 2762 | done: |
| 2750 | hub_port_disable(hub, port1, 1); | 2763 | hub_port_disable(hub, port1, 1); |
diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c index 2e2019390290..3da1ab4b389d 100644 --- a/drivers/usb/core/quirks.c +++ b/drivers/usb/core/quirks.c | |||
| @@ -47,6 +47,10 @@ static const struct usb_device_id usb_quirk_list[] = { | |||
| 47 | /* Edirol SD-20 */ | 47 | /* Edirol SD-20 */ |
| 48 | { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, | 48 | { USB_DEVICE(0x0582, 0x0027), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 49 | 49 | ||
| 50 | /* Avision AV600U */ | ||
| 51 | { USB_DEVICE(0x0638, 0x0a13), .driver_info = | ||
| 52 | USB_QUIRK_STRING_FETCH_255 }, | ||
| 53 | |||
| 50 | /* M-Systems Flash Disk Pioneers */ | 54 | /* M-Systems Flash Disk Pioneers */ |
| 51 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, | 55 | { USB_DEVICE(0x08ec, 0x1000), .driver_info = USB_QUIRK_RESET_RESUME }, |
| 52 | 56 | ||
diff --git a/drivers/usb/core/sysfs.c b/drivers/usb/core/sysfs.c index c783cb111847..5e1f5d55bf04 100644 --- a/drivers/usb/core/sysfs.c +++ b/drivers/usb/core/sysfs.c | |||
| @@ -588,35 +588,33 @@ read_descriptors(struct kobject *kobj, struct bin_attribute *attr, | |||
| 588 | container_of(kobj, struct device, kobj)); | 588 | container_of(kobj, struct device, kobj)); |
| 589 | size_t nleft = count; | 589 | size_t nleft = count; |
| 590 | size_t srclen, n; | 590 | size_t srclen, n; |
| 591 | int cfgno; | ||
| 592 | void *src; | ||
| 591 | 593 | ||
| 592 | usb_lock_device(udev); | 594 | /* The binary attribute begins with the device descriptor. |
| 593 | 595 | * Following that are the raw descriptor entries for all the | |
| 594 | /* The binary attribute begins with the device descriptor */ | 596 | * configurations (config plus subsidiary descriptors). |
| 595 | srclen = sizeof(struct usb_device_descriptor); | ||
| 596 | if (off < srclen) { | ||
| 597 | n = min_t(size_t, nleft, srclen - off); | ||
| 598 | memcpy(buf, off + (char *) &udev->descriptor, n); | ||
| 599 | nleft -= n; | ||
| 600 | buf += n; | ||
| 601 | off = 0; | ||
| 602 | } else { | ||
| 603 | off -= srclen; | ||
| 604 | } | ||
| 605 | |||
| 606 | /* Then follows the raw descriptor entry for the current | ||
| 607 | * configuration (config plus subsidiary descriptors). | ||
| 608 | */ | 597 | */ |
| 609 | if (udev->actconfig) { | 598 | for (cfgno = -1; cfgno < udev->descriptor.bNumConfigurations && |
| 610 | int cfgno = udev->actconfig - udev->config; | 599 | nleft > 0; ++cfgno) { |
| 611 | 600 | if (cfgno < 0) { | |
| 612 | srclen = __le16_to_cpu(udev->actconfig->desc.wTotalLength); | 601 | src = &udev->descriptor; |
| 602 | srclen = sizeof(struct usb_device_descriptor); | ||
| 603 | } else { | ||
| 604 | src = udev->rawdescriptors[cfgno]; | ||
| 605 | srclen = __le16_to_cpu(udev->config[cfgno].desc. | ||
| 606 | wTotalLength); | ||
| 607 | } | ||
| 613 | if (off < srclen) { | 608 | if (off < srclen) { |
| 614 | n = min_t(size_t, nleft, srclen - off); | 609 | n = min(nleft, srclen - (size_t) off); |
| 615 | memcpy(buf, off + udev->rawdescriptors[cfgno], n); | 610 | memcpy(buf, src + off, n); |
| 616 | nleft -= n; | 611 | nleft -= n; |
| 612 | buf += n; | ||
| 613 | off = 0; | ||
| 614 | } else { | ||
| 615 | off -= srclen; | ||
| 617 | } | 616 | } |
| 618 | } | 617 | } |
| 619 | usb_unlock_device(udev); | ||
| 620 | return count - nleft; | 618 | return count - nleft; |
| 621 | } | 619 | } |
| 622 | 620 | ||
diff --git a/drivers/usb/gadget/fsl_usb2_udc.c b/drivers/usb/gadget/fsl_usb2_udc.c index 651b82701394..18687543d7fa 100644 --- a/drivers/usb/gadget/fsl_usb2_udc.c +++ b/drivers/usb/gadget/fsl_usb2_udc.c | |||
| @@ -1627,7 +1627,9 @@ static int reset_queues(struct fsl_udc *udc) | |||
| 1627 | udc_reset_ep_queue(udc, pipe); | 1627 | udc_reset_ep_queue(udc, pipe); |
| 1628 | 1628 | ||
| 1629 | /* report disconnect; the driver is already quiesced */ | 1629 | /* report disconnect; the driver is already quiesced */ |
| 1630 | spin_unlock(&udc->lock); | ||
| 1630 | udc->driver->disconnect(&udc->gadget); | 1631 | udc->driver->disconnect(&udc->gadget); |
| 1632 | spin_lock(&udc->lock); | ||
| 1631 | 1633 | ||
| 1632 | return 0; | 1634 | return 0; |
| 1633 | } | 1635 | } |
diff --git a/drivers/usb/host/ehci-au1xxx.c b/drivers/usb/host/ehci-au1xxx.c index 8b5f991e949c..08a4335401a9 100644 --- a/drivers/usb/host/ehci-au1xxx.c +++ b/drivers/usb/host/ehci-au1xxx.c | |||
| @@ -223,6 +223,7 @@ static const struct hc_driver ehci_au1xxx_hc_driver = { | |||
| 223 | .bus_suspend = ehci_bus_suspend, | 223 | .bus_suspend = ehci_bus_suspend, |
| 224 | .bus_resume = ehci_bus_resume, | 224 | .bus_resume = ehci_bus_resume, |
| 225 | .relinquish_port = ehci_relinquish_port, | 225 | .relinquish_port = ehci_relinquish_port, |
| 226 | .port_handed_over = ehci_port_handed_over, | ||
| 226 | }; | 227 | }; |
| 227 | 228 | ||
| 228 | /*-------------------------------------------------------------------------*/ | 229 | /*-------------------------------------------------------------------------*/ |
diff --git a/drivers/usb/host/ehci-fsl.c b/drivers/usb/host/ehci-fsl.c index 6d9bed6c1f48..7370d6187c64 100644 --- a/drivers/usb/host/ehci-fsl.c +++ b/drivers/usb/host/ehci-fsl.c | |||
| @@ -269,7 +269,7 @@ static int ehci_fsl_setup(struct usb_hcd *hcd) | |||
| 269 | if (retval) | 269 | if (retval) |
| 270 | return retval; | 270 | return retval; |
| 271 | 271 | ||
| 272 | ehci->is_tdi_rh_tt = 1; | 272 | hcd->has_tt = 1; |
| 273 | 273 | ||
| 274 | ehci->sbrn = 0x20; | 274 | ehci->sbrn = 0x20; |
| 275 | 275 | ||
| @@ -295,10 +295,6 @@ static const struct hc_driver ehci_fsl_hc_driver = { | |||
| 295 | */ | 295 | */ |
| 296 | .reset = ehci_fsl_setup, | 296 | .reset = ehci_fsl_setup, |
| 297 | .start = ehci_run, | 297 | .start = ehci_run, |
| 298 | #ifdef CONFIG_PM | ||
| 299 | .suspend = ehci_bus_suspend, | ||
| 300 | .resume = ehci_bus_resume, | ||
| 301 | #endif | ||
| 302 | .stop = ehci_stop, | 298 | .stop = ehci_stop, |
| 303 | .shutdown = ehci_shutdown, | 299 | .shutdown = ehci_shutdown, |
| 304 | 300 | ||
| @@ -322,6 +318,7 @@ static const struct hc_driver ehci_fsl_hc_driver = { | |||
| 322 | .bus_suspend = ehci_bus_suspend, | 318 | .bus_suspend = ehci_bus_suspend, |
| 323 | .bus_resume = ehci_bus_resume, | 319 | .bus_resume = ehci_bus_resume, |
| 324 | .relinquish_port = ehci_relinquish_port, | 320 | .relinquish_port = ehci_relinquish_port, |
| 321 | .port_handed_over = ehci_port_handed_over, | ||
| 325 | }; | 322 | }; |
| 326 | 323 | ||
| 327 | static int ehci_fsl_drv_probe(struct platform_device *pdev) | 324 | static int ehci_fsl_drv_probe(struct platform_device *pdev) |
diff --git a/drivers/usb/host/ehci-hub.c b/drivers/usb/host/ehci-hub.c index 382587c4457c..740835bb8575 100644 --- a/drivers/usb/host/ehci-hub.c +++ b/drivers/usb/host/ehci-hub.c | |||
| @@ -609,7 +609,7 @@ static int ehci_hub_control ( | |||
| 609 | } | 609 | } |
| 610 | break; | 610 | break; |
| 611 | case USB_PORT_FEAT_C_SUSPEND: | 611 | case USB_PORT_FEAT_C_SUSPEND: |
| 612 | /* we auto-clear this feature */ | 612 | clear_bit(wIndex, &ehci->port_c_suspend); |
| 613 | break; | 613 | break; |
| 614 | case USB_PORT_FEAT_POWER: | 614 | case USB_PORT_FEAT_POWER: |
| 615 | if (HCS_PPC (ehci->hcs_params)) | 615 | if (HCS_PPC (ehci->hcs_params)) |
| @@ -688,7 +688,7 @@ static int ehci_hub_control ( | |||
| 688 | /* resume completed? */ | 688 | /* resume completed? */ |
| 689 | else if (time_after_eq(jiffies, | 689 | else if (time_after_eq(jiffies, |
| 690 | ehci->reset_done[wIndex])) { | 690 | ehci->reset_done[wIndex])) { |
| 691 | status |= 1 << USB_PORT_FEAT_C_SUSPEND; | 691 | set_bit(wIndex, &ehci->port_c_suspend); |
| 692 | ehci->reset_done[wIndex] = 0; | 692 | ehci->reset_done[wIndex] = 0; |
| 693 | 693 | ||
| 694 | /* stop resume signaling */ | 694 | /* stop resume signaling */ |
| @@ -765,6 +765,8 @@ static int ehci_hub_control ( | |||
| 765 | status |= 1 << USB_PORT_FEAT_RESET; | 765 | status |= 1 << USB_PORT_FEAT_RESET; |
| 766 | if (temp & PORT_POWER) | 766 | if (temp & PORT_POWER) |
| 767 | status |= 1 << USB_PORT_FEAT_POWER; | 767 | status |= 1 << USB_PORT_FEAT_POWER; |
| 768 | if (test_bit(wIndex, &ehci->port_c_suspend)) | ||
| 769 | status |= 1 << USB_PORT_FEAT_C_SUSPEND; | ||
| 768 | 770 | ||
| 769 | #ifndef VERBOSE_DEBUG | 771 | #ifndef VERBOSE_DEBUG |
| 770 | if (status & ~0xffff) /* only if wPortChange is interesting */ | 772 | if (status & ~0xffff) /* only if wPortChange is interesting */ |
| @@ -875,3 +877,13 @@ static void ehci_relinquish_port(struct usb_hcd *hcd, int portnum) | |||
| 875 | set_owner(ehci, --portnum, PORT_OWNER); | 877 | set_owner(ehci, --portnum, PORT_OWNER); |
| 876 | } | 878 | } |
| 877 | 879 | ||
| 880 | static int ehci_port_handed_over(struct usb_hcd *hcd, int portnum) | ||
| 881 | { | ||
| 882 | struct ehci_hcd *ehci = hcd_to_ehci(hcd); | ||
| 883 | u32 __iomem *reg; | ||
| 884 | |||
| 885 | if (ehci_is_TDI(ehci)) | ||
| 886 | return 0; | ||
| 887 | reg = &ehci->regs->port_status[portnum - 1]; | ||
| 888 | return ehci_readl(ehci, reg) & PORT_OWNER; | ||
| 889 | } | ||
diff --git a/drivers/usb/host/ehci-ixp4xx.c b/drivers/usb/host/ehci-ixp4xx.c index 601c8795a854..9d042f220097 100644 --- a/drivers/usb/host/ehci-ixp4xx.c +++ b/drivers/usb/host/ehci-ixp4xx.c | |||
| @@ -26,7 +26,7 @@ static int ixp4xx_ehci_init(struct usb_hcd *hcd) | |||
| 26 | + HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); | 26 | + HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); |
| 27 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); | 27 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); |
| 28 | 28 | ||
| 29 | ehci->is_tdi_rh_tt = 1; | 29 | hcd->has_tt = 1; |
| 30 | ehci_reset(ehci); | 30 | ehci_reset(ehci); |
| 31 | 31 | ||
| 32 | retval = ehci_init(hcd); | 32 | retval = ehci_init(hcd); |
| @@ -58,6 +58,8 @@ static const struct hc_driver ixp4xx_ehci_hc_driver = { | |||
| 58 | .bus_suspend = ehci_bus_suspend, | 58 | .bus_suspend = ehci_bus_suspend, |
| 59 | .bus_resume = ehci_bus_resume, | 59 | .bus_resume = ehci_bus_resume, |
| 60 | #endif | 60 | #endif |
| 61 | .relinquish_port = ehci_relinquish_port, | ||
| 62 | .port_handed_over = ehci_port_handed_over, | ||
| 61 | }; | 63 | }; |
| 62 | 64 | ||
| 63 | static int ixp4xx_ehci_probe(struct platform_device *pdev) | 65 | static int ixp4xx_ehci_probe(struct platform_device *pdev) |
diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c index 3adfda813a7b..ab625f0ba1d9 100644 --- a/drivers/usb/host/ehci-orion.c +++ b/drivers/usb/host/ehci-orion.c | |||
| @@ -139,10 +139,6 @@ static const struct hc_driver ehci_orion_hc_driver = { | |||
| 139 | */ | 139 | */ |
| 140 | .reset = ehci_orion_setup, | 140 | .reset = ehci_orion_setup, |
| 141 | .start = ehci_run, | 141 | .start = ehci_run, |
| 142 | #ifdef CONFIG_PM | ||
| 143 | .suspend = ehci_bus_suspend, | ||
| 144 | .resume = ehci_bus_resume, | ||
| 145 | #endif | ||
| 146 | .stop = ehci_stop, | 142 | .stop = ehci_stop, |
| 147 | .shutdown = ehci_shutdown, | 143 | .shutdown = ehci_shutdown, |
| 148 | 144 | ||
| @@ -165,6 +161,8 @@ static const struct hc_driver ehci_orion_hc_driver = { | |||
| 165 | .hub_control = ehci_hub_control, | 161 | .hub_control = ehci_hub_control, |
| 166 | .bus_suspend = ehci_bus_suspend, | 162 | .bus_suspend = ehci_bus_suspend, |
| 167 | .bus_resume = ehci_bus_resume, | 163 | .bus_resume = ehci_bus_resume, |
| 164 | .relinquish_port = ehci_relinquish_port, | ||
| 165 | .port_handed_over = ehci_port_handed_over, | ||
| 168 | }; | 166 | }; |
| 169 | 167 | ||
| 170 | static void __init | 168 | static void __init |
| @@ -250,7 +248,7 @@ static int __init ehci_orion_drv_probe(struct platform_device *pdev) | |||
| 250 | ehci->regs = hcd->regs + 0x100 + | 248 | ehci->regs = hcd->regs + 0x100 + |
| 251 | HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); | 249 | HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase)); |
| 252 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); | 250 | ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params); |
| 253 | ehci->is_tdi_rh_tt = 1; | 251 | hcd->has_tt = 1; |
| 254 | ehci->sbrn = 0x20; | 252 | ehci->sbrn = 0x20; |
| 255 | 253 | ||
| 256 | /* | 254 | /* |
diff --git a/drivers/usb/host/ehci-pci.c b/drivers/usb/host/ehci-pci.c index 5bb7f6bb13f3..c46a58f9181d 100644 --- a/drivers/usb/host/ehci-pci.c +++ b/drivers/usb/host/ehci-pci.c | |||
| @@ -129,7 +129,6 @@ static int ehci_pci_setup(struct usb_hcd *hcd) | |||
| 129 | switch (pdev->vendor) { | 129 | switch (pdev->vendor) { |
| 130 | case PCI_VENDOR_ID_TDI: | 130 | case PCI_VENDOR_ID_TDI: |
| 131 | if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) { | 131 | if (pdev->device == PCI_DEVICE_ID_TDI_EHCI) { |
| 132 | ehci->is_tdi_rh_tt = 1; | ||
| 133 | hcd->has_tt = 1; | 132 | hcd->has_tt = 1; |
| 134 | tdi_reset(ehci); | 133 | tdi_reset(ehci); |
| 135 | } | 134 | } |
| @@ -379,7 +378,8 @@ static const struct hc_driver ehci_pci_hc_driver = { | |||
| 379 | .hub_control = ehci_hub_control, | 378 | .hub_control = ehci_hub_control, |
| 380 | .bus_suspend = ehci_bus_suspend, | 379 | .bus_suspend = ehci_bus_suspend, |
| 381 | .bus_resume = ehci_bus_resume, | 380 | .bus_resume = ehci_bus_resume, |
| 382 | .relinquish_port = ehci_relinquish_port, | 381 | .relinquish_port = ehci_relinquish_port, |
| 382 | .port_handed_over = ehci_port_handed_over, | ||
| 383 | }; | 383 | }; |
| 384 | 384 | ||
| 385 | /*-------------------------------------------------------------------------*/ | 385 | /*-------------------------------------------------------------------------*/ |
diff --git a/drivers/usb/host/ehci-ppc-of.c b/drivers/usb/host/ehci-ppc-of.c index ee305b1f99ff..b018deed2e8f 100644 --- a/drivers/usb/host/ehci-ppc-of.c +++ b/drivers/usb/host/ehci-ppc-of.c | |||
| @@ -76,6 +76,8 @@ static const struct hc_driver ehci_ppc_of_hc_driver = { | |||
| 76 | .bus_suspend = ehci_bus_suspend, | 76 | .bus_suspend = ehci_bus_suspend, |
| 77 | .bus_resume = ehci_bus_resume, | 77 | .bus_resume = ehci_bus_resume, |
| 78 | #endif | 78 | #endif |
| 79 | .relinquish_port = ehci_relinquish_port, | ||
| 80 | .port_handed_over = ehci_port_handed_over, | ||
| 79 | }; | 81 | }; |
| 80 | 82 | ||
| 81 | 83 | ||
diff --git a/drivers/usb/host/ehci-ppc-soc.c b/drivers/usb/host/ehci-ppc-soc.c index 6c76036783a1..529590eb4037 100644 --- a/drivers/usb/host/ehci-ppc-soc.c +++ b/drivers/usb/host/ehci-ppc-soc.c | |||
| @@ -163,6 +163,7 @@ static const struct hc_driver ehci_ppc_soc_hc_driver = { | |||
| 163 | .bus_suspend = ehci_bus_suspend, | 163 | .bus_suspend = ehci_bus_suspend, |
| 164 | .bus_resume = ehci_bus_resume, | 164 | .bus_resume = ehci_bus_resume, |
| 165 | .relinquish_port = ehci_relinquish_port, | 165 | .relinquish_port = ehci_relinquish_port, |
| 166 | .port_handed_over = ehci_port_handed_over, | ||
| 166 | }; | 167 | }; |
| 167 | 168 | ||
| 168 | static int ehci_hcd_ppc_soc_drv_probe(struct platform_device *pdev) | 169 | static int ehci_hcd_ppc_soc_drv_probe(struct platform_device *pdev) |
diff --git a/drivers/usb/host/ehci-ps3.c b/drivers/usb/host/ehci-ps3.c index 69782221bcf3..37e6abeb794c 100644 --- a/drivers/usb/host/ehci-ps3.c +++ b/drivers/usb/host/ehci-ps3.c | |||
| @@ -73,6 +73,7 @@ static const struct hc_driver ps3_ehci_hc_driver = { | |||
| 73 | .bus_resume = ehci_bus_resume, | 73 | .bus_resume = ehci_bus_resume, |
| 74 | #endif | 74 | #endif |
| 75 | .relinquish_port = ehci_relinquish_port, | 75 | .relinquish_port = ehci_relinquish_port, |
| 76 | .port_handed_over = ehci_port_handed_over, | ||
| 76 | }; | 77 | }; |
| 77 | 78 | ||
| 78 | static int ps3_ehci_probe(struct ps3_system_bus_device *dev) | 79 | static int ps3_ehci_probe(struct ps3_system_bus_device *dev) |
diff --git a/drivers/usb/host/ehci-sched.c b/drivers/usb/host/ehci-sched.c index be575e46eac3..b7853c8bac0f 100644 --- a/drivers/usb/host/ehci-sched.c +++ b/drivers/usb/host/ehci-sched.c | |||
| @@ -1349,18 +1349,27 @@ iso_stream_schedule ( | |||
| 1349 | /* when's the last uframe this urb could start? */ | 1349 | /* when's the last uframe this urb could start? */ |
| 1350 | max = now + mod; | 1350 | max = now + mod; |
| 1351 | 1351 | ||
| 1352 | /* typical case: reuse current schedule. stream is still active, | 1352 | /* Typical case: reuse current schedule, stream is still active. |
| 1353 | * and no gaps from host falling behind (irq delays etc) | 1353 | * Hopefully there are no gaps from the host falling behind |
| 1354 | * (irq delays etc), but if there are we'll take the next | ||
| 1355 | * slot in the schedule, implicitly assuming URB_ISO_ASAP. | ||
| 1354 | */ | 1356 | */ |
| 1355 | if (likely (!list_empty (&stream->td_list))) { | 1357 | if (likely (!list_empty (&stream->td_list))) { |
| 1356 | start = stream->next_uframe; | 1358 | start = stream->next_uframe; |
| 1357 | if (start < now) | 1359 | if (start < now) |
| 1358 | start += mod; | 1360 | start += mod; |
| 1359 | if (likely ((start + sched->span) < max)) | 1361 | |
| 1360 | goto ready; | 1362 | /* Fell behind (by up to twice the slop amount)? */ |
| 1361 | /* else fell behind; someday, try to reschedule */ | 1363 | if (start >= max - 2 * 8 * SCHEDULE_SLOP) |
| 1362 | status = -EL2NSYNC; | 1364 | start += stream->interval * DIV_ROUND_UP( |
| 1363 | goto fail; | 1365 | max - start, stream->interval) - mod; |
| 1366 | |||
| 1367 | /* Tried to schedule too far into the future? */ | ||
| 1368 | if (unlikely((start + sched->span) >= max)) { | ||
| 1369 | status = -EFBIG; | ||
| 1370 | goto fail; | ||
| 1371 | } | ||
| 1372 | goto ready; | ||
| 1364 | } | 1373 | } |
| 1365 | 1374 | ||
| 1366 | /* need to schedule; when's the next (u)frame we could start? | 1375 | /* need to schedule; when's the next (u)frame we could start? |
| @@ -1613,6 +1622,9 @@ itd_complete ( | |||
| 1613 | } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { | 1622 | } else if (likely ((t & EHCI_ISOC_ACTIVE) == 0)) { |
| 1614 | desc->status = 0; | 1623 | desc->status = 0; |
| 1615 | desc->actual_length = EHCI_ITD_LENGTH (t); | 1624 | desc->actual_length = EHCI_ITD_LENGTH (t); |
| 1625 | } else { | ||
| 1626 | /* URB was too late */ | ||
| 1627 | desc->status = -EXDEV; | ||
| 1616 | } | 1628 | } |
| 1617 | } | 1629 | } |
| 1618 | 1630 | ||
| @@ -2095,7 +2107,7 @@ done: | |||
| 2095 | static void | 2107 | static void |
| 2096 | scan_periodic (struct ehci_hcd *ehci) | 2108 | scan_periodic (struct ehci_hcd *ehci) |
| 2097 | { | 2109 | { |
| 2098 | unsigned frame, clock, now_uframe, mod; | 2110 | unsigned now_uframe, frame, clock, clock_frame, mod; |
| 2099 | unsigned modified; | 2111 | unsigned modified; |
| 2100 | 2112 | ||
| 2101 | mod = ehci->periodic_size << 3; | 2113 | mod = ehci->periodic_size << 3; |
| @@ -2111,6 +2123,7 @@ scan_periodic (struct ehci_hcd *ehci) | |||
| 2111 | else | 2123 | else |
| 2112 | clock = now_uframe + mod - 1; | 2124 | clock = now_uframe + mod - 1; |
| 2113 | clock %= mod; | 2125 | clock %= mod; |
| 2126 | clock_frame = clock >> 3; | ||
| 2114 | 2127 | ||
| 2115 | for (;;) { | 2128 | for (;;) { |
| 2116 | union ehci_shadow q, *q_p; | 2129 | union ehci_shadow q, *q_p; |
| @@ -2157,22 +2170,26 @@ restart: | |||
| 2157 | case Q_TYPE_ITD: | 2170 | case Q_TYPE_ITD: |
| 2158 | /* If this ITD is still active, leave it for | 2171 | /* If this ITD is still active, leave it for |
| 2159 | * later processing ... check the next entry. | 2172 | * later processing ... check the next entry. |
| 2173 | * No need to check for activity unless the | ||
| 2174 | * frame is current. | ||
| 2160 | */ | 2175 | */ |
| 2161 | rmb (); | 2176 | if (frame == clock_frame && live) { |
| 2162 | for (uf = 0; uf < 8 && live; uf++) { | 2177 | rmb(); |
| 2163 | if (0 == (q.itd->hw_transaction [uf] | 2178 | for (uf = 0; uf < 8; uf++) { |
| 2164 | & ITD_ACTIVE(ehci))) | 2179 | if (q.itd->hw_transaction[uf] & |
| 2165 | continue; | 2180 | ITD_ACTIVE(ehci)) |
| 2166 | incomplete = true; | 2181 | break; |
| 2167 | q_p = &q.itd->itd_next; | 2182 | } |
| 2168 | hw_p = &q.itd->hw_next; | 2183 | if (uf < 8) { |
| 2169 | type = Q_NEXT_TYPE(ehci, | 2184 | incomplete = true; |
| 2185 | q_p = &q.itd->itd_next; | ||
| 2186 | hw_p = &q.itd->hw_next; | ||
| 2187 | type = Q_NEXT_TYPE(ehci, | ||
| 2170 | q.itd->hw_next); | 2188 | q.itd->hw_next); |
| 2171 | q = *q_p; | 2189 | q = *q_p; |
| 2172 | break; | 2190 | break; |
| 2191 | } | ||
| 2173 | } | 2192 | } |
| 2174 | if (uf < 8 && live) | ||
| 2175 | break; | ||
| 2176 | 2193 | ||
| 2177 | /* Take finished ITDs out of the schedule | 2194 | /* Take finished ITDs out of the schedule |
| 2178 | * and process them: recycle, maybe report | 2195 | * and process them: recycle, maybe report |
| @@ -2189,9 +2206,12 @@ restart: | |||
| 2189 | case Q_TYPE_SITD: | 2206 | case Q_TYPE_SITD: |
| 2190 | /* If this SITD is still active, leave it for | 2207 | /* If this SITD is still active, leave it for |
| 2191 | * later processing ... check the next entry. | 2208 | * later processing ... check the next entry. |
| 2209 | * No need to check for activity unless the | ||
| 2210 | * frame is current. | ||
| 2192 | */ | 2211 | */ |
| 2193 | if ((q.sitd->hw_results & SITD_ACTIVE(ehci)) | 2212 | if (frame == clock_frame && live && |
| 2194 | && live) { | 2213 | (q.sitd->hw_results & |
| 2214 | SITD_ACTIVE(ehci))) { | ||
| 2195 | incomplete = true; | 2215 | incomplete = true; |
| 2196 | q_p = &q.sitd->sitd_next; | 2216 | q_p = &q.sitd->sitd_next; |
| 2197 | hw_p = &q.sitd->hw_next; | 2217 | hw_p = &q.sitd->hw_next; |
| @@ -2260,6 +2280,7 @@ restart: | |||
| 2260 | 2280 | ||
| 2261 | /* rescan the rest of this frame, then ... */ | 2281 | /* rescan the rest of this frame, then ... */ |
| 2262 | clock = now; | 2282 | clock = now; |
| 2283 | clock_frame = clock >> 3; | ||
| 2263 | } else { | 2284 | } else { |
| 2264 | now_uframe++; | 2285 | now_uframe++; |
| 2265 | now_uframe %= mod; | 2286 | now_uframe %= mod; |
diff --git a/drivers/usb/host/ehci.h b/drivers/usb/host/ehci.h index bf92d209a1a9..35a03095757e 100644 --- a/drivers/usb/host/ehci.h +++ b/drivers/usb/host/ehci.h | |||
| @@ -97,6 +97,8 @@ struct ehci_hcd { /* one per controller */ | |||
| 97 | dedicated to the companion controller */ | 97 | dedicated to the companion controller */ |
| 98 | unsigned long owned_ports; /* which ports are | 98 | unsigned long owned_ports; /* which ports are |
| 99 | owned by the companion during a bus suspend */ | 99 | owned by the companion during a bus suspend */ |
| 100 | unsigned long port_c_suspend; /* which ports have | ||
| 101 | the change-suspend feature turned on */ | ||
| 100 | 102 | ||
| 101 | /* per-HC memory pools (could be per-bus, but ...) */ | 103 | /* per-HC memory pools (could be per-bus, but ...) */ |
| 102 | struct dma_pool *qh_pool; /* qh per active urb */ | 104 | struct dma_pool *qh_pool; /* qh per active urb */ |
| @@ -112,7 +114,6 @@ struct ehci_hcd { /* one per controller */ | |||
| 112 | u32 command; | 114 | u32 command; |
| 113 | 115 | ||
| 114 | /* SILICON QUIRKS */ | 116 | /* SILICON QUIRKS */ |
| 115 | unsigned is_tdi_rh_tt:1; /* TDI roothub with TT */ | ||
| 116 | unsigned no_selective_suspend:1; | 117 | unsigned no_selective_suspend:1; |
| 117 | unsigned has_fsl_port_bug:1; /* FreeScale */ | 118 | unsigned has_fsl_port_bug:1; /* FreeScale */ |
| 118 | unsigned big_endian_mmio:1; | 119 | unsigned big_endian_mmio:1; |
| @@ -678,7 +679,7 @@ struct ehci_fstn { | |||
| 678 | * needed (mostly in root hub code). | 679 | * needed (mostly in root hub code). |
| 679 | */ | 680 | */ |
| 680 | 681 | ||
| 681 | #define ehci_is_TDI(e) ((e)->is_tdi_rh_tt) | 682 | #define ehci_is_TDI(e) (ehci_to_hcd(e)->has_tt) |
| 682 | 683 | ||
| 683 | /* Returns the speed of a device attached to a port on the root hub. */ | 684 | /* Returns the speed of a device attached to a port on the root hub. */ |
| 684 | static inline unsigned int | 685 | static inline unsigned int |
diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c index 440bf94f0d4c..c9db3fe98726 100644 --- a/drivers/usb/host/isp1760-if.c +++ b/drivers/usb/host/isp1760-if.c | |||
| @@ -104,8 +104,8 @@ static u32 nxp_pci_io_base; | |||
| 104 | static u32 iolength; | 104 | static u32 iolength; |
| 105 | static u32 pci_mem_phy0; | 105 | static u32 pci_mem_phy0; |
| 106 | static u32 length; | 106 | static u32 length; |
| 107 | static u8 *chip_addr; | 107 | static u8 __iomem *chip_addr; |
| 108 | static u8 *iobase; | 108 | static u8 __iomem *iobase; |
| 109 | 109 | ||
| 110 | static int __devinit isp1761_pci_probe(struct pci_dev *dev, | 110 | static int __devinit isp1761_pci_probe(struct pci_dev *dev, |
| 111 | const struct pci_device_id *id) | 111 | const struct pci_device_id *id) |
diff --git a/drivers/usb/misc/Kconfig b/drivers/usb/misc/Kconfig index a53db1d4e07a..eb6c06979f3b 100644 --- a/drivers/usb/misc/Kconfig +++ b/drivers/usb/misc/Kconfig | |||
| @@ -269,3 +269,14 @@ config USB_TEST | |||
| 269 | See <http://www.linux-usb.org/usbtest/> for more information, | 269 | See <http://www.linux-usb.org/usbtest/> for more information, |
| 270 | including sample test device firmware and "how to use it". | 270 | including sample test device firmware and "how to use it". |
| 271 | 271 | ||
| 272 | config USB_ISIGHTFW | ||
| 273 | tristate "iSight firmware loading support" | ||
| 274 | depends on USB | ||
| 275 | help | ||
| 276 | This driver loads firmware for USB Apple iSight cameras, allowing | ||
| 277 | them to be driven by the USB video class driver available at | ||
| 278 | http://linux-uvc.berlios.de | ||
| 279 | |||
| 280 | The firmware for this driver must be extracted from the MacOS | ||
| 281 | driver beforehand. Tools for doing so are available at | ||
| 282 | http://bersace03.free.fr | ||
diff --git a/drivers/usb/misc/Makefile b/drivers/usb/misc/Makefile index b68e6b774f1a..aba091cb5ec0 100644 --- a/drivers/usb/misc/Makefile +++ b/drivers/usb/misc/Makefile | |||
| @@ -14,6 +14,7 @@ obj-$(CONFIG_USB_EMI62) += emi62.o | |||
| 14 | obj-$(CONFIG_USB_FTDI_ELAN) += ftdi-elan.o | 14 | obj-$(CONFIG_USB_FTDI_ELAN) += ftdi-elan.o |
| 15 | obj-$(CONFIG_USB_IDMOUSE) += idmouse.o | 15 | obj-$(CONFIG_USB_IDMOUSE) += idmouse.o |
| 16 | obj-$(CONFIG_USB_IOWARRIOR) += iowarrior.o | 16 | obj-$(CONFIG_USB_IOWARRIOR) += iowarrior.o |
| 17 | obj-$(CONFIG_USB_ISIGHTFW) += isight_firmware.o | ||
| 17 | obj-$(CONFIG_USB_LCD) += usblcd.o | 18 | obj-$(CONFIG_USB_LCD) += usblcd.o |
| 18 | obj-$(CONFIG_USB_LD) += ldusb.o | 19 | obj-$(CONFIG_USB_LD) += ldusb.o |
| 19 | obj-$(CONFIG_USB_LED) += usbled.o | 20 | obj-$(CONFIG_USB_LED) += usbled.o |
diff --git a/drivers/usb/misc/isight_firmware.c b/drivers/usb/misc/isight_firmware.c new file mode 100644 index 000000000000..390e04885536 --- /dev/null +++ b/drivers/usb/misc/isight_firmware.c | |||
| @@ -0,0 +1,131 @@ | |||
| 1 | /* | ||
| 2 | * Driver for loading USB isight firmware | ||
| 3 | * | ||
| 4 | * Copyright (C) 2008 Matthew Garrett <mjg@redhat.com> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify it | ||
| 7 | * under the terms of the GNU General Public License as published by the Free | ||
| 8 | * Software Foundation, version 2. | ||
| 9 | * | ||
| 10 | * The USB isight cameras in recent Apples are roughly compatible with the USB | ||
| 11 | * video class specification, and can be driven by uvcvideo. However, they | ||
| 12 | * need firmware to be loaded beforehand. After firmware loading, the device | ||
| 13 | * detaches from the USB bus and reattaches with a new device ID. It can then | ||
| 14 | * be claimed by the uvc driver. | ||
| 15 | * | ||
| 16 | * The firmware is non-free and must be extracted by the user. Tools to do this | ||
| 17 | * are available at http://bersace03.free.fr/ift/ | ||
| 18 | * | ||
| 19 | * The isight firmware loading was reverse engineered by Johannes Berg | ||
| 20 | * <johannes@sipsolutions.de>, and this driver is based on code by Ronald | ||
| 21 | * Bultje <rbultje@ronald.bitfreak.net> | ||
| 22 | */ | ||
| 23 | |||
| 24 | #include <linux/usb.h> | ||
| 25 | #include <linux/firmware.h> | ||
| 26 | #include <linux/errno.h> | ||
| 27 | #include <linux/module.h> | ||
| 28 | |||
| 29 | static struct usb_device_id id_table[] = { | ||
| 30 | {USB_DEVICE(0x05ac, 0x8300)}, | ||
| 31 | {}, | ||
| 32 | }; | ||
| 33 | |||
| 34 | MODULE_DEVICE_TABLE(usb, id_table); | ||
| 35 | |||
| 36 | static int isight_firmware_load(struct usb_interface *intf, | ||
| 37 | const struct usb_device_id *id) | ||
| 38 | { | ||
| 39 | struct usb_device *dev = interface_to_usbdev(intf); | ||
| 40 | int llen, len, req, ret = 0; | ||
| 41 | const struct firmware *firmware; | ||
| 42 | unsigned char *buf; | ||
| 43 | unsigned char data[4]; | ||
| 44 | char *ptr; | ||
| 45 | |||
| 46 | if (request_firmware(&firmware, "isight.fw", &dev->dev) != 0) { | ||
| 47 | printk(KERN_ERR "Unable to load isight firmware\n"); | ||
| 48 | return -ENODEV; | ||
| 49 | } | ||
| 50 | |||
| 51 | ptr = firmware->data; | ||
| 52 | |||
| 53 | if (usb_control_msg | ||
| 54 | (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\1", 1, | ||
| 55 | 300) != 1) { | ||
| 56 | printk(KERN_ERR | ||
| 57 | "Failed to initialise isight firmware loader\n"); | ||
| 58 | ret = -ENODEV; | ||
| 59 | goto out; | ||
| 60 | } | ||
| 61 | |||
| 62 | while (1) { | ||
| 63 | memcpy(data, ptr, 4); | ||
| 64 | len = (data[0] << 8 | data[1]); | ||
| 65 | req = (data[2] << 8 | data[3]); | ||
| 66 | ptr += 4; | ||
| 67 | |||
| 68 | if (len == 0x8001) | ||
| 69 | break; /* success */ | ||
| 70 | else if (len == 0) | ||
| 71 | continue; | ||
| 72 | |||
| 73 | for (; len > 0; req += 50) { | ||
| 74 | llen = len > 50 ? 50 : len; | ||
| 75 | len -= llen; | ||
| 76 | |||
| 77 | buf = kmalloc(llen, GFP_KERNEL); | ||
| 78 | memcpy(buf, ptr, llen); | ||
| 79 | |||
| 80 | ptr += llen; | ||
| 81 | |||
| 82 | if (usb_control_msg | ||
| 83 | (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, req, 0, | ||
| 84 | buf, llen, 300) != llen) { | ||
| 85 | printk(KERN_ERR | ||
| 86 | "Failed to load isight firmware\n"); | ||
| 87 | kfree(buf); | ||
| 88 | ret = -ENODEV; | ||
| 89 | goto out; | ||
| 90 | } | ||
| 91 | |||
| 92 | kfree(buf); | ||
| 93 | } | ||
| 94 | } | ||
| 95 | if (usb_control_msg | ||
| 96 | (dev, usb_sndctrlpipe(dev, 0), 0xa0, 0x40, 0xe600, 0, "\0", 1, | ||
| 97 | 300) != 1) { | ||
| 98 | printk(KERN_ERR "isight firmware loading completion failed\n"); | ||
| 99 | ret = -ENODEV; | ||
| 100 | } | ||
| 101 | out: | ||
| 102 | release_firmware(firmware); | ||
| 103 | return ret; | ||
| 104 | } | ||
| 105 | |||
| 106 | static void isight_firmware_disconnect(struct usb_interface *intf) | ||
| 107 | { | ||
| 108 | } | ||
| 109 | |||
| 110 | static struct usb_driver isight_firmware_driver = { | ||
| 111 | .name = "isight_firmware", | ||
| 112 | .probe = isight_firmware_load, | ||
| 113 | .disconnect = isight_firmware_disconnect, | ||
| 114 | .id_table = id_table, | ||
| 115 | }; | ||
| 116 | |||
| 117 | static int __init isight_firmware_init(void) | ||
| 118 | { | ||
| 119 | return usb_register(&isight_firmware_driver); | ||
| 120 | } | ||
| 121 | |||
| 122 | static void __exit isight_firmware_exit(void) | ||
| 123 | { | ||
| 124 | usb_deregister(&isight_firmware_driver); | ||
| 125 | } | ||
| 126 | |||
| 127 | module_init(isight_firmware_init); | ||
| 128 | module_exit(isight_firmware_exit); | ||
| 129 | |||
| 130 | MODULE_LICENSE("GPL"); | ||
| 131 | MODULE_AUTHOR("Matthew Garrett <mjg@redhat.com>"); | ||
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c index 3cee6feac174..5234e7a3bd2c 100644 --- a/drivers/usb/serial/ftdi_sio.c +++ b/drivers/usb/serial/ftdi_sio.c | |||
| @@ -174,8 +174,270 @@ static struct usb_device_id id_table_combined [] = { | |||
| 174 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) }, | 174 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_4_PID) }, |
| 175 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, | 175 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_5_PID) }, |
| 176 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, | 176 | { USB_DEVICE(FTDI_VID, FTDI_MTXORB_6_PID) }, |
| 177 | { USB_DEVICE(MTXORB_VK_VID, MTXORB_VK_PID), | 177 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0100_PID) }, |
| 178 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0101_PID) }, | ||
| 179 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0102_PID) }, | ||
| 180 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0103_PID) }, | ||
| 181 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0104_PID) }, | ||
| 182 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0105_PID) }, | ||
| 183 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0106_PID) }, | ||
| 184 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0107_PID) }, | ||
| 185 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0108_PID) }, | ||
| 186 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0109_PID) }, | ||
| 187 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010A_PID) }, | ||
| 188 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010B_PID) }, | ||
| 189 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010C_PID) }, | ||
| 190 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010D_PID) }, | ||
| 191 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010E_PID) }, | ||
| 192 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_010F_PID) }, | ||
| 193 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0110_PID) }, | ||
| 194 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0111_PID) }, | ||
| 195 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0112_PID) }, | ||
| 196 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0113_PID) }, | ||
| 197 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0114_PID) }, | ||
| 198 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0115_PID) }, | ||
| 199 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0116_PID) }, | ||
| 200 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0117_PID) }, | ||
| 201 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0118_PID) }, | ||
| 202 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0119_PID) }, | ||
| 203 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011A_PID) }, | ||
| 204 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011B_PID) }, | ||
| 205 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011C_PID) }, | ||
| 206 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011D_PID) }, | ||
| 207 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011E_PID) }, | ||
| 208 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_011F_PID) }, | ||
| 209 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0120_PID) }, | ||
| 210 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0121_PID) }, | ||
| 211 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0122_PID) }, | ||
| 212 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0123_PID) }, | ||
| 213 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0124_PID) }, | ||
| 214 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0125_PID) }, | ||
| 215 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0126_PID) }, | ||
| 216 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0127_PID), | ||
| 178 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | 217 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, |
| 218 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0128_PID) }, | ||
| 219 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0129_PID) }, | ||
| 220 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012A_PID) }, | ||
| 221 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012B_PID) }, | ||
| 222 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012C_PID), | ||
| 223 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 224 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012D_PID) }, | ||
| 225 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012E_PID) }, | ||
| 226 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_012F_PID) }, | ||
| 227 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0130_PID) }, | ||
| 228 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0131_PID) }, | ||
| 229 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0132_PID) }, | ||
| 230 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0133_PID) }, | ||
| 231 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0134_PID) }, | ||
| 232 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0135_PID) }, | ||
| 233 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0136_PID) }, | ||
| 234 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0137_PID) }, | ||
| 235 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0138_PID) }, | ||
| 236 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0139_PID) }, | ||
| 237 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013A_PID) }, | ||
| 238 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013B_PID) }, | ||
| 239 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013C_PID) }, | ||
| 240 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013D_PID) }, | ||
| 241 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013E_PID) }, | ||
| 242 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_013F_PID) }, | ||
| 243 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0140_PID) }, | ||
| 244 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0141_PID) }, | ||
| 245 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0142_PID) }, | ||
| 246 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0143_PID) }, | ||
| 247 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0144_PID) }, | ||
| 248 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0145_PID) }, | ||
| 249 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0146_PID) }, | ||
| 250 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0147_PID) }, | ||
| 251 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0148_PID) }, | ||
| 252 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0149_PID) }, | ||
| 253 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014A_PID) }, | ||
| 254 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014B_PID) }, | ||
| 255 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014C_PID) }, | ||
| 256 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014D_PID) }, | ||
| 257 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014E_PID) }, | ||
| 258 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_014F_PID) }, | ||
| 259 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0150_PID) }, | ||
| 260 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0151_PID) }, | ||
| 261 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0152_PID) }, | ||
| 262 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0153_PID), | ||
| 263 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 264 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0154_PID), | ||
| 265 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 266 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0155_PID), | ||
| 267 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 268 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0156_PID), | ||
| 269 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 270 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0157_PID), | ||
| 271 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 272 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0158_PID), | ||
| 273 | .driver_info = (kernel_ulong_t)&ftdi_mtxorb_hack_quirk }, | ||
| 274 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0159_PID) }, | ||
| 275 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015A_PID) }, | ||
| 276 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015B_PID) }, | ||
| 277 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015C_PID) }, | ||
| 278 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015D_PID) }, | ||
| 279 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015E_PID) }, | ||
| 280 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_015F_PID) }, | ||
| 281 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0160_PID) }, | ||
| 282 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0161_PID) }, | ||
| 283 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0162_PID) }, | ||
| 284 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0163_PID) }, | ||
| 285 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0164_PID) }, | ||
| 286 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0165_PID) }, | ||
| 287 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0166_PID) }, | ||
| 288 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0167_PID) }, | ||
| 289 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0168_PID) }, | ||
| 290 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0169_PID) }, | ||
| 291 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016A_PID) }, | ||
| 292 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016B_PID) }, | ||
| 293 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016C_PID) }, | ||
| 294 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016D_PID) }, | ||
| 295 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016E_PID) }, | ||
| 296 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_016F_PID) }, | ||
| 297 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0170_PID) }, | ||
| 298 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0171_PID) }, | ||
| 299 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0172_PID) }, | ||
| 300 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0173_PID) }, | ||
| 301 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0174_PID) }, | ||
| 302 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0175_PID) }, | ||
| 303 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0176_PID) }, | ||
| 304 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0177_PID) }, | ||
| 305 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0178_PID) }, | ||
| 306 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0179_PID) }, | ||
| 307 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017A_PID) }, | ||
| 308 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017B_PID) }, | ||
| 309 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017C_PID) }, | ||
| 310 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017D_PID) }, | ||
| 311 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017E_PID) }, | ||
| 312 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_017F_PID) }, | ||
| 313 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0180_PID) }, | ||
| 314 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0181_PID) }, | ||
| 315 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0182_PID) }, | ||
| 316 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0183_PID) }, | ||
| 317 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0184_PID) }, | ||
| 318 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0185_PID) }, | ||
| 319 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0186_PID) }, | ||
| 320 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0187_PID) }, | ||
| 321 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0188_PID) }, | ||
| 322 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0189_PID) }, | ||
| 323 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018A_PID) }, | ||
| 324 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018B_PID) }, | ||
| 325 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018C_PID) }, | ||
| 326 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018D_PID) }, | ||
| 327 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018E_PID) }, | ||
| 328 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_018F_PID) }, | ||
| 329 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0190_PID) }, | ||
| 330 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0191_PID) }, | ||
| 331 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0192_PID) }, | ||
| 332 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0193_PID) }, | ||
| 333 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0194_PID) }, | ||
| 334 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0195_PID) }, | ||
| 335 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0196_PID) }, | ||
| 336 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0197_PID) }, | ||
| 337 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0198_PID) }, | ||
| 338 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_0199_PID) }, | ||
| 339 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019A_PID) }, | ||
| 340 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019B_PID) }, | ||
| 341 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019C_PID) }, | ||
| 342 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019D_PID) }, | ||
| 343 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019E_PID) }, | ||
| 344 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_019F_PID) }, | ||
| 345 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A0_PID) }, | ||
| 346 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A1_PID) }, | ||
| 347 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A2_PID) }, | ||
| 348 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A3_PID) }, | ||
| 349 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A4_PID) }, | ||
| 350 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A5_PID) }, | ||
| 351 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A6_PID) }, | ||
| 352 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A7_PID) }, | ||
| 353 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A8_PID) }, | ||
| 354 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01A9_PID) }, | ||
| 355 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AA_PID) }, | ||
| 356 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AB_PID) }, | ||
| 357 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AC_PID) }, | ||
| 358 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AD_PID) }, | ||
| 359 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AE_PID) }, | ||
| 360 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01AF_PID) }, | ||
| 361 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B0_PID) }, | ||
| 362 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B1_PID) }, | ||
| 363 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B2_PID) }, | ||
| 364 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B3_PID) }, | ||
| 365 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B4_PID) }, | ||
| 366 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B5_PID) }, | ||
| 367 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B6_PID) }, | ||
| 368 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B7_PID) }, | ||
| 369 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B8_PID) }, | ||
| 370 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01B9_PID) }, | ||
| 371 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BA_PID) }, | ||
| 372 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BB_PID) }, | ||
| 373 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BC_PID) }, | ||
| 374 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BD_PID) }, | ||
| 375 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BE_PID) }, | ||
| 376 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01BF_PID) }, | ||
| 377 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C0_PID) }, | ||
| 378 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C1_PID) }, | ||
| 379 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C2_PID) }, | ||
| 380 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C3_PID) }, | ||
| 381 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C4_PID) }, | ||
| 382 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C5_PID) }, | ||
| 383 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C6_PID) }, | ||
| 384 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C7_PID) }, | ||
| 385 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C8_PID) }, | ||
| 386 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01C9_PID) }, | ||
| 387 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CA_PID) }, | ||
| 388 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CB_PID) }, | ||
| 389 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CC_PID) }, | ||
| 390 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CD_PID) }, | ||
| 391 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CE_PID) }, | ||
| 392 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01CF_PID) }, | ||
| 393 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D0_PID) }, | ||
| 394 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D1_PID) }, | ||
| 395 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D2_PID) }, | ||
| 396 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D3_PID) }, | ||
| 397 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D4_PID) }, | ||
| 398 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D5_PID) }, | ||
| 399 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D6_PID) }, | ||
| 400 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D7_PID) }, | ||
| 401 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D8_PID) }, | ||
| 402 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01D9_PID) }, | ||
| 403 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DA_PID) }, | ||
| 404 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DB_PID) }, | ||
| 405 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DC_PID) }, | ||
| 406 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DD_PID) }, | ||
| 407 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DE_PID) }, | ||
| 408 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01DF_PID) }, | ||
| 409 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E0_PID) }, | ||
| 410 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E1_PID) }, | ||
| 411 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E2_PID) }, | ||
| 412 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E3_PID) }, | ||
| 413 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E4_PID) }, | ||
| 414 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E5_PID) }, | ||
| 415 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E6_PID) }, | ||
| 416 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E7_PID) }, | ||
| 417 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E8_PID) }, | ||
| 418 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01E9_PID) }, | ||
| 419 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EA_PID) }, | ||
| 420 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EB_PID) }, | ||
| 421 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EC_PID) }, | ||
| 422 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01ED_PID) }, | ||
| 423 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EE_PID) }, | ||
| 424 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01EF_PID) }, | ||
| 425 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F0_PID) }, | ||
| 426 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F1_PID) }, | ||
| 427 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F2_PID) }, | ||
| 428 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F3_PID) }, | ||
| 429 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F4_PID) }, | ||
| 430 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F5_PID) }, | ||
| 431 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F6_PID) }, | ||
| 432 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F7_PID) }, | ||
| 433 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F8_PID) }, | ||
| 434 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01F9_PID) }, | ||
| 435 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FA_PID) }, | ||
| 436 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FB_PID) }, | ||
| 437 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FC_PID) }, | ||
| 438 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FD_PID) }, | ||
| 439 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FE_PID) }, | ||
| 440 | { USB_DEVICE(MTXORB_VID,MTXORB_FTDI_RANGE_01FF_PID) }, | ||
| 179 | { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) }, | 441 | { USB_DEVICE(FTDI_VID, FTDI_PERLE_ULTRAPORT_PID) }, |
| 180 | { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) }, | 442 | { USB_DEVICE(FTDI_VID, FTDI_PIEGROUP_PID) }, |
| 181 | { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) }, | 443 | { USB_DEVICE(FTDI_VID, FTDI_TNC_X_PID) }, |
diff --git a/drivers/usb/serial/ftdi_sio.h b/drivers/usb/serial/ftdi_sio.h index a72f2c81d664..06e0ecabb3eb 100644 --- a/drivers/usb/serial/ftdi_sio.h +++ b/drivers/usb/serial/ftdi_sio.h | |||
| @@ -114,11 +114,268 @@ | |||
| 114 | #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ | 114 | #define FTDI_OOCDLINK_PID 0xbaf8 /* Amontec JTAGkey */ |
| 115 | 115 | ||
| 116 | /* | 116 | /* |
| 117 | * The following are the values for the Matrix Orbital VK204-25-USB | 117 | * The following are the values for the Matrix Orbital FTDI Range |
| 118 | * display, which use the FT232RL. | 118 | * Anything in this range will use an FT232RL. |
| 119 | */ | 119 | */ |
| 120 | #define MTXORB_VK_VID 0x1b3d | 120 | #define MTXORB_VID 0x1B3D |
| 121 | #define MTXORB_VK_PID 0x0158 | 121 | #define MTXORB_FTDI_RANGE_0100_PID 0x0100 |
| 122 | #define MTXORB_FTDI_RANGE_0101_PID 0x0101 | ||
| 123 | #define MTXORB_FTDI_RANGE_0102_PID 0x0102 | ||
| 124 | #define MTXORB_FTDI_RANGE_0103_PID 0x0103 | ||
| 125 | #define MTXORB_FTDI_RANGE_0104_PID 0x0104 | ||
| 126 | #define MTXORB_FTDI_RANGE_0105_PID 0x0105 | ||
| 127 | #define MTXORB_FTDI_RANGE_0106_PID 0x0106 | ||
| 128 | #define MTXORB_FTDI_RANGE_0107_PID 0x0107 | ||
| 129 | #define MTXORB_FTDI_RANGE_0108_PID 0x0108 | ||
| 130 | #define MTXORB_FTDI_RANGE_0109_PID 0x0109 | ||
| 131 | #define MTXORB_FTDI_RANGE_010A_PID 0x010A | ||
| 132 | #define MTXORB_FTDI_RANGE_010B_PID 0x010B | ||
| 133 | #define MTXORB_FTDI_RANGE_010C_PID 0x010C | ||
| 134 | #define MTXORB_FTDI_RANGE_010D_PID 0x010D | ||
| 135 | #define MTXORB_FTDI_RANGE_010E_PID 0x010E | ||
| 136 | #define MTXORB_FTDI_RANGE_010F_PID 0x010F | ||
| 137 | #define MTXORB_FTDI_RANGE_0110_PID 0x0110 | ||
| 138 | #define MTXORB_FTDI_RANGE_0111_PID 0x0111 | ||
| 139 | #define MTXORB_FTDI_RANGE_0112_PID 0x0112 | ||
| 140 | #define MTXORB_FTDI_RANGE_0113_PID 0x0113 | ||
| 141 | #define MTXORB_FTDI_RANGE_0114_PID 0x0114 | ||
| 142 | #define MTXORB_FTDI_RANGE_0115_PID 0x0115 | ||
| 143 | #define MTXORB_FTDI_RANGE_0116_PID 0x0116 | ||
| 144 | #define MTXORB_FTDI_RANGE_0117_PID 0x0117 | ||
| 145 | #define MTXORB_FTDI_RANGE_0118_PID 0x0118 | ||
| 146 | #define MTXORB_FTDI_RANGE_0119_PID 0x0119 | ||
| 147 | #define MTXORB_FTDI_RANGE_011A_PID 0x011A | ||
| 148 | #define MTXORB_FTDI_RANGE_011B_PID 0x011B | ||
| 149 | #define MTXORB_FTDI_RANGE_011C_PID 0x011C | ||
| 150 | #define MTXORB_FTDI_RANGE_011D_PID 0x011D | ||
| 151 | #define MTXORB_FTDI_RANGE_011E_PID 0x011E | ||
| 152 | #define MTXORB_FTDI_RANGE_011F_PID 0x011F | ||
| 153 | #define MTXORB_FTDI_RANGE_0120_PID 0x0120 | ||
| 154 | #define MTXORB_FTDI_RANGE_0121_PID 0x0121 | ||
| 155 | #define MTXORB_FTDI_RANGE_0122_PID 0x0122 | ||
| 156 | #define MTXORB_FTDI_RANGE_0123_PID 0x0123 | ||
| 157 | #define MTXORB_FTDI_RANGE_0124_PID 0x0124 | ||
| 158 | #define MTXORB_FTDI_RANGE_0125_PID 0x0125 | ||
| 159 | #define MTXORB_FTDI_RANGE_0126_PID 0x0126 | ||
| 160 | #define MTXORB_FTDI_RANGE_0127_PID 0x0127 | ||
| 161 | #define MTXORB_FTDI_RANGE_0128_PID 0x0128 | ||
| 162 | #define MTXORB_FTDI_RANGE_0129_PID 0x0129 | ||
| 163 | #define MTXORB_FTDI_RANGE_012A_PID 0x012A | ||
| 164 | #define MTXORB_FTDI_RANGE_012B_PID 0x012B | ||
| 165 | #define MTXORB_FTDI_RANGE_012C_PID 0x012C | ||
| 166 | #define MTXORB_FTDI_RANGE_012D_PID 0x012D | ||
| 167 | #define MTXORB_FTDI_RANGE_012E_PID 0x012E | ||
| 168 | #define MTXORB_FTDI_RANGE_012F_PID 0x012F | ||
| 169 | #define MTXORB_FTDI_RANGE_0130_PID 0x0130 | ||
| 170 | #define MTXORB_FTDI_RANGE_0131_PID 0x0131 | ||
| 171 | #define MTXORB_FTDI_RANGE_0132_PID 0x0132 | ||
| 172 | #define MTXORB_FTDI_RANGE_0133_PID 0x0133 | ||
| 173 | #define MTXORB_FTDI_RANGE_0134_PID 0x0134 | ||
| 174 | #define MTXORB_FTDI_RANGE_0135_PID 0x0135 | ||
| 175 | #define MTXORB_FTDI_RANGE_0136_PID 0x0136 | ||
| 176 | #define MTXORB_FTDI_RANGE_0137_PID 0x0137 | ||
| 177 | #define MTXORB_FTDI_RANGE_0138_PID 0x0138 | ||
| 178 | #define MTXORB_FTDI_RANGE_0139_PID 0x0139 | ||
| 179 | #define MTXORB_FTDI_RANGE_013A_PID 0x013A | ||
| 180 | #define MTXORB_FTDI_RANGE_013B_PID 0x013B | ||
| 181 | #define MTXORB_FTDI_RANGE_013C_PID 0x013C | ||
| 182 | #define MTXORB_FTDI_RANGE_013D_PID 0x013D | ||
| 183 | #define MTXORB_FTDI_RANGE_013E_PID 0x013E | ||
| 184 | #define MTXORB_FTDI_RANGE_013F_PID 0x013F | ||
| 185 | #define MTXORB_FTDI_RANGE_0140_PID 0x0140 | ||
| 186 | #define MTXORB_FTDI_RANGE_0141_PID 0x0141 | ||
| 187 | #define MTXORB_FTDI_RANGE_0142_PID 0x0142 | ||
| 188 | #define MTXORB_FTDI_RANGE_0143_PID 0x0143 | ||
| 189 | #define MTXORB_FTDI_RANGE_0144_PID 0x0144 | ||
| 190 | #define MTXORB_FTDI_RANGE_0145_PID 0x0145 | ||
| 191 | #define MTXORB_FTDI_RANGE_0146_PID 0x0146 | ||
| 192 | #define MTXORB_FTDI_RANGE_0147_PID 0x0147 | ||
| 193 | #define MTXORB_FTDI_RANGE_0148_PID 0x0148 | ||
| 194 | #define MTXORB_FTDI_RANGE_0149_PID 0x0149 | ||
| 195 | #define MTXORB_FTDI_RANGE_014A_PID 0x014A | ||
| 196 | #define MTXORB_FTDI_RANGE_014B_PID 0x014B | ||
| 197 | #define MTXORB_FTDI_RANGE_014C_PID 0x014C | ||
| 198 | #define MTXORB_FTDI_RANGE_014D_PID 0x014D | ||
| 199 | #define MTXORB_FTDI_RANGE_014E_PID 0x014E | ||
| 200 | #define MTXORB_FTDI_RANGE_014F_PID 0x014F | ||
| 201 | #define MTXORB_FTDI_RANGE_0150_PID 0x0150 | ||
| 202 | #define MTXORB_FTDI_RANGE_0151_PID 0x0151 | ||
| 203 | #define MTXORB_FTDI_RANGE_0152_PID 0x0152 | ||
| 204 | #define MTXORB_FTDI_RANGE_0153_PID 0x0153 | ||
| 205 | #define MTXORB_FTDI_RANGE_0154_PID 0x0154 | ||
| 206 | #define MTXORB_FTDI_RANGE_0155_PID 0x0155 | ||
| 207 | #define MTXORB_FTDI_RANGE_0156_PID 0x0156 | ||
| 208 | #define MTXORB_FTDI_RANGE_0157_PID 0x0157 | ||
| 209 | #define MTXORB_FTDI_RANGE_0158_PID 0x0158 | ||
| 210 | #define MTXORB_FTDI_RANGE_0159_PID 0x0159 | ||
| 211 | #define MTXORB_FTDI_RANGE_015A_PID 0x015A | ||
| 212 | #define MTXORB_FTDI_RANGE_015B_PID 0x015B | ||
| 213 | #define MTXORB_FTDI_RANGE_015C_PID 0x015C | ||
| 214 | #define MTXORB_FTDI_RANGE_015D_PID 0x015D | ||
| 215 | #define MTXORB_FTDI_RANGE_015E_PID 0x015E | ||
| 216 | #define MTXORB_FTDI_RANGE_015F_PID 0x015F | ||
| 217 | #define MTXORB_FTDI_RANGE_0160_PID 0x0160 | ||
| 218 | #define MTXORB_FTDI_RANGE_0161_PID 0x0161 | ||
| 219 | #define MTXORB_FTDI_RANGE_0162_PID 0x0162 | ||
| 220 | #define MTXORB_FTDI_RANGE_0163_PID 0x0163 | ||
| 221 | #define MTXORB_FTDI_RANGE_0164_PID 0x0164 | ||
| 222 | #define MTXORB_FTDI_RANGE_0165_PID 0x0165 | ||
| 223 | #define MTXORB_FTDI_RANGE_0166_PID 0x0166 | ||
| 224 | #define MTXORB_FTDI_RANGE_0167_PID 0x0167 | ||
| 225 | #define MTXORB_FTDI_RANGE_0168_PID 0x0168 | ||
| 226 | #define MTXORB_FTDI_RANGE_0169_PID 0x0169 | ||
| 227 | #define MTXORB_FTDI_RANGE_016A_PID 0x016A | ||
| 228 | #define MTXORB_FTDI_RANGE_016B_PID 0x016B | ||
| 229 | #define MTXORB_FTDI_RANGE_016C_PID 0x016C | ||
| 230 | #define MTXORB_FTDI_RANGE_016D_PID 0x016D | ||
| 231 | #define MTXORB_FTDI_RANGE_016E_PID 0x016E | ||
| 232 | #define MTXORB_FTDI_RANGE_016F_PID 0x016F | ||
| 233 | #define MTXORB_FTDI_RANGE_0170_PID 0x0170 | ||
| 234 | #define MTXORB_FTDI_RANGE_0171_PID 0x0171 | ||
| 235 | #define MTXORB_FTDI_RANGE_0172_PID 0x0172 | ||
| 236 | #define MTXORB_FTDI_RANGE_0173_PID 0x0173 | ||
| 237 | #define MTXORB_FTDI_RANGE_0174_PID 0x0174 | ||
| 238 | #define MTXORB_FTDI_RANGE_0175_PID 0x0175 | ||
| 239 | #define MTXORB_FTDI_RANGE_0176_PID 0x0176 | ||
| 240 | #define MTXORB_FTDI_RANGE_0177_PID 0x0177 | ||
| 241 | #define MTXORB_FTDI_RANGE_0178_PID 0x0178 | ||
| 242 | #define MTXORB_FTDI_RANGE_0179_PID 0x0179 | ||
| 243 | #define MTXORB_FTDI_RANGE_017A_PID 0x017A | ||
| 244 | #define MTXORB_FTDI_RANGE_017B_PID 0x017B | ||
| 245 | #define MTXORB_FTDI_RANGE_017C_PID 0x017C | ||
| 246 | #define MTXORB_FTDI_RANGE_017D_PID 0x017D | ||
| 247 | #define MTXORB_FTDI_RANGE_017E_PID 0x017E | ||
| 248 | #define MTXORB_FTDI_RANGE_017F_PID 0x017F | ||
| 249 | #define MTXORB_FTDI_RANGE_0180_PID 0x0180 | ||
| 250 | #define MTXORB_FTDI_RANGE_0181_PID 0x0181 | ||
| 251 | #define MTXORB_FTDI_RANGE_0182_PID 0x0182 | ||
| 252 | #define MTXORB_FTDI_RANGE_0183_PID 0x0183 | ||
| 253 | #define MTXORB_FTDI_RANGE_0184_PID 0x0184 | ||
| 254 | #define MTXORB_FTDI_RANGE_0185_PID 0x0185 | ||
| 255 | #define MTXORB_FTDI_RANGE_0186_PID 0x0186 | ||
| 256 | #define MTXORB_FTDI_RANGE_0187_PID 0x0187 | ||
| 257 | #define MTXORB_FTDI_RANGE_0188_PID 0x0188 | ||
| 258 | #define MTXORB_FTDI_RANGE_0189_PID 0x0189 | ||
| 259 | #define MTXORB_FTDI_RANGE_018A_PID 0x018A | ||
| 260 | #define MTXORB_FTDI_RANGE_018B_PID 0x018B | ||
| 261 | #define MTXORB_FTDI_RANGE_018C_PID 0x018C | ||
| 262 | #define MTXORB_FTDI_RANGE_018D_PID 0x018D | ||
| 263 | #define MTXORB_FTDI_RANGE_018E_PID 0x018E | ||
| 264 | #define MTXORB_FTDI_RANGE_018F_PID 0x018F | ||
| 265 | #define MTXORB_FTDI_RANGE_0190_PID 0x0190 | ||
| 266 | #define MTXORB_FTDI_RANGE_0191_PID 0x0191 | ||
| 267 | #define MTXORB_FTDI_RANGE_0192_PID 0x0192 | ||
| 268 | #define MTXORB_FTDI_RANGE_0193_PID 0x0193 | ||
| 269 | #define MTXORB_FTDI_RANGE_0194_PID 0x0194 | ||
| 270 | #define MTXORB_FTDI_RANGE_0195_PID 0x0195 | ||
| 271 | #define MTXORB_FTDI_RANGE_0196_PID 0x0196 | ||
| 272 | #define MTXORB_FTDI_RANGE_0197_PID 0x0197 | ||
| 273 | #define MTXORB_FTDI_RANGE_0198_PID 0x0198 | ||
| 274 | #define MTXORB_FTDI_RANGE_0199_PID 0x0199 | ||
| 275 | #define MTXORB_FTDI_RANGE_019A_PID 0x019A | ||
| 276 | #define MTXORB_FTDI_RANGE_019B_PID 0x019B | ||
| 277 | #define MTXORB_FTDI_RANGE_019C_PID 0x019C | ||
| 278 | #define MTXORB_FTDI_RANGE_019D_PID 0x019D | ||
| 279 | #define MTXORB_FTDI_RANGE_019E_PID 0x019E | ||
| 280 | #define MTXORB_FTDI_RANGE_019F_PID 0x019F | ||
| 281 | #define MTXORB_FTDI_RANGE_01A0_PID 0x01A0 | ||
| 282 | #define MTXORB_FTDI_RANGE_01A1_PID 0x01A1 | ||
| 283 | #define MTXORB_FTDI_RANGE_01A2_PID 0x01A2 | ||
| 284 | #define MTXORB_FTDI_RANGE_01A3_PID 0x01A3 | ||
| 285 | #define MTXORB_FTDI_RANGE_01A4_PID 0x01A4 | ||
| 286 | #define MTXORB_FTDI_RANGE_01A5_PID 0x01A5 | ||
| 287 | #define MTXORB_FTDI_RANGE_01A6_PID 0x01A6 | ||
| 288 | #define MTXORB_FTDI_RANGE_01A7_PID 0x01A7 | ||
| 289 | #define MTXORB_FTDI_RANGE_01A8_PID 0x01A8 | ||
| 290 | #define MTXORB_FTDI_RANGE_01A9_PID 0x01A9 | ||
| 291 | #define MTXORB_FTDI_RANGE_01AA_PID 0x01AA | ||
| 292 | #define MTXORB_FTDI_RANGE_01AB_PID 0x01AB | ||
| 293 | #define MTXORB_FTDI_RANGE_01AC_PID 0x01AC | ||
| 294 | #define MTXORB_FTDI_RANGE_01AD_PID 0x01AD | ||
| 295 | #define MTXORB_FTDI_RANGE_01AE_PID 0x01AE | ||
| 296 | #define MTXORB_FTDI_RANGE_01AF_PID 0x01AF | ||
| 297 | #define MTXORB_FTDI_RANGE_01B0_PID 0x01B0 | ||
| 298 | #define MTXORB_FTDI_RANGE_01B1_PID 0x01B1 | ||
| 299 | #define MTXORB_FTDI_RANGE_01B2_PID 0x01B2 | ||
| 300 | #define MTXORB_FTDI_RANGE_01B3_PID 0x01B3 | ||
| 301 | #define MTXORB_FTDI_RANGE_01B4_PID 0x01B4 | ||
| 302 | #define MTXORB_FTDI_RANGE_01B5_PID 0x01B5 | ||
| 303 | #define MTXORB_FTDI_RANGE_01B6_PID 0x01B6 | ||
| 304 | #define MTXORB_FTDI_RANGE_01B7_PID 0x01B7 | ||
| 305 | #define MTXORB_FTDI_RANGE_01B8_PID 0x01B8 | ||
| 306 | #define MTXORB_FTDI_RANGE_01B9_PID 0x01B9 | ||
| 307 | #define MTXORB_FTDI_RANGE_01BA_PID 0x01BA | ||
| 308 | #define MTXORB_FTDI_RANGE_01BB_PID 0x01BB | ||
| 309 | #define MTXORB_FTDI_RANGE_01BC_PID 0x01BC | ||
| 310 | #define MTXORB_FTDI_RANGE_01BD_PID 0x01BD | ||
| 311 | #define MTXORB_FTDI_RANGE_01BE_PID 0x01BE | ||
| 312 | #define MTXORB_FTDI_RANGE_01BF_PID 0x01BF | ||
| 313 | #define MTXORB_FTDI_RANGE_01C0_PID 0x01C0 | ||
| 314 | #define MTXORB_FTDI_RANGE_01C1_PID 0x01C1 | ||
| 315 | #define MTXORB_FTDI_RANGE_01C2_PID 0x01C2 | ||
| 316 | #define MTXORB_FTDI_RANGE_01C3_PID 0x01C3 | ||
| 317 | #define MTXORB_FTDI_RANGE_01C4_PID 0x01C4 | ||
| 318 | #define MTXORB_FTDI_RANGE_01C5_PID 0x01C5 | ||
| 319 | #define MTXORB_FTDI_RANGE_01C6_PID 0x01C6 | ||
| 320 | #define MTXORB_FTDI_RANGE_01C7_PID 0x01C7 | ||
| 321 | #define MTXORB_FTDI_RANGE_01C8_PID 0x01C8 | ||
| 322 | #define MTXORB_FTDI_RANGE_01C9_PID 0x01C9 | ||
| 323 | #define MTXORB_FTDI_RANGE_01CA_PID 0x01CA | ||
| 324 | #define MTXORB_FTDI_RANGE_01CB_PID 0x01CB | ||
| 325 | #define MTXORB_FTDI_RANGE_01CC_PID 0x01CC | ||
| 326 | #define MTXORB_FTDI_RANGE_01CD_PID 0x01CD | ||
| 327 | #define MTXORB_FTDI_RANGE_01CE_PID 0x01CE | ||
| 328 | #define MTXORB_FTDI_RANGE_01CF_PID 0x01CF | ||
| 329 | #define MTXORB_FTDI_RANGE_01D0_PID 0x01D0 | ||
| 330 | #define MTXORB_FTDI_RANGE_01D1_PID 0x01D1 | ||
| 331 | #define MTXORB_FTDI_RANGE_01D2_PID 0x01D2 | ||
| 332 | #define MTXORB_FTDI_RANGE_01D3_PID 0x01D3 | ||
| 333 | #define MTXORB_FTDI_RANGE_01D4_PID 0x01D4 | ||
| 334 | #define MTXORB_FTDI_RANGE_01D5_PID 0x01D5 | ||
| 335 | #define MTXORB_FTDI_RANGE_01D6_PID 0x01D6 | ||
| 336 | #define MTXORB_FTDI_RANGE_01D7_PID 0x01D7 | ||
| 337 | #define MTXORB_FTDI_RANGE_01D8_PID 0x01D8 | ||
| 338 | #define MTXORB_FTDI_RANGE_01D9_PID 0x01D9 | ||
| 339 | #define MTXORB_FTDI_RANGE_01DA_PID 0x01DA | ||
| 340 | #define MTXORB_FTDI_RANGE_01DB_PID 0x01DB | ||
| 341 | #define MTXORB_FTDI_RANGE_01DC_PID 0x01DC | ||
| 342 | #define MTXORB_FTDI_RANGE_01DD_PID 0x01DD | ||
| 343 | #define MTXORB_FTDI_RANGE_01DE_PID 0x01DE | ||
| 344 | #define MTXORB_FTDI_RANGE_01DF_PID 0x01DF | ||
| 345 | #define MTXORB_FTDI_RANGE_01E0_PID 0x01E0 | ||
| 346 | #define MTXORB_FTDI_RANGE_01E1_PID 0x01E1 | ||
| 347 | #define MTXORB_FTDI_RANGE_01E2_PID 0x01E2 | ||
| 348 | #define MTXORB_FTDI_RANGE_01E3_PID 0x01E3 | ||
| 349 | #define MTXORB_FTDI_RANGE_01E4_PID 0x01E4 | ||
| 350 | #define MTXORB_FTDI_RANGE_01E5_PID 0x01E5 | ||
| 351 | #define MTXORB_FTDI_RANGE_01E6_PID 0x01E6 | ||
| 352 | #define MTXORB_FTDI_RANGE_01E7_PID 0x01E7 | ||
| 353 | #define MTXORB_FTDI_RANGE_01E8_PID 0x01E8 | ||
| 354 | #define MTXORB_FTDI_RANGE_01E9_PID 0x01E9 | ||
| 355 | #define MTXORB_FTDI_RANGE_01EA_PID 0x01EA | ||
| 356 | #define MTXORB_FTDI_RANGE_01EB_PID 0x01EB | ||
| 357 | #define MTXORB_FTDI_RANGE_01EC_PID 0x01EC | ||
| 358 | #define MTXORB_FTDI_RANGE_01ED_PID 0x01ED | ||
| 359 | #define MTXORB_FTDI_RANGE_01EE_PID 0x01EE | ||
| 360 | #define MTXORB_FTDI_RANGE_01EF_PID 0x01EF | ||
| 361 | #define MTXORB_FTDI_RANGE_01F0_PID 0x01F0 | ||
| 362 | #define MTXORB_FTDI_RANGE_01F1_PID 0x01F1 | ||
| 363 | #define MTXORB_FTDI_RANGE_01F2_PID 0x01F2 | ||
| 364 | #define MTXORB_FTDI_RANGE_01F3_PID 0x01F3 | ||
| 365 | #define MTXORB_FTDI_RANGE_01F4_PID 0x01F4 | ||
| 366 | #define MTXORB_FTDI_RANGE_01F5_PID 0x01F5 | ||
| 367 | #define MTXORB_FTDI_RANGE_01F6_PID 0x01F6 | ||
| 368 | #define MTXORB_FTDI_RANGE_01F7_PID 0x01F7 | ||
| 369 | #define MTXORB_FTDI_RANGE_01F8_PID 0x01F8 | ||
| 370 | #define MTXORB_FTDI_RANGE_01F9_PID 0x01F9 | ||
| 371 | #define MTXORB_FTDI_RANGE_01FA_PID 0x01FA | ||
| 372 | #define MTXORB_FTDI_RANGE_01FB_PID 0x01FB | ||
| 373 | #define MTXORB_FTDI_RANGE_01FC_PID 0x01FC | ||
| 374 | #define MTXORB_FTDI_RANGE_01FD_PID 0x01FD | ||
| 375 | #define MTXORB_FTDI_RANGE_01FE_PID 0x01FE | ||
| 376 | #define MTXORB_FTDI_RANGE_01FF_PID 0x01FF | ||
| 377 | |||
| 378 | |||
| 122 | 379 | ||
| 123 | /* Interbiometrics USB I/O Board */ | 380 | /* Interbiometrics USB I/O Board */ |
| 124 | /* Developed for Interbiometrics by Rudolf Gugler */ | 381 | /* Developed for Interbiometrics by Rudolf Gugler */ |
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c index 6cecd2c12b1d..43cfde83a93b 100644 --- a/drivers/usb/serial/option.c +++ b/drivers/usb/serial/option.c | |||
| @@ -236,25 +236,25 @@ static struct usb_device_id option_ids[] = { | |||
| 236 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) }, | 236 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) }, |
| 237 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, | 237 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, |
| 238 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, | 238 | { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, |
| 239 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, | 239 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600, 0xff, 0xff, 0xff) }, |
| 240 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, | 240 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, |
| 241 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, | 241 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, |
| 242 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401) }, | 242 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401, 0xff, 0xff, 0xff) }, |
| 243 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403) }, | 243 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403, 0xff, 0xff, 0xff) }, |
| 244 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405) }, | 244 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405, 0xff, 0xff, 0xff) }, |
| 245 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406) }, | 245 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406, 0xff, 0xff, 0xff) }, |
| 246 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408) }, | 246 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408, 0xff, 0xff, 0xff) }, |
| 247 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409) }, | 247 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409, 0xff, 0xff, 0xff) }, |
| 248 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410) }, | 248 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410, 0xff, 0xff, 0xff) }, |
| 249 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411) }, | 249 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411, 0xff, 0xff, 0xff) }, |
| 250 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412) }, | 250 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412, 0xff, 0xff, 0xff) }, |
| 251 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413) }, | 251 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413, 0xff, 0xff, 0xff) }, |
| 252 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414) }, | 252 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414, 0xff, 0xff, 0xff) }, |
| 253 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415) }, | 253 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415, 0xff, 0xff, 0xff) }, |
| 254 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416) }, | 254 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416, 0xff, 0xff, 0xff) }, |
| 255 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417) }, | 255 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417, 0xff, 0xff, 0xff) }, |
| 256 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418) }, | 256 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418, 0xff, 0xff, 0xff) }, |
| 257 | { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419) }, | 257 | { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419, 0xff, 0xff, 0xff) }, |
| 258 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, | 258 | { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, |
| 259 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ | 259 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ |
| 260 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ | 260 | { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ |
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index 234c5eea95a2..103195abd417 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c | |||
| @@ -56,6 +56,7 @@ static struct usb_device_id id_table [] = { | |||
| 56 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, | 56 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_RSAQ3) }, |
| 57 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, | 57 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_PHAROS) }, |
| 58 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, | 58 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_ALDIGA) }, |
| 59 | { USB_DEVICE(PL2303_VENDOR_ID, PL2303_PRODUCT_ID_MMX) }, | ||
| 59 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, | 60 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID) }, |
| 60 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, | 61 | { USB_DEVICE(IODATA_VENDOR_ID, IODATA_PRODUCT_ID_RSAQ5) }, |
| 61 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, | 62 | { USB_DEVICE(ATEN_VENDOR_ID, ATEN_PRODUCT_ID) }, |
diff --git a/drivers/usb/serial/pl2303.h b/drivers/usb/serial/pl2303.h index 3bdefe020501..cff160abb130 100644 --- a/drivers/usb/serial/pl2303.h +++ b/drivers/usb/serial/pl2303.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #define PL2303_PRODUCT_ID_PHAROS 0xaaa0 | 14 | #define PL2303_PRODUCT_ID_PHAROS 0xaaa0 |
| 15 | #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 | 15 | #define PL2303_PRODUCT_ID_RSAQ3 0xaaa2 |
| 16 | #define PL2303_PRODUCT_ID_ALDIGA 0x0611 | 16 | #define PL2303_PRODUCT_ID_ALDIGA 0x0611 |
| 17 | #define PL2303_PRODUCT_ID_MMX 0x0612 | ||
| 17 | 18 | ||
| 18 | #define ATEN_VENDOR_ID 0x0557 | 19 | #define ATEN_VENDOR_ID 0x0557 |
| 19 | #define ATEN_VENDOR_ID2 0x0547 | 20 | #define ATEN_VENDOR_ID2 0x0547 |
diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h index 1b09578cbb10..45fe3663fa7f 100644 --- a/drivers/usb/storage/unusual_devs.h +++ b/drivers/usb/storage/unusual_devs.h | |||
| @@ -405,7 +405,7 @@ UNUSUAL_DEV( 0x04a5, 0x3010, 0x0100, 0x0100, | |||
| 405 | UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, | 405 | UNUSUAL_DEV( 0x04b4, 0x6830, 0x0000, 0x9999, |
| 406 | "Cypress", | 406 | "Cypress", |
| 407 | "Cypress AT2LP", | 407 | "Cypress AT2LP", |
| 408 | US_SC_CYP_ATACB, US_PR_BULK, NULL, | 408 | US_SC_CYP_ATACB, US_PR_DEVICE, NULL, |
| 409 | 0), | 409 | 0), |
| 410 | #endif | 410 | #endif |
| 411 | 411 | ||
| @@ -1522,7 +1522,7 @@ UNUSUAL_DEV( 0x0fce, 0xe031, 0x0000, 0x0000, | |||
| 1522 | "Sony Ericsson", | 1522 | "Sony Ericsson", |
| 1523 | "M600i", | 1523 | "M600i", |
| 1524 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1524 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1525 | US_FL_FIX_CAPACITY ), | 1525 | US_FL_IGNORE_RESIDUE | US_FL_FIX_CAPACITY ), |
| 1526 | 1526 | ||
| 1527 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> | 1527 | /* Reported by Kevin Cernekee <kpc-usbdev@gelato.uiuc.edu> |
| 1528 | * Tested on hardware version 1.10. | 1528 | * Tested on hardware version 1.10. |
| @@ -1716,10 +1716,12 @@ UNUSUAL_DEV( 0x22b8, 0x3010, 0x0001, 0x0001, | |||
| 1716 | /* | 1716 | /* |
| 1717 | * Patch by Pete Zaitcev <zaitcev@redhat.com> | 1717 | * Patch by Pete Zaitcev <zaitcev@redhat.com> |
| 1718 | * Report by Mark Patton. Red Hat bz#208928. | 1718 | * Report by Mark Patton. Red Hat bz#208928. |
| 1719 | * Added support for rev 0x0002 (Motorola ROKR W5) | ||
| 1720 | * by Javier Smaldone <javier@smaldone.com.ar> | ||
| 1719 | */ | 1721 | */ |
| 1720 | UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0001, | 1722 | UNUSUAL_DEV( 0x22b8, 0x4810, 0x0001, 0x0002, |
| 1721 | "Motorola", | 1723 | "Motorola", |
| 1722 | "RAZR V3i", | 1724 | "RAZR V3i/ROKR W5", |
| 1723 | US_SC_DEVICE, US_PR_DEVICE, NULL, | 1725 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
| 1724 | US_FL_FIX_CAPACITY), | 1726 | US_FL_FIX_CAPACITY), |
| 1725 | 1727 | ||
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 5fa8b76673cb..97aff8db10bf 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
| @@ -2275,9 +2275,7 @@ static int fbcon_switch(struct vc_data *vc) | |||
| 2275 | * in fb_set_var() | 2275 | * in fb_set_var() |
| 2276 | */ | 2276 | */ |
| 2277 | info->var.activate = var.activate; | 2277 | info->var.activate = var.activate; |
| 2278 | var.yoffset = info->var.yoffset; | 2278 | var.vmode |= info->var.vmode & ~FB_VMODE_MASK; |
| 2279 | var.xoffset = info->var.xoffset; | ||
| 2280 | var.vmode = info->var.vmode; | ||
| 2281 | fb_set_var(info, &var); | 2279 | fb_set_var(info, &var); |
| 2282 | ops->var = info->var; | 2280 | ops->var = info->var; |
| 2283 | 2281 | ||
diff --git a/drivers/video/modedb.c b/drivers/video/modedb.c index 473562191586..d3c3af53a290 100644 --- a/drivers/video/modedb.c +++ b/drivers/video/modedb.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #endif | 28 | #endif |
| 29 | 29 | ||
| 30 | const char *fb_mode_option; | 30 | const char *fb_mode_option; |
| 31 | EXPORT_SYMBOL_GPL(fb_mode_option); | ||
| 31 | 32 | ||
| 32 | /* | 33 | /* |
| 33 | * Standard video mode definitions (taken from XFree86) | 34 | * Standard video mode definitions (taken from XFree86) |
| @@ -590,6 +591,7 @@ done: | |||
| 590 | "", (margins) ? " with margins" : "", (interlace) ? | 591 | "", (margins) ? " with margins" : "", (interlace) ? |
| 591 | " interlaced" : ""); | 592 | " interlaced" : ""); |
| 592 | 593 | ||
| 594 | memset(&cvt_mode, 0, sizeof(cvt_mode)); | ||
| 593 | cvt_mode.xres = xres; | 595 | cvt_mode.xres = xres; |
| 594 | cvt_mode.yres = yres; | 596 | cvt_mode.yres = yres; |
| 595 | cvt_mode.refresh = (refresh) ? refresh : 60; | 597 | cvt_mode.refresh = (refresh) ? refresh : 60; |
diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index 13866789b356..0f3c2bb7bf35 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c | |||
| @@ -2,6 +2,9 @@ | |||
| 2 | #include <linux/spinlock.h> | 2 | #include <linux/spinlock.h> |
| 3 | #include <linux/virtio_config.h> | 3 | #include <linux/virtio_config.h> |
| 4 | 4 | ||
| 5 | /* Unique numbering for virtio devices. */ | ||
| 6 | static unsigned int dev_index; | ||
| 7 | |||
| 5 | static ssize_t device_show(struct device *_d, | 8 | static ssize_t device_show(struct device *_d, |
| 6 | struct device_attribute *attr, char *buf) | 9 | struct device_attribute *attr, char *buf) |
| 7 | { | 10 | { |
| @@ -166,7 +169,10 @@ int register_virtio_device(struct virtio_device *dev) | |||
| 166 | int err; | 169 | int err; |
| 167 | 170 | ||
| 168 | dev->dev.bus = &virtio_bus; | 171 | dev->dev.bus = &virtio_bus; |
| 169 | sprintf(dev->dev.bus_id, "%u", dev->index); | 172 | |
| 173 | /* Assign a unique device index and hence name. */ | ||
| 174 | dev->index = dev_index++; | ||
| 175 | sprintf(dev->dev.bus_id, "virtio%u", dev->index); | ||
| 170 | 176 | ||
| 171 | /* We always start by resetting the device, in case a previous | 177 | /* We always start by resetting the device, in case a previous |
| 172 | * driver messed it up. This also tests that code path a little. */ | 178 | * driver messed it up. This also tests that code path a little. */ |
diff --git a/drivers/virtio/virtio_pci.c b/drivers/virtio/virtio_pci.c index 27e9fc9117cd..eae7236310e4 100644 --- a/drivers/virtio/virtio_pci.c +++ b/drivers/virtio/virtio_pci.c | |||
| @@ -78,9 +78,6 @@ static struct device virtio_pci_root = { | |||
| 78 | .bus_id = "virtio-pci", | 78 | .bus_id = "virtio-pci", |
| 79 | }; | 79 | }; |
| 80 | 80 | ||
| 81 | /* Unique numbering for devices under the kvm root */ | ||
| 82 | static unsigned int dev_index; | ||
| 83 | |||
| 84 | /* Convert a generic virtio device to our structure */ | 81 | /* Convert a generic virtio device to our structure */ |
| 85 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) | 82 | static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev) |
| 86 | { | 83 | { |
| @@ -325,10 +322,6 @@ static int __devinit virtio_pci_probe(struct pci_dev *pci_dev, | |||
| 325 | if (vp_dev == NULL) | 322 | if (vp_dev == NULL) |
| 326 | return -ENOMEM; | 323 | return -ENOMEM; |
| 327 | 324 | ||
| 328 | snprintf(vp_dev->vdev.dev.bus_id, BUS_ID_SIZE, "virtio%d", dev_index); | ||
| 329 | vp_dev->vdev.index = dev_index; | ||
| 330 | dev_index++; | ||
| 331 | |||
| 332 | vp_dev->vdev.dev.parent = &virtio_pci_root; | 325 | vp_dev->vdev.dev.parent = &virtio_pci_root; |
| 333 | vp_dev->vdev.config = &virtio_pci_config_ops; | 326 | vp_dev->vdev.config = &virtio_pci_config_ops; |
| 334 | vp_dev->pci_dev = pci_dev; | 327 | vp_dev->pci_dev = pci_dev; |
diff --git a/drivers/virtio/virtio_ring.c b/drivers/virtio/virtio_ring.c index 937a49d6772c..72bf8bc09014 100644 --- a/drivers/virtio/virtio_ring.c +++ b/drivers/virtio/virtio_ring.c | |||
| @@ -227,7 +227,6 @@ static bool vring_enable_cb(struct virtqueue *_vq) | |||
| 227 | struct vring_virtqueue *vq = to_vvq(_vq); | 227 | struct vring_virtqueue *vq = to_vvq(_vq); |
| 228 | 228 | ||
| 229 | START_USE(vq); | 229 | START_USE(vq); |
| 230 | BUG_ON(!(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)); | ||
| 231 | 230 | ||
| 232 | /* We optimistically turn back on interrupts, then check if there was | 231 | /* We optimistically turn back on interrupts, then check if there was |
| 233 | * more to do. */ | 232 | * more to do. */ |
| @@ -254,13 +253,6 @@ irqreturn_t vring_interrupt(int irq, void *_vq) | |||
| 254 | if (unlikely(vq->broken)) | 253 | if (unlikely(vq->broken)) |
| 255 | return IRQ_HANDLED; | 254 | return IRQ_HANDLED; |
| 256 | 255 | ||
| 257 | /* Other side may have missed us turning off the interrupt, | ||
| 258 | * but we should preserve disable semantic for virtio users. */ | ||
| 259 | if (unlikely(vq->vring.avail->flags & VRING_AVAIL_F_NO_INTERRUPT)) { | ||
| 260 | pr_debug("virtqueue interrupt after disable for %p\n", vq); | ||
| 261 | return IRQ_HANDLED; | ||
| 262 | } | ||
| 263 | |||
| 264 | pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); | 256 | pr_debug("virtqueue callback for %p (%p)\n", vq, vq->vq.callback); |
| 265 | if (vq->vq.callback) | 257 | if (vq->vq.callback) |
| 266 | vq->vq.callback(&vq->vq); | 258 | vq->vq.callback(&vq->vq); |
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 254d115cafab..ccb78f66c2b6 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
| @@ -295,6 +295,19 @@ config ALIM7101_WDT | |||
| 295 | 295 | ||
| 296 | Most people will say N. | 296 | Most people will say N. |
| 297 | 297 | ||
| 298 | config GEODE_WDT | ||
| 299 | tristate "AMD Geode CS5535/CS5536 Watchdog" | ||
| 300 | depends on MGEODE_LX | ||
| 301 | help | ||
| 302 | This driver enables a watchdog capability built into the | ||
| 303 | CS5535/CS5536 companion chips for the AMD Geode GX and LX | ||
| 304 | processors. This watchdog watches your kernel to make sure | ||
| 305 | it doesn't freeze, and if it does, it reboots your computer after | ||
| 306 | a certain amount of time. | ||
| 307 | |||
| 308 | You can compile this driver directly into the kernel, or use | ||
| 309 | it as a module. The module will be called geodewdt. | ||
| 310 | |||
| 298 | config SC520_WDT | 311 | config SC520_WDT |
| 299 | tristate "AMD Elan SC520 processor Watchdog" | 312 | tristate "AMD Elan SC520 processor Watchdog" |
| 300 | depends on X86 | 313 | depends on X86 |
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile index f3fb170fe5c6..25b352b664d9 100644 --- a/drivers/watchdog/Makefile +++ b/drivers/watchdog/Makefile | |||
| @@ -59,6 +59,7 @@ obj-$(CONFIG_ACQUIRE_WDT) += acquirewdt.o | |||
| 59 | obj-$(CONFIG_ADVANTECH_WDT) += advantechwdt.o | 59 | obj-$(CONFIG_ADVANTECH_WDT) += advantechwdt.o |
| 60 | obj-$(CONFIG_ALIM1535_WDT) += alim1535_wdt.o | 60 | obj-$(CONFIG_ALIM1535_WDT) += alim1535_wdt.o |
| 61 | obj-$(CONFIG_ALIM7101_WDT) += alim7101_wdt.o | 61 | obj-$(CONFIG_ALIM7101_WDT) += alim7101_wdt.o |
| 62 | obj-$(CONFIG_GEODE_WDT) += geodewdt.o | ||
| 62 | obj-$(CONFIG_SC520_WDT) += sc520_wdt.o | 63 | obj-$(CONFIG_SC520_WDT) += sc520_wdt.o |
| 63 | obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o | 64 | obj-$(CONFIG_EUROTECH_WDT) += eurotechwdt.o |
| 64 | obj-$(CONFIG_IB700_WDT) += ib700wdt.o | 65 | obj-$(CONFIG_IB700_WDT) += ib700wdt.o |
diff --git a/drivers/watchdog/bfin_wdt.c b/drivers/watchdog/bfin_wdt.c index 1237113dc14a..03b3e3d91e7c 100644 --- a/drivers/watchdog/bfin_wdt.c +++ b/drivers/watchdog/bfin_wdt.c | |||
| @@ -29,7 +29,8 @@ | |||
| 29 | 29 | ||
| 30 | #define stamp(fmt, args...) pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args) | 30 | #define stamp(fmt, args...) pr_debug("%s:%i: " fmt "\n", __func__, __LINE__, ## args) |
| 31 | #define stampit() stamp("here i am") | 31 | #define stampit() stamp("here i am") |
| 32 | #define pr_init(fmt, args...) ({ static const __initdata char __fmt[] = fmt; printk(__fmt, ## args); }) | 32 | #define pr_devinit(fmt, args...) ({ static const __devinitconst char __fmt[] = fmt; printk(__fmt, ## args); }) |
| 33 | #define pr_init(fmt, args...) ({ static const __initconst char __fmt[] = fmt; printk(__fmt, ## args); }) | ||
| 33 | 34 | ||
| 34 | #define WATCHDOG_NAME "bfin-wdt" | 35 | #define WATCHDOG_NAME "bfin-wdt" |
| 35 | #define PFX WATCHDOG_NAME ": " | 36 | #define PFX WATCHDOG_NAME ": " |
| @@ -377,20 +378,6 @@ static int bfin_wdt_resume(struct platform_device *pdev) | |||
| 377 | # define bfin_wdt_resume NULL | 378 | # define bfin_wdt_resume NULL |
| 378 | #endif | 379 | #endif |
| 379 | 380 | ||
| 380 | static struct platform_device bfin_wdt_device = { | ||
| 381 | .name = WATCHDOG_NAME, | ||
| 382 | .id = -1, | ||
| 383 | }; | ||
| 384 | |||
| 385 | static struct platform_driver bfin_wdt_driver = { | ||
| 386 | .driver = { | ||
| 387 | .name = WATCHDOG_NAME, | ||
| 388 | .owner = THIS_MODULE, | ||
| 389 | }, | ||
| 390 | .suspend = bfin_wdt_suspend, | ||
| 391 | .resume = bfin_wdt_resume, | ||
| 392 | }; | ||
| 393 | |||
| 394 | static const struct file_operations bfin_wdt_fops = { | 381 | static const struct file_operations bfin_wdt_fops = { |
| 395 | .owner = THIS_MODULE, | 382 | .owner = THIS_MODULE, |
| 396 | .llseek = no_llseek, | 383 | .llseek = no_llseek, |
| @@ -418,11 +405,67 @@ static struct notifier_block bfin_wdt_notifier = { | |||
| 418 | }; | 405 | }; |
| 419 | 406 | ||
| 420 | /** | 407 | /** |
| 421 | * bfin_wdt_init - Initialize module | 408 | * bfin_wdt_probe - Initialize module |
| 422 | * | 409 | * |
| 423 | * Registers the device and notifier handler. Actual device | 410 | * Registers the misc device and notifier handler. Actual device |
| 424 | * initialization is handled by bfin_wdt_open(). | 411 | * initialization is handled by bfin_wdt_open(). |
| 425 | */ | 412 | */ |
| 413 | static int __devinit bfin_wdt_probe(struct platform_device *pdev) | ||
| 414 | { | ||
| 415 | int ret; | ||
| 416 | |||
| 417 | ret = register_reboot_notifier(&bfin_wdt_notifier); | ||
| 418 | if (ret) { | ||
| 419 | pr_devinit(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); | ||
| 420 | return ret; | ||
| 421 | } | ||
| 422 | |||
| 423 | ret = misc_register(&bfin_wdt_miscdev); | ||
| 424 | if (ret) { | ||
| 425 | pr_devinit(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | ||
| 426 | WATCHDOG_MINOR, ret); | ||
| 427 | unregister_reboot_notifier(&bfin_wdt_notifier); | ||
| 428 | return ret; | ||
| 429 | } | ||
| 430 | |||
| 431 | pr_devinit(KERN_INFO PFX "initialized: timeout=%d sec (nowayout=%d)\n", | ||
| 432 | timeout, nowayout); | ||
| 433 | |||
| 434 | return 0; | ||
| 435 | } | ||
| 436 | |||
| 437 | /** | ||
| 438 | * bfin_wdt_remove - Initialize module | ||
| 439 | * | ||
| 440 | * Unregisters the misc device and notifier handler. Actual device | ||
| 441 | * deinitialization is handled by bfin_wdt_close(). | ||
| 442 | */ | ||
| 443 | static int __devexit bfin_wdt_remove(struct platform_device *pdev) | ||
| 444 | { | ||
| 445 | misc_deregister(&bfin_wdt_miscdev); | ||
| 446 | unregister_reboot_notifier(&bfin_wdt_notifier); | ||
| 447 | return 0; | ||
| 448 | } | ||
| 449 | |||
| 450 | static struct platform_device *bfin_wdt_device; | ||
| 451 | |||
| 452 | static struct platform_driver bfin_wdt_driver = { | ||
| 453 | .probe = bfin_wdt_probe, | ||
| 454 | .remove = __devexit_p(bfin_wdt_remove), | ||
| 455 | .suspend = bfin_wdt_suspend, | ||
| 456 | .resume = bfin_wdt_resume, | ||
| 457 | .driver = { | ||
| 458 | .name = WATCHDOG_NAME, | ||
| 459 | .owner = THIS_MODULE, | ||
| 460 | }, | ||
| 461 | }; | ||
| 462 | |||
| 463 | /** | ||
| 464 | * bfin_wdt_init - Initialize module | ||
| 465 | * | ||
| 466 | * Checks the module params and registers the platform device & driver. | ||
| 467 | * Real work is in the platform probe function. | ||
| 468 | */ | ||
| 426 | static int __init bfin_wdt_init(void) | 469 | static int __init bfin_wdt_init(void) |
| 427 | { | 470 | { |
| 428 | int ret; | 471 | int ret; |
| @@ -436,44 +479,32 @@ static int __init bfin_wdt_init(void) | |||
| 436 | /* Since this is an on-chip device and needs no board-specific | 479 | /* Since this is an on-chip device and needs no board-specific |
| 437 | * resources, we'll handle all the platform device stuff here. | 480 | * resources, we'll handle all the platform device stuff here. |
| 438 | */ | 481 | */ |
| 439 | ret = platform_device_register(&bfin_wdt_device); | 482 | ret = platform_driver_register(&bfin_wdt_driver); |
| 440 | if (ret) | ||
| 441 | return ret; | ||
| 442 | |||
| 443 | ret = platform_driver_probe(&bfin_wdt_driver, NULL); | ||
| 444 | if (ret) | ||
| 445 | return ret; | ||
| 446 | |||
| 447 | ret = register_reboot_notifier(&bfin_wdt_notifier); | ||
| 448 | if (ret) { | 483 | if (ret) { |
| 449 | pr_init(KERN_ERR PFX "cannot register reboot notifier (err=%d)\n", ret); | 484 | pr_init(KERN_ERR PFX "unable to register driver\n"); |
| 450 | return ret; | 485 | return ret; |
| 451 | } | 486 | } |
| 452 | 487 | ||
| 453 | ret = misc_register(&bfin_wdt_miscdev); | 488 | bfin_wdt_device = platform_device_register_simple(WATCHDOG_NAME, -1, NULL, 0); |
| 454 | if (ret) { | 489 | if (IS_ERR(bfin_wdt_device)) { |
| 455 | pr_init(KERN_ERR PFX "cannot register miscdev on minor=%d (err=%d)\n", | 490 | pr_init(KERN_ERR PFX "unable to register device\n"); |
| 456 | WATCHDOG_MINOR, ret); | 491 | platform_driver_unregister(&bfin_wdt_driver); |
| 457 | unregister_reboot_notifier(&bfin_wdt_notifier); | 492 | return PTR_ERR(bfin_wdt_device); |
| 458 | return ret; | ||
| 459 | } | 493 | } |
| 460 | 494 | ||
| 461 | pr_init(KERN_INFO PFX "initialized: timeout=%d sec (nowayout=%d)\n", | ||
| 462 | timeout, nowayout); | ||
| 463 | |||
| 464 | return 0; | 495 | return 0; |
| 465 | } | 496 | } |
| 466 | 497 | ||
| 467 | /** | 498 | /** |
| 468 | * bfin_wdt_exit - Deinitialize module | 499 | * bfin_wdt_exit - Deinitialize module |
| 469 | * | 500 | * |
| 470 | * Unregisters the device and notifier handler. Actual device | 501 | * Back out the platform device & driver steps. Real work is in the |
| 471 | * deinitialization is handled by bfin_wdt_close(). | 502 | * platform remove function. |
| 472 | */ | 503 | */ |
| 473 | static void __exit bfin_wdt_exit(void) | 504 | static void __exit bfin_wdt_exit(void) |
| 474 | { | 505 | { |
| 475 | misc_deregister(&bfin_wdt_miscdev); | 506 | platform_device_unregister(bfin_wdt_device); |
| 476 | unregister_reboot_notifier(&bfin_wdt_notifier); | 507 | platform_driver_unregister(&bfin_wdt_driver); |
| 477 | } | 508 | } |
| 478 | 509 | ||
| 479 | module_init(bfin_wdt_init); | 510 | module_init(bfin_wdt_init); |
diff --git a/drivers/watchdog/booke_wdt.c b/drivers/watchdog/booke_wdt.c index d362f5bf658a..c1ba0db48501 100644 --- a/drivers/watchdog/booke_wdt.c +++ b/drivers/watchdog/booke_wdt.c | |||
| @@ -1,12 +1,10 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * drivers/char/watchdog/booke_wdt.c | ||
| 3 | * | ||
| 4 | * Watchdog timer for PowerPC Book-E systems | 2 | * Watchdog timer for PowerPC Book-E systems |
| 5 | * | 3 | * |
| 6 | * Author: Matthew McClintock | 4 | * Author: Matthew McClintock |
| 7 | * Maintainer: Kumar Gala <galak@kernel.crashing.org> | 5 | * Maintainer: Kumar Gala <galak@kernel.crashing.org> |
| 8 | * | 6 | * |
| 9 | * Copyright 2005 Freescale Semiconductor Inc. | 7 | * Copyright 2005, 2008 Freescale Semiconductor Inc. |
| 10 | * | 8 | * |
| 11 | * This program is free software; you can redistribute it and/or modify it | 9 | * This program is free software; you can redistribute it and/or modify it |
| 12 | * under the terms of the GNU General Public License as published by the | 10 | * under the terms of the GNU General Public License as published by the |
| @@ -16,6 +14,7 @@ | |||
| 16 | 14 | ||
| 17 | #include <linux/module.h> | 15 | #include <linux/module.h> |
| 18 | #include <linux/fs.h> | 16 | #include <linux/fs.h> |
| 17 | #include <linux/smp.h> | ||
| 19 | #include <linux/miscdevice.h> | 18 | #include <linux/miscdevice.h> |
| 20 | #include <linux/notifier.h> | 19 | #include <linux/notifier.h> |
| 21 | #include <linux/watchdog.h> | 20 | #include <linux/watchdog.h> |
| @@ -38,7 +37,7 @@ | |||
| 38 | #define WDT_PERIOD_DEFAULT 3 /* Refer to the PPC40x and PPC4xx manuals */ | 37 | #define WDT_PERIOD_DEFAULT 3 /* Refer to the PPC40x and PPC4xx manuals */ |
| 39 | #endif /* for timing information */ | 38 | #endif /* for timing information */ |
| 40 | 39 | ||
| 41 | u32 booke_wdt_enabled = 0; | 40 | u32 booke_wdt_enabled; |
| 42 | u32 booke_wdt_period = WDT_PERIOD_DEFAULT; | 41 | u32 booke_wdt_period = WDT_PERIOD_DEFAULT; |
| 43 | 42 | ||
| 44 | #ifdef CONFIG_FSL_BOOKE | 43 | #ifdef CONFIG_FSL_BOOKE |
| @@ -47,33 +46,31 @@ u32 booke_wdt_period = WDT_PERIOD_DEFAULT; | |||
| 47 | #define WDTP(x) (TCR_WP(x)) | 46 | #define WDTP(x) (TCR_WP(x)) |
| 48 | #endif | 47 | #endif |
| 49 | 48 | ||
| 50 | /* | 49 | static DEFINE_SPINLOCK(booke_wdt_lock); |
| 51 | * booke_wdt_ping: | 50 | |
| 52 | */ | 51 | static void __booke_wdt_ping(void *data) |
| 53 | static __inline__ void booke_wdt_ping(void) | ||
| 54 | { | 52 | { |
| 55 | mtspr(SPRN_TSR, TSR_ENW|TSR_WIS); | 53 | mtspr(SPRN_TSR, TSR_ENW|TSR_WIS); |
| 56 | } | 54 | } |
| 57 | 55 | ||
| 58 | /* | 56 | static void booke_wdt_ping(void) |
| 59 | * booke_wdt_enable: | 57 | { |
| 60 | */ | 58 | on_each_cpu(__booke_wdt_ping, NULL, 0, 0); |
| 61 | static __inline__ void booke_wdt_enable(void) | 59 | } |
| 60 | |||
| 61 | static void __booke_wdt_enable(void *data) | ||
| 62 | { | 62 | { |
| 63 | u32 val; | 63 | u32 val; |
| 64 | 64 | ||
| 65 | /* clear status before enabling watchdog */ | 65 | /* clear status before enabling watchdog */ |
| 66 | booke_wdt_ping(); | 66 | __booke_wdt_ping(NULL); |
| 67 | val = mfspr(SPRN_TCR); | 67 | val = mfspr(SPRN_TCR); |
| 68 | val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period)); | 68 | val |= (TCR_WIE|TCR_WRC(WRC_CHIP)|WDTP(booke_wdt_period)); |
| 69 | 69 | ||
| 70 | mtspr(SPRN_TCR, val); | 70 | mtspr(SPRN_TCR, val); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | /* | 73 | static ssize_t booke_wdt_write(struct file *file, const char __user *buf, |
| 74 | * booke_wdt_write: | ||
| 75 | */ | ||
| 76 | static ssize_t booke_wdt_write (struct file *file, const char __user *buf, | ||
| 77 | size_t count, loff_t *ppos) | 74 | size_t count, loff_t *ppos) |
| 78 | { | 75 | { |
| 79 | booke_wdt_ping(); | 76 | booke_wdt_ping(); |
| @@ -81,15 +78,11 @@ static ssize_t booke_wdt_write (struct file *file, const char __user *buf, | |||
| 81 | } | 78 | } |
| 82 | 79 | ||
| 83 | static struct watchdog_info ident = { | 80 | static struct watchdog_info ident = { |
| 84 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, | 81 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING, |
| 85 | .firmware_version = 0, | 82 | .identity = "PowerPC Book-E Watchdog", |
| 86 | .identity = "PowerPC Book-E Watchdog", | ||
| 87 | }; | 83 | }; |
| 88 | 84 | ||
| 89 | /* | 85 | static int booke_wdt_ioctl(struct inode *inode, struct file *file, |
| 90 | * booke_wdt_ioctl: | ||
| 91 | */ | ||
| 92 | static int booke_wdt_ioctl (struct inode *inode, struct file *file, | ||
| 93 | unsigned int cmd, unsigned long arg) | 86 | unsigned int cmd, unsigned long arg) |
| 94 | { | 87 | { |
| 95 | u32 tmp = 0; | 88 | u32 tmp = 0; |
| @@ -97,7 +90,7 @@ static int booke_wdt_ioctl (struct inode *inode, struct file *file, | |||
| 97 | 90 | ||
| 98 | switch (cmd) { | 91 | switch (cmd) { |
| 99 | case WDIOC_GETSUPPORT: | 92 | case WDIOC_GETSUPPORT: |
| 100 | if (copy_to_user ((struct watchdog_info __user *) arg, &ident, | 93 | if (copy_to_user((struct watchdog_info __user *)arg, &ident, |
| 101 | sizeof(struct watchdog_info))) | 94 | sizeof(struct watchdog_info))) |
| 102 | return -EFAULT; | 95 | return -EFAULT; |
| 103 | case WDIOC_GETSTATUS: | 96 | case WDIOC_GETSTATUS: |
| @@ -132,33 +125,33 @@ static int booke_wdt_ioctl (struct inode *inode, struct file *file, | |||
| 132 | 125 | ||
| 133 | return 0; | 126 | return 0; |
| 134 | } | 127 | } |
| 135 | /* | 128 | |
| 136 | * booke_wdt_open: | 129 | static int booke_wdt_open(struct inode *inode, struct file *file) |
| 137 | */ | ||
| 138 | static int booke_wdt_open (struct inode *inode, struct file *file) | ||
| 139 | { | 130 | { |
| 131 | spin_lock(&booke_wdt_lock); | ||
| 140 | if (booke_wdt_enabled == 0) { | 132 | if (booke_wdt_enabled == 0) { |
| 141 | booke_wdt_enabled = 1; | 133 | booke_wdt_enabled = 1; |
| 142 | booke_wdt_enable(); | 134 | on_each_cpu(__booke_wdt_enable, NULL, 0, 0); |
| 143 | printk (KERN_INFO "PowerPC Book-E Watchdog Timer Enabled (wdt_period=%d)\n", | 135 | printk(KERN_INFO "PowerPC Book-E Watchdog Timer Enabled " |
| 144 | booke_wdt_period); | 136 | "(wdt_period=%d)\n", booke_wdt_period); |
| 145 | } | 137 | } |
| 138 | spin_unlock(&booke_wdt_lock); | ||
| 146 | 139 | ||
| 147 | return nonseekable_open(inode, file); | 140 | return nonseekable_open(inode, file); |
| 148 | } | 141 | } |
| 149 | 142 | ||
| 150 | static const struct file_operations booke_wdt_fops = { | 143 | static const struct file_operations booke_wdt_fops = { |
| 151 | .owner = THIS_MODULE, | 144 | .owner = THIS_MODULE, |
| 152 | .llseek = no_llseek, | 145 | .llseek = no_llseek, |
| 153 | .write = booke_wdt_write, | 146 | .write = booke_wdt_write, |
| 154 | .ioctl = booke_wdt_ioctl, | 147 | .ioctl = booke_wdt_ioctl, |
| 155 | .open = booke_wdt_open, | 148 | .open = booke_wdt_open, |
| 156 | }; | 149 | }; |
| 157 | 150 | ||
| 158 | static struct miscdevice booke_wdt_miscdev = { | 151 | static struct miscdevice booke_wdt_miscdev = { |
| 159 | .minor = WATCHDOG_MINOR, | 152 | .minor = WATCHDOG_MINOR, |
| 160 | .name = "watchdog", | 153 | .name = "watchdog", |
| 161 | .fops = &booke_wdt_fops, | 154 | .fops = &booke_wdt_fops, |
| 162 | }; | 155 | }; |
| 163 | 156 | ||
| 164 | static void __exit booke_wdt_exit(void) | 157 | static void __exit booke_wdt_exit(void) |
| @@ -166,28 +159,27 @@ static void __exit booke_wdt_exit(void) | |||
| 166 | misc_deregister(&booke_wdt_miscdev); | 159 | misc_deregister(&booke_wdt_miscdev); |
| 167 | } | 160 | } |
| 168 | 161 | ||
| 169 | /* | ||
| 170 | * booke_wdt_init: | ||
| 171 | */ | ||
| 172 | static int __init booke_wdt_init(void) | 162 | static int __init booke_wdt_init(void) |
| 173 | { | 163 | { |
| 174 | int ret = 0; | 164 | int ret = 0; |
| 175 | 165 | ||
| 176 | printk (KERN_INFO "PowerPC Book-E Watchdog Timer Loaded\n"); | 166 | printk(KERN_INFO "PowerPC Book-E Watchdog Timer Loaded\n"); |
| 177 | ident.firmware_version = cur_cpu_spec->pvr_value; | 167 | ident.firmware_version = cur_cpu_spec->pvr_value; |
| 178 | 168 | ||
| 179 | ret = misc_register(&booke_wdt_miscdev); | 169 | ret = misc_register(&booke_wdt_miscdev); |
| 180 | if (ret) { | 170 | if (ret) { |
| 181 | printk (KERN_CRIT "Cannot register miscdev on minor=%d (err=%d)\n", | 171 | printk(KERN_CRIT "Cannot register miscdev on minor=%d: %d\n", |
| 182 | WATCHDOG_MINOR, ret); | 172 | WATCHDOG_MINOR, ret); |
| 183 | return ret; | 173 | return ret; |
| 184 | } | 174 | } |
| 185 | 175 | ||
| 176 | spin_lock(&booke_wdt_lock); | ||
| 186 | if (booke_wdt_enabled == 1) { | 177 | if (booke_wdt_enabled == 1) { |
| 187 | printk (KERN_INFO "PowerPC Book-E Watchdog Timer Enabled (wdt_period=%d)\n", | 178 | printk(KERN_INFO "PowerPC Book-E Watchdog Timer Enabled " |
| 188 | booke_wdt_period); | 179 | "(wdt_period=%d)\n", booke_wdt_period); |
| 189 | booke_wdt_enable(); | 180 | on_each_cpu(__booke_wdt_enable, NULL, 0, 0); |
| 190 | } | 181 | } |
| 182 | spin_unlock(&booke_wdt_lock); | ||
| 191 | 183 | ||
| 192 | return ret; | 184 | return ret; |
| 193 | } | 185 | } |
diff --git a/drivers/watchdog/geodewdt.c b/drivers/watchdog/geodewdt.c new file mode 100644 index 000000000000..30d09cbbad94 --- /dev/null +++ b/drivers/watchdog/geodewdt.c | |||
| @@ -0,0 +1,308 @@ | |||
| 1 | /* Watchdog timer for the Geode GX/LX with the CS5535/CS5536 companion chip | ||
| 2 | * | ||
| 3 | * Copyright (C) 2006-2007, Advanced Micro Devices, Inc. | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or | ||
| 6 | * modify it under the terms of the GNU General Public License | ||
| 7 | * as published by the Free Software Foundation; either version | ||
| 8 | * 2 of the License, or (at your option) any later version. | ||
| 9 | */ | ||
| 10 | |||
| 11 | |||
| 12 | #include <linux/module.h> | ||
| 13 | #include <linux/moduleparam.h> | ||
| 14 | #include <linux/types.h> | ||
| 15 | #include <linux/miscdevice.h> | ||
| 16 | #include <linux/watchdog.h> | ||
| 17 | #include <linux/fs.h> | ||
| 18 | #include <linux/platform_device.h> | ||
| 19 | #include <linux/reboot.h> | ||
| 20 | |||
| 21 | #include <asm/uaccess.h> | ||
| 22 | #include <asm/geode.h> | ||
| 23 | |||
| 24 | #define GEODEWDT_HZ 500 | ||
| 25 | #define GEODEWDT_SCALE 6 | ||
| 26 | #define GEODEWDT_MAX_SECONDS 131 | ||
| 27 | |||
| 28 | #define WDT_FLAGS_OPEN 1 | ||
| 29 | #define WDT_FLAGS_ORPHAN 2 | ||
| 30 | |||
| 31 | #define DRV_NAME "geodewdt" | ||
| 32 | #define WATCHDOG_NAME "Geode GX/LX WDT" | ||
| 33 | #define WATCHDOG_TIMEOUT 60 | ||
| 34 | |||
| 35 | static int timeout = WATCHDOG_TIMEOUT; | ||
| 36 | module_param(timeout, int, 0); | ||
| 37 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=131, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) "."); | ||
| 38 | |||
| 39 | static int nowayout = WATCHDOG_NOWAYOUT; | ||
| 40 | module_param(nowayout, int, 0); | ||
| 41 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | ||
| 42 | |||
| 43 | static struct platform_device *geodewdt_platform_device; | ||
| 44 | static unsigned long wdt_flags; | ||
| 45 | static int wdt_timer; | ||
| 46 | static int safe_close; | ||
| 47 | |||
| 48 | static void geodewdt_ping(void) | ||
| 49 | { | ||
| 50 | /* Stop the counter */ | ||
| 51 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0); | ||
| 52 | |||
| 53 | /* Reset the counter */ | ||
| 54 | geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0); | ||
| 55 | |||
| 56 | /* Enable the counter */ | ||
| 57 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN); | ||
| 58 | } | ||
| 59 | |||
| 60 | static void geodewdt_disable(void) | ||
| 61 | { | ||
| 62 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0); | ||
| 63 | geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0); | ||
| 64 | } | ||
| 65 | |||
| 66 | static int geodewdt_set_heartbeat(int val) | ||
| 67 | { | ||
| 68 | if (val < 1 || val > GEODEWDT_MAX_SECONDS) | ||
| 69 | return -EINVAL; | ||
| 70 | |||
| 71 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, 0); | ||
| 72 | geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, val * GEODEWDT_HZ); | ||
| 73 | geode_mfgpt_write(wdt_timer, MFGPT_REG_COUNTER, 0); | ||
| 74 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, MFGPT_SETUP_CNTEN); | ||
| 75 | |||
| 76 | timeout = val; | ||
| 77 | return 0; | ||
| 78 | } | ||
| 79 | |||
| 80 | static int | ||
| 81 | geodewdt_open(struct inode *inode, struct file *file) | ||
| 82 | { | ||
| 83 | if (test_and_set_bit(WDT_FLAGS_OPEN, &wdt_flags)) | ||
| 84 | return -EBUSY; | ||
| 85 | |||
| 86 | if (!test_and_clear_bit(WDT_FLAGS_ORPHAN, &wdt_flags)) | ||
| 87 | __module_get(THIS_MODULE); | ||
| 88 | |||
| 89 | geodewdt_ping(); | ||
| 90 | return nonseekable_open(inode, file); | ||
| 91 | } | ||
| 92 | |||
| 93 | static int | ||
| 94 | geodewdt_release(struct inode *inode, struct file *file) | ||
| 95 | { | ||
| 96 | if (safe_close) { | ||
| 97 | geodewdt_disable(); | ||
| 98 | module_put(THIS_MODULE); | ||
| 99 | } | ||
| 100 | else { | ||
| 101 | printk(KERN_CRIT "Unexpected close - watchdog is not stopping.\n"); | ||
| 102 | geodewdt_ping(); | ||
| 103 | |||
| 104 | set_bit(WDT_FLAGS_ORPHAN, &wdt_flags); | ||
| 105 | } | ||
| 106 | |||
| 107 | clear_bit(WDT_FLAGS_OPEN, &wdt_flags); | ||
| 108 | safe_close = 0; | ||
| 109 | return 0; | ||
| 110 | } | ||
| 111 | |||
| 112 | static ssize_t | ||
| 113 | geodewdt_write(struct file *file, const char __user *data, size_t len, | ||
| 114 | loff_t *ppos) | ||
| 115 | { | ||
| 116 | if(len) { | ||
| 117 | if (!nowayout) { | ||
| 118 | size_t i; | ||
| 119 | safe_close = 0; | ||
| 120 | |||
| 121 | for (i = 0; i != len; i++) { | ||
| 122 | char c; | ||
| 123 | |||
| 124 | if (get_user(c, data + i)) | ||
| 125 | return -EFAULT; | ||
| 126 | |||
| 127 | if (c == 'V') | ||
| 128 | safe_close = 1; | ||
| 129 | } | ||
| 130 | } | ||
| 131 | |||
| 132 | geodewdt_ping(); | ||
| 133 | } | ||
| 134 | return len; | ||
| 135 | } | ||
| 136 | |||
| 137 | static int | ||
| 138 | geodewdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, | ||
| 139 | unsigned long arg) | ||
| 140 | { | ||
| 141 | void __user *argp = (void __user *)arg; | ||
| 142 | int __user *p = argp; | ||
| 143 | int interval; | ||
| 144 | |||
| 145 | static struct watchdog_info ident = { | ||
| 146 | .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | ||
| 147 | | WDIOF_MAGICCLOSE, | ||
| 148 | .firmware_version = 1, | ||
| 149 | .identity = WATCHDOG_NAME, | ||
| 150 | }; | ||
| 151 | |||
| 152 | switch(cmd) { | ||
| 153 | case WDIOC_GETSUPPORT: | ||
| 154 | return copy_to_user(argp, &ident, | ||
| 155 | sizeof(ident)) ? -EFAULT : 0; | ||
| 156 | break; | ||
| 157 | |||
| 158 | case WDIOC_GETSTATUS: | ||
| 159 | case WDIOC_GETBOOTSTATUS: | ||
| 160 | return put_user(0, p); | ||
| 161 | |||
| 162 | case WDIOC_KEEPALIVE: | ||
| 163 | geodewdt_ping(); | ||
| 164 | return 0; | ||
| 165 | |||
| 166 | case WDIOC_SETTIMEOUT: | ||
| 167 | if (get_user(interval, p)) | ||
| 168 | return -EFAULT; | ||
| 169 | |||
| 170 | if (geodewdt_set_heartbeat(interval)) | ||
| 171 | return -EINVAL; | ||
| 172 | |||
| 173 | /* Fall through */ | ||
| 174 | |||
| 175 | case WDIOC_GETTIMEOUT: | ||
| 176 | return put_user(timeout, p); | ||
| 177 | |||
| 178 | case WDIOC_SETOPTIONS: | ||
| 179 | { | ||
| 180 | int options, ret = -EINVAL; | ||
| 181 | |||
| 182 | if (get_user(options, p)) | ||
| 183 | return -EFAULT; | ||
| 184 | |||
| 185 | if (options & WDIOS_DISABLECARD) { | ||
| 186 | geodewdt_disable(); | ||
| 187 | ret = 0; | ||
| 188 | } | ||
| 189 | |||
| 190 | if (options & WDIOS_ENABLECARD) { | ||
| 191 | geodewdt_ping(); | ||
| 192 | ret = 0; | ||
| 193 | } | ||
| 194 | |||
| 195 | return ret; | ||
| 196 | } | ||
| 197 | default: | ||
| 198 | return -ENOTTY; | ||
| 199 | } | ||
| 200 | |||
| 201 | return 0; | ||
| 202 | } | ||
| 203 | |||
| 204 | static const struct file_operations geodewdt_fops = { | ||
| 205 | .owner = THIS_MODULE, | ||
| 206 | .llseek = no_llseek, | ||
| 207 | .write = geodewdt_write, | ||
| 208 | .ioctl = geodewdt_ioctl, | ||
| 209 | .open = geodewdt_open, | ||
| 210 | .release = geodewdt_release, | ||
| 211 | }; | ||
| 212 | |||
| 213 | static struct miscdevice geodewdt_miscdev = { | ||
| 214 | .minor = WATCHDOG_MINOR, | ||
| 215 | .name = "watchdog", | ||
| 216 | .fops = &geodewdt_fops | ||
| 217 | }; | ||
| 218 | |||
| 219 | static int __devinit | ||
| 220 | geodewdt_probe(struct platform_device *dev) | ||
| 221 | { | ||
| 222 | int ret, timer; | ||
| 223 | |||
| 224 | timer = geode_mfgpt_alloc_timer(MFGPT_TIMER_ANY, MFGPT_DOMAIN_WORKING); | ||
| 225 | |||
| 226 | if (timer == -1) { | ||
| 227 | printk(KERN_ERR "geodewdt: No timers were available\n"); | ||
| 228 | return -ENODEV; | ||
| 229 | } | ||
| 230 | |||
| 231 | wdt_timer = timer; | ||
| 232 | |||
| 233 | /* Set up the timer */ | ||
| 234 | |||
| 235 | geode_mfgpt_write(wdt_timer, MFGPT_REG_SETUP, | ||
| 236 | GEODEWDT_SCALE | (3 << 8)); | ||
| 237 | |||
| 238 | /* Set up comparator 2 to reset when the event fires */ | ||
| 239 | geode_mfgpt_toggle_event(wdt_timer, MFGPT_CMP2, MFGPT_EVENT_RESET, 1); | ||
| 240 | |||
| 241 | /* Set up the initial timeout */ | ||
| 242 | |||
| 243 | geode_mfgpt_write(wdt_timer, MFGPT_REG_CMP2, | ||
| 244 | timeout * GEODEWDT_HZ); | ||
| 245 | |||
| 246 | ret = misc_register(&geodewdt_miscdev); | ||
| 247 | |||
| 248 | return ret; | ||
| 249 | } | ||
| 250 | |||
| 251 | static int __devexit | ||
| 252 | geodewdt_remove(struct platform_device *dev) | ||
| 253 | { | ||
| 254 | misc_deregister(&geodewdt_miscdev); | ||
| 255 | return 0; | ||
| 256 | } | ||
| 257 | |||
| 258 | static void | ||
| 259 | geodewdt_shutdown(struct platform_device *dev) | ||
| 260 | { | ||
| 261 | geodewdt_disable(); | ||
| 262 | } | ||
| 263 | |||
| 264 | static struct platform_driver geodewdt_driver = { | ||
| 265 | .probe = geodewdt_probe, | ||
| 266 | .remove = __devexit_p(geodewdt_remove), | ||
| 267 | .shutdown = geodewdt_shutdown, | ||
| 268 | .driver = { | ||
| 269 | .owner = THIS_MODULE, | ||
| 270 | .name = DRV_NAME, | ||
| 271 | }, | ||
| 272 | }; | ||
| 273 | |||
| 274 | static int __init | ||
| 275 | geodewdt_init(void) | ||
| 276 | { | ||
| 277 | int ret; | ||
| 278 | |||
| 279 | ret = platform_driver_register(&geodewdt_driver); | ||
| 280 | if (ret) | ||
| 281 | return ret; | ||
| 282 | |||
| 283 | geodewdt_platform_device = platform_device_register_simple(DRV_NAME, -1, NULL, 0); | ||
| 284 | if (IS_ERR(geodewdt_platform_device)) { | ||
| 285 | ret = PTR_ERR(geodewdt_platform_device); | ||
| 286 | goto err; | ||
| 287 | } | ||
| 288 | |||
| 289 | return 0; | ||
| 290 | err: | ||
| 291 | platform_driver_unregister(&geodewdt_driver); | ||
| 292 | return ret; | ||
| 293 | } | ||
| 294 | |||
| 295 | static void __exit | ||
| 296 | geodewdt_exit(void) | ||
| 297 | { | ||
| 298 | platform_device_unregister(geodewdt_platform_device); | ||
| 299 | platform_driver_unregister(&geodewdt_driver); | ||
| 300 | } | ||
| 301 | |||
| 302 | module_init(geodewdt_init); | ||
| 303 | module_exit(geodewdt_exit); | ||
| 304 | |||
| 305 | MODULE_AUTHOR("Advanced Micro Devices, Inc"); | ||
| 306 | MODULE_DESCRIPTION("Geode GX/LX Watchdog Driver"); | ||
| 307 | MODULE_LICENSE("GPL"); | ||
| 308 | MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); | ||
diff --git a/drivers/watchdog/hpwdt.c b/drivers/watchdog/hpwdt.c index 6483d1066b95..6a63535fc04d 100644 --- a/drivers/watchdog/hpwdt.c +++ b/drivers/watchdog/hpwdt.c | |||
| @@ -418,23 +418,20 @@ static int hpwdt_pretimeout(struct notifier_block *nb, unsigned long ulReason, | |||
| 418 | static unsigned long rom_pl; | 418 | static unsigned long rom_pl; |
| 419 | static int die_nmi_called; | 419 | static int die_nmi_called; |
| 420 | 420 | ||
| 421 | if (ulReason != DIE_NMI && ulReason != DIE_NMI_IPI) | 421 | if (ulReason == DIE_NMI || ulReason == DIE_NMI_IPI) { |
| 422 | return NOTIFY_OK; | 422 | spin_lock_irqsave(&rom_lock, rom_pl); |
| 423 | 423 | if (!die_nmi_called) | |
| 424 | spin_lock_irqsave(&rom_lock, rom_pl); | 424 | asminline_call(&cmn_regs, cru_rom_addr); |
| 425 | if (!die_nmi_called) | 425 | die_nmi_called = 1; |
| 426 | asminline_call(&cmn_regs, cru_rom_addr); | 426 | spin_unlock_irqrestore(&rom_lock, rom_pl); |
| 427 | die_nmi_called = 1; | 427 | if (cmn_regs.u1.ral != 0) { |
| 428 | spin_unlock_irqrestore(&rom_lock, rom_pl); | 428 | panic("An NMI occurred, please see the Integrated " |
| 429 | if (cmn_regs.u1.ral == 0) { | 429 | "Management Log for details.\n"); |
| 430 | printk(KERN_WARNING "hpwdt: An NMI occurred, " | 430 | } |
| 431 | "but unable to determine source.\n"); | ||
| 432 | } else { | ||
| 433 | panic("An NMI occurred, please see the Integrated " | ||
| 434 | "Management Log for details.\n"); | ||
| 435 | } | 431 | } |
| 436 | 432 | ||
| 437 | return NOTIFY_STOP; | 433 | die_nmi_called = 0; |
| 434 | return NOTIFY_DONE; | ||
| 438 | } | 435 | } |
| 439 | 436 | ||
| 440 | /* | 437 | /* |
diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index a0e6809e369f..95ba985bd341 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c | |||
| @@ -41,9 +41,10 @@ | |||
| 41 | * 82801HH (ICH8DH) : document number 313056-003, 313057-009, | 41 | * 82801HH (ICH8DH) : document number 313056-003, 313057-009, |
| 42 | * 82801HO (ICH8DO) : document number 313056-003, 313057-009, | 42 | * 82801HO (ICH8DO) : document number 313056-003, 313057-009, |
| 43 | * 82801HEM (ICH8M-E) : document number 313056-003, 313057-009, | 43 | * 82801HEM (ICH8M-E) : document number 313056-003, 313057-009, |
| 44 | * 82801IB (ICH9) : document number 316972-001, 316973-001, | 44 | * 82801IB (ICH9) : document number 316972-001, 316973-006, |
| 45 | * 82801IR (ICH9R) : document number 316972-001, 316973-001, | 45 | * 82801IR (ICH9R) : document number 316972-001, 316973-006, |
| 46 | * 82801IH (ICH9DH) : document number 316972-001, 316973-001, | 46 | * 82801IH (ICH9DH) : document number 316972-001, 316973-006, |
| 47 | * 82801IO (ICH9DO) : document number 316972-001, 316973-006, | ||
| 47 | * 6300ESB (6300ESB) : document number 300641-003, 300884-010, | 48 | * 6300ESB (6300ESB) : document number 300641-003, 300884-010, |
| 48 | * 631xESB (631xESB) : document number 313082-001, 313075-005, | 49 | * 631xESB (631xESB) : document number 313082-001, 313075-005, |
| 49 | * 632xESB (632xESB) : document number 313082-001, 313075-005 | 50 | * 632xESB (632xESB) : document number 313082-001, 313075-005 |
| @@ -55,8 +56,8 @@ | |||
| 55 | 56 | ||
| 56 | /* Module and version information */ | 57 | /* Module and version information */ |
| 57 | #define DRV_NAME "iTCO_wdt" | 58 | #define DRV_NAME "iTCO_wdt" |
| 58 | #define DRV_VERSION "1.02" | 59 | #define DRV_VERSION "1.03" |
| 59 | #define DRV_RELDATE "26-Jul-2007" | 60 | #define DRV_RELDATE "30-Apr-2008" |
| 60 | #define PFX DRV_NAME ": " | 61 | #define PFX DRV_NAME ": " |
| 61 | 62 | ||
| 62 | /* Includes */ | 63 | /* Includes */ |
| @@ -104,6 +105,7 @@ enum iTCO_chipsets { | |||
| 104 | TCO_ICH9, /* ICH9 */ | 105 | TCO_ICH9, /* ICH9 */ |
| 105 | TCO_ICH9R, /* ICH9R */ | 106 | TCO_ICH9R, /* ICH9R */ |
| 106 | TCO_ICH9DH, /* ICH9DH */ | 107 | TCO_ICH9DH, /* ICH9DH */ |
| 108 | TCO_ICH9DO, /* ICH9DO */ | ||
| 107 | TCO_631XESB, /* 631xESB/632xESB */ | 109 | TCO_631XESB, /* 631xESB/632xESB */ |
| 108 | }; | 110 | }; |
| 109 | 111 | ||
| @@ -136,6 +138,7 @@ static struct { | |||
| 136 | {"ICH9", 2}, | 138 | {"ICH9", 2}, |
| 137 | {"ICH9R", 2}, | 139 | {"ICH9R", 2}, |
| 138 | {"ICH9DH", 2}, | 140 | {"ICH9DH", 2}, |
| 141 | {"ICH9DO", 2}, | ||
| 139 | {"631xESB/632xESB", 2}, | 142 | {"631xESB/632xESB", 2}, |
| 140 | {NULL,0} | 143 | {NULL,0} |
| 141 | }; | 144 | }; |
| @@ -181,6 +184,7 @@ static struct pci_device_id iTCO_wdt_pci_tbl[] = { | |||
| 181 | { ITCO_PCI_DEVICE(0x2918, TCO_ICH9 )}, | 184 | { ITCO_PCI_DEVICE(0x2918, TCO_ICH9 )}, |
| 182 | { ITCO_PCI_DEVICE(0x2916, TCO_ICH9R )}, | 185 | { ITCO_PCI_DEVICE(0x2916, TCO_ICH9R )}, |
| 183 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_2, TCO_ICH9DH )}, | 186 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_2, TCO_ICH9DH )}, |
| 187 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ICH9_4, TCO_ICH9DO )}, | ||
| 184 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ESB2_0, TCO_631XESB)}, | 188 | { ITCO_PCI_DEVICE(PCI_DEVICE_ID_INTEL_ESB2_0, TCO_631XESB)}, |
| 185 | { ITCO_PCI_DEVICE(0x2671, TCO_631XESB)}, | 189 | { ITCO_PCI_DEVICE(0x2671, TCO_631XESB)}, |
| 186 | { ITCO_PCI_DEVICE(0x2672, TCO_631XESB)}, | 190 | { ITCO_PCI_DEVICE(0x2672, TCO_631XESB)}, |
diff --git a/drivers/watchdog/w83697hf_wdt.c b/drivers/watchdog/w83697hf_wdt.c index c622a0e6c9ae..528b882420b6 100644 --- a/drivers/watchdog/w83697hf_wdt.c +++ b/drivers/watchdog/w83697hf_wdt.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #define WATCHDOG_NAME "w83697hf/hg WDT" | 44 | #define WATCHDOG_NAME "w83697hf/hg WDT" |
| 45 | #define PFX WATCHDOG_NAME ": " | 45 | #define PFX WATCHDOG_NAME ": " |
| 46 | #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ | 46 | #define WATCHDOG_TIMEOUT 60 /* 60 sec default timeout */ |
| 47 | #define WATCHDOG_EARLY_DISABLE 1 /* Disable until userland kicks in */ | ||
| 47 | 48 | ||
| 48 | static unsigned long wdt_is_open; | 49 | static unsigned long wdt_is_open; |
| 49 | static char expect_close; | 50 | static char expect_close; |
| @@ -56,12 +57,16 @@ MODULE_PARM_DESC(wdt_io, "w83697hf/hg WDT io port (default 0x2e, 0 = autodetect) | |||
| 56 | 57 | ||
| 57 | static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ | 58 | static int timeout = WATCHDOG_TIMEOUT; /* in seconds */ |
| 58 | module_param(timeout, int, 0); | 59 | module_param(timeout, int, 0); |
| 59 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=255, default=" __MODULE_STRING(WATCHDOG_TIMEOUT) "."); | 60 | MODULE_PARM_DESC(timeout, "Watchdog timeout in seconds. 1<= timeout <=255 (default=" __MODULE_STRING(WATCHDOG_TIMEOUT) ")"); |
| 60 | 61 | ||
| 61 | static int nowayout = WATCHDOG_NOWAYOUT; | 62 | static int nowayout = WATCHDOG_NOWAYOUT; |
| 62 | module_param(nowayout, int, 0); | 63 | module_param(nowayout, int, 0); |
| 63 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); | 64 | MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default=" __MODULE_STRING(WATCHDOG_NOWAYOUT) ")"); |
| 64 | 65 | ||
| 66 | static int early_disable = WATCHDOG_EARLY_DISABLE; | ||
| 67 | module_param(early_disable, int, 0); | ||
| 68 | MODULE_PARM_DESC(early_disable, "Watchdog gets disabled at boot time (default=" __MODULE_STRING(WATCHDOG_EARLY_DISABLE) ")"); | ||
| 69 | |||
| 65 | /* | 70 | /* |
| 66 | * Kernel methods. | 71 | * Kernel methods. |
| 67 | */ | 72 | */ |
| @@ -140,7 +145,7 @@ w83697hf_init(void) | |||
| 140 | w83697hf_deselect_wdt(); | 145 | w83697hf_deselect_wdt(); |
| 141 | } | 146 | } |
| 142 | 147 | ||
| 143 | static int | 148 | static void |
| 144 | wdt_ping(void) | 149 | wdt_ping(void) |
| 145 | { | 150 | { |
| 146 | spin_lock(&io_lock); | 151 | spin_lock(&io_lock); |
| @@ -150,10 +155,9 @@ wdt_ping(void) | |||
| 150 | 155 | ||
| 151 | w83697hf_deselect_wdt(); | 156 | w83697hf_deselect_wdt(); |
| 152 | spin_unlock(&io_lock); | 157 | spin_unlock(&io_lock); |
| 153 | return 0; | ||
| 154 | } | 158 | } |
| 155 | 159 | ||
| 156 | static int | 160 | static void |
| 157 | wdt_enable(void) | 161 | wdt_enable(void) |
| 158 | { | 162 | { |
| 159 | spin_lock(&io_lock); | 163 | spin_lock(&io_lock); |
| @@ -164,10 +168,9 @@ wdt_enable(void) | |||
| 164 | 168 | ||
| 165 | w83697hf_deselect_wdt(); | 169 | w83697hf_deselect_wdt(); |
| 166 | spin_unlock(&io_lock); | 170 | spin_unlock(&io_lock); |
| 167 | return 0; | ||
| 168 | } | 171 | } |
| 169 | 172 | ||
| 170 | static int | 173 | static void |
| 171 | wdt_disable(void) | 174 | wdt_disable(void) |
| 172 | { | 175 | { |
| 173 | spin_lock(&io_lock); | 176 | spin_lock(&io_lock); |
| @@ -178,7 +181,22 @@ wdt_disable(void) | |||
| 178 | 181 | ||
| 179 | w83697hf_deselect_wdt(); | 182 | w83697hf_deselect_wdt(); |
| 180 | spin_unlock(&io_lock); | 183 | spin_unlock(&io_lock); |
| 181 | return 0; | 184 | } |
| 185 | |||
| 186 | static unsigned char | ||
| 187 | wdt_running(void) | ||
| 188 | { | ||
| 189 | unsigned char t; | ||
| 190 | |||
| 191 | spin_lock(&io_lock); | ||
| 192 | w83697hf_select_wdt(); | ||
| 193 | |||
| 194 | t = w83697hf_get_reg(0xF4); /* Read timer */ | ||
| 195 | |||
| 196 | w83697hf_deselect_wdt(); | ||
| 197 | spin_unlock(&io_lock); | ||
| 198 | |||
| 199 | return t; | ||
| 182 | } | 200 | } |
| 183 | 201 | ||
| 184 | static int | 202 | static int |
| @@ -397,7 +415,11 @@ wdt_init(void) | |||
| 397 | } | 415 | } |
| 398 | 416 | ||
| 399 | w83697hf_init(); | 417 | w83697hf_init(); |
| 400 | wdt_disable(); /* Disable watchdog until first use */ | 418 | if (early_disable) { |
| 419 | if (wdt_running()) | ||
| 420 | printk (KERN_WARNING PFX "Stopping previously enabled watchdog until userland kicks in\n"); | ||
| 421 | wdt_disable(); | ||
| 422 | } | ||
| 401 | 423 | ||
| 402 | if (wdt_set_heartbeat(timeout)) { | 424 | if (wdt_set_heartbeat(timeout)) { |
| 403 | wdt_set_heartbeat(WATCHDOG_TIMEOUT); | 425 | wdt_set_heartbeat(WATCHDOG_TIMEOUT); |
diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt index 55e8ee1900a5..3263084eef9e 100644 --- a/fs/Kconfig.binfmt +++ b/fs/Kconfig.binfmt | |||
| @@ -42,7 +42,7 @@ config BINFMT_ELF_FDPIC | |||
| 42 | 42 | ||
| 43 | config BINFMT_FLAT | 43 | config BINFMT_FLAT |
| 44 | bool "Kernel support for flat binaries" | 44 | bool "Kernel support for flat binaries" |
| 45 | depends on !MMU | 45 | depends on !MMU && (!FRV || BROKEN) |
| 46 | help | 46 | help |
| 47 | Support uClinux FLAT format binaries. | 47 | Support uClinux FLAT format binaries. |
| 48 | 48 | ||
diff --git a/fs/afs/callback.c b/fs/afs/callback.c index a78d5b236bb1..587ef5123cd8 100644 --- a/fs/afs/callback.c +++ b/fs/afs/callback.c | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | * along with this program; if not, write to the Free Software | 8 | * along with this program; if not, write to the Free Software |
| 9 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 9 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 10 | * | 10 | * |
| 11 | * Authors: David Woodhouse <dwmw2@cambridge.redhat.com> | 11 | * Authors: David Woodhouse <dwmw2@infradead.org> |
| 12 | * David Howells <dhowells@redhat.com> | 12 | * David Howells <dhowells@redhat.com> |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
diff --git a/fs/afs/inode.c b/fs/afs/inode.c index 08db82e1343a..bb47217f6a18 100644 --- a/fs/afs/inode.c +++ b/fs/afs/inode.c | |||
| @@ -8,7 +8,7 @@ | |||
| 8 | * along with this program; if not, write to the Free Software | 8 | * along with this program; if not, write to the Free Software |
| 9 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 9 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 10 | * | 10 | * |
| 11 | * Authors: David Woodhouse <dwmw2@cambridge.redhat.com> | 11 | * Authors: David Woodhouse <dwmw2@infradead.org> |
| 12 | * David Howells <dhowells@redhat.com> | 12 | * David Howells <dhowells@redhat.com> |
| 13 | * | 13 | * |
| 14 | */ | 14 | */ |
diff --git a/fs/afs/super.c b/fs/afs/super.c index 4b572b801d8d..7e3faeef6818 100644 --- a/fs/afs/super.c +++ b/fs/afs/super.c | |||
| @@ -10,7 +10,7 @@ | |||
| 10 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 10 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 11 | * | 11 | * |
| 12 | * Authors: David Howells <dhowells@redhat.com> | 12 | * Authors: David Howells <dhowells@redhat.com> |
| 13 | * David Woodhouse <dwmw2@redhat.com> | 13 | * David Woodhouse <dwmw2@infradead.org> |
| 14 | * | 14 | * |
| 15 | */ | 15 | */ |
| 16 | 16 | ||
diff --git a/fs/binfmt_elf_fdpic.c b/fs/binfmt_elf_fdpic.c index ddd35d873391..d051a32e6270 100644 --- a/fs/binfmt_elf_fdpic.c +++ b/fs/binfmt_elf_fdpic.c | |||
| @@ -390,7 +390,7 @@ static int load_elf_fdpic_binary(struct linux_binprm *bprm, | |||
| 390 | } | 390 | } |
| 391 | 391 | ||
| 392 | /* expand the stack mapping to use up the entire allocation granule */ | 392 | /* expand the stack mapping to use up the entire allocation granule */ |
| 393 | fullsize = ksize((char *) current->mm->start_brk); | 393 | fullsize = kobjsize((char *) current->mm->start_brk); |
| 394 | if (!IS_ERR_VALUE(do_mremap(current->mm->start_brk, stack_size, | 394 | if (!IS_ERR_VALUE(do_mremap(current->mm->start_brk, stack_size, |
| 395 | fullsize, 0, 0))) | 395 | fullsize, 0, 0))) |
| 396 | stack_size = fullsize; | 396 | stack_size = fullsize; |
diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c index 3b40d45a3a16..2cb1acda3a82 100644 --- a/fs/binfmt_flat.c +++ b/fs/binfmt_flat.c | |||
| @@ -548,7 +548,7 @@ static int load_flat_file(struct linux_binprm * bprm, | |||
| 548 | PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 0); | 548 | PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE, 0); |
| 549 | /* Remap to use all availabe slack region space */ | 549 | /* Remap to use all availabe slack region space */ |
| 550 | if (realdatastart && (realdatastart < (unsigned long)-4096)) { | 550 | if (realdatastart && (realdatastart < (unsigned long)-4096)) { |
| 551 | reallen = ksize((void *)realdatastart); | 551 | reallen = kobjsize((void *)realdatastart); |
| 552 | if (reallen > len) { | 552 | if (reallen > len) { |
| 553 | realdatastart = do_mremap(realdatastart, len, | 553 | realdatastart = do_mremap(realdatastart, len, |
| 554 | reallen, MREMAP_FIXED, realdatastart); | 554 | reallen, MREMAP_FIXED, realdatastart); |
| @@ -600,7 +600,7 @@ static int load_flat_file(struct linux_binprm * bprm, | |||
| 600 | PROT_READ | PROT_EXEC | PROT_WRITE, MAP_PRIVATE, 0); | 600 | PROT_READ | PROT_EXEC | PROT_WRITE, MAP_PRIVATE, 0); |
| 601 | /* Remap to use all availabe slack region space */ | 601 | /* Remap to use all availabe slack region space */ |
| 602 | if (textpos && (textpos < (unsigned long) -4096)) { | 602 | if (textpos && (textpos < (unsigned long) -4096)) { |
| 603 | reallen = ksize((void *)textpos); | 603 | reallen = kobjsize((void *)textpos); |
| 604 | if (reallen > len) { | 604 | if (reallen > len) { |
| 605 | textpos = do_mremap(textpos, len, reallen, | 605 | textpos = do_mremap(textpos, len, reallen, |
| 606 | MREMAP_FIXED, textpos); | 606 | MREMAP_FIXED, textpos); |
| @@ -683,7 +683,7 @@ static int load_flat_file(struct linux_binprm * bprm, | |||
| 683 | */ | 683 | */ |
| 684 | current->mm->start_brk = datapos + data_len + bss_len; | 684 | current->mm->start_brk = datapos + data_len + bss_len; |
| 685 | current->mm->brk = (current->mm->start_brk + 3) & ~3; | 685 | current->mm->brk = (current->mm->start_brk + 3) & ~3; |
| 686 | current->mm->context.end_brk = memp + ksize((void *) memp) - stack_len; | 686 | current->mm->context.end_brk = memp + kobjsize((void *) memp) - stack_len; |
| 687 | } | 687 | } |
| 688 | 688 | ||
| 689 | if (flags & FLAT_FLAG_KTRACE) | 689 | if (flags & FLAT_FLAG_KTRACE) |
| @@ -790,7 +790,7 @@ static int load_flat_file(struct linux_binprm * bprm, | |||
| 790 | 790 | ||
| 791 | /* zero the BSS, BRK and stack areas */ | 791 | /* zero the BSS, BRK and stack areas */ |
| 792 | memset((void*)(datapos + data_len), 0, bss_len + | 792 | memset((void*)(datapos + data_len), 0, bss_len + |
| 793 | (memp + ksize((void *) memp) - stack_len - /* end brk */ | 793 | (memp + kobjsize((void *) memp) - stack_len - /* end brk */ |
| 794 | libinfo->lib_list[id].start_brk) + /* start brk */ | 794 | libinfo->lib_list[id].start_brk) + /* start brk */ |
| 795 | stack_len); | 795 | stack_len); |
| 796 | 796 | ||
diff --git a/fs/block_dev.c b/fs/block_dev.c index 7d822fae7765..470c10ceb0fb 100644 --- a/fs/block_dev.c +++ b/fs/block_dev.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/kmod.h> | 12 | #include <linux/kmod.h> |
| 13 | #include <linux/major.h> | 13 | #include <linux/major.h> |
| 14 | #include <linux/smp_lock.h> | 14 | #include <linux/smp_lock.h> |
| 15 | #include <linux/device_cgroup.h> | ||
| 15 | #include <linux/highmem.h> | 16 | #include <linux/highmem.h> |
| 16 | #include <linux/blkdev.h> | 17 | #include <linux/blkdev.h> |
| 17 | #include <linux/module.h> | 18 | #include <linux/module.h> |
| @@ -928,9 +929,14 @@ static int do_open(struct block_device *bdev, struct file *file, int for_part) | |||
| 928 | { | 929 | { |
| 929 | struct module *owner = NULL; | 930 | struct module *owner = NULL; |
| 930 | struct gendisk *disk; | 931 | struct gendisk *disk; |
| 931 | int ret = -ENXIO; | 932 | int ret; |
| 932 | int part; | 933 | int part; |
| 933 | 934 | ||
| 935 | ret = devcgroup_inode_permission(bdev->bd_inode, file->f_mode); | ||
| 936 | if (ret != 0) | ||
| 937 | return ret; | ||
| 938 | |||
| 939 | ret = -ENXIO; | ||
| 934 | file->f_mapping = bdev->bd_inode->i_mapping; | 940 | file->f_mapping = bdev->bd_inode->i_mapping; |
| 935 | lock_kernel(); | 941 | lock_kernel(); |
| 936 | disk = get_gendisk(bdev->bd_dev, &part); | 942 | disk = get_gendisk(bdev->bd_dev, &part); |
diff --git a/fs/cifs/asn1.c b/fs/cifs/asn1.c index cb52cbbe45ff..f58e41d3ba48 100644 --- a/fs/cifs/asn1.c +++ b/fs/cifs/asn1.c | |||
| @@ -186,6 +186,11 @@ asn1_length_decode(struct asn1_ctx *ctx, unsigned int *def, unsigned int *len) | |||
| 186 | } | 186 | } |
| 187 | } | 187 | } |
| 188 | } | 188 | } |
| 189 | |||
| 190 | /* don't trust len bigger than ctx buffer */ | ||
| 191 | if (*len > ctx->end - ctx->pointer) | ||
| 192 | return 0; | ||
| 193 | |||
| 189 | return 1; | 194 | return 1; |
| 190 | } | 195 | } |
| 191 | 196 | ||
| @@ -203,6 +208,10 @@ asn1_header_decode(struct asn1_ctx *ctx, | |||
| 203 | if (!asn1_length_decode(ctx, &def, &len)) | 208 | if (!asn1_length_decode(ctx, &def, &len)) |
| 204 | return 0; | 209 | return 0; |
| 205 | 210 | ||
| 211 | /* primitive shall be definite, indefinite shall be constructed */ | ||
| 212 | if (*con == ASN1_PRI && !def) | ||
| 213 | return 0; | ||
| 214 | |||
| 206 | if (def) | 215 | if (def) |
| 207 | *eoc = ctx->pointer + len; | 216 | *eoc = ctx->pointer + len; |
| 208 | else | 217 | else |
| @@ -389,6 +398,11 @@ asn1_oid_decode(struct asn1_ctx *ctx, | |||
| 389 | unsigned long *optr; | 398 | unsigned long *optr; |
| 390 | 399 | ||
| 391 | size = eoc - ctx->pointer + 1; | 400 | size = eoc - ctx->pointer + 1; |
| 401 | |||
| 402 | /* first subid actually encodes first two subids */ | ||
| 403 | if (size < 2 || size > ULONG_MAX/sizeof(unsigned long)) | ||
| 404 | return 0; | ||
| 405 | |||
| 392 | *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC); | 406 | *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC); |
| 393 | if (*oid == NULL) | 407 | if (*oid == NULL) |
| 394 | return 0; | 408 | return 0; |
diff --git a/fs/cifs/cifssmb.c b/fs/cifs/cifssmb.c index 9b8b4cfdf993..fb655b4593c6 100644 --- a/fs/cifs/cifssmb.c +++ b/fs/cifs/cifssmb.c | |||
| @@ -3927,9 +3927,9 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, | |||
| 3927 | } | 3927 | } |
| 3928 | 3928 | ||
| 3929 | ref = (struct dfs_referral_level_3 *) &(pSMBr->referrals); | 3929 | ref = (struct dfs_referral_level_3 *) &(pSMBr->referrals); |
| 3930 | if (ref->VersionNumber != 3) { | 3930 | if (ref->VersionNumber != cpu_to_le16(3)) { |
| 3931 | cERROR(1, ("Referrals of V%d version are not supported," | 3931 | cERROR(1, ("Referrals of V%d version are not supported," |
| 3932 | "should be V3", ref->VersionNumber)); | 3932 | "should be V3", le16_to_cpu(ref->VersionNumber))); |
| 3933 | rc = -EINVAL; | 3933 | rc = -EINVAL; |
| 3934 | goto parse_DFS_referrals_exit; | 3934 | goto parse_DFS_referrals_exit; |
| 3935 | } | 3935 | } |
| @@ -3977,7 +3977,7 @@ parse_DFS_referrals(TRANSACTION2_GET_DFS_REFER_RSP *pSMBr, | |||
| 3977 | if (rc) | 3977 | if (rc) |
| 3978 | goto parse_DFS_referrals_exit; | 3978 | goto parse_DFS_referrals_exit; |
| 3979 | 3979 | ||
| 3980 | ref += ref->Size; | 3980 | ref += le16_to_cpu(ref->Size); |
| 3981 | } | 3981 | } |
| 3982 | 3982 | ||
| 3983 | parse_DFS_referrals_exit: | 3983 | parse_DFS_referrals_exit: |
diff --git a/fs/ecryptfs/ecryptfs_kernel.h b/fs/ecryptfs/ecryptfs_kernel.h index 951ee33a022d..c15c25745e05 100644 --- a/fs/ecryptfs/ecryptfs_kernel.h +++ b/fs/ecryptfs/ecryptfs_kernel.h | |||
| @@ -660,8 +660,6 @@ int ecryptfs_get_tfm_and_mutex_for_cipher_name(struct crypto_blkcipher **tfm, | |||
| 660 | int ecryptfs_keyring_auth_tok_for_sig(struct key **auth_tok_key, | 660 | int ecryptfs_keyring_auth_tok_for_sig(struct key **auth_tok_key, |
| 661 | struct ecryptfs_auth_tok **auth_tok, | 661 | struct ecryptfs_auth_tok **auth_tok, |
| 662 | char *sig); | 662 | char *sig); |
| 663 | int ecryptfs_write_zeros(struct file *file, pgoff_t index, int start, | ||
| 664 | int num_zeros); | ||
| 665 | int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data, | 663 | int ecryptfs_write_lower(struct inode *ecryptfs_inode, char *data, |
| 666 | loff_t offset, size_t size); | 664 | loff_t offset, size_t size); |
| 667 | int ecryptfs_write_lower_page_segment(struct inode *ecryptfs_inode, | 665 | int ecryptfs_write_lower_page_segment(struct inode *ecryptfs_inode, |
diff --git a/fs/ecryptfs/read_write.c b/fs/ecryptfs/read_write.c index ebf55150be56..75c2ea9fee35 100644 --- a/fs/ecryptfs/read_write.c +++ b/fs/ecryptfs/read_write.c | |||
| @@ -157,20 +157,6 @@ int ecryptfs_write(struct file *ecryptfs_file, char *data, loff_t offset, | |||
| 157 | ecryptfs_page_idx, rc); | 157 | ecryptfs_page_idx, rc); |
| 158 | goto out; | 158 | goto out; |
| 159 | } | 159 | } |
| 160 | if (start_offset_in_page) { | ||
| 161 | /* Read in the page from the lower | ||
| 162 | * into the eCryptfs inode page cache, | ||
| 163 | * decrypting */ | ||
| 164 | rc = ecryptfs_decrypt_page(ecryptfs_page); | ||
| 165 | if (rc) { | ||
| 166 | printk(KERN_ERR "%s: Error decrypting " | ||
| 167 | "page; rc = [%d]\n", | ||
| 168 | __func__, rc); | ||
| 169 | ClearPageUptodate(ecryptfs_page); | ||
| 170 | page_cache_release(ecryptfs_page); | ||
| 171 | goto out; | ||
| 172 | } | ||
| 173 | } | ||
| 174 | ecryptfs_page_virt = kmap_atomic(ecryptfs_page, KM_USER0); | 160 | ecryptfs_page_virt = kmap_atomic(ecryptfs_page, KM_USER0); |
| 175 | 161 | ||
| 176 | /* | 162 | /* |
| @@ -349,14 +335,6 @@ int ecryptfs_read(char *data, loff_t offset, size_t size, | |||
| 349 | ecryptfs_page_idx, rc); | 335 | ecryptfs_page_idx, rc); |
| 350 | goto out; | 336 | goto out; |
| 351 | } | 337 | } |
| 352 | rc = ecryptfs_decrypt_page(ecryptfs_page); | ||
| 353 | if (rc) { | ||
| 354 | printk(KERN_ERR "%s: Error decrypting " | ||
| 355 | "page; rc = [%d]\n", __func__, rc); | ||
| 356 | ClearPageUptodate(ecryptfs_page); | ||
| 357 | page_cache_release(ecryptfs_page); | ||
| 358 | goto out; | ||
| 359 | } | ||
| 360 | ecryptfs_page_virt = kmap_atomic(ecryptfs_page, KM_USER0); | 338 | ecryptfs_page_virt = kmap_atomic(ecryptfs_page, KM_USER0); |
| 361 | memcpy((data + data_offset), | 339 | memcpy((data + data_offset), |
| 362 | ((char *)ecryptfs_page_virt + start_offset_in_page), | 340 | ((char *)ecryptfs_page_virt + start_offset_in_page), |
| @@ -860,6 +860,7 @@ static int de_thread(struct task_struct *tsk) | |||
| 860 | 860 | ||
| 861 | no_thread_group: | 861 | no_thread_group: |
| 862 | exit_itimers(sig); | 862 | exit_itimers(sig); |
| 863 | flush_itimer_signals(); | ||
| 863 | if (leader) | 864 | if (leader) |
| 864 | release_task(leader); | 865 | release_task(leader); |
| 865 | 866 | ||
diff --git a/fs/ext3/resize.c b/fs/ext3/resize.c index 28cfd0b40527..77278e947e94 100644 --- a/fs/ext3/resize.c +++ b/fs/ext3/resize.c | |||
| @@ -580,7 +580,8 @@ static int reserve_backup_gdb(handle_t *handle, struct inode *inode, | |||
| 580 | } | 580 | } |
| 581 | 581 | ||
| 582 | blk = EXT3_SB(sb)->s_sbh->b_blocknr + 1 + EXT3_SB(sb)->s_gdb_count; | 582 | blk = EXT3_SB(sb)->s_sbh->b_blocknr + 1 + EXT3_SB(sb)->s_gdb_count; |
| 583 | data = (__le32 *)dind->b_data + EXT3_SB(sb)->s_gdb_count; | 583 | data = (__le32 *)dind->b_data + (EXT3_SB(sb)->s_gdb_count % |
| 584 | EXT3_ADDR_PER_BLOCK(sb)); | ||
| 584 | end = (__le32 *)dind->b_data + EXT3_ADDR_PER_BLOCK(sb); | 585 | end = (__le32 *)dind->b_data + EXT3_ADDR_PER_BLOCK(sb); |
| 585 | 586 | ||
| 586 | /* Get each reserved primary GDT block and verify it holds backups */ | 587 | /* Get each reserved primary GDT block and verify it holds backups */ |
diff --git a/fs/libfs.c b/fs/libfs.c index b004dfadd891..892d41cb3382 100644 --- a/fs/libfs.c +++ b/fs/libfs.c | |||
| @@ -528,6 +528,23 @@ ssize_t simple_read_from_buffer(void __user *to, size_t count, loff_t *ppos, | |||
| 528 | return count; | 528 | return count; |
| 529 | } | 529 | } |
| 530 | 530 | ||
| 531 | ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, | ||
| 532 | const void *from, size_t available) | ||
| 533 | { | ||
| 534 | loff_t pos = *ppos; | ||
| 535 | |||
| 536 | if (pos < 0) | ||
| 537 | return -EINVAL; | ||
| 538 | if (pos >= available) | ||
| 539 | return 0; | ||
| 540 | if (count > available - pos) | ||
| 541 | count = available - pos; | ||
| 542 | memcpy(to, from + pos, count); | ||
| 543 | *ppos = pos + count; | ||
| 544 | |||
| 545 | return count; | ||
| 546 | } | ||
| 547 | |||
| 531 | /* | 548 | /* |
| 532 | * Transaction based IO. | 549 | * Transaction based IO. |
| 533 | * The file expects a single write which triggers the transaction, and then | 550 | * The file expects a single write which triggers the transaction, and then |
| @@ -800,6 +817,7 @@ EXPORT_SYMBOL(simple_statfs); | |||
| 800 | EXPORT_SYMBOL(simple_sync_file); | 817 | EXPORT_SYMBOL(simple_sync_file); |
| 801 | EXPORT_SYMBOL(simple_unlink); | 818 | EXPORT_SYMBOL(simple_unlink); |
| 802 | EXPORT_SYMBOL(simple_read_from_buffer); | 819 | EXPORT_SYMBOL(simple_read_from_buffer); |
| 820 | EXPORT_SYMBOL(memory_read_from_buffer); | ||
| 803 | EXPORT_SYMBOL(simple_transaction_get); | 821 | EXPORT_SYMBOL(simple_transaction_get); |
| 804 | EXPORT_SYMBOL(simple_transaction_read); | 822 | EXPORT_SYMBOL(simple_transaction_read); |
| 805 | EXPORT_SYMBOL(simple_transaction_release); | 823 | EXPORT_SYMBOL(simple_transaction_release); |
diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c index 1e44ad14881a..a27d61581bd6 100644 --- a/fs/ocfs2/cluster/tcp.c +++ b/fs/ocfs2/cluster/tcp.c | |||
| @@ -142,53 +142,43 @@ static void o2net_idle_timer(unsigned long data); | |||
| 142 | static void o2net_sc_postpone_idle(struct o2net_sock_container *sc); | 142 | static void o2net_sc_postpone_idle(struct o2net_sock_container *sc); |
| 143 | static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc); | 143 | static void o2net_sc_reset_idle_timer(struct o2net_sock_container *sc); |
| 144 | 144 | ||
| 145 | static void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, | ||
| 146 | u32 msgkey, struct task_struct *task, u8 node) | ||
| 147 | { | ||
| 148 | #ifdef CONFIG_DEBUG_FS | 145 | #ifdef CONFIG_DEBUG_FS |
| 146 | void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, | ||
| 147 | u32 msgkey, struct task_struct *task, u8 node) | ||
| 148 | { | ||
| 149 | INIT_LIST_HEAD(&nst->st_net_debug_item); | 149 | INIT_LIST_HEAD(&nst->st_net_debug_item); |
| 150 | nst->st_task = task; | 150 | nst->st_task = task; |
| 151 | nst->st_msg_type = msgtype; | 151 | nst->st_msg_type = msgtype; |
| 152 | nst->st_msg_key = msgkey; | 152 | nst->st_msg_key = msgkey; |
| 153 | nst->st_node = node; | 153 | nst->st_node = node; |
| 154 | #endif | ||
| 155 | } | 154 | } |
| 156 | 155 | ||
| 157 | static void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) | 156 | void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) |
| 158 | { | 157 | { |
| 159 | #ifdef CONFIG_DEBUG_FS | ||
| 160 | do_gettimeofday(&nst->st_sock_time); | 158 | do_gettimeofday(&nst->st_sock_time); |
| 161 | #endif | ||
| 162 | } | 159 | } |
| 163 | 160 | ||
| 164 | static void o2net_set_nst_send_time(struct o2net_send_tracking *nst) | 161 | void o2net_set_nst_send_time(struct o2net_send_tracking *nst) |
| 165 | { | 162 | { |
| 166 | #ifdef CONFIG_DEBUG_FS | ||
| 167 | do_gettimeofday(&nst->st_send_time); | 163 | do_gettimeofday(&nst->st_send_time); |
| 168 | #endif | ||
| 169 | } | 164 | } |
| 170 | 165 | ||
| 171 | static void o2net_set_nst_status_time(struct o2net_send_tracking *nst) | 166 | void o2net_set_nst_status_time(struct o2net_send_tracking *nst) |
| 172 | { | 167 | { |
| 173 | #ifdef CONFIG_DEBUG_FS | ||
| 174 | do_gettimeofday(&nst->st_status_time); | 168 | do_gettimeofday(&nst->st_status_time); |
| 175 | #endif | ||
| 176 | } | 169 | } |
| 177 | 170 | ||
| 178 | static void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, | 171 | void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, |
| 179 | struct o2net_sock_container *sc) | 172 | struct o2net_sock_container *sc) |
| 180 | { | 173 | { |
| 181 | #ifdef CONFIG_DEBUG_FS | ||
| 182 | nst->st_sc = sc; | 174 | nst->st_sc = sc; |
| 183 | #endif | ||
| 184 | } | 175 | } |
| 185 | 176 | ||
| 186 | static void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) | 177 | void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id) |
| 187 | { | 178 | { |
| 188 | #ifdef CONFIG_DEBUG_FS | ||
| 189 | nst->st_id = msg_id; | 179 | nst->st_id = msg_id; |
| 190 | #endif | ||
| 191 | } | 180 | } |
| 181 | #endif /* CONFIG_DEBUG_FS */ | ||
| 192 | 182 | ||
| 193 | static inline int o2net_reconnect_delay(void) | 183 | static inline int o2net_reconnect_delay(void) |
| 194 | { | 184 | { |
diff --git a/fs/ocfs2/cluster/tcp.h b/fs/ocfs2/cluster/tcp.h index a705d5d19036..fd6179eb26d4 100644 --- a/fs/ocfs2/cluster/tcp.h +++ b/fs/ocfs2/cluster/tcp.h | |||
| @@ -128,23 +128,23 @@ void o2net_debug_del_nst(struct o2net_send_tracking *nst); | |||
| 128 | void o2net_debug_add_sc(struct o2net_sock_container *sc); | 128 | void o2net_debug_add_sc(struct o2net_sock_container *sc); |
| 129 | void o2net_debug_del_sc(struct o2net_sock_container *sc); | 129 | void o2net_debug_del_sc(struct o2net_sock_container *sc); |
| 130 | #else | 130 | #else |
| 131 | static int o2net_debugfs_init(void) | 131 | static inline int o2net_debugfs_init(void) |
| 132 | { | 132 | { |
| 133 | return 0; | 133 | return 0; |
| 134 | } | 134 | } |
| 135 | static void o2net_debugfs_exit(void) | 135 | static inline void o2net_debugfs_exit(void) |
| 136 | { | 136 | { |
| 137 | } | 137 | } |
| 138 | static void o2net_debug_add_nst(struct o2net_send_tracking *nst) | 138 | static inline void o2net_debug_add_nst(struct o2net_send_tracking *nst) |
| 139 | { | 139 | { |
| 140 | } | 140 | } |
| 141 | static void o2net_debug_del_nst(struct o2net_send_tracking *nst) | 141 | static inline void o2net_debug_del_nst(struct o2net_send_tracking *nst) |
| 142 | { | 142 | { |
| 143 | } | 143 | } |
| 144 | static void o2net_debug_add_sc(struct o2net_sock_container *sc) | 144 | static inline void o2net_debug_add_sc(struct o2net_sock_container *sc) |
| 145 | { | 145 | { |
| 146 | } | 146 | } |
| 147 | static void o2net_debug_del_sc(struct o2net_sock_container *sc) | 147 | static inline void o2net_debug_del_sc(struct o2net_sock_container *sc) |
| 148 | { | 148 | { |
| 149 | } | 149 | } |
| 150 | #endif /* CONFIG_DEBUG_FS */ | 150 | #endif /* CONFIG_DEBUG_FS */ |
diff --git a/fs/ocfs2/cluster/tcp_internal.h b/fs/ocfs2/cluster/tcp_internal.h index 8d58cfe410b1..18307ff81b77 100644 --- a/fs/ocfs2/cluster/tcp_internal.h +++ b/fs/ocfs2/cluster/tcp_internal.h | |||
| @@ -224,10 +224,42 @@ struct o2net_send_tracking { | |||
| 224 | struct timeval st_send_time; | 224 | struct timeval st_send_time; |
| 225 | struct timeval st_status_time; | 225 | struct timeval st_status_time; |
| 226 | }; | 226 | }; |
| 227 | |||
| 228 | void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, | ||
| 229 | u32 msgkey, struct task_struct *task, u8 node); | ||
| 230 | void o2net_set_nst_sock_time(struct o2net_send_tracking *nst); | ||
| 231 | void o2net_set_nst_send_time(struct o2net_send_tracking *nst); | ||
| 232 | void o2net_set_nst_status_time(struct o2net_send_tracking *nst); | ||
| 233 | void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, | ||
| 234 | struct o2net_sock_container *sc); | ||
| 235 | void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, u32 msg_id); | ||
| 236 | |||
| 227 | #else | 237 | #else |
| 228 | struct o2net_send_tracking { | 238 | struct o2net_send_tracking { |
| 229 | u32 dummy; | 239 | u32 dummy; |
| 230 | }; | 240 | }; |
| 241 | |||
| 242 | static inline void o2net_init_nst(struct o2net_send_tracking *nst, u32 msgtype, | ||
| 243 | u32 msgkey, struct task_struct *task, u8 node) | ||
| 244 | { | ||
| 245 | } | ||
| 246 | static inline void o2net_set_nst_sock_time(struct o2net_send_tracking *nst) | ||
| 247 | { | ||
| 248 | } | ||
| 249 | static inline void o2net_set_nst_send_time(struct o2net_send_tracking *nst) | ||
| 250 | { | ||
| 251 | } | ||
| 252 | static inline void o2net_set_nst_status_time(struct o2net_send_tracking *nst) | ||
| 253 | { | ||
| 254 | } | ||
| 255 | static inline void o2net_set_nst_sock_container(struct o2net_send_tracking *nst, | ||
| 256 | struct o2net_sock_container *sc) | ||
| 257 | { | ||
| 258 | } | ||
| 259 | static inline void o2net_set_nst_msg_id(struct o2net_send_tracking *nst, | ||
| 260 | u32 msg_id) | ||
| 261 | { | ||
| 262 | } | ||
| 231 | #endif /* CONFIG_DEBUG_FS */ | 263 | #endif /* CONFIG_DEBUG_FS */ |
| 232 | 264 | ||
| 233 | #endif /* O2CLUSTER_TCP_INTERNAL_H */ | 265 | #endif /* O2CLUSTER_TCP_INTERNAL_H */ |
diff --git a/fs/ocfs2/dlm/dlmdebug.h b/fs/ocfs2/dlm/dlmdebug.h index d34a62a3a625..8c686d22f9c7 100644 --- a/fs/ocfs2/dlm/dlmdebug.h +++ b/fs/ocfs2/dlm/dlmdebug.h | |||
| @@ -60,25 +60,25 @@ void dlm_destroy_debugfs_root(void); | |||
| 60 | 60 | ||
| 61 | #else | 61 | #else |
| 62 | 62 | ||
| 63 | static int dlm_debug_init(struct dlm_ctxt *dlm) | 63 | static inline int dlm_debug_init(struct dlm_ctxt *dlm) |
| 64 | { | 64 | { |
| 65 | return 0; | 65 | return 0; |
| 66 | } | 66 | } |
| 67 | static void dlm_debug_shutdown(struct dlm_ctxt *dlm) | 67 | static inline void dlm_debug_shutdown(struct dlm_ctxt *dlm) |
| 68 | { | 68 | { |
| 69 | } | 69 | } |
| 70 | static int dlm_create_debugfs_subroot(struct dlm_ctxt *dlm) | 70 | static inline int dlm_create_debugfs_subroot(struct dlm_ctxt *dlm) |
| 71 | { | 71 | { |
| 72 | return 0; | 72 | return 0; |
| 73 | } | 73 | } |
| 74 | static void dlm_destroy_debugfs_subroot(struct dlm_ctxt *dlm) | 74 | static inline void dlm_destroy_debugfs_subroot(struct dlm_ctxt *dlm) |
| 75 | { | 75 | { |
| 76 | } | 76 | } |
| 77 | static int dlm_create_debugfs_root(void) | 77 | static inline int dlm_create_debugfs_root(void) |
| 78 | { | 78 | { |
| 79 | return 0; | 79 | return 0; |
| 80 | } | 80 | } |
| 81 | static void dlm_destroy_debugfs_root(void) | 81 | static inline void dlm_destroy_debugfs_root(void) |
| 82 | { | 82 | { |
| 83 | } | 83 | } |
| 84 | 84 | ||
diff --git a/fs/ocfs2/stack_user.c b/fs/ocfs2/stack_user.c index b503772cd0ec..6b97d11f6bf8 100644 --- a/fs/ocfs2/stack_user.c +++ b/fs/ocfs2/stack_user.c | |||
| @@ -61,7 +61,7 @@ | |||
| 61 | * negotiated by the client. The client negotiates based on the maximum | 61 | * negotiated by the client. The client negotiates based on the maximum |
| 62 | * version advertised in /sys/fs/ocfs2/max_locking_protocol. The major | 62 | * version advertised in /sys/fs/ocfs2/max_locking_protocol. The major |
| 63 | * number from the "SETV" message must match | 63 | * number from the "SETV" message must match |
| 64 | * user_stack.sp_proto->lp_max_version.pv_major, and the minor number | 64 | * ocfs2_user_plugin.sp_proto->lp_max_version.pv_major, and the minor number |
| 65 | * must be less than or equal to ...->lp_max_version.pv_minor. | 65 | * must be less than or equal to ...->lp_max_version.pv_minor. |
| 66 | * | 66 | * |
| 67 | * Once this information has been set, mounts will be allowed. From this | 67 | * Once this information has been set, mounts will be allowed. From this |
| @@ -153,7 +153,7 @@ union ocfs2_control_message { | |||
| 153 | struct ocfs2_control_message_down u_down; | 153 | struct ocfs2_control_message_down u_down; |
| 154 | }; | 154 | }; |
| 155 | 155 | ||
| 156 | static struct ocfs2_stack_plugin user_stack; | 156 | static struct ocfs2_stack_plugin ocfs2_user_plugin; |
| 157 | 157 | ||
| 158 | static atomic_t ocfs2_control_opened; | 158 | static atomic_t ocfs2_control_opened; |
| 159 | static int ocfs2_control_this_node = -1; | 159 | static int ocfs2_control_this_node = -1; |
| @@ -399,7 +399,7 @@ static int ocfs2_control_do_setversion_msg(struct file *file, | |||
| 399 | char *ptr = NULL; | 399 | char *ptr = NULL; |
| 400 | struct ocfs2_control_private *p = file->private_data; | 400 | struct ocfs2_control_private *p = file->private_data; |
| 401 | struct ocfs2_protocol_version *max = | 401 | struct ocfs2_protocol_version *max = |
| 402 | &user_stack.sp_proto->lp_max_version; | 402 | &ocfs2_user_plugin.sp_proto->lp_max_version; |
| 403 | 403 | ||
| 404 | if (ocfs2_control_get_handshake_state(file) != | 404 | if (ocfs2_control_get_handshake_state(file) != |
| 405 | OCFS2_CONTROL_HANDSHAKE_PROTOCOL) | 405 | OCFS2_CONTROL_HANDSHAKE_PROTOCOL) |
| @@ -680,7 +680,7 @@ static void fsdlm_lock_ast_wrapper(void *astarg) | |||
| 680 | struct dlm_lksb *lksb = fsdlm_astarg_to_lksb(astarg); | 680 | struct dlm_lksb *lksb = fsdlm_astarg_to_lksb(astarg); |
| 681 | int status = lksb->sb_status; | 681 | int status = lksb->sb_status; |
| 682 | 682 | ||
| 683 | BUG_ON(user_stack.sp_proto == NULL); | 683 | BUG_ON(ocfs2_user_plugin.sp_proto == NULL); |
| 684 | 684 | ||
| 685 | /* | 685 | /* |
| 686 | * For now we're punting on the issue of other non-standard errors | 686 | * For now we're punting on the issue of other non-standard errors |
| @@ -693,16 +693,16 @@ static void fsdlm_lock_ast_wrapper(void *astarg) | |||
| 693 | */ | 693 | */ |
| 694 | 694 | ||
| 695 | if (status == -DLM_EUNLOCK || status == -DLM_ECANCEL) | 695 | if (status == -DLM_EUNLOCK || status == -DLM_ECANCEL) |
| 696 | user_stack.sp_proto->lp_unlock_ast(astarg, 0); | 696 | ocfs2_user_plugin.sp_proto->lp_unlock_ast(astarg, 0); |
| 697 | else | 697 | else |
| 698 | user_stack.sp_proto->lp_lock_ast(astarg); | 698 | ocfs2_user_plugin.sp_proto->lp_lock_ast(astarg); |
| 699 | } | 699 | } |
| 700 | 700 | ||
| 701 | static void fsdlm_blocking_ast_wrapper(void *astarg, int level) | 701 | static void fsdlm_blocking_ast_wrapper(void *astarg, int level) |
| 702 | { | 702 | { |
| 703 | BUG_ON(user_stack.sp_proto == NULL); | 703 | BUG_ON(ocfs2_user_plugin.sp_proto == NULL); |
| 704 | 704 | ||
| 705 | user_stack.sp_proto->lp_blocking_ast(astarg, level); | 705 | ocfs2_user_plugin.sp_proto->lp_blocking_ast(astarg, level); |
| 706 | } | 706 | } |
| 707 | 707 | ||
| 708 | static int user_dlm_lock(struct ocfs2_cluster_connection *conn, | 708 | static int user_dlm_lock(struct ocfs2_cluster_connection *conn, |
| @@ -838,7 +838,7 @@ static int user_cluster_this_node(unsigned int *this_node) | |||
| 838 | return 0; | 838 | return 0; |
| 839 | } | 839 | } |
| 840 | 840 | ||
| 841 | static struct ocfs2_stack_operations user_stack_ops = { | 841 | static struct ocfs2_stack_operations ocfs2_user_plugin_ops = { |
| 842 | .connect = user_cluster_connect, | 842 | .connect = user_cluster_connect, |
| 843 | .disconnect = user_cluster_disconnect, | 843 | .disconnect = user_cluster_disconnect, |
| 844 | .this_node = user_cluster_this_node, | 844 | .this_node = user_cluster_this_node, |
| @@ -849,20 +849,20 @@ static struct ocfs2_stack_operations user_stack_ops = { | |||
| 849 | .dump_lksb = user_dlm_dump_lksb, | 849 | .dump_lksb = user_dlm_dump_lksb, |
| 850 | }; | 850 | }; |
| 851 | 851 | ||
| 852 | static struct ocfs2_stack_plugin user_stack = { | 852 | static struct ocfs2_stack_plugin ocfs2_user_plugin = { |
| 853 | .sp_name = "user", | 853 | .sp_name = "user", |
| 854 | .sp_ops = &user_stack_ops, | 854 | .sp_ops = &ocfs2_user_plugin_ops, |
| 855 | .sp_owner = THIS_MODULE, | 855 | .sp_owner = THIS_MODULE, |
| 856 | }; | 856 | }; |
| 857 | 857 | ||
| 858 | 858 | ||
| 859 | static int __init user_stack_init(void) | 859 | static int __init ocfs2_user_plugin_init(void) |
| 860 | { | 860 | { |
| 861 | int rc; | 861 | int rc; |
| 862 | 862 | ||
| 863 | rc = ocfs2_control_init(); | 863 | rc = ocfs2_control_init(); |
| 864 | if (!rc) { | 864 | if (!rc) { |
| 865 | rc = ocfs2_stack_glue_register(&user_stack); | 865 | rc = ocfs2_stack_glue_register(&ocfs2_user_plugin); |
| 866 | if (rc) | 866 | if (rc) |
| 867 | ocfs2_control_exit(); | 867 | ocfs2_control_exit(); |
| 868 | } | 868 | } |
| @@ -870,14 +870,14 @@ static int __init user_stack_init(void) | |||
| 870 | return rc; | 870 | return rc; |
| 871 | } | 871 | } |
| 872 | 872 | ||
| 873 | static void __exit user_stack_exit(void) | 873 | static void __exit ocfs2_user_plugin_exit(void) |
| 874 | { | 874 | { |
| 875 | ocfs2_stack_glue_unregister(&user_stack); | 875 | ocfs2_stack_glue_unregister(&ocfs2_user_plugin); |
| 876 | ocfs2_control_exit(); | 876 | ocfs2_control_exit(); |
| 877 | } | 877 | } |
| 878 | 878 | ||
| 879 | MODULE_AUTHOR("Oracle"); | 879 | MODULE_AUTHOR("Oracle"); |
| 880 | MODULE_DESCRIPTION("ocfs2 driver for userspace cluster stacks"); | 880 | MODULE_DESCRIPTION("ocfs2 driver for userspace cluster stacks"); |
| 881 | MODULE_LICENSE("GPL"); | 881 | MODULE_LICENSE("GPL"); |
| 882 | module_init(user_stack_init); | 882 | module_init(ocfs2_user_plugin_init); |
| 883 | module_exit(user_stack_exit); | 883 | module_exit(ocfs2_user_plugin_exit); |
diff --git a/fs/proc/array.c b/fs/proc/array.c index 9e3b8c33c24b..797d775e0354 100644 --- a/fs/proc/array.c +++ b/fs/proc/array.c | |||
| @@ -288,7 +288,7 @@ static void render_cap_t(struct seq_file *m, const char *header, | |||
| 288 | seq_printf(m, "%s", header); | 288 | seq_printf(m, "%s", header); |
| 289 | CAP_FOR_EACH_U32(__capi) { | 289 | CAP_FOR_EACH_U32(__capi) { |
| 290 | seq_printf(m, "%08x", | 290 | seq_printf(m, "%08x", |
| 291 | a->cap[(_LINUX_CAPABILITY_U32S-1) - __capi]); | 291 | a->cap[(_KERNEL_CAPABILITY_U32S-1) - __capi]); |
| 292 | } | 292 | } |
| 293 | seq_printf(m, "\n"); | 293 | seq_printf(m, "\n"); |
| 294 | } | 294 | } |
diff --git a/fs/proc/base.c b/fs/proc/base.c index c447e0743a3c..3b455371e7ff 100644 --- a/fs/proc/base.c +++ b/fs/proc/base.c | |||
| @@ -127,6 +127,25 @@ struct pid_entry { | |||
| 127 | NULL, &proc_single_file_operations, \ | 127 | NULL, &proc_single_file_operations, \ |
| 128 | { .proc_show = &proc_##OTYPE } ) | 128 | { .proc_show = &proc_##OTYPE } ) |
| 129 | 129 | ||
| 130 | /* | ||
| 131 | * Count the number of hardlinks for the pid_entry table, excluding the . | ||
| 132 | * and .. links. | ||
| 133 | */ | ||
| 134 | static unsigned int pid_entry_count_dirs(const struct pid_entry *entries, | ||
| 135 | unsigned int n) | ||
| 136 | { | ||
| 137 | unsigned int i; | ||
| 138 | unsigned int count; | ||
| 139 | |||
| 140 | count = 0; | ||
| 141 | for (i = 0; i < n; ++i) { | ||
| 142 | if (S_ISDIR(entries[i].mode)) | ||
| 143 | ++count; | ||
| 144 | } | ||
| 145 | |||
| 146 | return count; | ||
| 147 | } | ||
| 148 | |||
| 130 | int maps_protect; | 149 | int maps_protect; |
| 131 | EXPORT_SYMBOL(maps_protect); | 150 | EXPORT_SYMBOL(maps_protect); |
| 132 | 151 | ||
| @@ -2585,10 +2604,9 @@ static struct dentry *proc_pid_instantiate(struct inode *dir, | |||
| 2585 | inode->i_op = &proc_tgid_base_inode_operations; | 2604 | inode->i_op = &proc_tgid_base_inode_operations; |
| 2586 | inode->i_fop = &proc_tgid_base_operations; | 2605 | inode->i_fop = &proc_tgid_base_operations; |
| 2587 | inode->i_flags|=S_IMMUTABLE; | 2606 | inode->i_flags|=S_IMMUTABLE; |
| 2588 | inode->i_nlink = 5; | 2607 | |
| 2589 | #ifdef CONFIG_SECURITY | 2608 | inode->i_nlink = 2 + pid_entry_count_dirs(tgid_base_stuff, |
| 2590 | inode->i_nlink += 1; | 2609 | ARRAY_SIZE(tgid_base_stuff)); |
| 2591 | #endif | ||
| 2592 | 2610 | ||
| 2593 | dentry->d_op = &pid_dentry_operations; | 2611 | dentry->d_op = &pid_dentry_operations; |
| 2594 | 2612 | ||
| @@ -2816,10 +2834,9 @@ static struct dentry *proc_task_instantiate(struct inode *dir, | |||
| 2816 | inode->i_op = &proc_tid_base_inode_operations; | 2834 | inode->i_op = &proc_tid_base_inode_operations; |
| 2817 | inode->i_fop = &proc_tid_base_operations; | 2835 | inode->i_fop = &proc_tid_base_operations; |
| 2818 | inode->i_flags|=S_IMMUTABLE; | 2836 | inode->i_flags|=S_IMMUTABLE; |
| 2819 | inode->i_nlink = 4; | 2837 | |
| 2820 | #ifdef CONFIG_SECURITY | 2838 | inode->i_nlink = 2 + pid_entry_count_dirs(tid_base_stuff, |
| 2821 | inode->i_nlink += 1; | 2839 | ARRAY_SIZE(tid_base_stuff)); |
| 2822 | #endif | ||
| 2823 | 2840 | ||
| 2824 | dentry->d_op = &pid_dentry_operations; | 2841 | dentry->d_op = &pid_dentry_operations; |
| 2825 | 2842 | ||
diff --git a/fs/proc/proc_misc.c b/fs/proc/proc_misc.c index 32dc14cd8900..7e277f2ad466 100644 --- a/fs/proc/proc_misc.c +++ b/fs/proc/proc_misc.c | |||
| @@ -716,7 +716,7 @@ static ssize_t kpagecount_read(struct file *file, char __user *buf, | |||
| 716 | pfn = src / KPMSIZE; | 716 | pfn = src / KPMSIZE; |
| 717 | count = min_t(size_t, count, (max_pfn * KPMSIZE) - src); | 717 | count = min_t(size_t, count, (max_pfn * KPMSIZE) - src); |
| 718 | if (src & KPMMASK || count & KPMMASK) | 718 | if (src & KPMMASK || count & KPMMASK) |
| 719 | return -EIO; | 719 | return -EINVAL; |
| 720 | 720 | ||
| 721 | while (count > 0) { | 721 | while (count > 0) { |
| 722 | ppage = NULL; | 722 | ppage = NULL; |
| @@ -726,7 +726,7 @@ static ssize_t kpagecount_read(struct file *file, char __user *buf, | |||
| 726 | if (!ppage) | 726 | if (!ppage) |
| 727 | pcount = 0; | 727 | pcount = 0; |
| 728 | else | 728 | else |
| 729 | pcount = atomic_read(&ppage->_count); | 729 | pcount = page_mapcount(ppage); |
| 730 | 730 | ||
| 731 | if (put_user(pcount, out++)) { | 731 | if (put_user(pcount, out++)) { |
| 732 | ret = -EFAULT; | 732 | ret = -EFAULT; |
| @@ -782,7 +782,7 @@ static ssize_t kpageflags_read(struct file *file, char __user *buf, | |||
| 782 | pfn = src / KPMSIZE; | 782 | pfn = src / KPMSIZE; |
| 783 | count = min_t(unsigned long, count, (max_pfn * KPMSIZE) - src); | 783 | count = min_t(unsigned long, count, (max_pfn * KPMSIZE) - src); |
| 784 | if (src & KPMMASK || count & KPMMASK) | 784 | if (src & KPMMASK || count & KPMMASK) |
| 785 | return -EIO; | 785 | return -EINVAL; |
| 786 | 786 | ||
| 787 | while (count > 0) { | 787 | while (count > 0) { |
| 788 | ppage = NULL; | 788 | ppage = NULL; |
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 88717c0f941b..17403629e330 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c | |||
| @@ -496,7 +496,7 @@ const struct file_operations proc_clear_refs_operations = { | |||
| 496 | }; | 496 | }; |
| 497 | 497 | ||
| 498 | struct pagemapread { | 498 | struct pagemapread { |
| 499 | char __user *out, *end; | 499 | u64 __user *out, *end; |
| 500 | }; | 500 | }; |
| 501 | 501 | ||
| 502 | #define PM_ENTRY_BYTES sizeof(u64) | 502 | #define PM_ENTRY_BYTES sizeof(u64) |
| @@ -519,21 +519,11 @@ struct pagemapread { | |||
| 519 | static int add_to_pagemap(unsigned long addr, u64 pfn, | 519 | static int add_to_pagemap(unsigned long addr, u64 pfn, |
| 520 | struct pagemapread *pm) | 520 | struct pagemapread *pm) |
| 521 | { | 521 | { |
| 522 | /* | ||
| 523 | * Make sure there's room in the buffer for an | ||
| 524 | * entire entry. Otherwise, only copy part of | ||
| 525 | * the pfn. | ||
| 526 | */ | ||
| 527 | if (pm->out + PM_ENTRY_BYTES >= pm->end) { | ||
| 528 | if (copy_to_user(pm->out, &pfn, pm->end - pm->out)) | ||
| 529 | return -EFAULT; | ||
| 530 | pm->out = pm->end; | ||
| 531 | return PM_END_OF_BUFFER; | ||
| 532 | } | ||
| 533 | |||
| 534 | if (put_user(pfn, pm->out)) | 522 | if (put_user(pfn, pm->out)) |
| 535 | return -EFAULT; | 523 | return -EFAULT; |
| 536 | pm->out += PM_ENTRY_BYTES; | 524 | pm->out++; |
| 525 | if (pm->out >= pm->end) | ||
| 526 | return PM_END_OF_BUFFER; | ||
| 537 | return 0; | 527 | return 0; |
| 538 | } | 528 | } |
| 539 | 529 | ||
| @@ -634,7 +624,7 @@ static ssize_t pagemap_read(struct file *file, char __user *buf, | |||
| 634 | 624 | ||
| 635 | ret = -EINVAL; | 625 | ret = -EINVAL; |
| 636 | /* file position must be aligned */ | 626 | /* file position must be aligned */ |
| 637 | if (*ppos % PM_ENTRY_BYTES) | 627 | if ((*ppos % PM_ENTRY_BYTES) || (count % PM_ENTRY_BYTES)) |
| 638 | goto out_task; | 628 | goto out_task; |
| 639 | 629 | ||
| 640 | ret = 0; | 630 | ret = 0; |
| @@ -664,8 +654,8 @@ static ssize_t pagemap_read(struct file *file, char __user *buf, | |||
| 664 | goto out_pages; | 654 | goto out_pages; |
| 665 | } | 655 | } |
| 666 | 656 | ||
| 667 | pm.out = buf; | 657 | pm.out = (u64 *)buf; |
| 668 | pm.end = buf + count; | 658 | pm.end = (u64 *)(buf + count); |
| 669 | 659 | ||
| 670 | if (!ptrace_may_attach(task)) { | 660 | if (!ptrace_may_attach(task)) { |
| 671 | ret = -EIO; | 661 | ret = -EIO; |
| @@ -690,9 +680,9 @@ static ssize_t pagemap_read(struct file *file, char __user *buf, | |||
| 690 | if (ret == PM_END_OF_BUFFER) | 680 | if (ret == PM_END_OF_BUFFER) |
| 691 | ret = 0; | 681 | ret = 0; |
| 692 | /* don't need mmap_sem for these, but this looks cleaner */ | 682 | /* don't need mmap_sem for these, but this looks cleaner */ |
| 693 | *ppos += pm.out - buf; | 683 | *ppos += (char *)pm.out - buf; |
| 694 | if (!ret) | 684 | if (!ret) |
| 695 | ret = pm.out - buf; | 685 | ret = (char *)pm.out - buf; |
| 696 | } | 686 | } |
| 697 | 687 | ||
| 698 | out_pages: | 688 | out_pages: |
diff --git a/fs/splice.c b/fs/splice.c index 78150038b584..aa5f6f60b305 100644 --- a/fs/splice.c +++ b/fs/splice.c | |||
| @@ -58,8 +58,8 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, | |||
| 58 | */ | 58 | */ |
| 59 | wait_on_page_writeback(page); | 59 | wait_on_page_writeback(page); |
| 60 | 60 | ||
| 61 | if (PagePrivate(page)) | 61 | if (PagePrivate(page) && !try_to_release_page(page, GFP_KERNEL)) |
| 62 | try_to_release_page(page, GFP_KERNEL); | 62 | goto out_unlock; |
| 63 | 63 | ||
| 64 | /* | 64 | /* |
| 65 | * If we succeeded in removing the mapping, set LRU flag | 65 | * If we succeeded in removing the mapping, set LRU flag |
| @@ -75,6 +75,7 @@ static int page_cache_pipe_buf_steal(struct pipe_inode_info *pipe, | |||
| 75 | * Raced with truncate or failed to remove page from current | 75 | * Raced with truncate or failed to remove page from current |
| 76 | * address space, unlock and return failure. | 76 | * address space, unlock and return failure. |
| 77 | */ | 77 | */ |
| 78 | out_unlock: | ||
| 78 | unlock_page(page); | 79 | unlock_page(page); |
| 79 | return 1; | 80 | return 1; |
| 80 | } | 81 | } |
| @@ -983,7 +984,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, | |||
| 983 | 984 | ||
| 984 | while (len) { | 985 | while (len) { |
| 985 | size_t read_len; | 986 | size_t read_len; |
| 986 | loff_t pos = sd->pos; | 987 | loff_t pos = sd->pos, prev_pos = pos; |
| 987 | 988 | ||
| 988 | ret = do_splice_to(in, &pos, pipe, len, flags); | 989 | ret = do_splice_to(in, &pos, pipe, len, flags); |
| 989 | if (unlikely(ret <= 0)) | 990 | if (unlikely(ret <= 0)) |
| @@ -998,15 +999,19 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, | |||
| 998 | * could get stuck data in the internal pipe: | 999 | * could get stuck data in the internal pipe: |
| 999 | */ | 1000 | */ |
| 1000 | ret = actor(pipe, sd); | 1001 | ret = actor(pipe, sd); |
| 1001 | if (unlikely(ret <= 0)) | 1002 | if (unlikely(ret <= 0)) { |
| 1003 | sd->pos = prev_pos; | ||
| 1002 | goto out_release; | 1004 | goto out_release; |
| 1005 | } | ||
| 1003 | 1006 | ||
| 1004 | bytes += ret; | 1007 | bytes += ret; |
| 1005 | len -= ret; | 1008 | len -= ret; |
| 1006 | sd->pos = pos; | 1009 | sd->pos = pos; |
| 1007 | 1010 | ||
| 1008 | if (ret < read_len) | 1011 | if (ret < read_len) { |
| 1012 | sd->pos = prev_pos + ret; | ||
| 1009 | goto out_release; | 1013 | goto out_release; |
| 1014 | } | ||
| 1010 | } | 1015 | } |
| 1011 | 1016 | ||
| 1012 | done: | 1017 | done: |
| @@ -1072,7 +1077,7 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | |||
| 1072 | 1077 | ||
| 1073 | ret = splice_direct_to_actor(in, &sd, direct_splice_actor); | 1078 | ret = splice_direct_to_actor(in, &sd, direct_splice_actor); |
| 1074 | if (ret > 0) | 1079 | if (ret > 0) |
| 1075 | *ppos += ret; | 1080 | *ppos = sd.pos; |
| 1076 | 1081 | ||
| 1077 | return ret; | 1082 | return ret; |
| 1078 | } | 1083 | } |
diff --git a/include/asm-arm/arch-at91/io.h b/include/asm-arm/arch-at91/io.h index 80073fd36b8e..f8beaa228467 100644 --- a/include/asm-arm/arch-at91/io.h +++ b/include/asm-arm/arch-at91/io.h | |||
| @@ -21,8 +21,6 @@ | |||
| 21 | #ifndef __ASM_ARCH_IO_H | 21 | #ifndef __ASM_ARCH_IO_H |
| 22 | #define __ASM_ARCH_IO_H | 22 | #define __ASM_ARCH_IO_H |
| 23 | 23 | ||
| 24 | #include <asm/io.h> | ||
| 25 | |||
| 26 | #define IO_SPACE_LIMIT 0xFFFFFFFF | 24 | #define IO_SPACE_LIMIT 0xFFFFFFFF |
| 27 | 25 | ||
| 28 | #define __io(a) ((void __iomem *)(a)) | 26 | #define __io(a) ((void __iomem *)(a)) |
diff --git a/include/asm-arm/arch-pxa/mfp-pxa27x.h b/include/asm-arm/arch-pxa/mfp-pxa27x.h index eb6eaa174f8d..bc73ab84167c 100644 --- a/include/asm-arm/arch-pxa/mfp-pxa27x.h +++ b/include/asm-arm/arch-pxa/mfp-pxa27x.h | |||
| @@ -112,6 +112,7 @@ | |||
| 112 | #define GPIO57_nIOIS16 MFP_CFG_IN(GPIO57, AF1) | 112 | #define GPIO57_nIOIS16 MFP_CFG_IN(GPIO57, AF1) |
| 113 | #define GPIO56_nPWAIT MFP_CFG_IN(GPIO56, AF1) | 113 | #define GPIO56_nPWAIT MFP_CFG_IN(GPIO56, AF1) |
| 114 | #define GPIO79_PSKTSEL MFP_CFG_OUT(GPIO79, AF1, DRIVE_HIGH) | 114 | #define GPIO79_PSKTSEL MFP_CFG_OUT(GPIO79, AF1, DRIVE_HIGH) |
| 115 | #define GPIO104_PSKTSEL MFP_CFG_OUT(GPIO104, AF1, DRIVE_HIGH) | ||
| 115 | 116 | ||
| 116 | /* I2C */ | 117 | /* I2C */ |
| 117 | #define GPIO117_I2C_SCL MFP_CFG_IN(GPIO117, AF1) | 118 | #define GPIO117_I2C_SCL MFP_CFG_IN(GPIO117, AF1) |
diff --git a/include/asm-arm/arch-pxa/pxa2xx-gpio.h b/include/asm-arm/arch-pxa/pxa2xx-gpio.h index 763313c5e6be..b81cd63cb2eb 100644 --- a/include/asm-arm/arch-pxa/pxa2xx-gpio.h +++ b/include/asm-arm/arch-pxa/pxa2xx-gpio.h | |||
| @@ -134,7 +134,11 @@ | |||
| 134 | #define GPIO93_CIF_DD_6 93 /* Camera data pin 6 */ | 134 | #define GPIO93_CIF_DD_6 93 /* Camera data pin 6 */ |
| 135 | #define GPIO94_CIF_DD_5 94 /* Camera data pin 5 */ | 135 | #define GPIO94_CIF_DD_5 94 /* Camera data pin 5 */ |
| 136 | #define GPIO95_CIF_DD_4 95 /* Camera data pin 4 */ | 136 | #define GPIO95_CIF_DD_4 95 /* Camera data pin 4 */ |
| 137 | #define GPIO96_FFRXD 96 /* FFUART recieve */ | ||
| 138 | #define GPIO98_FFRTS 98 /* FFUART request to send */ | ||
| 137 | #define GPIO98_CIF_DD_0 98 /* Camera data pin 0 */ | 139 | #define GPIO98_CIF_DD_0 98 /* Camera data pin 0 */ |
| 140 | #define GPIO99_FFTXD 99 /* FFUART transmit data */ | ||
| 141 | #define GPIO100_FFCTS 100 /* FFUART Clear to send */ | ||
| 138 | #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ | 142 | #define GPIO102_nPCE_1 102 /* PCMCIA (PXA27x) */ |
| 139 | #define GPIO103_CIF_DD_3 103 /* Camera data pin 3 */ | 143 | #define GPIO103_CIF_DD_3 103 /* Camera data pin 3 */ |
| 140 | #define GPIO104_CIF_DD_2 104 /* Camera data pin 2 */ | 144 | #define GPIO104_CIF_DD_2 104 /* Camera data pin 2 */ |
| @@ -316,6 +320,8 @@ | |||
| 316 | #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) | 320 | #define GPIO85_nPCE_1_MD (85 | GPIO_ALT_FN_1_OUT) |
| 317 | #define GPIO85_CIF_LV_MD (85 | GPIO_ALT_FN_3_IN) | 321 | #define GPIO85_CIF_LV_MD (85 | GPIO_ALT_FN_3_IN) |
| 318 | #define GPIO86_nPCE_1_MD (86 | GPIO_ALT_FN_1_OUT) | 322 | #define GPIO86_nPCE_1_MD (86 | GPIO_ALT_FN_1_OUT) |
| 323 | #define GPIO88_USBH1_PWR_MD (88 | GPIO_ALT_FN_1_IN) | ||
| 324 | #define GPIO89_USBH1_PEN_MD (89 | GPIO_ALT_FN_2_OUT) | ||
| 319 | #define GPIO90_CIF_DD_4_MD (90 | GPIO_ALT_FN_3_IN) | 325 | #define GPIO90_CIF_DD_4_MD (90 | GPIO_ALT_FN_3_IN) |
| 320 | #define GPIO91_CIF_DD_5_MD (91 | GPIO_ALT_FN_3_IN) | 326 | #define GPIO91_CIF_DD_5_MD (91 | GPIO_ALT_FN_3_IN) |
| 321 | #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) | 327 | #define GPIO92_MMCDAT0_MD (92 | GPIO_ALT_FN_1_OUT) |
| @@ -324,8 +330,11 @@ | |||
| 324 | #define GPIO95_CIF_DD_4_MD (95 | GPIO_ALT_FN_2_IN) | 330 | #define GPIO95_CIF_DD_4_MD (95 | GPIO_ALT_FN_2_IN) |
| 325 | #define GPIO95_KP_MKIN6_MD (95 | GPIO_ALT_FN_3_IN) | 331 | #define GPIO95_KP_MKIN6_MD (95 | GPIO_ALT_FN_3_IN) |
| 326 | #define GPIO96_KP_DKIN3_MD (96 | GPIO_ALT_FN_1_IN) | 332 | #define GPIO96_KP_DKIN3_MD (96 | GPIO_ALT_FN_1_IN) |
| 333 | #define GPIO96_FFRXD_MD (96 | GPIO_ALT_FN_3_IN) | ||
| 327 | #define GPIO97_KP_MKIN3_MD (97 | GPIO_ALT_FN_3_IN) | 334 | #define GPIO97_KP_MKIN3_MD (97 | GPIO_ALT_FN_3_IN) |
| 328 | #define GPIO98_CIF_DD_0_MD (98 | GPIO_ALT_FN_2_IN) | 335 | #define GPIO98_CIF_DD_0_MD (98 | GPIO_ALT_FN_2_IN) |
| 336 | #define GPIO98_FFRTS_MD (98 | GPIO_ALT_FN_3_OUT) | ||
| 337 | #define GPIO99_FFTXD_MD (99 | GPIO_ALT_FN_3_OUT) | ||
| 329 | #define GPIO100_KP_MKIN0_MD (100 | GPIO_ALT_FN_1_IN) | 338 | #define GPIO100_KP_MKIN0_MD (100 | GPIO_ALT_FN_1_IN) |
| 330 | #define GPIO101_KP_MKIN1_MD (101 | GPIO_ALT_FN_1_IN) | 339 | #define GPIO101_KP_MKIN1_MD (101 | GPIO_ALT_FN_1_IN) |
| 331 | #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) | 340 | #define GPIO102_nPCE_1_MD (102 | GPIO_ALT_FN_1_OUT) |
diff --git a/include/asm-arm/pgtable-nommu.h b/include/asm-arm/pgtable-nommu.h index 2e5868bbe03b..386fcc10a973 100644 --- a/include/asm-arm/pgtable-nommu.h +++ b/include/asm-arm/pgtable-nommu.h | |||
| @@ -16,7 +16,6 @@ | |||
| 16 | #include <linux/slab.h> | 16 | #include <linux/slab.h> |
| 17 | #include <asm/processor.h> | 17 | #include <asm/processor.h> |
| 18 | #include <asm/page.h> | 18 | #include <asm/page.h> |
| 19 | #include <asm/io.h> | ||
| 20 | 19 | ||
| 21 | /* | 20 | /* |
| 22 | * Trivial page table functions. | 21 | * Trivial page table functions. |
diff --git a/include/asm-arm/spinlock.h b/include/asm-arm/spinlock.h index 800ba5254daf..2b41ebbfa7ff 100644 --- a/include/asm-arm/spinlock.h +++ b/include/asm-arm/spinlock.h | |||
| @@ -142,7 +142,7 @@ static inline void __raw_write_unlock(raw_rwlock_t *rw) | |||
| 142 | } | 142 | } |
| 143 | 143 | ||
| 144 | /* write_can_lock - would write_trylock() succeed? */ | 144 | /* write_can_lock - would write_trylock() succeed? */ |
| 145 | #define __raw_write_can_lock(x) ((x)->lock == 0x80000000) | 145 | #define __raw_write_can_lock(x) ((x)->lock == 0) |
| 146 | 146 | ||
| 147 | /* | 147 | /* |
| 148 | * Read locks are a bit more hairy: | 148 | * Read locks are a bit more hairy: |
diff --git a/include/asm-blackfin/bfin-global.h b/include/asm-blackfin/bfin-global.h index a9248d883675..76033831eb35 100644 --- a/include/asm-blackfin/bfin-global.h +++ b/include/asm-blackfin/bfin-global.h | |||
| @@ -105,13 +105,6 @@ extern int sram_free(const void*); | |||
| 105 | extern void *sram_alloc_with_lsl(size_t, unsigned long); | 105 | extern void *sram_alloc_with_lsl(size_t, unsigned long); |
| 106 | extern int sram_free_with_lsl(const void*); | 106 | extern int sram_free_with_lsl(const void*); |
| 107 | 107 | ||
| 108 | extern void led_on(int); | ||
| 109 | extern void led_off(int); | ||
| 110 | extern void led_toggle(int); | ||
| 111 | extern void led_disp_num(int); | ||
| 112 | extern void led_toggle_num(int); | ||
| 113 | extern void init_leds(void); | ||
| 114 | |||
| 115 | extern const char bfin_board_name[]; | 108 | extern const char bfin_board_name[]; |
| 116 | extern unsigned long wall_jiffies; | 109 | extern unsigned long wall_jiffies; |
| 117 | 110 | ||
diff --git a/include/asm-blackfin/mach-bf527/anomaly.h b/include/asm-blackfin/mach-bf527/anomaly.h index 735fa02fafb2..4725268a5ada 100644 --- a/include/asm-blackfin/mach-bf527/anomaly.h +++ b/include/asm-blackfin/mach-bf527/anomaly.h | |||
| @@ -15,12 +15,16 @@ | |||
| 15 | 15 | ||
| 16 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ | 16 | /* Multi-Issue Instruction with dsp32shiftimm in slot1 and P-reg Store in slot2 Not Supported */ |
| 17 | #define ANOMALY_05000074 (1) | 17 | #define ANOMALY_05000074 (1) |
| 18 | /* DMA_RUN Bit Is Not Valid after a Peripheral Receive Channel DMA Stops */ | ||
| 19 | #define ANOMALY_05000119 (1) | ||
| 18 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ | 20 | /* Rx.H Cannot Be Used to Access 16-bit System MMR Registers */ |
| 19 | #define ANOMALY_05000122 (1) | 21 | #define ANOMALY_05000122 (1) |
| 20 | /* Spurious Hardware Error from an Access in the Shadow of a Conditional Branch */ | 22 | /* Spurious Hardware Error from an Access in the Shadow of a Conditional Branch */ |
| 21 | #define ANOMALY_05000245 (1) | 23 | #define ANOMALY_05000245 (1) |
| 22 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ | 24 | /* Sensitivity To Noise with Slow Input Edge Rates on External SPORT TX and RX Clocks */ |
| 23 | #define ANOMALY_05000265 (1) | 25 | #define ANOMALY_05000265 (1) |
| 26 | /* Errors when SSYNC, CSYNC, or Loads to LT, LB and LC Registers Are Interrupted */ | ||
| 27 | #define ANOMALY_05000312 (1) | ||
| 24 | /* Incorrect Access of OTP_STATUS During otp_write() Function */ | 28 | /* Incorrect Access of OTP_STATUS During otp_write() Function */ |
| 25 | #define ANOMALY_05000328 (1) | 29 | #define ANOMALY_05000328 (1) |
| 26 | /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */ | 30 | /* Disallowed Configuration Prevents Subsequent Allowed Configuration on Host DMA Port */ |
| @@ -92,7 +96,6 @@ | |||
| 92 | #define ANOMALY_05000266 (0) | 96 | #define ANOMALY_05000266 (0) |
| 93 | #define ANOMALY_05000273 (0) | 97 | #define ANOMALY_05000273 (0) |
| 94 | #define ANOMALY_05000311 (0) | 98 | #define ANOMALY_05000311 (0) |
| 95 | #define ANOMALY_05000312 (0) | ||
| 96 | #define ANOMALY_05000323 (0) | 99 | #define ANOMALY_05000323 (0) |
| 97 | #define ANOMALY_05000363 (0) | 100 | #define ANOMALY_05000363 (0) |
| 98 | 101 | ||
diff --git a/include/asm-blackfin/mach-bf533/anomaly.h b/include/asm-blackfin/mach-bf533/anomaly.h index 5a6dcc5fa36c..8f7ea112fd3a 100644 --- a/include/asm-blackfin/mach-bf533/anomaly.h +++ b/include/asm-blackfin/mach-bf533/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf533/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf533/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -176,6 +176,21 @@ | |||
| 176 | #define ANOMALY_05000315 (1) | 176 | #define ANOMALY_05000315 (1) |
| 177 | /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */ | 177 | /* Internal Voltage Regulator Values of 1.05V, 1.10V and 1.15V Not Allowed for LQFP Packages */ |
| 178 | #define ANOMALY_05000319 (ANOMALY_BF531 || ANOMALY_BF532) | 178 | #define ANOMALY_05000319 (ANOMALY_BF531 || ANOMALY_BF532) |
| 179 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | ||
| 180 | #define ANOMALY_05000357 (1) | ||
| 181 | /* UART Break Signal Issues */ | ||
| 182 | #define ANOMALY_05000363 (__SILICON_REVISION__ < 5) | ||
| 183 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | ||
| 184 | #define ANOMALY_05000366 (1) | ||
| 185 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
| 186 | #define ANOMALY_05000371 (1) | ||
| 187 | /* PPI Does Not Start Properly In Specific Mode */ | ||
| 188 | #define ANOMALY_05000400 (__SILICON_REVISION__ >= 5) | ||
| 189 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | ||
| 190 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 5) | ||
| 191 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
| 192 | #define ANOMALY_05000403 (1) | ||
| 193 | |||
| 179 | 194 | ||
| 180 | /* These anomalies have been "phased" out of analog.com anomaly sheets and are | 195 | /* These anomalies have been "phased" out of analog.com anomaly sheets and are |
| 181 | * here to show running on older silicon just isn't feasible. | 196 | * here to show running on older silicon just isn't feasible. |
| @@ -249,20 +264,6 @@ | |||
| 249 | #define ANOMALY_05000192 (__SILICON_REVISION__ < 3) | 264 | #define ANOMALY_05000192 (__SILICON_REVISION__ < 3) |
| 250 | /* Internal Voltage Regulator may not start up */ | 265 | /* Internal Voltage Regulator may not start up */ |
| 251 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) | 266 | #define ANOMALY_05000206 (__SILICON_REVISION__ < 3) |
| 252 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | ||
| 253 | #define ANOMALY_05000357 (1) | ||
| 254 | /* UART Break Signal Issues */ | ||
| 255 | #define ANOMALY_05000363 (__SILICON_REVISION__ < 5) | ||
| 256 | /* PPI Underflow Error Goes Undetected in ITU-R 656 Mode */ | ||
| 257 | #define ANOMALY_05000366 (1) | ||
| 258 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
| 259 | #define ANOMALY_05000371 (1) | ||
| 260 | /* PPI Does Not Start Properly In Specific Mode */ | ||
| 261 | #define ANOMALY_05000400 (__SILICON_REVISION__ == 5) | ||
| 262 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | ||
| 263 | #define ANOMALY_05000402 (__SILICON_REVISION__ == 5) | ||
| 264 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | ||
| 265 | #define ANOMALY_05000403 (1) | ||
| 266 | 267 | ||
| 267 | /* Anomalies that don't exist on this proc */ | 268 | /* Anomalies that don't exist on this proc */ |
| 268 | #define ANOMALY_05000266 (0) | 269 | #define ANOMALY_05000266 (0) |
diff --git a/include/asm-blackfin/mach-bf537/anomaly.h b/include/asm-blackfin/mach-bf537/anomaly.h index a6b08facb242..8460ab9c324f 100644 --- a/include/asm-blackfin/mach-bf537/anomaly.h +++ b/include/asm-blackfin/mach-bf537/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf537/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf537/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| @@ -132,8 +132,8 @@ | |||
| 132 | #define ANOMALY_05000322 (1) | 132 | #define ANOMALY_05000322 (1) |
| 133 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ | 133 | /* Ethernet MAC MDIO Reads Do Not Meet IEEE Specification */ |
| 134 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) | 134 | #define ANOMALY_05000341 (__SILICON_REVISION__ >= 3) |
| 135 | /* New Feature: UART Remains Enabled after UART Boot (Not Available on Older Silicon) */ | 135 | /* New Feature: UART Remains Enabled after UART Boot */ |
| 136 | #define ANOMALY_05000350 (__SILICON_REVISION__ < 3) | 136 | #define ANOMALY_05000350 (__SILICON_REVISION__ >= 3) |
| 137 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ | 137 | /* Regulator Programming Blocked when Hibernate Wakeup Source Remains Active */ |
| 138 | #define ANOMALY_05000355 (1) | 138 | #define ANOMALY_05000355 (1) |
| 139 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ | 139 | /* Serial Port (SPORT) Multichannel Transmit Failure when Channel 0 Is Disabled */ |
| @@ -145,12 +145,10 @@ | |||
| 145 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | 145 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ |
| 146 | #define ANOMALY_05000371 (1) | 146 | #define ANOMALY_05000371 (1) |
| 147 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ | 147 | /* SSYNC Stalls Processor when Executed from Non-Cacheable Memory */ |
| 148 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 3) | 148 | #define ANOMALY_05000402 (__SILICON_REVISION__ >= 5) |
| 149 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ | 149 | /* Level-Sensitive External GPIO Wakeups May Cause Indefinite Stall */ |
| 150 | #define ANOMALY_05000403 (1) | 150 | #define ANOMALY_05000403 (1) |
| 151 | 151 | ||
| 152 | |||
| 153 | |||
| 154 | /* Anomalies that don't exist on this proc */ | 152 | /* Anomalies that don't exist on this proc */ |
| 155 | #define ANOMALY_05000125 (0) | 153 | #define ANOMALY_05000125 (0) |
| 156 | #define ANOMALY_05000158 (0) | 154 | #define ANOMALY_05000158 (0) |
diff --git a/include/asm-blackfin/mach-bf548/anomaly.h b/include/asm-blackfin/mach-bf548/anomaly.h index 49d3cebc5293..3ad59655881a 100644 --- a/include/asm-blackfin/mach-bf548/anomaly.h +++ b/include/asm-blackfin/mach-bf548/anomaly.h | |||
| @@ -75,6 +75,8 @@ | |||
| 75 | #define ANOMALY_05000365 (1) | 75 | #define ANOMALY_05000365 (1) |
| 76 | /* Addressing Conflict between Boot ROM and Asynchronous Memory */ | 76 | /* Addressing Conflict between Boot ROM and Asynchronous Memory */ |
| 77 | #define ANOMALY_05000369 (1) | 77 | #define ANOMALY_05000369 (1) |
| 78 | /* Possible RETS Register Corruption when Subroutine Is under 5 Cycles in Duration */ | ||
| 79 | #define ANOMALY_05000371 (1) | ||
| 78 | /* Mobile DDR Operation Not Functional */ | 80 | /* Mobile DDR Operation Not Functional */ |
| 79 | #define ANOMALY_05000377 (1) | 81 | #define ANOMALY_05000377 (1) |
| 80 | /* Security/Authentication Speedpath Causes Authentication To Fail To Initiate */ | 82 | /* Security/Authentication Speedpath Causes Authentication To Fail To Initiate */ |
diff --git a/include/asm-blackfin/mach-bf561/anomaly.h b/include/asm-blackfin/mach-bf561/anomaly.h index 82157caa96a2..5c5d7d7d695f 100644 --- a/include/asm-blackfin/mach-bf561/anomaly.h +++ b/include/asm-blackfin/mach-bf561/anomaly.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | * File: include/asm-blackfin/mach-bf561/anomaly.h | 2 | * File: include/asm-blackfin/mach-bf561/anomaly.h |
| 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | 3 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ |
| 4 | * | 4 | * |
| 5 | * Copyright (C) 2004-2007 Analog Devices Inc. | 5 | * Copyright (C) 2004-2008 Analog Devices Inc. |
| 6 | * Licensed under the GPL-2 or later. | 6 | * Licensed under the GPL-2 or later. |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
diff --git a/include/asm-frv/checksum.h b/include/asm-frv/checksum.h index 9b1689850187..269da09ff637 100644 --- a/include/asm-frv/checksum.h +++ b/include/asm-frv/checksum.h | |||
| @@ -75,7 +75,7 @@ __sum16 ip_fast_csum(const void *iph, unsigned int ihl) | |||
| 75 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=r" (inc), "=&r"(tmp) | 75 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=r" (inc), "=&r"(tmp) |
| 76 | : "0" (sum), "1" (iph), "2" (ihl), "3" (4), | 76 | : "0" (sum), "1" (iph), "2" (ihl), "3" (4), |
| 77 | "m"(*(volatile struct { int _[100]; } *)iph) | 77 | "m"(*(volatile struct { int _[100]; } *)iph) |
| 78 | : "icc0", "icc1" | 78 | : "icc0", "icc1", "memory" |
| 79 | ); | 79 | ); |
| 80 | 80 | ||
| 81 | return (__force __sum16)~sum; | 81 | return (__force __sum16)~sum; |
diff --git a/include/asm-frv/mem-layout.h b/include/asm-frv/mem-layout.h index 734a1d0583b6..2947764fc0e0 100644 --- a/include/asm-frv/mem-layout.h +++ b/include/asm-frv/mem-layout.h | |||
| @@ -31,6 +31,13 @@ | |||
| 31 | 31 | ||
| 32 | #define PAGE_MASK (~(PAGE_SIZE-1)) | 32 | #define PAGE_MASK (~(PAGE_SIZE-1)) |
| 33 | 33 | ||
| 34 | /* | ||
| 35 | * the slab must be aligned such that load- and store-double instructions don't | ||
| 36 | * fault if used | ||
| 37 | */ | ||
| 38 | #define ARCH_KMALLOC_MINALIGN 8 | ||
| 39 | #define ARCH_SLAB_MINALIGN 8 | ||
| 40 | |||
| 34 | /*****************************************************************************/ | 41 | /*****************************************************************************/ |
| 35 | /* | 42 | /* |
| 36 | * virtual memory layout from kernel's point of view | 43 | * virtual memory layout from kernel's point of view |
diff --git a/include/asm-h8300/cacheflush.h b/include/asm-h8300/cacheflush.h index 71210d141b64..5ffdca217b95 100644 --- a/include/asm-h8300/cacheflush.h +++ b/include/asm-h8300/cacheflush.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | */ | 3 | */ |
| 4 | 4 | ||
| 5 | #ifndef _ASM_H8300_CACHEFLUSH_H | 5 | #ifndef _ASM_H8300_CACHEFLUSH_H |
| 6 | #define _AMS_H8300_CACHEFLUSH_H | 6 | #define _ASM_H8300_CACHEFLUSH_H |
| 7 | 7 | ||
| 8 | /* | 8 | /* |
| 9 | * Cache handling functions | 9 | * Cache handling functions |
diff --git a/include/asm-ia64/patch.h b/include/asm-ia64/patch.h index a71543084fb4..295fe6ab4584 100644 --- a/include/asm-ia64/patch.h +++ b/include/asm-ia64/patch.h | |||
| @@ -21,6 +21,7 @@ extern void ia64_patch_imm60 (u64 insn_addr, u64 val); /* patch "brl" w/ip-rel | |||
| 21 | extern void ia64_patch_mckinley_e9 (unsigned long start, unsigned long end); | 21 | extern void ia64_patch_mckinley_e9 (unsigned long start, unsigned long end); |
| 22 | extern void ia64_patch_vtop (unsigned long start, unsigned long end); | 22 | extern void ia64_patch_vtop (unsigned long start, unsigned long end); |
| 23 | extern void ia64_patch_phys_stack_reg(unsigned long val); | 23 | extern void ia64_patch_phys_stack_reg(unsigned long val); |
| 24 | extern void ia64_patch_rse (unsigned long start, unsigned long end); | ||
| 24 | extern void ia64_patch_gate (void); | 25 | extern void ia64_patch_gate (void); |
| 25 | 26 | ||
| 26 | #endif /* _ASM_IA64_PATCH_H */ | 27 | #endif /* _ASM_IA64_PATCH_H */ |
diff --git a/include/asm-ia64/ptrace.h b/include/asm-ia64/ptrace.h index 4b2a8d40ebc5..15f8dcfe6eee 100644 --- a/include/asm-ia64/ptrace.h +++ b/include/asm-ia64/ptrace.h | |||
| @@ -76,7 +76,7 @@ | |||
| 76 | # define KERNEL_STACK_SIZE_ORDER 0 | 76 | # define KERNEL_STACK_SIZE_ORDER 0 |
| 77 | #endif | 77 | #endif |
| 78 | 78 | ||
| 79 | #define IA64_RBS_OFFSET ((IA64_TASK_SIZE + IA64_THREAD_INFO_SIZE + 15) & ~15) | 79 | #define IA64_RBS_OFFSET ((IA64_TASK_SIZE + IA64_THREAD_INFO_SIZE + 31) & ~31) |
| 80 | #define IA64_STK_OFFSET ((1 << KERNEL_STACK_SIZE_ORDER)*PAGE_SIZE) | 80 | #define IA64_STK_OFFSET ((1 << KERNEL_STACK_SIZE_ORDER)*PAGE_SIZE) |
| 81 | 81 | ||
| 82 | #define KERNEL_STACK_SIZE IA64_STK_OFFSET | 82 | #define KERNEL_STACK_SIZE IA64_STK_OFFSET |
diff --git a/include/asm-ia64/sections.h b/include/asm-ia64/sections.h index dc42a359894f..7286e4a9fe84 100644 --- a/include/asm-ia64/sections.h +++ b/include/asm-ia64/sections.h | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | 10 | ||
| 11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; | 11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; |
| 12 | extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; | 12 | extern char __start___vtop_patchlist[], __end___vtop_patchlist[]; |
| 13 | extern char __start___rse_patchlist[], __end___rse_patchlist[]; | ||
| 13 | extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; | 14 | extern char __start___mckinley_e9_bundles[], __end___mckinley_e9_bundles[]; |
| 14 | extern char __start___phys_stack_reg_patchlist[], __end___phys_stack_reg_patchlist[]; | 15 | extern char __start___phys_stack_reg_patchlist[], __end___phys_stack_reg_patchlist[]; |
| 15 | extern char __start_gate_section[]; | 16 | extern char __start_gate_section[]; |
diff --git a/include/asm-m32r/uaccess.h b/include/asm-m32r/uaccess.h index bd8c83765a5c..1c7047bea200 100644 --- a/include/asm-m32r/uaccess.h +++ b/include/asm-m32r/uaccess.h | |||
| @@ -14,6 +14,7 @@ | |||
| 14 | #include <linux/errno.h> | 14 | #include <linux/errno.h> |
| 15 | #include <linux/thread_info.h> | 15 | #include <linux/thread_info.h> |
| 16 | #include <asm/page.h> | 16 | #include <asm/page.h> |
| 17 | #include <asm/setup.h> | ||
| 17 | 18 | ||
| 18 | #define VERIFY_READ 0 | 19 | #define VERIFY_READ 0 |
| 19 | #define VERIFY_WRITE 1 | 20 | #define VERIFY_WRITE 1 |
| @@ -106,7 +107,6 @@ static inline void set_fs(mm_segment_t s) | |||
| 106 | #else | 107 | #else |
| 107 | static inline int access_ok(int type, const void *addr, unsigned long size) | 108 | static inline int access_ok(int type, const void *addr, unsigned long size) |
| 108 | { | 109 | { |
| 109 | extern unsigned long memory_start, memory_end; | ||
| 110 | unsigned long val = (unsigned long)addr; | 110 | unsigned long val = (unsigned long)addr; |
| 111 | 111 | ||
| 112 | return ((val >= memory_start) && ((val + size) < memory_end)); | 112 | return ((val >= memory_start) && ((val + size) < memory_end)); |
diff --git a/include/asm-mips/mach-au1x00/au1xxx_dbdma.h b/include/asm-mips/mach-au1x00/au1xxx_dbdma.h index ad17d7ce516a..44a67bf05dc1 100644 --- a/include/asm-mips/mach-au1x00/au1xxx_dbdma.h +++ b/include/asm-mips/mach-au1x00/au1xxx_dbdma.h | |||
| @@ -355,6 +355,7 @@ void au1xxx_dbdma_dump(u32 chanid); | |||
| 355 | u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr); | 355 | u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr); |
| 356 | 356 | ||
| 357 | u32 au1xxx_ddma_add_device(dbdev_tab_t *dev); | 357 | u32 au1xxx_ddma_add_device(dbdev_tab_t *dev); |
| 358 | extern void au1xxx_ddma_del_device(u32 devid); | ||
| 358 | void *au1xxx_ddma_get_nextptr_virt(au1x_ddma_desc_t *dp); | 359 | void *au1xxx_ddma_get_nextptr_virt(au1x_ddma_desc_t *dp); |
| 359 | 360 | ||
| 360 | /* | 361 | /* |
diff --git a/include/asm-mips/mipsregs.h b/include/asm-mips/mipsregs.h index aa17f658f73c..a46f8e258e6b 100644 --- a/include/asm-mips/mipsregs.h +++ b/include/asm-mips/mipsregs.h | |||
| @@ -765,6 +765,9 @@ do { \ | |||
| 765 | #define read_c0_index() __read_32bit_c0_register($0, 0) | 765 | #define read_c0_index() __read_32bit_c0_register($0, 0) |
| 766 | #define write_c0_index(val) __write_32bit_c0_register($0, 0, val) | 766 | #define write_c0_index(val) __write_32bit_c0_register($0, 0, val) |
| 767 | 767 | ||
| 768 | #define read_c0_random() __read_32bit_c0_register($1, 0) | ||
| 769 | #define write_c0_random(val) __write_32bit_c0_register($1, 0, val) | ||
| 770 | |||
| 768 | #define read_c0_entrylo0() __read_ulong_c0_register($2, 0) | 771 | #define read_c0_entrylo0() __read_ulong_c0_register($2, 0) |
| 769 | #define write_c0_entrylo0(val) __write_ulong_c0_register($2, 0, val) | 772 | #define write_c0_entrylo0(val) __write_ulong_c0_register($2, 0, val) |
| 770 | 773 | ||
diff --git a/include/asm-mips/pgtable.h b/include/asm-mips/pgtable.h index 2f597eea4448..6a0edf72ffbc 100644 --- a/include/asm-mips/pgtable.h +++ b/include/asm-mips/pgtable.h | |||
| @@ -239,9 +239,10 @@ static inline pte_t pte_mkdirty(pte_t pte) | |||
| 239 | static inline pte_t pte_mkyoung(pte_t pte) | 239 | static inline pte_t pte_mkyoung(pte_t pte) |
| 240 | { | 240 | { |
| 241 | pte.pte_low |= _PAGE_ACCESSED; | 241 | pte.pte_low |= _PAGE_ACCESSED; |
| 242 | if (pte.pte_low & _PAGE_READ) | 242 | if (pte.pte_low & _PAGE_READ) { |
| 243 | pte.pte_low |= _PAGE_SILENT_READ; | 243 | pte.pte_low |= _PAGE_SILENT_READ; |
| 244 | pte.pte_high |= _PAGE_SILENT_READ; | 244 | pte.pte_high |= _PAGE_SILENT_READ; |
| 245 | } | ||
| 245 | return pte; | 246 | return pte; |
| 246 | } | 247 | } |
| 247 | #else | 248 | #else |
diff --git a/include/asm-mips/rtlx.h b/include/asm-mips/rtlx.h index 20b666022dcb..4ca3063ed2ce 100644 --- a/include/asm-mips/rtlx.h +++ b/include/asm-mips/rtlx.h | |||
| @@ -3,7 +3,7 @@ | |||
| 3 | * | 3 | * |
| 4 | */ | 4 | */ |
| 5 | 5 | ||
| 6 | #ifndef __ASM_RTLX_H | 6 | #ifndef __ASM_RTLX_H_ |
| 7 | #define __ASM_RTLX_H_ | 7 | #define __ASM_RTLX_H_ |
| 8 | 8 | ||
| 9 | #include <irq.h> | 9 | #include <irq.h> |
diff --git a/include/asm-mn10300/ipcbuf.h b/include/asm-mn10300/ipcbuf.h index efbbef8d1c69..f6f63d448272 100644 --- a/include/asm-mn10300/ipcbuf.h +++ b/include/asm-mn10300/ipcbuf.h | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | #ifndef _ASM_IPCBUF_H_ | 1 | #ifndef _ASM_IPCBUF_H |
| 2 | #define _ASM_IPCBUF_H | 2 | #define _ASM_IPCBUF_H |
| 3 | 3 | ||
| 4 | /* | 4 | /* |
diff --git a/include/asm-powerpc/io.h b/include/asm-powerpc/io.h index e0062d73db1c..89189488e286 100644 --- a/include/asm-powerpc/io.h +++ b/include/asm-powerpc/io.h | |||
| @@ -100,7 +100,7 @@ static inline type name(const volatile type __iomem *addr) \ | |||
| 100 | { \ | 100 | { \ |
| 101 | type ret; \ | 101 | type ret; \ |
| 102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ | 102 | __asm__ __volatile__("sync;" insn ";twi 0,%0,0;isync" \ |
| 103 | : "=r" (ret) : "r" (addr), "m" (*addr)); \ | 103 | : "=r" (ret) : "r" (addr), "m" (*addr) : "memory"); \ |
| 104 | return ret; \ | 104 | return ret; \ |
| 105 | } | 105 | } |
| 106 | 106 | ||
| @@ -108,8 +108,8 @@ static inline type name(const volatile type __iomem *addr) \ | |||
| 108 | static inline void name(volatile type __iomem *addr, type val) \ | 108 | static inline void name(volatile type __iomem *addr, type val) \ |
| 109 | { \ | 109 | { \ |
| 110 | __asm__ __volatile__("sync;" insn \ | 110 | __asm__ __volatile__("sync;" insn \ |
| 111 | : "=m" (*addr) : "r" (val), "r" (addr)); \ | 111 | : "=m" (*addr) : "r" (val), "r" (addr) : "memory"); \ |
| 112 | IO_SET_SYNC_FLAG(); \ | 112 | IO_SET_SYNC_FLAG(); \ |
| 113 | } | 113 | } |
| 114 | 114 | ||
| 115 | 115 | ||
| @@ -333,7 +333,8 @@ static inline unsigned int name(unsigned int port) \ | |||
| 333 | " .long 3b,5b\n" \ | 333 | " .long 3b,5b\n" \ |
| 334 | ".previous" \ | 334 | ".previous" \ |
| 335 | : "=&r" (x) \ | 335 | : "=&r" (x) \ |
| 336 | : "r" (port + _IO_BASE)); \ | 336 | : "r" (port + _IO_BASE) \ |
| 337 | : "memory"); \ | ||
| 337 | return x; \ | 338 | return x; \ |
| 338 | } | 339 | } |
| 339 | 340 | ||
| @@ -350,7 +351,8 @@ static inline void name(unsigned int val, unsigned int port) \ | |||
| 350 | " .long 0b,2b\n" \ | 351 | " .long 0b,2b\n" \ |
| 351 | " .long 1b,2b\n" \ | 352 | " .long 1b,2b\n" \ |
| 352 | ".previous" \ | 353 | ".previous" \ |
| 353 | : : "r" (val), "r" (port + _IO_BASE)); \ | 354 | : : "r" (val), "r" (port + _IO_BASE) \ |
| 355 | : "memory"); \ | ||
| 354 | } | 356 | } |
| 355 | 357 | ||
| 356 | __do_in_asm(_rec_inb, "lbzx") | 358 | __do_in_asm(_rec_inb, "lbzx") |
diff --git a/include/asm-s390/types.h b/include/asm-s390/types.h index 0e959e20e9a3..41c547656130 100644 --- a/include/asm-s390/types.h +++ b/include/asm-s390/types.h | |||
| @@ -40,7 +40,13 @@ typedef __signed__ long saddr_t; | |||
| 40 | 40 | ||
| 41 | #ifndef __ASSEMBLY__ | 41 | #ifndef __ASSEMBLY__ |
| 42 | 42 | ||
| 43 | typedef u64 dma64_addr_t; | ||
| 44 | #ifdef __s390x__ | ||
| 45 | /* DMA addresses come in 32-bit and 64-bit flavours. */ | ||
| 46 | typedef u64 dma_addr_t; | ||
| 47 | #else | ||
| 43 | typedef u32 dma_addr_t; | 48 | typedef u32 dma_addr_t; |
| 49 | #endif | ||
| 44 | 50 | ||
| 45 | #ifndef __s390x__ | 51 | #ifndef __s390x__ |
| 46 | typedef union { | 52 | typedef union { |
diff --git a/include/asm-sh/checksum_32.h b/include/asm-sh/checksum_32.h index 4bc8357e8892..14b7ac2f0a07 100644 --- a/include/asm-sh/checksum_32.h +++ b/include/asm-sh/checksum_32.h | |||
| @@ -109,7 +109,7 @@ static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl) | |||
| 109 | will assume they contain their original values. */ | 109 | will assume they contain their original values. */ |
| 110 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=&r" (__dummy0), "=&z" (__dummy1) | 110 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=&r" (__dummy0), "=&z" (__dummy1) |
| 111 | : "1" (iph), "2" (ihl) | 111 | : "1" (iph), "2" (ihl) |
| 112 | : "t"); | 112 | : "t", "memory"); |
| 113 | 113 | ||
| 114 | return csum_fold(sum); | 114 | return csum_fold(sum); |
| 115 | } | 115 | } |
diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h index c299b853b5ba..3158960f3eb5 100644 --- a/include/asm-sparc64/io.h +++ b/include/asm-sparc64/io.h | |||
| @@ -24,7 +24,8 @@ static inline u8 _inb(unsigned long addr) | |||
| 24 | 24 | ||
| 25 | __asm__ __volatile__("lduba\t[%1] %2, %0\t/* pci_inb */" | 25 | __asm__ __volatile__("lduba\t[%1] %2, %0\t/* pci_inb */" |
| 26 | : "=r" (ret) | 26 | : "=r" (ret) |
| 27 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 27 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 28 | : "memory"); | ||
| 28 | 29 | ||
| 29 | return ret; | 30 | return ret; |
| 30 | } | 31 | } |
| @@ -35,7 +36,8 @@ static inline u16 _inw(unsigned long addr) | |||
| 35 | 36 | ||
| 36 | __asm__ __volatile__("lduha\t[%1] %2, %0\t/* pci_inw */" | 37 | __asm__ __volatile__("lduha\t[%1] %2, %0\t/* pci_inw */" |
| 37 | : "=r" (ret) | 38 | : "=r" (ret) |
| 38 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 39 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 40 | : "memory"); | ||
| 39 | 41 | ||
| 40 | return ret; | 42 | return ret; |
| 41 | } | 43 | } |
| @@ -46,7 +48,8 @@ static inline u32 _inl(unsigned long addr) | |||
| 46 | 48 | ||
| 47 | __asm__ __volatile__("lduwa\t[%1] %2, %0\t/* pci_inl */" | 49 | __asm__ __volatile__("lduwa\t[%1] %2, %0\t/* pci_inl */" |
| 48 | : "=r" (ret) | 50 | : "=r" (ret) |
| 49 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 51 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 52 | : "memory"); | ||
| 50 | 53 | ||
| 51 | return ret; | 54 | return ret; |
| 52 | } | 55 | } |
| @@ -55,21 +58,24 @@ static inline void _outb(u8 b, unsigned long addr) | |||
| 55 | { | 58 | { |
| 56 | __asm__ __volatile__("stba\t%r0, [%1] %2\t/* pci_outb */" | 59 | __asm__ __volatile__("stba\t%r0, [%1] %2\t/* pci_outb */" |
| 57 | : /* no outputs */ | 60 | : /* no outputs */ |
| 58 | : "Jr" (b), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 61 | : "Jr" (b), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 62 | : "memory"); | ||
| 59 | } | 63 | } |
| 60 | 64 | ||
| 61 | static inline void _outw(u16 w, unsigned long addr) | 65 | static inline void _outw(u16 w, unsigned long addr) |
| 62 | { | 66 | { |
| 63 | __asm__ __volatile__("stha\t%r0, [%1] %2\t/* pci_outw */" | 67 | __asm__ __volatile__("stha\t%r0, [%1] %2\t/* pci_outw */" |
| 64 | : /* no outputs */ | 68 | : /* no outputs */ |
| 65 | : "Jr" (w), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 69 | : "Jr" (w), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 70 | : "memory"); | ||
| 66 | } | 71 | } |
| 67 | 72 | ||
| 68 | static inline void _outl(u32 l, unsigned long addr) | 73 | static inline void _outl(u32 l, unsigned long addr) |
| 69 | { | 74 | { |
| 70 | __asm__ __volatile__("stwa\t%r0, [%1] %2\t/* pci_outl */" | 75 | __asm__ __volatile__("stwa\t%r0, [%1] %2\t/* pci_outl */" |
| 71 | : /* no outputs */ | 76 | : /* no outputs */ |
| 72 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 77 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 78 | : "memory"); | ||
| 73 | } | 79 | } |
| 74 | 80 | ||
| 75 | #define inb(__addr) (_inb((unsigned long)(__addr))) | 81 | #define inb(__addr) (_inb((unsigned long)(__addr))) |
| @@ -128,7 +134,8 @@ static inline u8 _readb(const volatile void __iomem *addr) | |||
| 128 | 134 | ||
| 129 | __asm__ __volatile__("lduba\t[%1] %2, %0\t/* pci_readb */" | 135 | __asm__ __volatile__("lduba\t[%1] %2, %0\t/* pci_readb */" |
| 130 | : "=r" (ret) | 136 | : "=r" (ret) |
| 131 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 137 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 138 | : "memory"); | ||
| 132 | return ret; | 139 | return ret; |
| 133 | } | 140 | } |
| 134 | 141 | ||
| @@ -137,7 +144,8 @@ static inline u16 _readw(const volatile void __iomem *addr) | |||
| 137 | 144 | ||
| 138 | __asm__ __volatile__("lduha\t[%1] %2, %0\t/* pci_readw */" | 145 | __asm__ __volatile__("lduha\t[%1] %2, %0\t/* pci_readw */" |
| 139 | : "=r" (ret) | 146 | : "=r" (ret) |
| 140 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 147 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 148 | : "memory"); | ||
| 141 | 149 | ||
| 142 | return ret; | 150 | return ret; |
| 143 | } | 151 | } |
| @@ -147,7 +155,8 @@ static inline u32 _readl(const volatile void __iomem *addr) | |||
| 147 | 155 | ||
| 148 | __asm__ __volatile__("lduwa\t[%1] %2, %0\t/* pci_readl */" | 156 | __asm__ __volatile__("lduwa\t[%1] %2, %0\t/* pci_readl */" |
| 149 | : "=r" (ret) | 157 | : "=r" (ret) |
| 150 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 158 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 159 | : "memory"); | ||
| 151 | 160 | ||
| 152 | return ret; | 161 | return ret; |
| 153 | } | 162 | } |
| @@ -157,7 +166,8 @@ static inline u64 _readq(const volatile void __iomem *addr) | |||
| 157 | 166 | ||
| 158 | __asm__ __volatile__("ldxa\t[%1] %2, %0\t/* pci_readq */" | 167 | __asm__ __volatile__("ldxa\t[%1] %2, %0\t/* pci_readq */" |
| 159 | : "=r" (ret) | 168 | : "=r" (ret) |
| 160 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 169 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 170 | : "memory"); | ||
| 161 | 171 | ||
| 162 | return ret; | 172 | return ret; |
| 163 | } | 173 | } |
| @@ -166,28 +176,32 @@ static inline void _writeb(u8 b, volatile void __iomem *addr) | |||
| 166 | { | 176 | { |
| 167 | __asm__ __volatile__("stba\t%r0, [%1] %2\t/* pci_writeb */" | 177 | __asm__ __volatile__("stba\t%r0, [%1] %2\t/* pci_writeb */" |
| 168 | : /* no outputs */ | 178 | : /* no outputs */ |
| 169 | : "Jr" (b), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 179 | : "Jr" (b), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 180 | : "memory"); | ||
| 170 | } | 181 | } |
| 171 | 182 | ||
| 172 | static inline void _writew(u16 w, volatile void __iomem *addr) | 183 | static inline void _writew(u16 w, volatile void __iomem *addr) |
| 173 | { | 184 | { |
| 174 | __asm__ __volatile__("stha\t%r0, [%1] %2\t/* pci_writew */" | 185 | __asm__ __volatile__("stha\t%r0, [%1] %2\t/* pci_writew */" |
| 175 | : /* no outputs */ | 186 | : /* no outputs */ |
| 176 | : "Jr" (w), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 187 | : "Jr" (w), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 188 | : "memory"); | ||
| 177 | } | 189 | } |
| 178 | 190 | ||
| 179 | static inline void _writel(u32 l, volatile void __iomem *addr) | 191 | static inline void _writel(u32 l, volatile void __iomem *addr) |
| 180 | { | 192 | { |
| 181 | __asm__ __volatile__("stwa\t%r0, [%1] %2\t/* pci_writel */" | 193 | __asm__ __volatile__("stwa\t%r0, [%1] %2\t/* pci_writel */" |
| 182 | : /* no outputs */ | 194 | : /* no outputs */ |
| 183 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 195 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 196 | : "memory"); | ||
| 184 | } | 197 | } |
| 185 | 198 | ||
| 186 | static inline void _writeq(u64 q, volatile void __iomem *addr) | 199 | static inline void _writeq(u64 q, volatile void __iomem *addr) |
| 187 | { | 200 | { |
| 188 | __asm__ __volatile__("stxa\t%r0, [%1] %2\t/* pci_writeq */" | 201 | __asm__ __volatile__("stxa\t%r0, [%1] %2\t/* pci_writeq */" |
| 189 | : /* no outputs */ | 202 | : /* no outputs */ |
| 190 | : "Jr" (q), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L)); | 203 | : "Jr" (q), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E_L) |
| 204 | : "memory"); | ||
| 191 | } | 205 | } |
| 192 | 206 | ||
| 193 | #define readb(__addr) _readb(__addr) | 207 | #define readb(__addr) _readb(__addr) |
| @@ -299,7 +313,8 @@ static inline u8 _sbus_readb(const volatile void __iomem *addr) | |||
| 299 | 313 | ||
| 300 | __asm__ __volatile__("lduba\t[%1] %2, %0\t/* sbus_readb */" | 314 | __asm__ __volatile__("lduba\t[%1] %2, %0\t/* sbus_readb */" |
| 301 | : "=r" (ret) | 315 | : "=r" (ret) |
| 302 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 316 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 317 | : "memory"); | ||
| 303 | 318 | ||
| 304 | return ret; | 319 | return ret; |
| 305 | } | 320 | } |
| @@ -310,7 +325,8 @@ static inline u16 _sbus_readw(const volatile void __iomem *addr) | |||
| 310 | 325 | ||
| 311 | __asm__ __volatile__("lduha\t[%1] %2, %0\t/* sbus_readw */" | 326 | __asm__ __volatile__("lduha\t[%1] %2, %0\t/* sbus_readw */" |
| 312 | : "=r" (ret) | 327 | : "=r" (ret) |
| 313 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 328 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 329 | : "memory"); | ||
| 314 | 330 | ||
| 315 | return ret; | 331 | return ret; |
| 316 | } | 332 | } |
| @@ -321,7 +337,8 @@ static inline u32 _sbus_readl(const volatile void __iomem *addr) | |||
| 321 | 337 | ||
| 322 | __asm__ __volatile__("lduwa\t[%1] %2, %0\t/* sbus_readl */" | 338 | __asm__ __volatile__("lduwa\t[%1] %2, %0\t/* sbus_readl */" |
| 323 | : "=r" (ret) | 339 | : "=r" (ret) |
| 324 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 340 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 341 | : "memory"); | ||
| 325 | 342 | ||
| 326 | return ret; | 343 | return ret; |
| 327 | } | 344 | } |
| @@ -332,7 +349,8 @@ static inline u64 _sbus_readq(const volatile void __iomem *addr) | |||
| 332 | 349 | ||
| 333 | __asm__ __volatile__("ldxa\t[%1] %2, %0\t/* sbus_readq */" | 350 | __asm__ __volatile__("ldxa\t[%1] %2, %0\t/* sbus_readq */" |
| 334 | : "=r" (ret) | 351 | : "=r" (ret) |
| 335 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 352 | : "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 353 | : "memory"); | ||
| 336 | 354 | ||
| 337 | return ret; | 355 | return ret; |
| 338 | } | 356 | } |
| @@ -341,28 +359,32 @@ static inline void _sbus_writeb(u8 b, volatile void __iomem *addr) | |||
| 341 | { | 359 | { |
| 342 | __asm__ __volatile__("stba\t%r0, [%1] %2\t/* sbus_writeb */" | 360 | __asm__ __volatile__("stba\t%r0, [%1] %2\t/* sbus_writeb */" |
| 343 | : /* no outputs */ | 361 | : /* no outputs */ |
| 344 | : "Jr" (b), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 362 | : "Jr" (b), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 363 | : "memory"); | ||
| 345 | } | 364 | } |
| 346 | 365 | ||
| 347 | static inline void _sbus_writew(u16 w, volatile void __iomem *addr) | 366 | static inline void _sbus_writew(u16 w, volatile void __iomem *addr) |
| 348 | { | 367 | { |
| 349 | __asm__ __volatile__("stha\t%r0, [%1] %2\t/* sbus_writew */" | 368 | __asm__ __volatile__("stha\t%r0, [%1] %2\t/* sbus_writew */" |
| 350 | : /* no outputs */ | 369 | : /* no outputs */ |
| 351 | : "Jr" (w), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 370 | : "Jr" (w), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 371 | : "memory"); | ||
| 352 | } | 372 | } |
| 353 | 373 | ||
| 354 | static inline void _sbus_writel(u32 l, volatile void __iomem *addr) | 374 | static inline void _sbus_writel(u32 l, volatile void __iomem *addr) |
| 355 | { | 375 | { |
| 356 | __asm__ __volatile__("stwa\t%r0, [%1] %2\t/* sbus_writel */" | 376 | __asm__ __volatile__("stwa\t%r0, [%1] %2\t/* sbus_writel */" |
| 357 | : /* no outputs */ | 377 | : /* no outputs */ |
| 358 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 378 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 379 | : "memory"); | ||
| 359 | } | 380 | } |
| 360 | 381 | ||
| 361 | static inline void _sbus_writeq(u64 l, volatile void __iomem *addr) | 382 | static inline void _sbus_writeq(u64 l, volatile void __iomem *addr) |
| 362 | { | 383 | { |
| 363 | __asm__ __volatile__("stxa\t%r0, [%1] %2\t/* sbus_writeq */" | 384 | __asm__ __volatile__("stxa\t%r0, [%1] %2\t/* sbus_writeq */" |
| 364 | : /* no outputs */ | 385 | : /* no outputs */ |
| 365 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E)); | 386 | : "Jr" (l), "r" (addr), "i" (ASI_PHYS_BYPASS_EC_E) |
| 387 | : "memory"); | ||
| 366 | } | 388 | } |
| 367 | 389 | ||
| 368 | #define sbus_readb(__addr) _sbus_readb(__addr) | 390 | #define sbus_readb(__addr) _sbus_readb(__addr) |
diff --git a/include/asm-sparc64/ptrace.h b/include/asm-sparc64/ptrace.h index d8a56cddf7f2..b163da79bb6d 100644 --- a/include/asm-sparc64/ptrace.h +++ b/include/asm-sparc64/ptrace.h | |||
| @@ -126,6 +126,8 @@ struct sparc_trapf { | |||
| 126 | #define TRACEREG32_SZ sizeof(struct pt_regs32) | 126 | #define TRACEREG32_SZ sizeof(struct pt_regs32) |
| 127 | #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) | 127 | #define STACKFRAME32_SZ sizeof(struct sparc_stackf32) |
| 128 | 128 | ||
| 129 | #ifdef __KERNEL__ | ||
| 130 | |||
| 129 | struct global_reg_snapshot { | 131 | struct global_reg_snapshot { |
| 130 | unsigned long tstate; | 132 | unsigned long tstate; |
| 131 | unsigned long tpc; | 133 | unsigned long tpc; |
| @@ -137,8 +139,6 @@ struct global_reg_snapshot { | |||
| 137 | unsigned long pad2; | 139 | unsigned long pad2; |
| 138 | }; | 140 | }; |
| 139 | 141 | ||
| 140 | #ifdef __KERNEL__ | ||
| 141 | |||
| 142 | #define __ARCH_WANT_COMPAT_SYS_PTRACE | 142 | #define __ARCH_WANT_COMPAT_SYS_PTRACE |
| 143 | 143 | ||
| 144 | #define force_successful_syscall_return() \ | 144 | #define force_successful_syscall_return() \ |
| @@ -306,6 +306,8 @@ extern void __show_regs(struct pt_regs *); | |||
| 306 | #define SF_XARG5 0x58 | 306 | #define SF_XARG5 0x58 |
| 307 | #define SF_XXARG 0x5c | 307 | #define SF_XXARG 0x5c |
| 308 | 308 | ||
| 309 | #ifdef __KERNEL__ | ||
| 310 | |||
| 309 | /* global_reg_snapshot offsets */ | 311 | /* global_reg_snapshot offsets */ |
| 310 | #define GR_SNAP_TSTATE 0x00 | 312 | #define GR_SNAP_TSTATE 0x00 |
| 311 | #define GR_SNAP_TPC 0x08 | 313 | #define GR_SNAP_TPC 0x08 |
| @@ -316,6 +318,8 @@ extern void __show_regs(struct pt_regs *); | |||
| 316 | #define GR_SNAP_PAD1 0x30 | 318 | #define GR_SNAP_PAD1 0x30 |
| 317 | #define GR_SNAP_PAD2 0x38 | 319 | #define GR_SNAP_PAD2 0x38 |
| 318 | 320 | ||
| 321 | #endif /* __KERNEL__ */ | ||
| 322 | |||
| 319 | /* Stuff for the ptrace system call */ | 323 | /* Stuff for the ptrace system call */ |
| 320 | #define PTRACE_SPARC_DETACH 11 | 324 | #define PTRACE_SPARC_DETACH 11 |
| 321 | #define PTRACE_GETREGS 12 | 325 | #define PTRACE_GETREGS 12 |
diff --git a/include/asm-v850/clinkage.h b/include/asm-v850/clinkage.h index 2b622adccae5..c389691d6f86 100644 --- a/include/asm-v850/clinkage.h +++ b/include/asm-v850/clinkage.h | |||
| @@ -11,7 +11,7 @@ | |||
| 11 | * Written by Miles Bader <miles@gnu.org> | 11 | * Written by Miles Bader <miles@gnu.org> |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #ifndef __CLINKAGE_H__ | 14 | #ifndef __V850_CLINKAGE_H__ |
| 15 | #define __V850_CLINKAGE_H__ | 15 | #define __V850_CLINKAGE_H__ |
| 16 | 16 | ||
| 17 | #include <asm/macrology.h> | 17 | #include <asm/macrology.h> |
diff --git a/include/asm-x86/i387.h b/include/asm-x86/i387.h index 6b722d315936..37672f79dcc8 100644 --- a/include/asm-x86/i387.h +++ b/include/asm-x86/i387.h | |||
| @@ -193,6 +193,8 @@ static inline int restore_i387(struct _fpstate __user *buf) | |||
| 193 | 193 | ||
| 194 | #else /* CONFIG_X86_32 */ | 194 | #else /* CONFIG_X86_32 */ |
| 195 | 195 | ||
| 196 | extern void finit(void); | ||
| 197 | |||
| 196 | static inline void tolerant_fwait(void) | 198 | static inline void tolerant_fwait(void) |
| 197 | { | 199 | { |
| 198 | asm volatile("fnclex ; fwait"); | 200 | asm volatile("fnclex ; fwait"); |
diff --git a/include/linux/bitrev.h b/include/linux/bitrev.h index 05e540d6963a..7ffe03f4693d 100644 --- a/include/linux/bitrev.h +++ b/include/linux/bitrev.h | |||
| @@ -10,6 +10,7 @@ static inline u8 bitrev8(u8 byte) | |||
| 10 | return byte_rev_table[byte]; | 10 | return byte_rev_table[byte]; |
| 11 | } | 11 | } |
| 12 | 12 | ||
| 13 | extern u16 bitrev16(u16 in); | ||
| 13 | extern u32 bitrev32(u32 in); | 14 | extern u32 bitrev32(u32 in); |
| 14 | 15 | ||
| 15 | #endif /* _LINUX_BITREV_H */ | 16 | #endif /* _LINUX_BITREV_H */ |
diff --git a/include/linux/blktrace_api.h b/include/linux/blktrace_api.h index cfc3147e5cf9..e3ef903aae88 100644 --- a/include/linux/blktrace_api.h +++ b/include/linux/blktrace_api.h | |||
| @@ -55,6 +55,7 @@ enum blktrace_act { | |||
| 55 | enum blktrace_notify { | 55 | enum blktrace_notify { |
| 56 | __BLK_TN_PROCESS = 0, /* establish pid/name mapping */ | 56 | __BLK_TN_PROCESS = 0, /* establish pid/name mapping */ |
| 57 | __BLK_TN_TIMESTAMP, /* include system clock */ | 57 | __BLK_TN_TIMESTAMP, /* include system clock */ |
| 58 | __BLK_TN_MESSAGE, /* Character string message */ | ||
| 58 | }; | 59 | }; |
| 59 | 60 | ||
| 60 | 61 | ||
| @@ -79,6 +80,7 @@ enum blktrace_notify { | |||
| 79 | 80 | ||
| 80 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) | 81 | #define BLK_TN_PROCESS (__BLK_TN_PROCESS | BLK_TC_ACT(BLK_TC_NOTIFY)) |
| 81 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) | 82 | #define BLK_TN_TIMESTAMP (__BLK_TN_TIMESTAMP | BLK_TC_ACT(BLK_TC_NOTIFY)) |
| 83 | #define BLK_TN_MESSAGE (__BLK_TN_MESSAGE | BLK_TC_ACT(BLK_TC_NOTIFY)) | ||
| 82 | 84 | ||
| 83 | #define BLK_IO_TRACE_MAGIC 0x65617400 | 85 | #define BLK_IO_TRACE_MAGIC 0x65617400 |
| 84 | #define BLK_IO_TRACE_VERSION 0x07 | 86 | #define BLK_IO_TRACE_VERSION 0x07 |
| @@ -119,6 +121,7 @@ struct blk_trace { | |||
| 119 | int trace_state; | 121 | int trace_state; |
| 120 | struct rchan *rchan; | 122 | struct rchan *rchan; |
| 121 | unsigned long *sequence; | 123 | unsigned long *sequence; |
| 124 | unsigned char *msg_data; | ||
| 122 | u16 act_mask; | 125 | u16 act_mask; |
| 123 | u64 start_lba; | 126 | u64 start_lba; |
| 124 | u64 end_lba; | 127 | u64 end_lba; |
| @@ -149,7 +152,28 @@ extern void blk_trace_shutdown(struct request_queue *); | |||
| 149 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); | 152 | extern void __blk_add_trace(struct blk_trace *, sector_t, int, int, u32, int, int, void *); |
| 150 | extern int do_blk_trace_setup(struct request_queue *q, | 153 | extern int do_blk_trace_setup(struct request_queue *q, |
| 151 | char *name, dev_t dev, struct blk_user_trace_setup *buts); | 154 | char *name, dev_t dev, struct blk_user_trace_setup *buts); |
| 155 | extern void __trace_note_message(struct blk_trace *, const char *fmt, ...); | ||
| 152 | 156 | ||
| 157 | /** | ||
| 158 | * blk_add_trace_msg - Add a (simple) message to the blktrace stream | ||
| 159 | * @q: queue the io is for | ||
| 160 | * @fmt: format to print message in | ||
| 161 | * args... Variable argument list for format | ||
| 162 | * | ||
| 163 | * Description: | ||
| 164 | * Records a (simple) message onto the blktrace stream. | ||
| 165 | * | ||
| 166 | * NOTE: BLK_TN_MAX_MSG characters are output at most. | ||
| 167 | * NOTE: Can not use 'static inline' due to presence of var args... | ||
| 168 | * | ||
| 169 | **/ | ||
| 170 | #define blk_add_trace_msg(q, fmt, ...) \ | ||
| 171 | do { \ | ||
| 172 | struct blk_trace *bt = (q)->blk_trace; \ | ||
| 173 | if (unlikely(bt)) \ | ||
| 174 | __trace_note_message(bt, fmt, ##__VA_ARGS__); \ | ||
| 175 | } while (0) | ||
| 176 | #define BLK_TN_MAX_MSG 128 | ||
| 153 | 177 | ||
| 154 | /** | 178 | /** |
| 155 | * blk_add_trace_rq - Add a trace for a request oriented action | 179 | * blk_add_trace_rq - Add a trace for a request oriented action |
| @@ -299,6 +323,8 @@ extern int blk_trace_remove(struct request_queue *q); | |||
| 299 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) | 323 | #define blk_trace_setup(q, name, dev, arg) (-ENOTTY) |
| 300 | #define blk_trace_startstop(q, start) (-ENOTTY) | 324 | #define blk_trace_startstop(q, start) (-ENOTTY) |
| 301 | #define blk_trace_remove(q) (-ENOTTY) | 325 | #define blk_trace_remove(q) (-ENOTTY) |
| 326 | #define blk_add_trace_msg(q, fmt, ...) do { } while (0) | ||
| 327 | |||
| 302 | #endif /* CONFIG_BLK_DEV_IO_TRACE */ | 328 | #endif /* CONFIG_BLK_DEV_IO_TRACE */ |
| 303 | #endif /* __KERNEL__ */ | 329 | #endif /* __KERNEL__ */ |
| 304 | #endif | 330 | #endif |
diff --git a/include/linux/capability.h b/include/linux/capability.h index f4ea0dd9a618..fa830f8de032 100644 --- a/include/linux/capability.h +++ b/include/linux/capability.h | |||
| @@ -31,11 +31,11 @@ struct task_struct; | |||
| 31 | #define _LINUX_CAPABILITY_VERSION_1 0x19980330 | 31 | #define _LINUX_CAPABILITY_VERSION_1 0x19980330 |
| 32 | #define _LINUX_CAPABILITY_U32S_1 1 | 32 | #define _LINUX_CAPABILITY_U32S_1 1 |
| 33 | 33 | ||
| 34 | #define _LINUX_CAPABILITY_VERSION_2 0x20071026 | 34 | #define _LINUX_CAPABILITY_VERSION_2 0x20071026 /* deprecated - use v3 */ |
| 35 | #define _LINUX_CAPABILITY_U32S_2 2 | 35 | #define _LINUX_CAPABILITY_U32S_2 2 |
| 36 | 36 | ||
| 37 | #define _LINUX_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_2 | 37 | #define _LINUX_CAPABILITY_VERSION_3 0x20080522 |
| 38 | #define _LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_2 | 38 | #define _LINUX_CAPABILITY_U32S_3 2 |
| 39 | 39 | ||
| 40 | typedef struct __user_cap_header_struct { | 40 | typedef struct __user_cap_header_struct { |
| 41 | __u32 version; | 41 | __u32 version; |
| @@ -77,10 +77,23 @@ struct vfs_cap_data { | |||
| 77 | } data[VFS_CAP_U32]; | 77 | } data[VFS_CAP_U32]; |
| 78 | }; | 78 | }; |
| 79 | 79 | ||
| 80 | #ifdef __KERNEL__ | 80 | #ifndef __KERNEL__ |
| 81 | |||
| 82 | /* | ||
| 83 | * Backwardly compatible definition for source code - trapped in a | ||
| 84 | * 32-bit world. If you find you need this, please consider using | ||
| 85 | * libcap to untrap yourself... | ||
| 86 | */ | ||
| 87 | #define _LINUX_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_1 | ||
| 88 | #define _LINUX_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_1 | ||
| 89 | |||
| 90 | #else | ||
| 91 | |||
| 92 | #define _KERNEL_CAPABILITY_VERSION _LINUX_CAPABILITY_VERSION_3 | ||
| 93 | #define _KERNEL_CAPABILITY_U32S _LINUX_CAPABILITY_U32S_3 | ||
| 81 | 94 | ||
| 82 | typedef struct kernel_cap_struct { | 95 | typedef struct kernel_cap_struct { |
| 83 | __u32 cap[_LINUX_CAPABILITY_U32S]; | 96 | __u32 cap[_KERNEL_CAPABILITY_U32S]; |
| 84 | } kernel_cap_t; | 97 | } kernel_cap_t; |
| 85 | 98 | ||
| 86 | #define _USER_CAP_HEADER_SIZE (sizeof(struct __user_cap_header_struct)) | 99 | #define _USER_CAP_HEADER_SIZE (sizeof(struct __user_cap_header_struct)) |
| @@ -351,7 +364,7 @@ typedef struct kernel_cap_struct { | |||
| 351 | */ | 364 | */ |
| 352 | 365 | ||
| 353 | #define CAP_FOR_EACH_U32(__capi) \ | 366 | #define CAP_FOR_EACH_U32(__capi) \ |
| 354 | for (__capi = 0; __capi < _LINUX_CAPABILITY_U32S; ++__capi) | 367 | for (__capi = 0; __capi < _KERNEL_CAPABILITY_U32S; ++__capi) |
| 355 | 368 | ||
| 356 | # define CAP_FS_MASK_B0 (CAP_TO_MASK(CAP_CHOWN) \ | 369 | # define CAP_FS_MASK_B0 (CAP_TO_MASK(CAP_CHOWN) \ |
| 357 | | CAP_TO_MASK(CAP_DAC_OVERRIDE) \ | 370 | | CAP_TO_MASK(CAP_DAC_OVERRIDE) \ |
| @@ -361,7 +374,7 @@ typedef struct kernel_cap_struct { | |||
| 361 | 374 | ||
| 362 | # define CAP_FS_MASK_B1 (CAP_TO_MASK(CAP_MAC_OVERRIDE)) | 375 | # define CAP_FS_MASK_B1 (CAP_TO_MASK(CAP_MAC_OVERRIDE)) |
| 363 | 376 | ||
| 364 | #if _LINUX_CAPABILITY_U32S != 2 | 377 | #if _KERNEL_CAPABILITY_U32S != 2 |
| 365 | # error Fix up hand-coded capability macro initializers | 378 | # error Fix up hand-coded capability macro initializers |
| 366 | #else /* HAND-CODED capability initializers */ | 379 | #else /* HAND-CODED capability initializers */ |
| 367 | 380 | ||
| @@ -372,7 +385,7 @@ typedef struct kernel_cap_struct { | |||
| 372 | # define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0|CAP_TO_MASK(CAP_SYS_RESOURCE), \ | 385 | # define CAP_NFSD_SET ((kernel_cap_t){{ CAP_FS_MASK_B0|CAP_TO_MASK(CAP_SYS_RESOURCE), \ |
| 373 | CAP_FS_MASK_B1 } }) | 386 | CAP_FS_MASK_B1 } }) |
| 374 | 387 | ||
| 375 | #endif /* _LINUX_CAPABILITY_U32S != 2 */ | 388 | #endif /* _KERNEL_CAPABILITY_U32S != 2 */ |
| 376 | 389 | ||
| 377 | #define CAP_INIT_INH_SET CAP_EMPTY_SET | 390 | #define CAP_INIT_INH_SET CAP_EMPTY_SET |
| 378 | 391 | ||
diff --git a/include/linux/device.h b/include/linux/device.h index 14616e80213c..6a2d04c011bc 100644 --- a/include/linux/device.h +++ b/include/linux/device.h | |||
| @@ -385,6 +385,9 @@ static inline const char *dev_name(struct device *dev) | |||
| 385 | return dev->bus_id; | 385 | return dev->bus_id; |
| 386 | } | 386 | } |
| 387 | 387 | ||
| 388 | extern int dev_set_name(struct device *dev, const char *name, ...) | ||
| 389 | __attribute__((format(printf, 2, 3))); | ||
| 390 | |||
| 388 | #ifdef CONFIG_NUMA | 391 | #ifdef CONFIG_NUMA |
| 389 | static inline int dev_to_node(struct device *dev) | 392 | static inline int dev_to_node(struct device *dev) |
| 390 | { | 393 | { |
diff --git a/include/linux/fs.h b/include/linux/fs.h index f413085f748e..d490779f18d9 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
| @@ -2000,7 +2000,10 @@ extern int simple_fill_super(struct super_block *, int, struct tree_descr *); | |||
| 2000 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); | 2000 | extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count); |
| 2001 | extern void simple_release_fs(struct vfsmount **mount, int *count); | 2001 | extern void simple_release_fs(struct vfsmount **mount, int *count); |
| 2002 | 2002 | ||
| 2003 | extern ssize_t simple_read_from_buffer(void __user *, size_t, loff_t *, const void *, size_t); | 2003 | extern ssize_t simple_read_from_buffer(void __user *to, size_t count, |
| 2004 | loff_t *ppos, const void *from, size_t available); | ||
| 2005 | extern ssize_t memory_read_from_buffer(void *to, size_t count, loff_t *ppos, | ||
| 2006 | const void *from, size_t available); | ||
| 2004 | 2007 | ||
| 2005 | #ifdef CONFIG_MIGRATION | 2008 | #ifdef CONFIG_MIGRATION |
| 2006 | extern int buffer_migrate_page(struct address_space *, | 2009 | extern int buffer_migrate_page(struct address_space *, |
diff --git a/include/linux/in_route.h b/include/linux/in_route.h index 61f25c30a2a0..b261b8c915f0 100644 --- a/include/linux/in_route.h +++ b/include/linux/in_route.h | |||
| @@ -10,19 +10,19 @@ | |||
| 10 | #define RTCF_NOPMTUDISC RTM_F_NOPMTUDISC | 10 | #define RTCF_NOPMTUDISC RTM_F_NOPMTUDISC |
| 11 | 11 | ||
| 12 | #define RTCF_NOTIFY 0x00010000 | 12 | #define RTCF_NOTIFY 0x00010000 |
| 13 | #define RTCF_DIRECTDST 0x00020000 | 13 | #define RTCF_DIRECTDST 0x00020000 /* unused */ |
| 14 | #define RTCF_REDIRECTED 0x00040000 | 14 | #define RTCF_REDIRECTED 0x00040000 |
| 15 | #define RTCF_TPROXY 0x00080000 | 15 | #define RTCF_TPROXY 0x00080000 /* unused */ |
| 16 | 16 | ||
| 17 | #define RTCF_FAST 0x00200000 | 17 | #define RTCF_FAST 0x00200000 /* unused */ |
| 18 | #define RTCF_MASQ 0x00400000 | 18 | #define RTCF_MASQ 0x00400000 /* unused */ |
| 19 | #define RTCF_SNAT 0x00800000 | 19 | #define RTCF_SNAT 0x00800000 /* unused */ |
| 20 | #define RTCF_DOREDIRECT 0x01000000 | 20 | #define RTCF_DOREDIRECT 0x01000000 |
| 21 | #define RTCF_DIRECTSRC 0x04000000 | 21 | #define RTCF_DIRECTSRC 0x04000000 |
| 22 | #define RTCF_DNAT 0x08000000 | 22 | #define RTCF_DNAT 0x08000000 |
| 23 | #define RTCF_BROADCAST 0x10000000 | 23 | #define RTCF_BROADCAST 0x10000000 |
| 24 | #define RTCF_MULTICAST 0x20000000 | 24 | #define RTCF_MULTICAST 0x20000000 |
| 25 | #define RTCF_REJECT 0x40000000 | 25 | #define RTCF_REJECT 0x40000000 /* unused */ |
| 26 | #define RTCF_LOCAL 0x80000000 | 26 | #define RTCF_LOCAL 0x80000000 |
| 27 | 27 | ||
| 28 | #define RTCF_NAT (RTCF_DNAT|RTCF_SNAT) | 28 | #define RTCF_NAT (RTCF_DNAT|RTCF_SNAT) |
diff --git a/include/linux/inetdevice.h b/include/linux/inetdevice.h index 7009b0cdd06f..c6f51ad52d5b 100644 --- a/include/linux/inetdevice.h +++ b/include/linux/inetdevice.h | |||
| @@ -117,7 +117,6 @@ struct in_ifaddr | |||
| 117 | __be32 ifa_address; | 117 | __be32 ifa_address; |
| 118 | __be32 ifa_mask; | 118 | __be32 ifa_mask; |
| 119 | __be32 ifa_broadcast; | 119 | __be32 ifa_broadcast; |
| 120 | __be32 ifa_anycast; | ||
| 121 | unsigned char ifa_scope; | 120 | unsigned char ifa_scope; |
| 122 | unsigned char ifa_flags; | 121 | unsigned char ifa_flags; |
| 123 | unsigned char ifa_prefixlen; | 122 | unsigned char ifa_prefixlen; |
diff --git a/include/linux/input.h b/include/linux/input.h index 28a094fcfe20..e075c4b762fb 100644 --- a/include/linux/input.h +++ b/include/linux/input.h | |||
| @@ -637,7 +637,9 @@ struct input_absinfo { | |||
| 637 | #define SW_LID 0x00 /* set = lid shut */ | 637 | #define SW_LID 0x00 /* set = lid shut */ |
| 638 | #define SW_TABLET_MODE 0x01 /* set = tablet mode */ | 638 | #define SW_TABLET_MODE 0x01 /* set = tablet mode */ |
| 639 | #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ | 639 | #define SW_HEADPHONE_INSERT 0x02 /* set = inserted */ |
| 640 | #define SW_RADIO 0x03 /* set = radio enabled */ | 640 | #define SW_RFKILL_ALL 0x03 /* rfkill master switch, type "any" |
| 641 | set = radio enabled */ | ||
| 642 | #define SW_RADIO SW_RFKILL_ALL /* deprecated */ | ||
| 641 | #define SW_MAX 0x0f | 643 | #define SW_MAX 0x0f |
| 642 | #define SW_CNT (SW_MAX+1) | 644 | #define SW_CNT (SW_MAX+1) |
| 643 | 645 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index 4a92fbafce9d..e57e5d08312d 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
| @@ -111,13 +111,10 @@ enum { | |||
| 111 | /* various global constants */ | 111 | /* various global constants */ |
| 112 | LIBATA_MAX_PRD = ATA_MAX_PRD / 2, | 112 | LIBATA_MAX_PRD = ATA_MAX_PRD / 2, |
| 113 | LIBATA_DUMB_MAX_PRD = ATA_MAX_PRD / 4, /* Worst case */ | 113 | LIBATA_DUMB_MAX_PRD = ATA_MAX_PRD / 4, /* Worst case */ |
| 114 | ATA_MAX_PORTS = 8, | ||
| 115 | ATA_DEF_QUEUE = 1, | 114 | ATA_DEF_QUEUE = 1, |
| 116 | /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */ | 115 | /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */ |
| 117 | ATA_MAX_QUEUE = 32, | 116 | ATA_MAX_QUEUE = 32, |
| 118 | ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1, | 117 | ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1, |
| 119 | ATA_MAX_BUS = 2, | ||
| 120 | ATA_DEF_BUSY_WAIT = 10000, | ||
| 121 | ATA_SHORT_PAUSE = (HZ >> 6) + 1, | 118 | ATA_SHORT_PAUSE = (HZ >> 6) + 1, |
| 122 | 119 | ||
| 123 | ATAPI_MAX_DRAIN = 16 << 10, | 120 | ATAPI_MAX_DRAIN = 16 << 10, |
| @@ -1435,7 +1432,8 @@ extern void ata_sff_qc_prep(struct ata_queued_cmd *qc); | |||
| 1435 | extern void ata_sff_dumb_qc_prep(struct ata_queued_cmd *qc); | 1432 | extern void ata_sff_dumb_qc_prep(struct ata_queued_cmd *qc); |
| 1436 | extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device); | 1433 | extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device); |
| 1437 | extern u8 ata_sff_check_status(struct ata_port *ap); | 1434 | extern u8 ata_sff_check_status(struct ata_port *ap); |
| 1438 | extern u8 ata_sff_altstatus(struct ata_port *ap); | 1435 | extern void ata_sff_pause(struct ata_port *ap); |
| 1436 | extern void ata_sff_dma_pause(struct ata_port *ap); | ||
| 1439 | extern int ata_sff_busy_sleep(struct ata_port *ap, | 1437 | extern int ata_sff_busy_sleep(struct ata_port *ap, |
| 1440 | unsigned long timeout_pat, unsigned long timeout); | 1438 | unsigned long timeout_pat, unsigned long timeout); |
| 1441 | extern int ata_sff_wait_ready(struct ata_link *link, unsigned long deadline); | 1439 | extern int ata_sff_wait_ready(struct ata_link *link, unsigned long deadline); |
| @@ -1496,19 +1494,6 @@ extern int ata_pci_sff_init_one(struct pci_dev *pdev, | |||
| 1496 | #endif /* CONFIG_PCI */ | 1494 | #endif /* CONFIG_PCI */ |
| 1497 | 1495 | ||
| 1498 | /** | 1496 | /** |
| 1499 | * ata_sff_pause - Flush writes and pause 400 nanoseconds. | ||
| 1500 | * @ap: Port to wait for. | ||
| 1501 | * | ||
| 1502 | * LOCKING: | ||
| 1503 | * Inherited from caller. | ||
| 1504 | */ | ||
| 1505 | static inline void ata_sff_pause(struct ata_port *ap) | ||
| 1506 | { | ||
| 1507 | ata_sff_altstatus(ap); | ||
| 1508 | ndelay(400); | ||
| 1509 | } | ||
| 1510 | |||
| 1511 | /** | ||
| 1512 | * ata_sff_busy_wait - Wait for a port status register | 1497 | * ata_sff_busy_wait - Wait for a port status register |
| 1513 | * @ap: Port to wait for. | 1498 | * @ap: Port to wait for. |
| 1514 | * @bits: bits that must be clear | 1499 | * @bits: bits that must be clear |
diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.h index d73eceaa7afb..69b2342d5ebb 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h | |||
| @@ -375,7 +375,8 @@ struct virtio_device_id { | |||
| 375 | 375 | ||
| 376 | struct i2c_device_id { | 376 | struct i2c_device_id { |
| 377 | char name[I2C_NAME_SIZE]; | 377 | char name[I2C_NAME_SIZE]; |
| 378 | kernel_ulong_t driver_data; /* Data private to the driver */ | 378 | kernel_ulong_t driver_data /* Data private to the driver */ |
| 379 | __attribute__((aligned(sizeof(kernel_ulong_t)))); | ||
| 379 | }; | 380 | }; |
| 380 | 381 | ||
| 381 | 382 | ||
diff --git a/include/linux/msg.h b/include/linux/msg.h index 6f3b8e79a991..56abf1558fdd 100644 --- a/include/linux/msg.h +++ b/include/linux/msg.h | |||
| @@ -64,11 +64,11 @@ struct msginfo { | |||
| 64 | #define MSGMNB 16384 /* <= INT_MAX */ /* default max size of a message queue */ | 64 | #define MSGMNB 16384 /* <= INT_MAX */ /* default max size of a message queue */ |
| 65 | 65 | ||
| 66 | /* unused */ | 66 | /* unused */ |
| 67 | #define MSGPOOL (MSGMNI * MSGMNB) /* size in bytes of message pool */ | 67 | #define MSGPOOL (MSGMNI * MSGMNB / 1024) /* size in kbytes of message pool */ |
| 68 | #define MSGTQL MSGMNB /* number of system message headers */ | 68 | #define MSGTQL MSGMNB /* number of system message headers */ |
| 69 | #define MSGMAP MSGMNB /* number of entries in message map */ | 69 | #define MSGMAP MSGMNB /* number of entries in message map */ |
| 70 | #define MSGSSZ 16 /* message segment size */ | 70 | #define MSGSSZ 16 /* message segment size */ |
| 71 | #define __MSGSEG (MSGPOOL / MSGSSZ) /* max no. of segments */ | 71 | #define __MSGSEG ((MSGPOOL * 1024) / MSGSSZ) /* max no. of segments */ |
| 72 | #define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) | 72 | #define MSGSEG (__MSGSEG <= 0xffff ? __MSGSEG : 0xffff) |
| 73 | 73 | ||
| 74 | #ifdef __KERNEL__ | 74 | #ifdef __KERNEL__ |
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index c42bc7f533a5..53ea3dc8b0e8 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/include/linux/mtd/nand.h | 2 | * linux/include/linux/mtd/nand.h |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2000 David Woodhouse <dwmw2@mvhi.com> | 4 | * Copyright (c) 2000 David Woodhouse <dwmw2@infradead.org> |
| 5 | * Steven J. Hill <sjhill@realitydiluted.com> | 5 | * Steven J. Hill <sjhill@realitydiluted.com> |
| 6 | * Thomas Gleixner <tglx@linutronix.de> | 6 | * Thomas Gleixner <tglx@linutronix.de> |
| 7 | * | 7 | * |
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 2b0266484c84..f27fd2009334 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h | |||
| @@ -514,12 +514,10 @@ struct net_device | |||
| 514 | #define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ | 514 | #define NETIF_F_NETNS_LOCAL 8192 /* Does not change network namespaces */ |
| 515 | #define NETIF_F_MULTI_QUEUE 16384 /* Has multiple TX/RX queues */ | 515 | #define NETIF_F_MULTI_QUEUE 16384 /* Has multiple TX/RX queues */ |
| 516 | #define NETIF_F_LRO 32768 /* large receive offload */ | 516 | #define NETIF_F_LRO 32768 /* large receive offload */ |
| 517 | #define NETIF_F_VLAN_TSO 65536 /* Supports TSO for VLANs */ | ||
| 518 | #define NETIF_F_VLAN_CSUM 131072 /* Supports TX checksumming for VLANs */ | ||
| 519 | 517 | ||
| 520 | /* Segmentation offload features */ | 518 | /* Segmentation offload features */ |
| 521 | #define NETIF_F_GSO_SHIFT 20 | 519 | #define NETIF_F_GSO_SHIFT 16 |
| 522 | #define NETIF_F_GSO_MASK 0xfff00000 | 520 | #define NETIF_F_GSO_MASK 0xffff0000 |
| 523 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) | 521 | #define NETIF_F_TSO (SKB_GSO_TCPV4 << NETIF_F_GSO_SHIFT) |
| 524 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) | 522 | #define NETIF_F_UFO (SKB_GSO_UDP << NETIF_F_GSO_SHIFT) |
| 525 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) | 523 | #define NETIF_F_GSO_ROBUST (SKB_GSO_DODGY << NETIF_F_GSO_SHIFT) |
| @@ -747,6 +745,9 @@ struct net_device | |||
| 747 | /* rtnetlink link ops */ | 745 | /* rtnetlink link ops */ |
| 748 | const struct rtnl_link_ops *rtnl_link_ops; | 746 | const struct rtnl_link_ops *rtnl_link_ops; |
| 749 | 747 | ||
| 748 | /* VLAN feature mask */ | ||
| 749 | unsigned long vlan_features; | ||
| 750 | |||
| 750 | /* for setting kernel sock attribute on TCP connection setup */ | 751 | /* for setting kernel sock attribute on TCP connection setup */ |
| 751 | #define GSO_MAX_SIZE 65536 | 752 | #define GSO_MAX_SIZE 65536 |
| 752 | unsigned int gso_max_size; | 753 | unsigned int gso_max_size; |
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 44c81c744538..a2aec2c0cfb5 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
| @@ -267,10 +267,10 @@ enum rtattr_type_t | |||
| 267 | RTA_PREFSRC, | 267 | RTA_PREFSRC, |
| 268 | RTA_METRICS, | 268 | RTA_METRICS, |
| 269 | RTA_MULTIPATH, | 269 | RTA_MULTIPATH, |
| 270 | RTA_PROTOINFO, | 270 | RTA_PROTOINFO, /* no longer used */ |
| 271 | RTA_FLOW, | 271 | RTA_FLOW, |
| 272 | RTA_CACHEINFO, | 272 | RTA_CACHEINFO, |
| 273 | RTA_SESSION, | 273 | RTA_SESSION, /* no longer used */ |
| 274 | RTA_MP_ALGO, /* no longer used */ | 274 | RTA_MP_ALGO, /* no longer used */ |
| 275 | RTA_TABLE, | 275 | RTA_TABLE, |
| 276 | __RTA_MAX | 276 | __RTA_MAX |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 5395a6176f4b..ae0be3c62375 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -766,7 +766,6 @@ struct sched_domain { | |||
| 766 | struct sched_domain *child; /* bottom domain must be null terminated */ | 766 | struct sched_domain *child; /* bottom domain must be null terminated */ |
| 767 | struct sched_group *groups; /* the balancing groups of the domain */ | 767 | struct sched_group *groups; /* the balancing groups of the domain */ |
| 768 | cpumask_t span; /* span of all CPUs in this domain */ | 768 | cpumask_t span; /* span of all CPUs in this domain */ |
| 769 | int first_cpu; /* cache of the first cpu in this domain */ | ||
| 770 | unsigned long min_interval; /* Minimum balance interval ms */ | 769 | unsigned long min_interval; /* Minimum balance interval ms */ |
| 771 | unsigned long max_interval; /* Maximum balance interval ms */ | 770 | unsigned long max_interval; /* Maximum balance interval ms */ |
| 772 | unsigned int busy_factor; /* less balancing by factor if busy */ | 771 | unsigned int busy_factor; /* less balancing by factor if busy */ |
| @@ -1848,7 +1847,9 @@ extern void exit_thread(void); | |||
| 1848 | extern void exit_files(struct task_struct *); | 1847 | extern void exit_files(struct task_struct *); |
| 1849 | extern void __cleanup_signal(struct signal_struct *); | 1848 | extern void __cleanup_signal(struct signal_struct *); |
| 1850 | extern void __cleanup_sighand(struct sighand_struct *); | 1849 | extern void __cleanup_sighand(struct sighand_struct *); |
| 1850 | |||
| 1851 | extern void exit_itimers(struct signal_struct *); | 1851 | extern void exit_itimers(struct signal_struct *); |
| 1852 | extern void flush_itimer_signals(void); | ||
| 1852 | 1853 | ||
| 1853 | extern NORET_TYPE void do_group_exit(int); | 1854 | extern NORET_TYPE void do_group_exit(int); |
| 1854 | 1855 | ||
diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index d32123ae08ad..d8f31de632c5 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h | |||
| @@ -192,6 +192,7 @@ struct uart_ops { | |||
| 192 | void (*shutdown)(struct uart_port *); | 192 | void (*shutdown)(struct uart_port *); |
| 193 | void (*set_termios)(struct uart_port *, struct ktermios *new, | 193 | void (*set_termios)(struct uart_port *, struct ktermios *new, |
| 194 | struct ktermios *old); | 194 | struct ktermios *old); |
| 195 | void (*set_ldisc)(struct uart_port *); | ||
| 195 | void (*pm)(struct uart_port *, unsigned int state, | 196 | void (*pm)(struct uart_port *, unsigned int state, |
| 196 | unsigned int oldstate); | 197 | unsigned int oldstate); |
| 197 | int (*set_wake)(struct uart_port *, unsigned int state); | 198 | int (*set_wake)(struct uart_port *, unsigned int state); |
diff --git a/include/linux/slab.h b/include/linux/slab.h index 805ed4b92f9a..c2ad35016599 100644 --- a/include/linux/slab.h +++ b/include/linux/slab.h | |||
| @@ -276,6 +276,17 @@ static inline void *kzalloc(size_t size, gfp_t flags) | |||
| 276 | return kmalloc(size, flags | __GFP_ZERO); | 276 | return kmalloc(size, flags | __GFP_ZERO); |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | /** | ||
| 280 | * kzalloc_node - allocate zeroed memory from a particular memory node. | ||
| 281 | * @size: how many bytes of memory are required. | ||
| 282 | * @flags: the type of memory to allocate (see kmalloc). | ||
| 283 | * @node: memory node from which to allocate | ||
| 284 | */ | ||
| 285 | static inline void *kzalloc_node(size_t size, gfp_t flags, int node) | ||
| 286 | { | ||
| 287 | return kmalloc_node(size, flags | __GFP_ZERO, node); | ||
| 288 | } | ||
| 289 | |||
| 279 | #ifdef CONFIG_SLABINFO | 290 | #ifdef CONFIG_SLABINFO |
| 280 | extern const struct seq_operations slabinfo_op; | 291 | extern const struct seq_operations slabinfo_op; |
| 281 | ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *); | 292 | ssize_t slabinfo_write(struct file *, const char __user *, size_t, loff_t *); |
diff --git a/include/linux/spi/mmc_spi.h b/include/linux/spi/mmc_spi.h index e9bbe3ebd721..d5ca78b93a3b 100644 --- a/include/linux/spi/mmc_spi.h +++ b/include/linux/spi/mmc_spi.h | |||
| @@ -1,6 +1,8 @@ | |||
| 1 | #ifndef __LINUX_SPI_MMC_SPI_H | 1 | #ifndef __LINUX_SPI_MMC_SPI_H |
| 2 | #define __LINUX_SPI_MMC_SPI_H | 2 | #define __LINUX_SPI_MMC_SPI_H |
| 3 | 3 | ||
| 4 | #include <linux/interrupt.h> | ||
| 5 | |||
| 4 | struct device; | 6 | struct device; |
| 5 | struct mmc_host; | 7 | struct mmc_host; |
| 6 | 8 | ||
diff --git a/include/linux/topology.h b/include/linux/topology.h index 4bb7074a2c3a..24f3d2282e11 100644 --- a/include/linux/topology.h +++ b/include/linux/topology.h | |||
| @@ -166,7 +166,9 @@ void arch_update_cpu_topology(void); | |||
| 166 | .busy_idx = 3, \ | 166 | .busy_idx = 3, \ |
| 167 | .idle_idx = 3, \ | 167 | .idle_idx = 3, \ |
| 168 | .flags = SD_LOAD_BALANCE \ | 168 | .flags = SD_LOAD_BALANCE \ |
| 169 | | SD_SERIALIZE, \ | 169 | | SD_BALANCE_NEWIDLE \ |
| 170 | | SD_WAKE_AFFINE \ | ||
| 171 | | SD_SERIALIZE, \ | ||
| 170 | .last_balance = jiffies, \ | 172 | .last_balance = jiffies, \ |
| 171 | .balance_interval = 64, \ | 173 | .balance_interval = 64, \ |
| 172 | } | 174 | } |
diff --git a/include/linux/tty.h b/include/linux/tty.h index 7f7121f9c968..324a3b231d40 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h | |||
| @@ -36,7 +36,7 @@ | |||
| 36 | #define N_6PACK 7 | 36 | #define N_6PACK 7 |
| 37 | #define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ | 37 | #define N_MASC 8 /* Reserved for Mobitex module <kaz@cafe.net> */ |
| 38 | #define N_R3964 9 /* Reserved for Simatic R3964 module */ | 38 | #define N_R3964 9 /* Reserved for Simatic R3964 module */ |
| 39 | #define N_PROFIBUS_FDL 10 /* Reserved for Profibus <Dave@mvhi.com> */ | 39 | #define N_PROFIBUS_FDL 10 /* Reserved for Profibus */ |
| 40 | #define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */ | 40 | #define N_IRDA 11 /* Linux IrDa - http://irda.sourceforge.net/ */ |
| 41 | #define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data */ | 41 | #define N_SMSBLOCK 12 /* SMS block mode - for talking to GSM data */ |
| 42 | /* cards about SMS messages */ | 42 | /* cards about SMS messages */ |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index c1411189ba6c..4a535ea1e123 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -865,9 +865,9 @@ struct v4l2_querymenu | |||
| 865 | #define V4L2_CID_HFLIP (V4L2_CID_BASE+20) | 865 | #define V4L2_CID_HFLIP (V4L2_CID_BASE+20) |
| 866 | #define V4L2_CID_VFLIP (V4L2_CID_BASE+21) | 866 | #define V4L2_CID_VFLIP (V4L2_CID_BASE+21) |
| 867 | 867 | ||
| 868 | /* Deprecated, use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */ | 868 | /* Deprecated; use V4L2_CID_PAN_RESET and V4L2_CID_TILT_RESET */ |
| 869 | #define V4L2_CID_HCENTER_DEPRECATED (V4L2_CID_BASE+22) | 869 | #define V4L2_CID_HCENTER (V4L2_CID_BASE+22) |
| 870 | #define V4L2_CID_VCENTER_DEPRECATED (V4L2_CID_BASE+23) | 870 | #define V4L2_CID_VCENTER (V4L2_CID_BASE+23) |
| 871 | 871 | ||
| 872 | #define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24) | 872 | #define V4L2_CID_POWER_LINE_FREQUENCY (V4L2_CID_BASE+24) |
| 873 | enum v4l2_power_line_frequency { | 873 | enum v4l2_power_line_frequency { |
diff --git a/include/linux/virtio_blk.h b/include/linux/virtio_blk.h index d4695a3356d0..5f79a5f9de79 100644 --- a/include/linux/virtio_blk.h +++ b/include/linux/virtio_blk.h | |||
| @@ -10,18 +10,19 @@ | |||
| 10 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ | 10 | #define VIRTIO_BLK_F_SIZE_MAX 1 /* Indicates maximum segment size */ |
| 11 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ | 11 | #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ |
| 12 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ | 12 | #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ |
| 13 | #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ | ||
| 13 | 14 | ||
| 14 | struct virtio_blk_config | 15 | struct virtio_blk_config |
| 15 | { | 16 | { |
| 16 | /* The capacity (in 512-byte sectors). */ | 17 | /* The capacity (in 512-byte sectors). */ |
| 17 | __le64 capacity; | 18 | __u64 capacity; |
| 18 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ | 19 | /* The maximum segment size (if VIRTIO_BLK_F_SIZE_MAX) */ |
| 19 | __le32 size_max; | 20 | __u32 size_max; |
| 20 | /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ | 21 | /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ |
| 21 | __le32 seg_max; | 22 | __u32 seg_max; |
| 22 | /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ | 23 | /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ |
| 23 | struct virtio_blk_geometry { | 24 | struct virtio_blk_geometry { |
| 24 | __le16 cylinders; | 25 | __u16 cylinders; |
| 25 | __u8 heads; | 26 | __u8 heads; |
| 26 | __u8 sectors; | 27 | __u8 sectors; |
| 27 | } geometry; | 28 | } geometry; |
diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h index 50db245c81ad..f364bbf63c34 100644 --- a/include/linux/virtio_config.h +++ b/include/linux/virtio_config.h | |||
| @@ -15,6 +15,10 @@ | |||
| 15 | /* We've given up on this device. */ | 15 | /* We've given up on this device. */ |
| 16 | #define VIRTIO_CONFIG_S_FAILED 0x80 | 16 | #define VIRTIO_CONFIG_S_FAILED 0x80 |
| 17 | 17 | ||
| 18 | /* Do we get callbacks when the ring is completely used, even if we've | ||
| 19 | * suppressed them? */ | ||
| 20 | #define VIRTIO_F_NOTIFY_ON_EMPTY 24 | ||
| 21 | |||
| 18 | #ifdef __KERNEL__ | 22 | #ifdef __KERNEL__ |
| 19 | #include <linux/virtio.h> | 23 | #include <linux/virtio.h> |
| 20 | 24 | ||
| @@ -99,7 +103,7 @@ static inline bool virtio_has_feature(const struct virtio_device *vdev, | |||
| 99 | * The return value is -ENOENT if the feature doesn't exist. Otherwise | 103 | * The return value is -ENOENT if the feature doesn't exist. Otherwise |
| 100 | * the config value is copied into whatever is pointed to by v. */ | 104 | * the config value is copied into whatever is pointed to by v. */ |
| 101 | #define virtio_config_val(vdev, fbit, offset, v) \ | 105 | #define virtio_config_val(vdev, fbit, offset, v) \ |
| 102 | virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(v)) | 106 | virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(*v)) |
| 103 | 107 | ||
| 104 | static inline int virtio_config_buf(struct virtio_device *vdev, | 108 | static inline int virtio_config_buf(struct virtio_device *vdev, |
| 105 | unsigned int fbit, | 109 | unsigned int fbit, |
diff --git a/include/linux/virtio_rng.h b/include/linux/virtio_rng.h new file mode 100644 index 000000000000..331afb6c9f62 --- /dev/null +++ b/include/linux/virtio_rng.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | #ifndef _LINUX_VIRTIO_RNG_H | ||
| 2 | #define _LINUX_VIRTIO_RNG_H | ||
| 3 | #include <linux/virtio_config.h> | ||
| 4 | |||
| 5 | /* The ID for virtio_rng */ | ||
| 6 | #define VIRTIO_ID_RNG 4 | ||
| 7 | |||
| 8 | #endif /* _LINUX_VIRTIO_RNG_H */ | ||
diff --git a/include/linux/wm97xx.h b/include/linux/wm97xx.h index 4d13732e9cf0..6f69968eab24 100644 --- a/include/linux/wm97xx.h +++ b/include/linux/wm97xx.h | |||
| @@ -100,6 +100,7 @@ | |||
| 100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ | 100 | #define WM9713_ADCSEL_Y 0x0004 /* Y measurement */ |
| 101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ | 101 | #define WM9713_ADCSEL_PRES 0x0008 /* Pressure measurement */ |
| 102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ | 102 | #define WM9713_COO 0x0001 /* enable coordinate mode */ |
| 103 | #define WM9713_45W 0x1000 /* set for 5 wire panel */ | ||
| 103 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ | 104 | #define WM9713_PDEN 0x0800 /* measure only when pen down */ |
| 104 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ | 105 | #define WM9713_ADCSEL_MASK 0x00fe /* ADC selection mask */ |
| 105 | #define WM9713_WAIT 0x0200 /* coordinate wait */ | 106 | #define WM9713_WAIT 0x0200 /* coordinate wait */ |
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index a807d2f86ee8..33f01ae08f76 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
| @@ -40,7 +40,6 @@ | |||
| 40 | #define VFL_TYPE_VTX 3 | 40 | #define VFL_TYPE_VTX 3 |
| 41 | 41 | ||
| 42 | /* Video standard functions */ | 42 | /* Video standard functions */ |
| 43 | extern unsigned int v4l2_video_std_fps(struct v4l2_standard *vs); | ||
| 44 | extern char *v4l2_norm_to_name(v4l2_std_id id); | 43 | extern char *v4l2_norm_to_name(v4l2_std_id id); |
| 45 | extern int v4l2_video_std_construct(struct v4l2_standard *vs, | 44 | extern int v4l2_video_std_construct(struct v4l2_standard *vs, |
| 46 | int id, char *name); | 45 | int id, char *name); |
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 0a2f0372df31..bbd3d583c6e6 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h | |||
| @@ -94,6 +94,28 @@ extern void addrconf_join_solict(struct net_device *dev, | |||
| 94 | extern void addrconf_leave_solict(struct inet6_dev *idev, | 94 | extern void addrconf_leave_solict(struct inet6_dev *idev, |
| 95 | struct in6_addr *addr); | 95 | struct in6_addr *addr); |
| 96 | 96 | ||
| 97 | static inline unsigned long addrconf_timeout_fixup(u32 timeout, | ||
| 98 | unsigned unit) | ||
| 99 | { | ||
| 100 | if (timeout == 0xffffffff) | ||
| 101 | return ~0UL; | ||
| 102 | |||
| 103 | /* | ||
| 104 | * Avoid arithmetic overflow. | ||
| 105 | * Assuming unit is constant and non-zero, this "if" statement | ||
| 106 | * will go away on 64bit archs. | ||
| 107 | */ | ||
| 108 | if (0xfffffffe > LONG_MAX / unit && timeout > LONG_MAX / unit) | ||
| 109 | return LONG_MAX / unit; | ||
| 110 | |||
| 111 | return timeout; | ||
| 112 | } | ||
| 113 | |||
| 114 | static inline int addrconf_finite_timeout(unsigned long timeout) | ||
| 115 | { | ||
| 116 | return ~timeout; | ||
| 117 | } | ||
| 118 | |||
| 97 | /* | 119 | /* |
| 98 | * IPv6 Address Label subsystem (addrlabel.c) | 120 | * IPv6 Address Label subsystem (addrlabel.c) |
| 99 | */ | 121 | */ |
diff --git a/include/net/genetlink.h b/include/net/genetlink.h index decdda546829..747c255d1df0 100644 --- a/include/net/genetlink.h +++ b/include/net/genetlink.h | |||
| @@ -162,9 +162,9 @@ static inline int genlmsg_end(struct sk_buff *skb, void *hdr) | |||
| 162 | * @skb: socket buffer the message is stored in | 162 | * @skb: socket buffer the message is stored in |
| 163 | * @hdr: generic netlink message header | 163 | * @hdr: generic netlink message header |
| 164 | */ | 164 | */ |
| 165 | static inline int genlmsg_cancel(struct sk_buff *skb, void *hdr) | 165 | static inline void genlmsg_cancel(struct sk_buff *skb, void *hdr) |
| 166 | { | 166 | { |
| 167 | return nlmsg_cancel(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); | 167 | nlmsg_cancel(skb, hdr - GENL_HDRLEN - NLMSG_HDRLEN); |
| 168 | } | 168 | } |
| 169 | 169 | ||
| 170 | /** | 170 | /** |
diff --git a/include/net/netlink.h b/include/net/netlink.h index a5506c42f03c..dfc3701dfcc3 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h | |||
| @@ -556,14 +556,12 @@ static inline void *nlmsg_get_pos(struct sk_buff *skb) | |||
| 556 | * @skb: socket buffer the message is stored in | 556 | * @skb: socket buffer the message is stored in |
| 557 | * @mark: mark to trim to | 557 | * @mark: mark to trim to |
| 558 | * | 558 | * |
| 559 | * Trims the message to the provided mark. Returns -1. | 559 | * Trims the message to the provided mark. |
| 560 | */ | 560 | */ |
| 561 | static inline int nlmsg_trim(struct sk_buff *skb, const void *mark) | 561 | static inline void nlmsg_trim(struct sk_buff *skb, const void *mark) |
| 562 | { | 562 | { |
| 563 | if (mark) | 563 | if (mark) |
| 564 | skb_trim(skb, (unsigned char *) mark - skb->data); | 564 | skb_trim(skb, (unsigned char *) mark - skb->data); |
| 565 | |||
| 566 | return -1; | ||
| 567 | } | 565 | } |
| 568 | 566 | ||
| 569 | /** | 567 | /** |
| @@ -572,11 +570,11 @@ static inline int nlmsg_trim(struct sk_buff *skb, const void *mark) | |||
| 572 | * @nlh: netlink message header | 570 | * @nlh: netlink message header |
| 573 | * | 571 | * |
| 574 | * Removes the complete netlink message including all | 572 | * Removes the complete netlink message including all |
| 575 | * attributes from the socket buffer again. Returns -1. | 573 | * attributes from the socket buffer again. |
| 576 | */ | 574 | */ |
| 577 | static inline int nlmsg_cancel(struct sk_buff *skb, struct nlmsghdr *nlh) | 575 | static inline void nlmsg_cancel(struct sk_buff *skb, struct nlmsghdr *nlh) |
| 578 | { | 576 | { |
| 579 | return nlmsg_trim(skb, nlh); | 577 | nlmsg_trim(skb, nlh); |
| 580 | } | 578 | } |
| 581 | 579 | ||
| 582 | /** | 580 | /** |
| @@ -772,12 +770,13 @@ static inline int __nla_parse_nested_compat(struct nlattr *tb[], int maxtype, | |||
| 772 | const struct nla_policy *policy, | 770 | const struct nla_policy *policy, |
| 773 | int len) | 771 | int len) |
| 774 | { | 772 | { |
| 775 | if (nla_len(nla) < len) | 773 | int nested_len = nla_len(nla) - NLA_ALIGN(len); |
| 776 | return -1; | 774 | |
| 777 | if (nla_len(nla) >= NLA_ALIGN(len) + sizeof(struct nlattr)) | 775 | if (nested_len < 0) |
| 778 | return nla_parse_nested(tb, maxtype, | 776 | return -EINVAL; |
| 779 | nla_data(nla) + NLA_ALIGN(len), | 777 | if (nested_len >= nla_attr_size(0)) |
| 780 | policy); | 778 | return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len), |
| 779 | nested_len, policy); | ||
| 781 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); | 780 | memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1)); |
| 782 | return 0; | 781 | return 0; |
| 783 | } | 782 | } |
| @@ -1079,11 +1078,11 @@ static inline int nla_nest_compat_end(struct sk_buff *skb, struct nlattr *start) | |||
| 1079 | * @start: container attribute | 1078 | * @start: container attribute |
| 1080 | * | 1079 | * |
| 1081 | * Removes the container attribute and including all nested | 1080 | * Removes the container attribute and including all nested |
| 1082 | * attributes. Returns -1. | 1081 | * attributes. Returns -EMSGSIZE |
| 1083 | */ | 1082 | */ |
| 1084 | static inline int nla_nest_cancel(struct sk_buff *skb, struct nlattr *start) | 1083 | static inline void nla_nest_cancel(struct sk_buff *skb, struct nlattr *start) |
| 1085 | { | 1084 | { |
| 1086 | return nlmsg_trim(skb, start); | 1085 | nlmsg_trim(skb, start); |
| 1087 | } | 1086 | } |
| 1088 | 1087 | ||
| 1089 | /** | 1088 | /** |
diff --git a/include/net/sctp/structs.h b/include/net/sctp/structs.h index 0ce0443c5b79..7f25195f9855 100644 --- a/include/net/sctp/structs.h +++ b/include/net/sctp/structs.h | |||
| @@ -548,7 +548,8 @@ struct sctp_af { | |||
| 548 | struct dst_entry *(*get_dst) (struct sctp_association *asoc, | 548 | struct dst_entry *(*get_dst) (struct sctp_association *asoc, |
| 549 | union sctp_addr *daddr, | 549 | union sctp_addr *daddr, |
| 550 | union sctp_addr *saddr); | 550 | union sctp_addr *saddr); |
| 551 | void (*get_saddr) (struct sctp_association *asoc, | 551 | void (*get_saddr) (struct sctp_sock *sk, |
| 552 | struct sctp_association *asoc, | ||
| 552 | struct dst_entry *dst, | 553 | struct dst_entry *dst, |
| 553 | union sctp_addr *daddr, | 554 | union sctp_addr *daddr, |
| 554 | union sctp_addr *saddr); | 555 | union sctp_addr *saddr); |
| @@ -587,6 +588,7 @@ struct sctp_af { | |||
| 587 | int (*is_ce) (const struct sk_buff *sk); | 588 | int (*is_ce) (const struct sk_buff *sk); |
| 588 | void (*seq_dump_addr)(struct seq_file *seq, | 589 | void (*seq_dump_addr)(struct seq_file *seq, |
| 589 | union sctp_addr *addr); | 590 | union sctp_addr *addr); |
| 591 | void (*ecn_capable)(struct sock *sk); | ||
| 590 | __u16 net_header_len; | 592 | __u16 net_header_len; |
| 591 | int sockaddr_len; | 593 | int sockaddr_len; |
| 592 | sa_family_t sa_family; | 594 | sa_family_t sa_family; |
| @@ -901,7 +903,10 @@ struct sctp_transport { | |||
| 901 | * calculation completes (i.e. the DATA chunk | 903 | * calculation completes (i.e. the DATA chunk |
| 902 | * is SACK'd) clear this flag. | 904 | * is SACK'd) clear this flag. |
| 903 | */ | 905 | */ |
| 904 | int rto_pending; | 906 | __u8 rto_pending; |
| 907 | |||
| 908 | /* Flag to track the current fast recovery state */ | ||
| 909 | __u8 fast_recovery; | ||
| 905 | 910 | ||
| 906 | /* | 911 | /* |
| 907 | * These are the congestion stats. | 912 | * These are the congestion stats. |
| @@ -920,6 +925,9 @@ struct sctp_transport { | |||
| 920 | /* Data that has been sent, but not acknowledged. */ | 925 | /* Data that has been sent, but not acknowledged. */ |
| 921 | __u32 flight_size; | 926 | __u32 flight_size; |
| 922 | 927 | ||
| 928 | /* TSN marking the fast recovery exit point */ | ||
| 929 | __u32 fast_recovery_exit; | ||
| 930 | |||
| 923 | /* Destination */ | 931 | /* Destination */ |
| 924 | struct dst_entry *dst; | 932 | struct dst_entry *dst; |
| 925 | /* Source address. */ | 933 | /* Source address. */ |
| @@ -1044,7 +1052,7 @@ void sctp_transport_route(struct sctp_transport *, union sctp_addr *, | |||
| 1044 | struct sctp_sock *); | 1052 | struct sctp_sock *); |
| 1045 | void sctp_transport_pmtu(struct sctp_transport *); | 1053 | void sctp_transport_pmtu(struct sctp_transport *); |
| 1046 | void sctp_transport_free(struct sctp_transport *); | 1054 | void sctp_transport_free(struct sctp_transport *); |
| 1047 | void sctp_transport_reset_timers(struct sctp_transport *); | 1055 | void sctp_transport_reset_timers(struct sctp_transport *, int); |
| 1048 | void sctp_transport_hold(struct sctp_transport *); | 1056 | void sctp_transport_hold(struct sctp_transport *); |
| 1049 | void sctp_transport_put(struct sctp_transport *); | 1057 | void sctp_transport_put(struct sctp_transport *); |
| 1050 | void sctp_transport_update_rto(struct sctp_transport *, __u32); | 1058 | void sctp_transport_update_rto(struct sctp_transport *, __u32); |
| @@ -1134,6 +1142,9 @@ struct sctp_outq { | |||
| 1134 | /* How many unackd bytes do we have in-flight? */ | 1142 | /* How many unackd bytes do we have in-flight? */ |
| 1135 | __u32 outstanding_bytes; | 1143 | __u32 outstanding_bytes; |
| 1136 | 1144 | ||
| 1145 | /* Are we doing fast-rtx on this queue */ | ||
| 1146 | char fast_rtx; | ||
| 1147 | |||
| 1137 | /* Corked? */ | 1148 | /* Corked? */ |
| 1138 | char cork; | 1149 | char cork; |
| 1139 | 1150 | ||
diff --git a/include/net/transp_v6.h b/include/net/transp_v6.h index 27394e0447d8..112934a3288d 100644 --- a/include/net/transp_v6.h +++ b/include/net/transp_v6.h | |||
| @@ -40,7 +40,8 @@ extern int datagram_recv_ctl(struct sock *sk, | |||
| 40 | struct msghdr *msg, | 40 | struct msghdr *msg, |
| 41 | struct sk_buff *skb); | 41 | struct sk_buff *skb); |
| 42 | 42 | ||
| 43 | extern int datagram_send_ctl(struct msghdr *msg, | 43 | extern int datagram_send_ctl(struct net *net, |
| 44 | struct msghdr *msg, | ||
| 44 | struct flowi *fl, | 45 | struct flowi *fl, |
| 45 | struct ipv6_txoptions *opt, | 46 | struct ipv6_txoptions *opt, |
| 46 | int *hlimit, int *tclass); | 47 | int *hlimit, int *tclass); |
diff --git a/include/net/udp.h b/include/net/udp.h index 3e55a99b0ba3..ccce83707046 100644 --- a/include/net/udp.h +++ b/include/net/udp.h | |||
| @@ -135,6 +135,7 @@ extern void udp_err(struct sk_buff *, u32); | |||
| 135 | 135 | ||
| 136 | extern int udp_sendmsg(struct kiocb *iocb, struct sock *sk, | 136 | extern int udp_sendmsg(struct kiocb *iocb, struct sock *sk, |
| 137 | struct msghdr *msg, size_t len); | 137 | struct msghdr *msg, size_t len); |
| 138 | extern void udp_flush_pending_frames(struct sock *sk); | ||
| 138 | 139 | ||
| 139 | extern int udp_rcv(struct sk_buff *skb); | 140 | extern int udp_rcv(struct sk_buff *skb); |
| 140 | extern int udp_ioctl(struct sock *sk, int cmd, unsigned long arg); | 141 | extern int udp_ioctl(struct sock *sk, int cmd, unsigned long arg); |
diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h index 049edc5e6461..9c309daf492b 100644 --- a/include/sound/ac97_codec.h +++ b/include/sound/ac97_codec.h | |||
| @@ -505,6 +505,7 @@ struct snd_ac97 { | |||
| 505 | unsigned short pcmreg[3]; // PCM registers | 505 | unsigned short pcmreg[3]; // PCM registers |
| 506 | unsigned short codec_cfg[3]; // CODEC_CFG bits | 506 | unsigned short codec_cfg[3]; // CODEC_CFG bits |
| 507 | unsigned char swap_mic_linein; // AD1986/AD1986A only | 507 | unsigned char swap_mic_linein; // AD1986/AD1986A only |
| 508 | unsigned char lo_as_master; /* LO as master */ | ||
| 508 | } ad18xx; | 509 | } ad18xx; |
| 509 | unsigned int dev_flags; /* device specific */ | 510 | unsigned int dev_flags; /* device specific */ |
| 510 | } spec; | 511 | } spec; |
diff --git a/init/Kconfig b/init/Kconfig index 6135d07f31ec..6199d1120900 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
| @@ -13,6 +13,7 @@ config DEFCONFIG_LIST | |||
| 13 | default "/lib/modules/$UNAME_RELEASE/.config" | 13 | default "/lib/modules/$UNAME_RELEASE/.config" |
| 14 | default "/etc/kernel-config" | 14 | default "/etc/kernel-config" |
| 15 | default "/boot/config-$UNAME_RELEASE" | 15 | default "/boot/config-$UNAME_RELEASE" |
| 16 | default "$ARCH_DEFCONFIG" | ||
| 16 | default "arch/$ARCH/defconfig" | 17 | default "arch/$ARCH/defconfig" |
| 17 | 18 | ||
| 18 | menu "General setup" | 19 | menu "General setup" |
| @@ -98,20 +98,15 @@ void recompute_msgmni(struct ipc_namespace *ns) | |||
| 98 | 98 | ||
| 99 | if (allowed < MSGMNI) { | 99 | if (allowed < MSGMNI) { |
| 100 | ns->msg_ctlmni = MSGMNI; | 100 | ns->msg_ctlmni = MSGMNI; |
| 101 | goto out_callback; | 101 | return; |
| 102 | } | 102 | } |
| 103 | 103 | ||
| 104 | if (allowed > IPCMNI / nb_ns) { | 104 | if (allowed > IPCMNI / nb_ns) { |
| 105 | ns->msg_ctlmni = IPCMNI / nb_ns; | 105 | ns->msg_ctlmni = IPCMNI / nb_ns; |
| 106 | goto out_callback; | 106 | return; |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | ns->msg_ctlmni = allowed; | 109 | ns->msg_ctlmni = allowed; |
| 110 | |||
| 111 | out_callback: | ||
| 112 | |||
| 113 | printk(KERN_INFO "msgmni has been set to %d for ipc namespace %p\n", | ||
| 114 | ns->msg_ctlmni, ns); | ||
| 115 | } | 110 | } |
| 116 | 111 | ||
| 117 | void msg_init_ns(struct ipc_namespace *ns) | 112 | void msg_init_ns(struct ipc_namespace *ns) |
| @@ -136,6 +131,10 @@ void msg_exit_ns(struct ipc_namespace *ns) | |||
| 136 | void __init msg_init(void) | 131 | void __init msg_init(void) |
| 137 | { | 132 | { |
| 138 | msg_init_ns(&init_ipc_ns); | 133 | msg_init_ns(&init_ipc_ns); |
| 134 | |||
| 135 | printk(KERN_INFO "msgmni has been set to %d\n", | ||
| 136 | init_ipc_ns.msg_ctlmni); | ||
| 137 | |||
| 139 | ipc_init_proc_interface("sysvipc/msg", | 138 | ipc_init_proc_interface("sysvipc/msg", |
| 140 | " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n", | 139 | " key msqid perms cbytes qnum lspid lrpid uid gid cuid cgid stime rtime ctime\n", |
| 141 | IPC_MSG_IDS, sysvipc_msg_proc_show); | 140 | IPC_MSG_IDS, sysvipc_msg_proc_show); |
diff --git a/kernel/capability.c b/kernel/capability.c index 39e8193b41ea..cfbe44299488 100644 --- a/kernel/capability.c +++ b/kernel/capability.c | |||
| @@ -53,6 +53,69 @@ static void warn_legacy_capability_use(void) | |||
| 53 | } | 53 | } |
| 54 | 54 | ||
| 55 | /* | 55 | /* |
| 56 | * Version 2 capabilities worked fine, but the linux/capability.h file | ||
| 57 | * that accompanied their introduction encouraged their use without | ||
| 58 | * the necessary user-space source code changes. As such, we have | ||
| 59 | * created a version 3 with equivalent functionality to version 2, but | ||
| 60 | * with a header change to protect legacy source code from using | ||
| 61 | * version 2 when it wanted to use version 1. If your system has code | ||
| 62 | * that trips the following warning, it is using version 2 specific | ||
| 63 | * capabilities and may be doing so insecurely. | ||
| 64 | * | ||
| 65 | * The remedy is to either upgrade your version of libcap (to 2.10+, | ||
| 66 | * if the application is linked against it), or recompile your | ||
| 67 | * application with modern kernel headers and this warning will go | ||
| 68 | * away. | ||
| 69 | */ | ||
| 70 | |||
| 71 | static void warn_deprecated_v2(void) | ||
| 72 | { | ||
| 73 | static int warned; | ||
| 74 | |||
| 75 | if (!warned) { | ||
| 76 | char name[sizeof(current->comm)]; | ||
| 77 | |||
| 78 | printk(KERN_INFO "warning: `%s' uses deprecated v2" | ||
| 79 | " capabilities in a way that may be insecure.\n", | ||
| 80 | get_task_comm(name, current)); | ||
| 81 | warned = 1; | ||
| 82 | } | ||
| 83 | } | ||
| 84 | |||
| 85 | /* | ||
| 86 | * Version check. Return the number of u32s in each capability flag | ||
| 87 | * array, or a negative value on error. | ||
| 88 | */ | ||
| 89 | static int cap_validate_magic(cap_user_header_t header, unsigned *tocopy) | ||
| 90 | { | ||
| 91 | __u32 version; | ||
| 92 | |||
| 93 | if (get_user(version, &header->version)) | ||
| 94 | return -EFAULT; | ||
| 95 | |||
| 96 | switch (version) { | ||
| 97 | case _LINUX_CAPABILITY_VERSION_1: | ||
| 98 | warn_legacy_capability_use(); | ||
| 99 | *tocopy = _LINUX_CAPABILITY_U32S_1; | ||
| 100 | break; | ||
| 101 | case _LINUX_CAPABILITY_VERSION_2: | ||
| 102 | warn_deprecated_v2(); | ||
| 103 | /* | ||
| 104 | * fall through - v3 is otherwise equivalent to v2. | ||
| 105 | */ | ||
| 106 | case _LINUX_CAPABILITY_VERSION_3: | ||
| 107 | *tocopy = _LINUX_CAPABILITY_U32S_3; | ||
| 108 | break; | ||
| 109 | default: | ||
| 110 | if (put_user((u32)_KERNEL_CAPABILITY_VERSION, &header->version)) | ||
| 111 | return -EFAULT; | ||
| 112 | return -EINVAL; | ||
| 113 | } | ||
| 114 | |||
| 115 | return 0; | ||
| 116 | } | ||
| 117 | |||
| 118 | /* | ||
| 56 | * For sys_getproccap() and sys_setproccap(), any of the three | 119 | * For sys_getproccap() and sys_setproccap(), any of the three |
| 57 | * capability set pointers may be NULL -- indicating that that set is | 120 | * capability set pointers may be NULL -- indicating that that set is |
| 58 | * uninteresting and/or not to be changed. | 121 | * uninteresting and/or not to be changed. |
| @@ -71,27 +134,13 @@ asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) | |||
| 71 | { | 134 | { |
| 72 | int ret = 0; | 135 | int ret = 0; |
| 73 | pid_t pid; | 136 | pid_t pid; |
| 74 | __u32 version; | ||
| 75 | struct task_struct *target; | 137 | struct task_struct *target; |
| 76 | unsigned tocopy; | 138 | unsigned tocopy; |
| 77 | kernel_cap_t pE, pI, pP; | 139 | kernel_cap_t pE, pI, pP; |
| 78 | 140 | ||
| 79 | if (get_user(version, &header->version)) | 141 | ret = cap_validate_magic(header, &tocopy); |
| 80 | return -EFAULT; | 142 | if (ret != 0) |
| 81 | 143 | return ret; | |
| 82 | switch (version) { | ||
| 83 | case _LINUX_CAPABILITY_VERSION_1: | ||
| 84 | warn_legacy_capability_use(); | ||
| 85 | tocopy = _LINUX_CAPABILITY_U32S_1; | ||
| 86 | break; | ||
| 87 | case _LINUX_CAPABILITY_VERSION_2: | ||
| 88 | tocopy = _LINUX_CAPABILITY_U32S_2; | ||
| 89 | break; | ||
| 90 | default: | ||
| 91 | if (put_user(_LINUX_CAPABILITY_VERSION, &header->version)) | ||
| 92 | return -EFAULT; | ||
| 93 | return -EINVAL; | ||
| 94 | } | ||
| 95 | 144 | ||
| 96 | if (get_user(pid, &header->pid)) | 145 | if (get_user(pid, &header->pid)) |
| 97 | return -EFAULT; | 146 | return -EFAULT; |
| @@ -118,7 +167,7 @@ out: | |||
| 118 | spin_unlock(&task_capability_lock); | 167 | spin_unlock(&task_capability_lock); |
| 119 | 168 | ||
| 120 | if (!ret) { | 169 | if (!ret) { |
| 121 | struct __user_cap_data_struct kdata[_LINUX_CAPABILITY_U32S]; | 170 | struct __user_cap_data_struct kdata[_KERNEL_CAPABILITY_U32S]; |
| 122 | unsigned i; | 171 | unsigned i; |
| 123 | 172 | ||
| 124 | for (i = 0; i < tocopy; i++) { | 173 | for (i = 0; i < tocopy; i++) { |
| @@ -128,7 +177,7 @@ out: | |||
| 128 | } | 177 | } |
| 129 | 178 | ||
| 130 | /* | 179 | /* |
| 131 | * Note, in the case, tocopy < _LINUX_CAPABILITY_U32S, | 180 | * Note, in the case, tocopy < _KERNEL_CAPABILITY_U32S, |
| 132 | * we silently drop the upper capabilities here. This | 181 | * we silently drop the upper capabilities here. This |
| 133 | * has the effect of making older libcap | 182 | * has the effect of making older libcap |
| 134 | * implementations implicitly drop upper capability | 183 | * implementations implicitly drop upper capability |
| @@ -240,30 +289,16 @@ static inline int cap_set_all(kernel_cap_t *effective, | |||
| 240 | */ | 289 | */ |
| 241 | asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) | 290 | asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) |
| 242 | { | 291 | { |
| 243 | struct __user_cap_data_struct kdata[_LINUX_CAPABILITY_U32S]; | 292 | struct __user_cap_data_struct kdata[_KERNEL_CAPABILITY_U32S]; |
| 244 | unsigned i, tocopy; | 293 | unsigned i, tocopy; |
| 245 | kernel_cap_t inheritable, permitted, effective; | 294 | kernel_cap_t inheritable, permitted, effective; |
| 246 | __u32 version; | ||
| 247 | struct task_struct *target; | 295 | struct task_struct *target; |
| 248 | int ret; | 296 | int ret; |
| 249 | pid_t pid; | 297 | pid_t pid; |
| 250 | 298 | ||
| 251 | if (get_user(version, &header->version)) | 299 | ret = cap_validate_magic(header, &tocopy); |
| 252 | return -EFAULT; | 300 | if (ret != 0) |
| 253 | 301 | return ret; | |
| 254 | switch (version) { | ||
| 255 | case _LINUX_CAPABILITY_VERSION_1: | ||
| 256 | warn_legacy_capability_use(); | ||
| 257 | tocopy = _LINUX_CAPABILITY_U32S_1; | ||
| 258 | break; | ||
| 259 | case _LINUX_CAPABILITY_VERSION_2: | ||
| 260 | tocopy = _LINUX_CAPABILITY_U32S_2; | ||
| 261 | break; | ||
| 262 | default: | ||
| 263 | if (put_user(_LINUX_CAPABILITY_VERSION, &header->version)) | ||
| 264 | return -EFAULT; | ||
| 265 | return -EINVAL; | ||
| 266 | } | ||
| 267 | 302 | ||
| 268 | if (get_user(pid, &header->pid)) | 303 | if (get_user(pid, &header->pid)) |
| 269 | return -EFAULT; | 304 | return -EFAULT; |
| @@ -281,7 +316,7 @@ asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) | |||
| 281 | permitted.cap[i] = kdata[i].permitted; | 316 | permitted.cap[i] = kdata[i].permitted; |
| 282 | inheritable.cap[i] = kdata[i].inheritable; | 317 | inheritable.cap[i] = kdata[i].inheritable; |
| 283 | } | 318 | } |
| 284 | while (i < _LINUX_CAPABILITY_U32S) { | 319 | while (i < _KERNEL_CAPABILITY_U32S) { |
| 285 | effective.cap[i] = 0; | 320 | effective.cap[i] = 0; |
| 286 | permitted.cap[i] = 0; | 321 | permitted.cap[i] = 0; |
| 287 | inheritable.cap[i] = 0; | 322 | inheritable.cap[i] = 0; |
diff --git a/kernel/cpuset.c b/kernel/cpuset.c index 86ea9e34e326..039baa4cd90c 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c | |||
| @@ -797,8 +797,10 @@ static int update_cpumask(struct cpuset *cs, char *buf) | |||
| 797 | retval = cpulist_parse(buf, trialcs.cpus_allowed); | 797 | retval = cpulist_parse(buf, trialcs.cpus_allowed); |
| 798 | if (retval < 0) | 798 | if (retval < 0) |
| 799 | return retval; | 799 | return retval; |
| 800 | |||
| 801 | if (!cpus_subset(trialcs.cpus_allowed, cpu_online_map)) | ||
| 802 | return -EINVAL; | ||
| 800 | } | 803 | } |
| 801 | cpus_and(trialcs.cpus_allowed, trialcs.cpus_allowed, cpu_online_map); | ||
| 802 | retval = validate_change(cs, &trialcs); | 804 | retval = validate_change(cs, &trialcs); |
| 803 | if (retval < 0) | 805 | if (retval < 0) |
| 804 | return retval; | 806 | return retval; |
| @@ -932,9 +934,11 @@ static int update_nodemask(struct cpuset *cs, char *buf) | |||
| 932 | retval = nodelist_parse(buf, trialcs.mems_allowed); | 934 | retval = nodelist_parse(buf, trialcs.mems_allowed); |
| 933 | if (retval < 0) | 935 | if (retval < 0) |
| 934 | goto done; | 936 | goto done; |
| 937 | |||
| 938 | if (!nodes_subset(trialcs.mems_allowed, | ||
| 939 | node_states[N_HIGH_MEMORY])) | ||
| 940 | return -EINVAL; | ||
| 935 | } | 941 | } |
| 936 | nodes_and(trialcs.mems_allowed, trialcs.mems_allowed, | ||
| 937 | node_states[N_HIGH_MEMORY]); | ||
| 938 | oldmem = cs->mems_allowed; | 942 | oldmem = cs->mems_allowed; |
| 939 | if (nodes_equal(oldmem, trialcs.mems_allowed)) { | 943 | if (nodes_equal(oldmem, trialcs.mems_allowed)) { |
| 940 | retval = 0; /* Too easy - nothing to do */ | 944 | retval = 0; /* Too easy - nothing to do */ |
diff --git a/kernel/kgdb.c b/kernel/kgdb.c index 14787de568b3..79e3c90113c2 100644 --- a/kernel/kgdb.c +++ b/kernel/kgdb.c | |||
| @@ -52,6 +52,7 @@ | |||
| 52 | #include <asm/byteorder.h> | 52 | #include <asm/byteorder.h> |
| 53 | #include <asm/atomic.h> | 53 | #include <asm/atomic.h> |
| 54 | #include <asm/system.h> | 54 | #include <asm/system.h> |
| 55 | #include <asm/unaligned.h> | ||
| 55 | 56 | ||
| 56 | static int kgdb_break_asap; | 57 | static int kgdb_break_asap; |
| 57 | 58 | ||
| @@ -227,8 +228,6 @@ void __weak kgdb_disable_hw_debug(struct pt_regs *regs) | |||
| 227 | * GDB remote protocol parser: | 228 | * GDB remote protocol parser: |
| 228 | */ | 229 | */ |
| 229 | 230 | ||
| 230 | static const char hexchars[] = "0123456789abcdef"; | ||
| 231 | |||
| 232 | static int hex(char ch) | 231 | static int hex(char ch) |
| 233 | { | 232 | { |
| 234 | if ((ch >= 'a') && (ch <= 'f')) | 233 | if ((ch >= 'a') && (ch <= 'f')) |
| @@ -316,8 +315,8 @@ static void put_packet(char *buffer) | |||
| 316 | } | 315 | } |
| 317 | 316 | ||
| 318 | kgdb_io_ops->write_char('#'); | 317 | kgdb_io_ops->write_char('#'); |
| 319 | kgdb_io_ops->write_char(hexchars[checksum >> 4]); | 318 | kgdb_io_ops->write_char(hex_asc_hi(checksum)); |
| 320 | kgdb_io_ops->write_char(hexchars[checksum & 0xf]); | 319 | kgdb_io_ops->write_char(hex_asc_lo(checksum)); |
| 321 | if (kgdb_io_ops->flush) | 320 | if (kgdb_io_ops->flush) |
| 322 | kgdb_io_ops->flush(); | 321 | kgdb_io_ops->flush(); |
| 323 | 322 | ||
| @@ -478,8 +477,8 @@ static void error_packet(char *pkt, int error) | |||
| 478 | { | 477 | { |
| 479 | error = -error; | 478 | error = -error; |
| 480 | pkt[0] = 'E'; | 479 | pkt[0] = 'E'; |
| 481 | pkt[1] = hexchars[(error / 10)]; | 480 | pkt[1] = hex_asc[(error / 10)]; |
| 482 | pkt[2] = hexchars[(error % 10)]; | 481 | pkt[2] = hex_asc[(error % 10)]; |
| 483 | pkt[3] = '\0'; | 482 | pkt[3] = '\0'; |
| 484 | } | 483 | } |
| 485 | 484 | ||
| @@ -510,10 +509,7 @@ static void int_to_threadref(unsigned char *id, int value) | |||
| 510 | scan = (unsigned char *)id; | 509 | scan = (unsigned char *)id; |
| 511 | while (i--) | 510 | while (i--) |
| 512 | *scan++ = 0; | 511 | *scan++ = 0; |
| 513 | *scan++ = (value >> 24) & 0xff; | 512 | put_unaligned_be32(value, scan); |
| 514 | *scan++ = (value >> 16) & 0xff; | ||
| 515 | *scan++ = (value >> 8) & 0xff; | ||
| 516 | *scan++ = (value & 0xff); | ||
| 517 | } | 513 | } |
| 518 | 514 | ||
| 519 | static struct task_struct *getthread(struct pt_regs *regs, int tid) | 515 | static struct task_struct *getthread(struct pt_regs *regs, int tid) |
diff --git a/kernel/relay.c b/kernel/relay.c index bc24dcdc570f..7de644cdec43 100644 --- a/kernel/relay.c +++ b/kernel/relay.c | |||
| @@ -1191,7 +1191,7 @@ static ssize_t relay_file_splice_read(struct file *in, | |||
| 1191 | ret = 0; | 1191 | ret = 0; |
| 1192 | spliced = 0; | 1192 | spliced = 0; |
| 1193 | 1193 | ||
| 1194 | while (len) { | 1194 | while (len && !spliced) { |
| 1195 | ret = subbuf_splice_actor(in, ppos, pipe, len, flags, &nonpad_ret); | 1195 | ret = subbuf_splice_actor(in, ppos, pipe, len, flags, &nonpad_ret); |
| 1196 | if (ret < 0) | 1196 | if (ret < 0) |
| 1197 | break; | 1197 | break; |
diff --git a/kernel/sched.c b/kernel/sched.c index cfa222a91539..bfb8ad8ed171 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
| @@ -136,7 +136,7 @@ static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val) | |||
| 136 | 136 | ||
| 137 | static inline int rt_policy(int policy) | 137 | static inline int rt_policy(int policy) |
| 138 | { | 138 | { |
| 139 | if (unlikely(policy == SCHED_FIFO) || unlikely(policy == SCHED_RR)) | 139 | if (unlikely(policy == SCHED_FIFO || policy == SCHED_RR)) |
| 140 | return 1; | 140 | return 1; |
| 141 | return 0; | 141 | return 0; |
| 142 | } | 142 | } |
| @@ -398,43 +398,6 @@ struct cfs_rq { | |||
| 398 | */ | 398 | */ |
| 399 | struct list_head leaf_cfs_rq_list; | 399 | struct list_head leaf_cfs_rq_list; |
| 400 | struct task_group *tg; /* group that "owns" this runqueue */ | 400 | struct task_group *tg; /* group that "owns" this runqueue */ |
| 401 | |||
| 402 | #ifdef CONFIG_SMP | ||
| 403 | unsigned long task_weight; | ||
| 404 | unsigned long shares; | ||
| 405 | /* | ||
| 406 | * We need space to build a sched_domain wide view of the full task | ||
| 407 | * group tree, in order to avoid depending on dynamic memory allocation | ||
| 408 | * during the load balancing we place this in the per cpu task group | ||
| 409 | * hierarchy. This limits the load balancing to one instance per cpu, | ||
| 410 | * but more should not be needed anyway. | ||
| 411 | */ | ||
| 412 | struct aggregate_struct { | ||
| 413 | /* | ||
| 414 | * load = weight(cpus) * f(tg) | ||
| 415 | * | ||
| 416 | * Where f(tg) is the recursive weight fraction assigned to | ||
| 417 | * this group. | ||
| 418 | */ | ||
| 419 | unsigned long load; | ||
| 420 | |||
| 421 | /* | ||
| 422 | * part of the group weight distributed to this span. | ||
| 423 | */ | ||
| 424 | unsigned long shares; | ||
| 425 | |||
| 426 | /* | ||
| 427 | * The sum of all runqueue weights within this span. | ||
| 428 | */ | ||
| 429 | unsigned long rq_weight; | ||
| 430 | |||
| 431 | /* | ||
| 432 | * Weight contributed by tasks; this is the part we can | ||
| 433 | * influence by moving tasks around. | ||
| 434 | */ | ||
| 435 | unsigned long task_weight; | ||
| 436 | } aggregate; | ||
| 437 | #endif | ||
| 438 | #endif | 401 | #endif |
| 439 | }; | 402 | }; |
| 440 | 403 | ||
| @@ -1368,9 +1331,6 @@ static void __resched_task(struct task_struct *p, int tif_bit) | |||
| 1368 | */ | 1331 | */ |
| 1369 | #define SRR(x, y) (((x) + (1UL << ((y) - 1))) >> (y)) | 1332 | #define SRR(x, y) (((x) + (1UL << ((y) - 1))) >> (y)) |
| 1370 | 1333 | ||
| 1371 | /* | ||
| 1372 | * delta *= weight / lw | ||
| 1373 | */ | ||
| 1374 | static unsigned long | 1334 | static unsigned long |
| 1375 | calc_delta_mine(unsigned long delta_exec, unsigned long weight, | 1335 | calc_delta_mine(unsigned long delta_exec, unsigned long weight, |
| 1376 | struct load_weight *lw) | 1336 | struct load_weight *lw) |
| @@ -1393,6 +1353,12 @@ calc_delta_mine(unsigned long delta_exec, unsigned long weight, | |||
| 1393 | return (unsigned long)min(tmp, (u64)(unsigned long)LONG_MAX); | 1353 | return (unsigned long)min(tmp, (u64)(unsigned long)LONG_MAX); |
| 1394 | } | 1354 | } |
| 1395 | 1355 | ||
| 1356 | static inline unsigned long | ||
| 1357 | calc_delta_fair(unsigned long delta_exec, struct load_weight *lw) | ||
| 1358 | { | ||
| 1359 | return calc_delta_mine(delta_exec, NICE_0_LOAD, lw); | ||
| 1360 | } | ||
| 1361 | |||
| 1396 | static inline void update_load_add(struct load_weight *lw, unsigned long inc) | 1362 | static inline void update_load_add(struct load_weight *lw, unsigned long inc) |
| 1397 | { | 1363 | { |
| 1398 | lw->weight += inc; | 1364 | lw->weight += inc; |
| @@ -1505,326 +1471,6 @@ static unsigned long source_load(int cpu, int type); | |||
| 1505 | static unsigned long target_load(int cpu, int type); | 1471 | static unsigned long target_load(int cpu, int type); |
| 1506 | static unsigned long cpu_avg_load_per_task(int cpu); | 1472 | static unsigned long cpu_avg_load_per_task(int cpu); |
| 1507 | static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); | 1473 | static int task_hot(struct task_struct *p, u64 now, struct sched_domain *sd); |
| 1508 | |||
| 1509 | #ifdef CONFIG_FAIR_GROUP_SCHED | ||
| 1510 | |||
| 1511 | /* | ||
| 1512 | * Group load balancing. | ||
| 1513 | * | ||
| 1514 | * We calculate a few balance domain wide aggregate numbers; load and weight. | ||
| 1515 | * Given the pictures below, and assuming each item has equal weight: | ||
| 1516 | * | ||
| 1517 | * root 1 - thread | ||
| 1518 | * / | \ A - group | ||
| 1519 | * A 1 B | ||
| 1520 | * /|\ / \ | ||
| 1521 | * C 2 D 3 4 | ||
| 1522 | * | | | ||
| 1523 | * 5 6 | ||
| 1524 | * | ||
| 1525 | * load: | ||
| 1526 | * A and B get 1/3-rd of the total load. C and D get 1/3-rd of A's 1/3-rd, | ||
| 1527 | * which equals 1/9-th of the total load. | ||
| 1528 | * | ||
| 1529 | * shares: | ||
| 1530 | * The weight of this group on the selected cpus. | ||
| 1531 | * | ||
| 1532 | * rq_weight: | ||
| 1533 | * Direct sum of all the cpu's their rq weight, e.g. A would get 3 while | ||
| 1534 | * B would get 2. | ||
| 1535 | * | ||
| 1536 | * task_weight: | ||
| 1537 | * Part of the rq_weight contributed by tasks; all groups except B would | ||
| 1538 | * get 1, B gets 2. | ||
| 1539 | */ | ||
| 1540 | |||
| 1541 | static inline struct aggregate_struct * | ||
| 1542 | aggregate(struct task_group *tg, struct sched_domain *sd) | ||
| 1543 | { | ||
| 1544 | return &tg->cfs_rq[sd->first_cpu]->aggregate; | ||
| 1545 | } | ||
| 1546 | |||
| 1547 | typedef void (*aggregate_func)(struct task_group *, struct sched_domain *); | ||
| 1548 | |||
| 1549 | /* | ||
| 1550 | * Iterate the full tree, calling @down when first entering a node and @up when | ||
| 1551 | * leaving it for the final time. | ||
| 1552 | */ | ||
| 1553 | static | ||
| 1554 | void aggregate_walk_tree(aggregate_func down, aggregate_func up, | ||
| 1555 | struct sched_domain *sd) | ||
| 1556 | { | ||
| 1557 | struct task_group *parent, *child; | ||
| 1558 | |||
| 1559 | rcu_read_lock(); | ||
| 1560 | parent = &root_task_group; | ||
| 1561 | down: | ||
| 1562 | (*down)(parent, sd); | ||
| 1563 | list_for_each_entry_rcu(child, &parent->children, siblings) { | ||
| 1564 | parent = child; | ||
| 1565 | goto down; | ||
| 1566 | |||
| 1567 | up: | ||
| 1568 | continue; | ||
| 1569 | } | ||
| 1570 | (*up)(parent, sd); | ||
| 1571 | |||
| 1572 | child = parent; | ||
| 1573 | parent = parent->parent; | ||
| 1574 | if (parent) | ||
| 1575 | goto up; | ||
| 1576 | rcu_read_unlock(); | ||
| 1577 | } | ||
| 1578 | |||
| 1579 | /* | ||
| 1580 | * Calculate the aggregate runqueue weight. | ||
| 1581 | */ | ||
| 1582 | static | ||
| 1583 | void aggregate_group_weight(struct task_group *tg, struct sched_domain *sd) | ||
| 1584 | { | ||
| 1585 | unsigned long rq_weight = 0; | ||
| 1586 | unsigned long task_weight = 0; | ||
| 1587 | int i; | ||
| 1588 | |||
| 1589 | for_each_cpu_mask(i, sd->span) { | ||
| 1590 | rq_weight += tg->cfs_rq[i]->load.weight; | ||
| 1591 | task_weight += tg->cfs_rq[i]->task_weight; | ||
| 1592 | } | ||
| 1593 | |||
| 1594 | aggregate(tg, sd)->rq_weight = rq_weight; | ||
| 1595 | aggregate(tg, sd)->task_weight = task_weight; | ||
| 1596 | } | ||
| 1597 | |||
| 1598 | /* | ||
| 1599 | * Compute the weight of this group on the given cpus. | ||
| 1600 | */ | ||
| 1601 | static | ||
| 1602 | void aggregate_group_shares(struct task_group *tg, struct sched_domain *sd) | ||
| 1603 | { | ||
| 1604 | unsigned long shares = 0; | ||
| 1605 | int i; | ||
| 1606 | |||
| 1607 | for_each_cpu_mask(i, sd->span) | ||
| 1608 | shares += tg->cfs_rq[i]->shares; | ||
| 1609 | |||
| 1610 | if ((!shares && aggregate(tg, sd)->rq_weight) || shares > tg->shares) | ||
| 1611 | shares = tg->shares; | ||
| 1612 | |||
| 1613 | aggregate(tg, sd)->shares = shares; | ||
| 1614 | } | ||
| 1615 | |||
| 1616 | /* | ||
| 1617 | * Compute the load fraction assigned to this group, relies on the aggregate | ||
| 1618 | * weight and this group's parent's load, i.e. top-down. | ||
| 1619 | */ | ||
| 1620 | static | ||
| 1621 | void aggregate_group_load(struct task_group *tg, struct sched_domain *sd) | ||
| 1622 | { | ||
| 1623 | unsigned long load; | ||
| 1624 | |||
| 1625 | if (!tg->parent) { | ||
| 1626 | int i; | ||
| 1627 | |||
| 1628 | load = 0; | ||
| 1629 | for_each_cpu_mask(i, sd->span) | ||
| 1630 | load += cpu_rq(i)->load.weight; | ||
| 1631 | |||
| 1632 | } else { | ||
| 1633 | load = aggregate(tg->parent, sd)->load; | ||
| 1634 | |||
| 1635 | /* | ||
| 1636 | * shares is our weight in the parent's rq so | ||
| 1637 | * shares/parent->rq_weight gives our fraction of the load | ||
| 1638 | */ | ||
| 1639 | load *= aggregate(tg, sd)->shares; | ||
| 1640 | load /= aggregate(tg->parent, sd)->rq_weight + 1; | ||
| 1641 | } | ||
| 1642 | |||
| 1643 | aggregate(tg, sd)->load = load; | ||
| 1644 | } | ||
| 1645 | |||
| 1646 | static void __set_se_shares(struct sched_entity *se, unsigned long shares); | ||
| 1647 | |||
| 1648 | /* | ||
| 1649 | * Calculate and set the cpu's group shares. | ||
| 1650 | */ | ||
| 1651 | static void | ||
| 1652 | __update_group_shares_cpu(struct task_group *tg, struct sched_domain *sd, | ||
| 1653 | int tcpu) | ||
| 1654 | { | ||
| 1655 | int boost = 0; | ||
| 1656 | unsigned long shares; | ||
| 1657 | unsigned long rq_weight; | ||
| 1658 | |||
| 1659 | if (!tg->se[tcpu]) | ||
| 1660 | return; | ||
| 1661 | |||
| 1662 | rq_weight = tg->cfs_rq[tcpu]->load.weight; | ||
| 1663 | |||
| 1664 | /* | ||
| 1665 | * If there are currently no tasks on the cpu pretend there is one of | ||
| 1666 | * average load so that when a new task gets to run here it will not | ||
| 1667 | * get delayed by group starvation. | ||
| 1668 | */ | ||
| 1669 | if (!rq_weight) { | ||
| 1670 | boost = 1; | ||
| 1671 | rq_weight = NICE_0_LOAD; | ||
| 1672 | } | ||
| 1673 | |||
| 1674 | /* | ||
| 1675 | * \Sum shares * rq_weight | ||
| 1676 | * shares = ----------------------- | ||
| 1677 | * \Sum rq_weight | ||
| 1678 | * | ||
| 1679 | */ | ||
| 1680 | shares = aggregate(tg, sd)->shares * rq_weight; | ||
| 1681 | shares /= aggregate(tg, sd)->rq_weight + 1; | ||
| 1682 | |||
| 1683 | /* | ||
| 1684 | * record the actual number of shares, not the boosted amount. | ||
| 1685 | */ | ||
| 1686 | tg->cfs_rq[tcpu]->shares = boost ? 0 : shares; | ||
| 1687 | |||
| 1688 | if (shares < MIN_SHARES) | ||
| 1689 | shares = MIN_SHARES; | ||
| 1690 | else if (shares > MAX_SHARES) | ||
| 1691 | shares = MAX_SHARES; | ||
| 1692 | |||
| 1693 | __set_se_shares(tg->se[tcpu], shares); | ||
| 1694 | } | ||
| 1695 | |||
| 1696 | /* | ||
| 1697 | * Re-adjust the weights on the cpu the task came from and on the cpu the | ||
| 1698 | * task went to. | ||
| 1699 | */ | ||
| 1700 | static void | ||
| 1701 | __move_group_shares(struct task_group *tg, struct sched_domain *sd, | ||
| 1702 | int scpu, int dcpu) | ||
| 1703 | { | ||
| 1704 | unsigned long shares; | ||
| 1705 | |||
| 1706 | shares = tg->cfs_rq[scpu]->shares + tg->cfs_rq[dcpu]->shares; | ||
| 1707 | |||
| 1708 | __update_group_shares_cpu(tg, sd, scpu); | ||
| 1709 | __update_group_shares_cpu(tg, sd, dcpu); | ||
| 1710 | |||
| 1711 | /* | ||
| 1712 | * ensure we never loose shares due to rounding errors in the | ||
| 1713 | * above redistribution. | ||
| 1714 | */ | ||
| 1715 | shares -= tg->cfs_rq[scpu]->shares + tg->cfs_rq[dcpu]->shares; | ||
| 1716 | if (shares) | ||
| 1717 | tg->cfs_rq[dcpu]->shares += shares; | ||
| 1718 | } | ||
| 1719 | |||
| 1720 | /* | ||
| 1721 | * Because changing a group's shares changes the weight of the super-group | ||
| 1722 | * we need to walk up the tree and change all shares until we hit the root. | ||
| 1723 | */ | ||
| 1724 | static void | ||
| 1725 | move_group_shares(struct task_group *tg, struct sched_domain *sd, | ||
| 1726 | int scpu, int dcpu) | ||
| 1727 | { | ||
| 1728 | while (tg) { | ||
| 1729 | __move_group_shares(tg, sd, scpu, dcpu); | ||
| 1730 | tg = tg->parent; | ||
| 1731 | } | ||
| 1732 | } | ||
| 1733 | |||
| 1734 | static | ||
| 1735 | void aggregate_group_set_shares(struct task_group *tg, struct sched_domain *sd) | ||
| 1736 | { | ||
| 1737 | unsigned long shares = aggregate(tg, sd)->shares; | ||
| 1738 | int i; | ||
| 1739 | |||
| 1740 | for_each_cpu_mask(i, sd->span) { | ||
| 1741 | struct rq *rq = cpu_rq(i); | ||
| 1742 | unsigned long flags; | ||
| 1743 | |||
| 1744 | spin_lock_irqsave(&rq->lock, flags); | ||
| 1745 | __update_group_shares_cpu(tg, sd, i); | ||
| 1746 | spin_unlock_irqrestore(&rq->lock, flags); | ||
| 1747 | } | ||
| 1748 | |||
| 1749 | aggregate_group_shares(tg, sd); | ||
| 1750 | |||
| 1751 | /* | ||
| 1752 | * ensure we never loose shares due to rounding errors in the | ||
| 1753 | * above redistribution. | ||
| 1754 | */ | ||
| 1755 | shares -= aggregate(tg, sd)->shares; | ||
| 1756 | if (shares) { | ||
| 1757 | tg->cfs_rq[sd->first_cpu]->shares += shares; | ||
| 1758 | aggregate(tg, sd)->shares += shares; | ||
| 1759 | } | ||
| 1760 | } | ||
| 1761 | |||
| 1762 | /* | ||
| 1763 | * Calculate the accumulative weight and recursive load of each task group | ||
| 1764 | * while walking down the tree. | ||
| 1765 | */ | ||
| 1766 | static | ||
| 1767 | void aggregate_get_down(struct task_group *tg, struct sched_domain *sd) | ||
| 1768 | { | ||
| 1769 | aggregate_group_weight(tg, sd); | ||
| 1770 | aggregate_group_shares(tg, sd); | ||
| 1771 | aggregate_group_load(tg, sd); | ||
| 1772 | } | ||
| 1773 | |||
| 1774 | /* | ||
| 1775 | * Rebalance the cpu shares while walking back up the tree. | ||
| 1776 | */ | ||
| 1777 | static | ||
| 1778 | void aggregate_get_up(struct task_group *tg, struct sched_domain *sd) | ||
| 1779 | { | ||
| 1780 | aggregate_group_set_shares(tg, sd); | ||
| 1781 | } | ||
| 1782 | |||
| 1783 | static DEFINE_PER_CPU(spinlock_t, aggregate_lock); | ||
| 1784 | |||
| 1785 | static void __init init_aggregate(void) | ||
| 1786 | { | ||
| 1787 | int i; | ||
| 1788 | |||
| 1789 | for_each_possible_cpu(i) | ||
| 1790 | spin_lock_init(&per_cpu(aggregate_lock, i)); | ||
| 1791 | } | ||
| 1792 | |||
| 1793 | static int get_aggregate(struct sched_domain *sd) | ||
| 1794 | { | ||
| 1795 | if (!spin_trylock(&per_cpu(aggregate_lock, sd->first_cpu))) | ||
| 1796 | return 0; | ||
| 1797 | |||
| 1798 | aggregate_walk_tree(aggregate_get_down, aggregate_get_up, sd); | ||
| 1799 | return 1; | ||
| 1800 | } | ||
| 1801 | |||
| 1802 | static void put_aggregate(struct sched_domain *sd) | ||
| 1803 | { | ||
| 1804 | spin_unlock(&per_cpu(aggregate_lock, sd->first_cpu)); | ||
| 1805 | } | ||
| 1806 | |||
| 1807 | static void cfs_rq_set_shares(struct cfs_rq *cfs_rq, unsigned long shares) | ||
| 1808 | { | ||
| 1809 | cfs_rq->shares = shares; | ||
| 1810 | } | ||
| 1811 | |||
| 1812 | #else | ||
| 1813 | |||
| 1814 | static inline void init_aggregate(void) | ||
| 1815 | { | ||
| 1816 | } | ||
| 1817 | |||
| 1818 | static inline int get_aggregate(struct sched_domain *sd) | ||
| 1819 | { | ||
| 1820 | return 0; | ||
| 1821 | } | ||
| 1822 | |||
| 1823 | static inline void put_aggregate(struct sched_domain *sd) | ||
| 1824 | { | ||
| 1825 | } | ||
| 1826 | #endif | ||
| 1827 | |||
| 1828 | #else /* CONFIG_SMP */ | 1474 | #else /* CONFIG_SMP */ |
| 1829 | 1475 | ||
| 1830 | #ifdef CONFIG_FAIR_GROUP_SCHED | 1476 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| @@ -1845,14 +1491,26 @@ static void cfs_rq_set_shares(struct cfs_rq *cfs_rq, unsigned long shares) | |||
| 1845 | 1491 | ||
| 1846 | #define sched_class_highest (&rt_sched_class) | 1492 | #define sched_class_highest (&rt_sched_class) |
| 1847 | 1493 | ||
| 1848 | static void inc_nr_running(struct rq *rq) | 1494 | static inline void inc_load(struct rq *rq, const struct task_struct *p) |
| 1495 | { | ||
| 1496 | update_load_add(&rq->load, p->se.load.weight); | ||
| 1497 | } | ||
| 1498 | |||
| 1499 | static inline void dec_load(struct rq *rq, const struct task_struct *p) | ||
| 1500 | { | ||
| 1501 | update_load_sub(&rq->load, p->se.load.weight); | ||
| 1502 | } | ||
| 1503 | |||
| 1504 | static void inc_nr_running(struct task_struct *p, struct rq *rq) | ||
| 1849 | { | 1505 | { |
| 1850 | rq->nr_running++; | 1506 | rq->nr_running++; |
| 1507 | inc_load(rq, p); | ||
| 1851 | } | 1508 | } |
| 1852 | 1509 | ||
| 1853 | static void dec_nr_running(struct rq *rq) | 1510 | static void dec_nr_running(struct task_struct *p, struct rq *rq) |
| 1854 | { | 1511 | { |
| 1855 | rq->nr_running--; | 1512 | rq->nr_running--; |
| 1513 | dec_load(rq, p); | ||
| 1856 | } | 1514 | } |
| 1857 | 1515 | ||
| 1858 | static void set_load_weight(struct task_struct *p) | 1516 | static void set_load_weight(struct task_struct *p) |
| @@ -1944,7 +1602,7 @@ static void activate_task(struct rq *rq, struct task_struct *p, int wakeup) | |||
| 1944 | rq->nr_uninterruptible--; | 1602 | rq->nr_uninterruptible--; |
| 1945 | 1603 | ||
| 1946 | enqueue_task(rq, p, wakeup); | 1604 | enqueue_task(rq, p, wakeup); |
| 1947 | inc_nr_running(rq); | 1605 | inc_nr_running(p, rq); |
| 1948 | } | 1606 | } |
| 1949 | 1607 | ||
| 1950 | /* | 1608 | /* |
| @@ -1956,7 +1614,7 @@ static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep) | |||
| 1956 | rq->nr_uninterruptible++; | 1614 | rq->nr_uninterruptible++; |
| 1957 | 1615 | ||
| 1958 | dequeue_task(rq, p, sleep); | 1616 | dequeue_task(rq, p, sleep); |
| 1959 | dec_nr_running(rq); | 1617 | dec_nr_running(p, rq); |
| 1960 | } | 1618 | } |
| 1961 | 1619 | ||
| 1962 | /** | 1620 | /** |
| @@ -2609,7 +2267,7 @@ void wake_up_new_task(struct task_struct *p, unsigned long clone_flags) | |||
| 2609 | * management (if any): | 2267 | * management (if any): |
| 2610 | */ | 2268 | */ |
| 2611 | p->sched_class->task_new(rq, p); | 2269 | p->sched_class->task_new(rq, p); |
| 2612 | inc_nr_running(rq); | 2270 | inc_nr_running(p, rq); |
| 2613 | } | 2271 | } |
| 2614 | check_preempt_curr(rq, p); | 2272 | check_preempt_curr(rq, p); |
| 2615 | #ifdef CONFIG_SMP | 2273 | #ifdef CONFIG_SMP |
| @@ -3600,12 +3258,9 @@ static int load_balance(int this_cpu, struct rq *this_rq, | |||
| 3600 | unsigned long imbalance; | 3258 | unsigned long imbalance; |
| 3601 | struct rq *busiest; | 3259 | struct rq *busiest; |
| 3602 | unsigned long flags; | 3260 | unsigned long flags; |
| 3603 | int unlock_aggregate; | ||
| 3604 | 3261 | ||
| 3605 | cpus_setall(*cpus); | 3262 | cpus_setall(*cpus); |
| 3606 | 3263 | ||
| 3607 | unlock_aggregate = get_aggregate(sd); | ||
| 3608 | |||
| 3609 | /* | 3264 | /* |
| 3610 | * When power savings policy is enabled for the parent domain, idle | 3265 | * When power savings policy is enabled for the parent domain, idle |
| 3611 | * sibling can pick up load irrespective of busy siblings. In this case, | 3266 | * sibling can pick up load irrespective of busy siblings. In this case, |
| @@ -3721,9 +3376,8 @@ redo: | |||
| 3721 | 3376 | ||
| 3722 | if (!ld_moved && !sd_idle && sd->flags & SD_SHARE_CPUPOWER && | 3377 | if (!ld_moved && !sd_idle && sd->flags & SD_SHARE_CPUPOWER && |
| 3723 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) | 3378 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) |
| 3724 | ld_moved = -1; | 3379 | return -1; |
| 3725 | 3380 | return ld_moved; | |
| 3726 | goto out; | ||
| 3727 | 3381 | ||
| 3728 | out_balanced: | 3382 | out_balanced: |
| 3729 | schedstat_inc(sd, lb_balanced[idle]); | 3383 | schedstat_inc(sd, lb_balanced[idle]); |
| @@ -3738,13 +3392,8 @@ out_one_pinned: | |||
| 3738 | 3392 | ||
| 3739 | if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER && | 3393 | if (!sd_idle && sd->flags & SD_SHARE_CPUPOWER && |
| 3740 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) | 3394 | !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE)) |
| 3741 | ld_moved = -1; | 3395 | return -1; |
| 3742 | else | 3396 | return 0; |
| 3743 | ld_moved = 0; | ||
| 3744 | out: | ||
| 3745 | if (unlock_aggregate) | ||
| 3746 | put_aggregate(sd); | ||
| 3747 | return ld_moved; | ||
| 3748 | } | 3397 | } |
| 3749 | 3398 | ||
| 3750 | /* | 3399 | /* |
| @@ -4430,7 +4079,7 @@ static inline void schedule_debug(struct task_struct *prev) | |||
| 4430 | * schedule() atomically, we ignore that path for now. | 4079 | * schedule() atomically, we ignore that path for now. |
| 4431 | * Otherwise, whine if we are scheduling when we should not be. | 4080 | * Otherwise, whine if we are scheduling when we should not be. |
| 4432 | */ | 4081 | */ |
| 4433 | if (unlikely(in_atomic_preempt_off()) && unlikely(!prev->exit_state)) | 4082 | if (unlikely(in_atomic_preempt_off() && !prev->exit_state)) |
| 4434 | __schedule_bug(prev); | 4083 | __schedule_bug(prev); |
| 4435 | 4084 | ||
| 4436 | profile_hit(SCHED_PROFILING, __builtin_return_address(0)); | 4085 | profile_hit(SCHED_PROFILING, __builtin_return_address(0)); |
| @@ -4931,8 +4580,10 @@ void set_user_nice(struct task_struct *p, long nice) | |||
| 4931 | goto out_unlock; | 4580 | goto out_unlock; |
| 4932 | } | 4581 | } |
| 4933 | on_rq = p->se.on_rq; | 4582 | on_rq = p->se.on_rq; |
| 4934 | if (on_rq) | 4583 | if (on_rq) { |
| 4935 | dequeue_task(rq, p, 0); | 4584 | dequeue_task(rq, p, 0); |
| 4585 | dec_load(rq, p); | ||
| 4586 | } | ||
| 4936 | 4587 | ||
| 4937 | p->static_prio = NICE_TO_PRIO(nice); | 4588 | p->static_prio = NICE_TO_PRIO(nice); |
| 4938 | set_load_weight(p); | 4589 | set_load_weight(p); |
| @@ -4942,6 +4593,7 @@ void set_user_nice(struct task_struct *p, long nice) | |||
| 4942 | 4593 | ||
| 4943 | if (on_rq) { | 4594 | if (on_rq) { |
| 4944 | enqueue_task(rq, p, 0); | 4595 | enqueue_task(rq, p, 0); |
| 4596 | inc_load(rq, p); | ||
| 4945 | /* | 4597 | /* |
| 4946 | * If the task increased its priority or is running and | 4598 | * If the task increased its priority or is running and |
| 4947 | * lowered its priority, then reschedule its CPU: | 4599 | * lowered its priority, then reschedule its CPU: |
| @@ -7316,7 +6968,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7316 | SD_INIT(sd, ALLNODES); | 6968 | SD_INIT(sd, ALLNODES); |
| 7317 | set_domain_attribute(sd, attr); | 6969 | set_domain_attribute(sd, attr); |
| 7318 | sd->span = *cpu_map; | 6970 | sd->span = *cpu_map; |
| 7319 | sd->first_cpu = first_cpu(sd->span); | ||
| 7320 | cpu_to_allnodes_group(i, cpu_map, &sd->groups, tmpmask); | 6971 | cpu_to_allnodes_group(i, cpu_map, &sd->groups, tmpmask); |
| 7321 | p = sd; | 6972 | p = sd; |
| 7322 | sd_allnodes = 1; | 6973 | sd_allnodes = 1; |
| @@ -7327,7 +6978,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7327 | SD_INIT(sd, NODE); | 6978 | SD_INIT(sd, NODE); |
| 7328 | set_domain_attribute(sd, attr); | 6979 | set_domain_attribute(sd, attr); |
| 7329 | sched_domain_node_span(cpu_to_node(i), &sd->span); | 6980 | sched_domain_node_span(cpu_to_node(i), &sd->span); |
| 7330 | sd->first_cpu = first_cpu(sd->span); | ||
| 7331 | sd->parent = p; | 6981 | sd->parent = p; |
| 7332 | if (p) | 6982 | if (p) |
| 7333 | p->child = sd; | 6983 | p->child = sd; |
| @@ -7339,7 +6989,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7339 | SD_INIT(sd, CPU); | 6989 | SD_INIT(sd, CPU); |
| 7340 | set_domain_attribute(sd, attr); | 6990 | set_domain_attribute(sd, attr); |
| 7341 | sd->span = *nodemask; | 6991 | sd->span = *nodemask; |
| 7342 | sd->first_cpu = first_cpu(sd->span); | ||
| 7343 | sd->parent = p; | 6992 | sd->parent = p; |
| 7344 | if (p) | 6993 | if (p) |
| 7345 | p->child = sd; | 6994 | p->child = sd; |
| @@ -7351,7 +7000,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7351 | SD_INIT(sd, MC); | 7000 | SD_INIT(sd, MC); |
| 7352 | set_domain_attribute(sd, attr); | 7001 | set_domain_attribute(sd, attr); |
| 7353 | sd->span = cpu_coregroup_map(i); | 7002 | sd->span = cpu_coregroup_map(i); |
| 7354 | sd->first_cpu = first_cpu(sd->span); | ||
| 7355 | cpus_and(sd->span, sd->span, *cpu_map); | 7003 | cpus_and(sd->span, sd->span, *cpu_map); |
| 7356 | sd->parent = p; | 7004 | sd->parent = p; |
| 7357 | p->child = sd; | 7005 | p->child = sd; |
| @@ -7364,7 +7012,6 @@ static int __build_sched_domains(const cpumask_t *cpu_map, | |||
| 7364 | SD_INIT(sd, SIBLING); | 7012 | SD_INIT(sd, SIBLING); |
| 7365 | set_domain_attribute(sd, attr); | 7013 | set_domain_attribute(sd, attr); |
| 7366 | sd->span = per_cpu(cpu_sibling_map, i); | 7014 | sd->span = per_cpu(cpu_sibling_map, i); |
| 7367 | sd->first_cpu = first_cpu(sd->span); | ||
| 7368 | cpus_and(sd->span, sd->span, *cpu_map); | 7015 | cpus_and(sd->span, sd->span, *cpu_map); |
| 7369 | sd->parent = p; | 7016 | sd->parent = p; |
| 7370 | p->child = sd; | 7017 | p->child = sd; |
| @@ -7568,8 +7215,8 @@ static int build_sched_domains(const cpumask_t *cpu_map) | |||
| 7568 | 7215 | ||
| 7569 | static cpumask_t *doms_cur; /* current sched domains */ | 7216 | static cpumask_t *doms_cur; /* current sched domains */ |
| 7570 | static int ndoms_cur; /* number of sched domains in 'doms_cur' */ | 7217 | static int ndoms_cur; /* number of sched domains in 'doms_cur' */ |
| 7571 | static struct sched_domain_attr *dattr_cur; /* attribues of custom domains | 7218 | static struct sched_domain_attr *dattr_cur; |
| 7572 | in 'doms_cur' */ | 7219 | /* attribues of custom domains in 'doms_cur' */ |
| 7573 | 7220 | ||
| 7574 | /* | 7221 | /* |
| 7575 | * Special case: If a kmalloc of a doms_cur partition (array of | 7222 | * Special case: If a kmalloc of a doms_cur partition (array of |
| @@ -8034,7 +7681,6 @@ void __init sched_init(void) | |||
| 8034 | } | 7681 | } |
| 8035 | 7682 | ||
| 8036 | #ifdef CONFIG_SMP | 7683 | #ifdef CONFIG_SMP |
| 8037 | init_aggregate(); | ||
| 8038 | init_defrootdomain(); | 7684 | init_defrootdomain(); |
| 8039 | #endif | 7685 | #endif |
| 8040 | 7686 | ||
| @@ -8599,11 +8245,14 @@ void sched_move_task(struct task_struct *tsk) | |||
| 8599 | #endif | 8245 | #endif |
| 8600 | 8246 | ||
| 8601 | #ifdef CONFIG_FAIR_GROUP_SCHED | 8247 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 8602 | static void __set_se_shares(struct sched_entity *se, unsigned long shares) | 8248 | static void set_se_shares(struct sched_entity *se, unsigned long shares) |
| 8603 | { | 8249 | { |
| 8604 | struct cfs_rq *cfs_rq = se->cfs_rq; | 8250 | struct cfs_rq *cfs_rq = se->cfs_rq; |
| 8251 | struct rq *rq = cfs_rq->rq; | ||
| 8605 | int on_rq; | 8252 | int on_rq; |
| 8606 | 8253 | ||
| 8254 | spin_lock_irq(&rq->lock); | ||
| 8255 | |||
| 8607 | on_rq = se->on_rq; | 8256 | on_rq = se->on_rq; |
| 8608 | if (on_rq) | 8257 | if (on_rq) |
| 8609 | dequeue_entity(cfs_rq, se, 0); | 8258 | dequeue_entity(cfs_rq, se, 0); |
| @@ -8613,17 +8262,8 @@ static void __set_se_shares(struct sched_entity *se, unsigned long shares) | |||
| 8613 | 8262 | ||
| 8614 | if (on_rq) | 8263 | if (on_rq) |
| 8615 | enqueue_entity(cfs_rq, se, 0); | 8264 | enqueue_entity(cfs_rq, se, 0); |
| 8616 | } | ||
| 8617 | 8265 | ||
| 8618 | static void set_se_shares(struct sched_entity *se, unsigned long shares) | 8266 | spin_unlock_irq(&rq->lock); |
| 8619 | { | ||
| 8620 | struct cfs_rq *cfs_rq = se->cfs_rq; | ||
| 8621 | struct rq *rq = cfs_rq->rq; | ||
| 8622 | unsigned long flags; | ||
| 8623 | |||
| 8624 | spin_lock_irqsave(&rq->lock, flags); | ||
| 8625 | __set_se_shares(se, shares); | ||
| 8626 | spin_unlock_irqrestore(&rq->lock, flags); | ||
| 8627 | } | 8267 | } |
| 8628 | 8268 | ||
| 8629 | static DEFINE_MUTEX(shares_mutex); | 8269 | static DEFINE_MUTEX(shares_mutex); |
| @@ -8662,13 +8302,8 @@ int sched_group_set_shares(struct task_group *tg, unsigned long shares) | |||
| 8662 | * w/o tripping rebalance_share or load_balance_fair. | 8302 | * w/o tripping rebalance_share or load_balance_fair. |
| 8663 | */ | 8303 | */ |
| 8664 | tg->shares = shares; | 8304 | tg->shares = shares; |
| 8665 | for_each_possible_cpu(i) { | 8305 | for_each_possible_cpu(i) |
| 8666 | /* | ||
| 8667 | * force a rebalance | ||
| 8668 | */ | ||
| 8669 | cfs_rq_set_shares(tg->cfs_rq[i], 0); | ||
| 8670 | set_se_shares(tg->se[i], shares); | 8306 | set_se_shares(tg->se[i], shares); |
| 8671 | } | ||
| 8672 | 8307 | ||
| 8673 | /* | 8308 | /* |
| 8674 | * Enable load balance activity on this group, by inserting it back on | 8309 | * Enable load balance activity on this group, by inserting it back on |
diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c index 9c597e37f7de..ce05271219ab 100644 --- a/kernel/sched_clock.c +++ b/kernel/sched_clock.c | |||
| @@ -59,22 +59,26 @@ static inline struct sched_clock_data *cpu_sdc(int cpu) | |||
| 59 | return &per_cpu(sched_clock_data, cpu); | 59 | return &per_cpu(sched_clock_data, cpu); |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | static __read_mostly int sched_clock_running; | ||
| 63 | |||
| 62 | void sched_clock_init(void) | 64 | void sched_clock_init(void) |
| 63 | { | 65 | { |
| 64 | u64 ktime_now = ktime_to_ns(ktime_get()); | 66 | u64 ktime_now = ktime_to_ns(ktime_get()); |
| 65 | u64 now = 0; | 67 | unsigned long now_jiffies = jiffies; |
| 66 | int cpu; | 68 | int cpu; |
| 67 | 69 | ||
| 68 | for_each_possible_cpu(cpu) { | 70 | for_each_possible_cpu(cpu) { |
| 69 | struct sched_clock_data *scd = cpu_sdc(cpu); | 71 | struct sched_clock_data *scd = cpu_sdc(cpu); |
| 70 | 72 | ||
| 71 | scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; | 73 | scd->lock = (raw_spinlock_t)__RAW_SPIN_LOCK_UNLOCKED; |
| 72 | scd->prev_jiffies = jiffies; | 74 | scd->prev_jiffies = now_jiffies; |
| 73 | scd->prev_raw = now; | 75 | scd->prev_raw = 0; |
| 74 | scd->tick_raw = now; | 76 | scd->tick_raw = 0; |
| 75 | scd->tick_gtod = ktime_now; | 77 | scd->tick_gtod = ktime_now; |
| 76 | scd->clock = ktime_now; | 78 | scd->clock = ktime_now; |
| 77 | } | 79 | } |
| 80 | |||
| 81 | sched_clock_running = 1; | ||
| 78 | } | 82 | } |
| 79 | 83 | ||
| 80 | /* | 84 | /* |
| @@ -136,6 +140,9 @@ u64 sched_clock_cpu(int cpu) | |||
| 136 | struct sched_clock_data *scd = cpu_sdc(cpu); | 140 | struct sched_clock_data *scd = cpu_sdc(cpu); |
| 137 | u64 now, clock; | 141 | u64 now, clock; |
| 138 | 142 | ||
| 143 | if (unlikely(!sched_clock_running)) | ||
| 144 | return 0ull; | ||
| 145 | |||
| 139 | WARN_ON_ONCE(!irqs_disabled()); | 146 | WARN_ON_ONCE(!irqs_disabled()); |
| 140 | now = sched_clock(); | 147 | now = sched_clock(); |
| 141 | 148 | ||
| @@ -174,6 +181,9 @@ void sched_clock_tick(void) | |||
| 174 | struct sched_clock_data *scd = this_scd(); | 181 | struct sched_clock_data *scd = this_scd(); |
| 175 | u64 now, now_gtod; | 182 | u64 now, now_gtod; |
| 176 | 183 | ||
| 184 | if (unlikely(!sched_clock_running)) | ||
| 185 | return; | ||
| 186 | |||
| 177 | WARN_ON_ONCE(!irqs_disabled()); | 187 | WARN_ON_ONCE(!irqs_disabled()); |
| 178 | 188 | ||
| 179 | now = sched_clock(); | 189 | now = sched_clock(); |
diff --git a/kernel/sched_debug.c b/kernel/sched_debug.c index 5f06118fbc31..8bb713040ac9 100644 --- a/kernel/sched_debug.c +++ b/kernel/sched_debug.c | |||
| @@ -167,11 +167,6 @@ void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq) | |||
| 167 | #endif | 167 | #endif |
| 168 | SEQ_printf(m, " .%-30s: %ld\n", "nr_spread_over", | 168 | SEQ_printf(m, " .%-30s: %ld\n", "nr_spread_over", |
| 169 | cfs_rq->nr_spread_over); | 169 | cfs_rq->nr_spread_over); |
| 170 | #ifdef CONFIG_FAIR_GROUP_SCHED | ||
| 171 | #ifdef CONFIG_SMP | ||
| 172 | SEQ_printf(m, " .%-30s: %lu\n", "shares", cfs_rq->shares); | ||
| 173 | #endif | ||
| 174 | #endif | ||
| 175 | } | 170 | } |
| 176 | 171 | ||
| 177 | static void print_cpu(struct seq_file *m, int cpu) | 172 | static void print_cpu(struct seq_file *m, int cpu) |
diff --git a/kernel/sched_fair.c b/kernel/sched_fair.c index e24ecd39c4b8..08ae848b71d4 100644 --- a/kernel/sched_fair.c +++ b/kernel/sched_fair.c | |||
| @@ -334,34 +334,6 @@ int sched_nr_latency_handler(struct ctl_table *table, int write, | |||
| 334 | #endif | 334 | #endif |
| 335 | 335 | ||
| 336 | /* | 336 | /* |
| 337 | * delta *= w / rw | ||
| 338 | */ | ||
| 339 | static inline unsigned long | ||
| 340 | calc_delta_weight(unsigned long delta, struct sched_entity *se) | ||
| 341 | { | ||
| 342 | for_each_sched_entity(se) { | ||
| 343 | delta = calc_delta_mine(delta, | ||
| 344 | se->load.weight, &cfs_rq_of(se)->load); | ||
| 345 | } | ||
| 346 | |||
| 347 | return delta; | ||
| 348 | } | ||
| 349 | |||
| 350 | /* | ||
| 351 | * delta *= rw / w | ||
| 352 | */ | ||
| 353 | static inline unsigned long | ||
| 354 | calc_delta_fair(unsigned long delta, struct sched_entity *se) | ||
| 355 | { | ||
| 356 | for_each_sched_entity(se) { | ||
| 357 | delta = calc_delta_mine(delta, | ||
| 358 | cfs_rq_of(se)->load.weight, &se->load); | ||
| 359 | } | ||
| 360 | |||
| 361 | return delta; | ||
| 362 | } | ||
| 363 | |||
| 364 | /* | ||
| 365 | * The idea is to set a period in which each task runs once. | 337 | * The idea is to set a period in which each task runs once. |
| 366 | * | 338 | * |
| 367 | * When there are too many tasks (sysctl_sched_nr_latency) we have to stretch | 339 | * When there are too many tasks (sysctl_sched_nr_latency) we have to stretch |
| @@ -390,54 +362,47 @@ static u64 __sched_period(unsigned long nr_running) | |||
| 390 | */ | 362 | */ |
| 391 | static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) | 363 | static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 392 | { | 364 | { |
| 393 | return calc_delta_weight(__sched_period(cfs_rq->nr_running), se); | 365 | u64 slice = __sched_period(cfs_rq->nr_running); |
| 366 | |||
| 367 | for_each_sched_entity(se) { | ||
| 368 | cfs_rq = cfs_rq_of(se); | ||
| 369 | |||
| 370 | slice *= se->load.weight; | ||
| 371 | do_div(slice, cfs_rq->load.weight); | ||
| 372 | } | ||
| 373 | |||
| 374 | |||
| 375 | return slice; | ||
| 394 | } | 376 | } |
| 395 | 377 | ||
| 396 | /* | 378 | /* |
| 397 | * We calculate the vruntime slice of a to be inserted task | 379 | * We calculate the vruntime slice of a to be inserted task |
| 398 | * | 380 | * |
| 399 | * vs = s*rw/w = p | 381 | * vs = s/w = p/rw |
| 400 | */ | 382 | */ |
| 401 | static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se) | 383 | static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 402 | { | 384 | { |
| 403 | unsigned long nr_running = cfs_rq->nr_running; | 385 | unsigned long nr_running = cfs_rq->nr_running; |
| 386 | unsigned long weight; | ||
| 387 | u64 vslice; | ||
| 404 | 388 | ||
| 405 | if (!se->on_rq) | 389 | if (!se->on_rq) |
| 406 | nr_running++; | 390 | nr_running++; |
| 407 | 391 | ||
| 408 | return __sched_period(nr_running); | 392 | vslice = __sched_period(nr_running); |
| 409 | } | ||
| 410 | |||
| 411 | /* | ||
| 412 | * The goal of calc_delta_asym() is to be asymmetrically around NICE_0_LOAD, in | ||
| 413 | * that it favours >=0 over <0. | ||
| 414 | * | ||
| 415 | * -20 | | ||
| 416 | * | | ||
| 417 | * 0 --------+------- | ||
| 418 | * .' | ||
| 419 | * 19 .' | ||
| 420 | * | ||
| 421 | */ | ||
| 422 | static unsigned long | ||
| 423 | calc_delta_asym(unsigned long delta, struct sched_entity *se) | ||
| 424 | { | ||
| 425 | struct load_weight lw = { | ||
| 426 | .weight = NICE_0_LOAD, | ||
| 427 | .inv_weight = 1UL << (WMULT_SHIFT-NICE_0_SHIFT) | ||
| 428 | }; | ||
| 429 | 393 | ||
| 430 | for_each_sched_entity(se) { | 394 | for_each_sched_entity(se) { |
| 431 | struct load_weight *se_lw = &se->load; | 395 | cfs_rq = cfs_rq_of(se); |
| 432 | 396 | ||
| 433 | if (se->load.weight < NICE_0_LOAD) | 397 | weight = cfs_rq->load.weight; |
| 434 | se_lw = &lw; | 398 | if (!se->on_rq) |
| 399 | weight += se->load.weight; | ||
| 435 | 400 | ||
| 436 | delta = calc_delta_mine(delta, | 401 | vslice *= NICE_0_LOAD; |
| 437 | cfs_rq_of(se)->load.weight, se_lw); | 402 | do_div(vslice, weight); |
| 438 | } | 403 | } |
| 439 | 404 | ||
| 440 | return delta; | 405 | return vslice; |
| 441 | } | 406 | } |
| 442 | 407 | ||
| 443 | /* | 408 | /* |
| @@ -454,7 +419,11 @@ __update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr, | |||
| 454 | 419 | ||
| 455 | curr->sum_exec_runtime += delta_exec; | 420 | curr->sum_exec_runtime += delta_exec; |
| 456 | schedstat_add(cfs_rq, exec_clock, delta_exec); | 421 | schedstat_add(cfs_rq, exec_clock, delta_exec); |
| 457 | delta_exec_weighted = calc_delta_fair(delta_exec, curr); | 422 | delta_exec_weighted = delta_exec; |
| 423 | if (unlikely(curr->load.weight != NICE_0_LOAD)) { | ||
| 424 | delta_exec_weighted = calc_delta_fair(delta_exec_weighted, | ||
| 425 | &curr->load); | ||
| 426 | } | ||
| 458 | curr->vruntime += delta_exec_weighted; | 427 | curr->vruntime += delta_exec_weighted; |
| 459 | } | 428 | } |
| 460 | 429 | ||
| @@ -541,27 +510,10 @@ update_stats_curr_start(struct cfs_rq *cfs_rq, struct sched_entity *se) | |||
| 541 | * Scheduling class queueing methods: | 510 | * Scheduling class queueing methods: |
| 542 | */ | 511 | */ |
| 543 | 512 | ||
| 544 | #if defined CONFIG_SMP && defined CONFIG_FAIR_GROUP_SCHED | ||
| 545 | static void | ||
| 546 | add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight) | ||
| 547 | { | ||
| 548 | cfs_rq->task_weight += weight; | ||
| 549 | } | ||
| 550 | #else | ||
| 551 | static inline void | ||
| 552 | add_cfs_task_weight(struct cfs_rq *cfs_rq, unsigned long weight) | ||
| 553 | { | ||
| 554 | } | ||
| 555 | #endif | ||
| 556 | |||
| 557 | static void | 513 | static void |
| 558 | account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se) | 514 | account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 559 | { | 515 | { |
| 560 | update_load_add(&cfs_rq->load, se->load.weight); | 516 | update_load_add(&cfs_rq->load, se->load.weight); |
| 561 | if (!parent_entity(se)) | ||
| 562 | inc_cpu_load(rq_of(cfs_rq), se->load.weight); | ||
| 563 | if (entity_is_task(se)) | ||
| 564 | add_cfs_task_weight(cfs_rq, se->load.weight); | ||
| 565 | cfs_rq->nr_running++; | 517 | cfs_rq->nr_running++; |
| 566 | se->on_rq = 1; | 518 | se->on_rq = 1; |
| 567 | list_add(&se->group_node, &cfs_rq->tasks); | 519 | list_add(&se->group_node, &cfs_rq->tasks); |
| @@ -571,10 +523,6 @@ static void | |||
| 571 | account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se) | 523 | account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se) |
| 572 | { | 524 | { |
| 573 | update_load_sub(&cfs_rq->load, se->load.weight); | 525 | update_load_sub(&cfs_rq->load, se->load.weight); |
| 574 | if (!parent_entity(se)) | ||
| 575 | dec_cpu_load(rq_of(cfs_rq), se->load.weight); | ||
| 576 | if (entity_is_task(se)) | ||
| 577 | add_cfs_task_weight(cfs_rq, -se->load.weight); | ||
| 578 | cfs_rq->nr_running--; | 526 | cfs_rq->nr_running--; |
| 579 | se->on_rq = 0; | 527 | se->on_rq = 0; |
| 580 | list_del_init(&se->group_node); | 528 | list_del_init(&se->group_node); |
| @@ -661,17 +609,8 @@ place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial) | |||
| 661 | 609 | ||
| 662 | if (!initial) { | 610 | if (!initial) { |
| 663 | /* sleeps upto a single latency don't count. */ | 611 | /* sleeps upto a single latency don't count. */ |
| 664 | if (sched_feat(NEW_FAIR_SLEEPERS)) { | 612 | if (sched_feat(NEW_FAIR_SLEEPERS)) |
| 665 | unsigned long thresh = sysctl_sched_latency; | 613 | vruntime -= sysctl_sched_latency; |
| 666 | |||
| 667 | /* | ||
| 668 | * convert the sleeper threshold into virtual time | ||
| 669 | */ | ||
| 670 | if (sched_feat(NORMALIZED_SLEEPER)) | ||
| 671 | thresh = calc_delta_fair(thresh, se); | ||
| 672 | |||
| 673 | vruntime -= thresh; | ||
| 674 | } | ||
| 675 | 614 | ||
| 676 | /* ensure we never gain time by being placed backwards. */ | 615 | /* ensure we never gain time by being placed backwards. */ |
| 677 | vruntime = max_vruntime(se->vruntime, vruntime); | 616 | vruntime = max_vruntime(se->vruntime, vruntime); |
| @@ -1057,16 +996,27 @@ wake_affine(struct rq *rq, struct sched_domain *this_sd, struct rq *this_rq, | |||
| 1057 | struct task_struct *curr = this_rq->curr; | 996 | struct task_struct *curr = this_rq->curr; |
| 1058 | unsigned long tl = this_load; | 997 | unsigned long tl = this_load; |
| 1059 | unsigned long tl_per_task; | 998 | unsigned long tl_per_task; |
| 999 | int balanced; | ||
| 1060 | 1000 | ||
| 1061 | if (!(this_sd->flags & SD_WAKE_AFFINE)) | 1001 | if (!(this_sd->flags & SD_WAKE_AFFINE) || !sched_feat(AFFINE_WAKEUPS)) |
| 1062 | return 0; | 1002 | return 0; |
| 1063 | 1003 | ||
| 1064 | /* | 1004 | /* |
| 1005 | * If sync wakeup then subtract the (maximum possible) | ||
| 1006 | * effect of the currently running task from the load | ||
| 1007 | * of the current CPU: | ||
| 1008 | */ | ||
| 1009 | if (sync) | ||
| 1010 | tl -= current->se.load.weight; | ||
| 1011 | |||
| 1012 | balanced = 100*(tl + p->se.load.weight) <= imbalance*load; | ||
| 1013 | |||
| 1014 | /* | ||
| 1065 | * If the currently running task will sleep within | 1015 | * If the currently running task will sleep within |
| 1066 | * a reasonable amount of time then attract this newly | 1016 | * a reasonable amount of time then attract this newly |
| 1067 | * woken task: | 1017 | * woken task: |
| 1068 | */ | 1018 | */ |
| 1069 | if (sync && curr->sched_class == &fair_sched_class) { | 1019 | if (sync && balanced && curr->sched_class == &fair_sched_class) { |
| 1070 | if (curr->se.avg_overlap < sysctl_sched_migration_cost && | 1020 | if (curr->se.avg_overlap < sysctl_sched_migration_cost && |
| 1071 | p->se.avg_overlap < sysctl_sched_migration_cost) | 1021 | p->se.avg_overlap < sysctl_sched_migration_cost) |
| 1072 | return 1; | 1022 | return 1; |
| @@ -1075,16 +1025,8 @@ wake_affine(struct rq *rq, struct sched_domain *this_sd, struct rq *this_rq, | |||
| 1075 | schedstat_inc(p, se.nr_wakeups_affine_attempts); | 1025 | schedstat_inc(p, se.nr_wakeups_affine_attempts); |
| 1076 | tl_per_task = cpu_avg_load_per_task(this_cpu); | 1026 | tl_per_task = cpu_avg_load_per_task(this_cpu); |
| 1077 | 1027 | ||
| 1078 | /* | ||
| 1079 | * If sync wakeup then subtract the (maximum possible) | ||
| 1080 | * effect of the currently running task from the load | ||
| 1081 | * of the current CPU: | ||
| 1082 | */ | ||
| 1083 | if (sync) | ||
| 1084 | tl -= current->se.load.weight; | ||
| 1085 | |||
| 1086 | if ((tl <= load && tl + target_load(prev_cpu, idx) <= tl_per_task) || | 1028 | if ((tl <= load && tl + target_load(prev_cpu, idx) <= tl_per_task) || |
| 1087 | 100*(tl + p->se.load.weight) <= imbalance*load) { | 1029 | balanced) { |
| 1088 | /* | 1030 | /* |
| 1089 | * This domain has SD_WAKE_AFFINE and | 1031 | * This domain has SD_WAKE_AFFINE and |
| 1090 | * p is cache cold in this domain, and | 1032 | * p is cache cold in this domain, and |
| @@ -1169,10 +1111,11 @@ static unsigned long wakeup_gran(struct sched_entity *se) | |||
| 1169 | unsigned long gran = sysctl_sched_wakeup_granularity; | 1111 | unsigned long gran = sysctl_sched_wakeup_granularity; |
| 1170 | 1112 | ||
| 1171 | /* | 1113 | /* |
| 1172 | * More easily preempt - nice tasks, while not making it harder for | 1114 | * More easily preempt - nice tasks, while not making |
| 1173 | * + nice tasks. | 1115 | * it harder for + nice tasks. |
| 1174 | */ | 1116 | */ |
| 1175 | gran = calc_delta_asym(sysctl_sched_wakeup_granularity, se); | 1117 | if (unlikely(se->load.weight > NICE_0_LOAD)) |
| 1118 | gran = calc_delta_fair(gran, &se->load); | ||
| 1176 | 1119 | ||
| 1177 | return gran; | 1120 | return gran; |
| 1178 | } | 1121 | } |
| @@ -1366,90 +1309,75 @@ static struct task_struct *load_balance_next_fair(void *arg) | |||
| 1366 | return __load_balance_iterator(cfs_rq, cfs_rq->balance_iterator); | 1309 | return __load_balance_iterator(cfs_rq, cfs_rq->balance_iterator); |
| 1367 | } | 1310 | } |
| 1368 | 1311 | ||
| 1369 | static unsigned long | 1312 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 1370 | __load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | 1313 | static int cfs_rq_best_prio(struct cfs_rq *cfs_rq) |
| 1371 | unsigned long max_load_move, struct sched_domain *sd, | ||
| 1372 | enum cpu_idle_type idle, int *all_pinned, int *this_best_prio, | ||
| 1373 | struct cfs_rq *cfs_rq) | ||
| 1374 | { | 1314 | { |
| 1375 | struct rq_iterator cfs_rq_iterator; | 1315 | struct sched_entity *curr; |
| 1316 | struct task_struct *p; | ||
| 1376 | 1317 | ||
| 1377 | cfs_rq_iterator.start = load_balance_start_fair; | 1318 | if (!cfs_rq->nr_running || !first_fair(cfs_rq)) |
| 1378 | cfs_rq_iterator.next = load_balance_next_fair; | 1319 | return MAX_PRIO; |
| 1379 | cfs_rq_iterator.arg = cfs_rq; | 1320 | |
| 1321 | curr = cfs_rq->curr; | ||
| 1322 | if (!curr) | ||
| 1323 | curr = __pick_next_entity(cfs_rq); | ||
| 1324 | |||
| 1325 | p = task_of(curr); | ||
| 1380 | 1326 | ||
| 1381 | return balance_tasks(this_rq, this_cpu, busiest, | 1327 | return p->prio; |
| 1382 | max_load_move, sd, idle, all_pinned, | ||
| 1383 | this_best_prio, &cfs_rq_iterator); | ||
| 1384 | } | 1328 | } |
| 1329 | #endif | ||
| 1385 | 1330 | ||
| 1386 | #ifdef CONFIG_FAIR_GROUP_SCHED | ||
| 1387 | static unsigned long | 1331 | static unsigned long |
| 1388 | load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | 1332 | load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, |
| 1389 | unsigned long max_load_move, | 1333 | unsigned long max_load_move, |
| 1390 | struct sched_domain *sd, enum cpu_idle_type idle, | 1334 | struct sched_domain *sd, enum cpu_idle_type idle, |
| 1391 | int *all_pinned, int *this_best_prio) | 1335 | int *all_pinned, int *this_best_prio) |
| 1392 | { | 1336 | { |
| 1337 | struct cfs_rq *busy_cfs_rq; | ||
| 1393 | long rem_load_move = max_load_move; | 1338 | long rem_load_move = max_load_move; |
| 1394 | int busiest_cpu = cpu_of(busiest); | 1339 | struct rq_iterator cfs_rq_iterator; |
| 1395 | struct task_group *tg; | ||
| 1396 | |||
| 1397 | rcu_read_lock(); | ||
| 1398 | list_for_each_entry(tg, &task_groups, list) { | ||
| 1399 | long imbalance; | ||
| 1400 | unsigned long this_weight, busiest_weight; | ||
| 1401 | long rem_load, max_load, moved_load; | ||
| 1402 | |||
| 1403 | /* | ||
| 1404 | * empty group | ||
| 1405 | */ | ||
| 1406 | if (!aggregate(tg, sd)->task_weight) | ||
| 1407 | continue; | ||
| 1408 | |||
| 1409 | rem_load = rem_load_move * aggregate(tg, sd)->rq_weight; | ||
| 1410 | rem_load /= aggregate(tg, sd)->load + 1; | ||
| 1411 | |||
| 1412 | this_weight = tg->cfs_rq[this_cpu]->task_weight; | ||
| 1413 | busiest_weight = tg->cfs_rq[busiest_cpu]->task_weight; | ||
| 1414 | 1340 | ||
| 1415 | imbalance = (busiest_weight - this_weight) / 2; | 1341 | cfs_rq_iterator.start = load_balance_start_fair; |
| 1342 | cfs_rq_iterator.next = load_balance_next_fair; | ||
| 1416 | 1343 | ||
| 1417 | if (imbalance < 0) | 1344 | for_each_leaf_cfs_rq(busiest, busy_cfs_rq) { |
| 1418 | imbalance = busiest_weight; | 1345 | #ifdef CONFIG_FAIR_GROUP_SCHED |
| 1346 | struct cfs_rq *this_cfs_rq; | ||
| 1347 | long imbalance; | ||
| 1348 | unsigned long maxload; | ||
| 1419 | 1349 | ||
| 1420 | max_load = max(rem_load, imbalance); | 1350 | this_cfs_rq = cpu_cfs_rq(busy_cfs_rq, this_cpu); |
| 1421 | moved_load = __load_balance_fair(this_rq, this_cpu, busiest, | ||
| 1422 | max_load, sd, idle, all_pinned, this_best_prio, | ||
| 1423 | tg->cfs_rq[busiest_cpu]); | ||
| 1424 | 1351 | ||
| 1425 | if (!moved_load) | 1352 | imbalance = busy_cfs_rq->load.weight - this_cfs_rq->load.weight; |
| 1353 | /* Don't pull if this_cfs_rq has more load than busy_cfs_rq */ | ||
| 1354 | if (imbalance <= 0) | ||
| 1426 | continue; | 1355 | continue; |
| 1427 | 1356 | ||
| 1428 | move_group_shares(tg, sd, busiest_cpu, this_cpu); | 1357 | /* Don't pull more than imbalance/2 */ |
| 1358 | imbalance /= 2; | ||
| 1359 | maxload = min(rem_load_move, imbalance); | ||
| 1429 | 1360 | ||
| 1430 | moved_load *= aggregate(tg, sd)->load; | 1361 | *this_best_prio = cfs_rq_best_prio(this_cfs_rq); |
| 1431 | moved_load /= aggregate(tg, sd)->rq_weight + 1; | 1362 | #else |
| 1363 | # define maxload rem_load_move | ||
| 1364 | #endif | ||
| 1365 | /* | ||
| 1366 | * pass busy_cfs_rq argument into | ||
| 1367 | * load_balance_[start|next]_fair iterators | ||
| 1368 | */ | ||
| 1369 | cfs_rq_iterator.arg = busy_cfs_rq; | ||
| 1370 | rem_load_move -= balance_tasks(this_rq, this_cpu, busiest, | ||
| 1371 | maxload, sd, idle, all_pinned, | ||
| 1372 | this_best_prio, | ||
| 1373 | &cfs_rq_iterator); | ||
| 1432 | 1374 | ||
| 1433 | rem_load_move -= moved_load; | 1375 | if (rem_load_move <= 0) |
| 1434 | if (rem_load_move < 0) | ||
| 1435 | break; | 1376 | break; |
| 1436 | } | 1377 | } |
| 1437 | rcu_read_unlock(); | ||
| 1438 | 1378 | ||
| 1439 | return max_load_move - rem_load_move; | 1379 | return max_load_move - rem_load_move; |
| 1440 | } | 1380 | } |
| 1441 | #else | ||
| 1442 | static unsigned long | ||
| 1443 | load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | ||
| 1444 | unsigned long max_load_move, | ||
| 1445 | struct sched_domain *sd, enum cpu_idle_type idle, | ||
| 1446 | int *all_pinned, int *this_best_prio) | ||
| 1447 | { | ||
| 1448 | return __load_balance_fair(this_rq, this_cpu, busiest, | ||
| 1449 | max_load_move, sd, idle, all_pinned, | ||
| 1450 | this_best_prio, &busiest->cfs); | ||
| 1451 | } | ||
| 1452 | #endif | ||
| 1453 | 1381 | ||
| 1454 | static int | 1382 | static int |
| 1455 | move_one_task_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, | 1383 | move_one_task_fair(struct rq *this_rq, int this_cpu, struct rq *busiest, |
diff --git a/kernel/sched_rt.c b/kernel/sched_rt.c index 060e87b0cb1c..3432d573205d 100644 --- a/kernel/sched_rt.c +++ b/kernel/sched_rt.c | |||
| @@ -513,8 +513,6 @@ static void enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup) | |||
| 513 | */ | 513 | */ |
| 514 | for_each_sched_rt_entity(rt_se) | 514 | for_each_sched_rt_entity(rt_se) |
| 515 | enqueue_rt_entity(rt_se); | 515 | enqueue_rt_entity(rt_se); |
| 516 | |||
| 517 | inc_cpu_load(rq, p->se.load.weight); | ||
| 518 | } | 516 | } |
| 519 | 517 | ||
| 520 | static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) | 518 | static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) |
| @@ -534,8 +532,6 @@ static void dequeue_task_rt(struct rq *rq, struct task_struct *p, int sleep) | |||
| 534 | if (rt_rq && rt_rq->rt_nr_running) | 532 | if (rt_rq && rt_rq->rt_nr_running) |
| 535 | enqueue_rt_entity(rt_se); | 533 | enqueue_rt_entity(rt_se); |
| 536 | } | 534 | } |
| 537 | |||
| 538 | dec_cpu_load(rq, p->se.load.weight); | ||
| 539 | } | 535 | } |
| 540 | 536 | ||
| 541 | /* | 537 | /* |
diff --git a/kernel/sched_stats.h b/kernel/sched_stats.h index 5bae2e0c3ff2..a38878e0e49d 100644 --- a/kernel/sched_stats.h +++ b/kernel/sched_stats.h | |||
| @@ -67,6 +67,7 @@ static int show_schedstat(struct seq_file *seq, void *v) | |||
| 67 | preempt_enable(); | 67 | preempt_enable(); |
| 68 | #endif | 68 | #endif |
| 69 | } | 69 | } |
| 70 | kfree(mask_str); | ||
| 70 | return 0; | 71 | return 0; |
| 71 | } | 72 | } |
| 72 | 73 | ||
diff --git a/kernel/signal.c b/kernel/signal.c index 12ffea7c201d..6c0958e52ea7 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -231,6 +231,40 @@ void flush_signals(struct task_struct *t) | |||
| 231 | spin_unlock_irqrestore(&t->sighand->siglock, flags); | 231 | spin_unlock_irqrestore(&t->sighand->siglock, flags); |
| 232 | } | 232 | } |
| 233 | 233 | ||
| 234 | static void __flush_itimer_signals(struct sigpending *pending) | ||
| 235 | { | ||
| 236 | sigset_t signal, retain; | ||
| 237 | struct sigqueue *q, *n; | ||
| 238 | |||
| 239 | signal = pending->signal; | ||
| 240 | sigemptyset(&retain); | ||
| 241 | |||
| 242 | list_for_each_entry_safe(q, n, &pending->list, list) { | ||
| 243 | int sig = q->info.si_signo; | ||
| 244 | |||
| 245 | if (likely(q->info.si_code != SI_TIMER)) { | ||
| 246 | sigaddset(&retain, sig); | ||
| 247 | } else { | ||
| 248 | sigdelset(&signal, sig); | ||
| 249 | list_del_init(&q->list); | ||
| 250 | __sigqueue_free(q); | ||
| 251 | } | ||
| 252 | } | ||
| 253 | |||
| 254 | sigorsets(&pending->signal, &signal, &retain); | ||
| 255 | } | ||
| 256 | |||
| 257 | void flush_itimer_signals(void) | ||
| 258 | { | ||
| 259 | struct task_struct *tsk = current; | ||
| 260 | unsigned long flags; | ||
| 261 | |||
| 262 | spin_lock_irqsave(&tsk->sighand->siglock, flags); | ||
| 263 | __flush_itimer_signals(&tsk->pending); | ||
| 264 | __flush_itimer_signals(&tsk->signal->shared_pending); | ||
| 265 | spin_unlock_irqrestore(&tsk->sighand->siglock, flags); | ||
| 266 | } | ||
| 267 | |||
| 234 | void ignore_signals(struct task_struct *t) | 268 | void ignore_signals(struct task_struct *t) |
| 235 | { | 269 | { |
| 236 | int i; | 270 | int i; |
| @@ -1240,18 +1274,22 @@ void sigqueue_free(struct sigqueue *q) | |||
| 1240 | 1274 | ||
| 1241 | BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); | 1275 | BUG_ON(!(q->flags & SIGQUEUE_PREALLOC)); |
| 1242 | /* | 1276 | /* |
| 1243 | * If the signal is still pending remove it from the | 1277 | * We must hold ->siglock while testing q->list |
| 1244 | * pending queue. We must hold ->siglock while testing | 1278 | * to serialize with collect_signal() or with |
| 1245 | * q->list to serialize with collect_signal() or with | ||
| 1246 | * __exit_signal()->flush_sigqueue(). | 1279 | * __exit_signal()->flush_sigqueue(). |
| 1247 | */ | 1280 | */ |
| 1248 | spin_lock_irqsave(lock, flags); | 1281 | spin_lock_irqsave(lock, flags); |
| 1282 | q->flags &= ~SIGQUEUE_PREALLOC; | ||
| 1283 | /* | ||
| 1284 | * If it is queued it will be freed when dequeued, | ||
| 1285 | * like the "regular" sigqueue. | ||
| 1286 | */ | ||
| 1249 | if (!list_empty(&q->list)) | 1287 | if (!list_empty(&q->list)) |
| 1250 | list_del_init(&q->list); | 1288 | q = NULL; |
| 1251 | spin_unlock_irqrestore(lock, flags); | 1289 | spin_unlock_irqrestore(lock, flags); |
| 1252 | 1290 | ||
| 1253 | q->flags &= ~SIGQUEUE_PREALLOC; | 1291 | if (q) |
| 1254 | __sigqueue_free(q); | 1292 | __sigqueue_free(q); |
| 1255 | } | 1293 | } |
| 1256 | 1294 | ||
| 1257 | int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group) | 1295 | int send_sigqueue(struct sigqueue *q, struct task_struct *t, int group) |
diff --git a/lib/bitrev.c b/lib/bitrev.c index 989aff73f881..3956203456d4 100644 --- a/lib/bitrev.c +++ b/lib/bitrev.c | |||
| @@ -42,10 +42,11 @@ const u8 byte_rev_table[256] = { | |||
| 42 | }; | 42 | }; |
| 43 | EXPORT_SYMBOL_GPL(byte_rev_table); | 43 | EXPORT_SYMBOL_GPL(byte_rev_table); |
| 44 | 44 | ||
| 45 | static __always_inline u16 bitrev16(u16 x) | 45 | u16 bitrev16(u16 x) |
| 46 | { | 46 | { |
| 47 | return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8); | 47 | return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8); |
| 48 | } | 48 | } |
| 49 | EXPORT_SYMBOL(bitrev16); | ||
| 49 | 50 | ||
| 50 | /** | 51 | /** |
| 51 | * bitrev32 - reverse the order of bits in a u32 value | 52 | * bitrev32 - reverse the order of bits in a u32 value |
diff --git a/mm/hugetlb.c b/mm/hugetlb.c index bbf953eeb58b..ab171274ef21 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c | |||
| @@ -785,7 +785,7 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src, | |||
| 785 | continue; | 785 | continue; |
| 786 | 786 | ||
| 787 | spin_lock(&dst->page_table_lock); | 787 | spin_lock(&dst->page_table_lock); |
| 788 | spin_lock(&src->page_table_lock); | 788 | spin_lock_nested(&src->page_table_lock, SINGLE_DEPTH_NESTING); |
| 789 | if (!huge_pte_none(huge_ptep_get(src_pte))) { | 789 | if (!huge_pte_none(huge_ptep_get(src_pte))) { |
| 790 | if (cow) | 790 | if (cow) |
| 791 | huge_ptep_set_wrprotect(src, addr, src_pte); | 791 | huge_ptep_set_wrprotect(src, addr, src_pte); |
| @@ -245,10 +245,16 @@ asmlinkage unsigned long sys_brk(unsigned long brk) | |||
| 245 | unsigned long rlim, retval; | 245 | unsigned long rlim, retval; |
| 246 | unsigned long newbrk, oldbrk; | 246 | unsigned long newbrk, oldbrk; |
| 247 | struct mm_struct *mm = current->mm; | 247 | struct mm_struct *mm = current->mm; |
| 248 | unsigned long min_brk; | ||
| 248 | 249 | ||
| 249 | down_write(&mm->mmap_sem); | 250 | down_write(&mm->mmap_sem); |
| 250 | 251 | ||
| 251 | if (brk < mm->start_brk) | 252 | #ifdef CONFIG_COMPAT_BRK |
| 253 | min_brk = mm->end_code; | ||
| 254 | #else | ||
| 255 | min_brk = mm->start_brk; | ||
| 256 | #endif | ||
| 257 | if (brk < min_brk) | ||
| 252 | goto out; | 258 | goto out; |
| 253 | 259 | ||
| 254 | /* | 260 | /* |
diff --git a/mm/nommu.c b/mm/nommu.c index dca93fcb8b7a..3abd0845bda4 100644 --- a/mm/nommu.c +++ b/mm/nommu.c | |||
| @@ -104,21 +104,43 @@ EXPORT_SYMBOL(vmtruncate); | |||
| 104 | unsigned int kobjsize(const void *objp) | 104 | unsigned int kobjsize(const void *objp) |
| 105 | { | 105 | { |
| 106 | struct page *page; | 106 | struct page *page; |
| 107 | int order = 0; | ||
| 107 | 108 | ||
| 108 | /* | 109 | /* |
| 109 | * If the object we have should not have ksize performed on it, | 110 | * If the object we have should not have ksize performed on it, |
| 110 | * return size of 0 | 111 | * return size of 0 |
| 111 | */ | 112 | */ |
| 112 | if (!objp || (unsigned long)objp >= memory_end || !((page = virt_to_page(objp)))) | 113 | if (!objp) |
| 113 | return 0; | 114 | return 0; |
| 114 | 115 | ||
| 116 | if ((unsigned long)objp >= memory_end) | ||
| 117 | return 0; | ||
| 118 | |||
| 119 | page = virt_to_head_page(objp); | ||
| 120 | if (!page) | ||
| 121 | return 0; | ||
| 122 | |||
| 123 | /* | ||
| 124 | * If the allocator sets PageSlab, we know the pointer came from | ||
| 125 | * kmalloc(). | ||
| 126 | */ | ||
| 115 | if (PageSlab(page)) | 127 | if (PageSlab(page)) |
| 116 | return ksize(objp); | 128 | return ksize(objp); |
| 117 | 129 | ||
| 118 | BUG_ON(page->index < 0); | 130 | /* |
| 119 | BUG_ON(page->index >= MAX_ORDER); | 131 | * The ksize() function is only guaranteed to work for pointers |
| 132 | * returned by kmalloc(). So handle arbitrary pointers, that we expect | ||
| 133 | * always to be compound pages, here. | ||
| 134 | */ | ||
| 135 | if (PageCompound(page)) | ||
| 136 | order = compound_order(page); | ||
| 120 | 137 | ||
| 121 | return (PAGE_SIZE << page->index); | 138 | /* |
| 139 | * Finally, handle arbitrary pointers that don't set PageSlab. | ||
| 140 | * Default to 0-order in the case when we're unable to ksize() | ||
| 141 | * the object. | ||
| 142 | */ | ||
| 143 | return PAGE_SIZE << order; | ||
| 122 | } | 144 | } |
| 123 | 145 | ||
| 124 | /* | 146 | /* |
| @@ -469,8 +469,9 @@ void *__kmalloc_node(size_t size, gfp_t gfp, int node) | |||
| 469 | return ZERO_SIZE_PTR; | 469 | return ZERO_SIZE_PTR; |
| 470 | 470 | ||
| 471 | m = slob_alloc(size + align, gfp, align, node); | 471 | m = slob_alloc(size + align, gfp, align, node); |
| 472 | if (m) | 472 | if (!m) |
| 473 | *m = size; | 473 | return NULL; |
| 474 | *m = size; | ||
| 474 | return (void *)m + align; | 475 | return (void *)m + align; |
| 475 | } else { | 476 | } else { |
| 476 | void *ret; | 477 | void *ret; |
| @@ -2726,9 +2726,10 @@ size_t ksize(const void *object) | |||
| 2726 | 2726 | ||
| 2727 | page = virt_to_head_page(object); | 2727 | page = virt_to_head_page(object); |
| 2728 | 2728 | ||
| 2729 | if (unlikely(!PageSlab(page))) | 2729 | if (unlikely(!PageSlab(page))) { |
| 2730 | WARN_ON(!PageCompound(page)); | ||
| 2730 | return PAGE_SIZE << compound_order(page); | 2731 | return PAGE_SIZE << compound_order(page); |
| 2731 | 2732 | } | |
| 2732 | s = page->slab; | 2733 | s = page->slab; |
| 2733 | 2734 | ||
| 2734 | #ifdef CONFIG_SLUB_DEBUG | 2735 | #ifdef CONFIG_SLUB_DEBUG |
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c index 51961300b586..ab2225da0ee2 100644 --- a/net/8021q/vlan.c +++ b/net/8021q/vlan.c | |||
| @@ -387,14 +387,8 @@ static void vlan_transfer_features(struct net_device *dev, | |||
| 387 | { | 387 | { |
| 388 | unsigned long old_features = vlandev->features; | 388 | unsigned long old_features = vlandev->features; |
| 389 | 389 | ||
| 390 | if (dev->features & NETIF_F_VLAN_TSO) { | 390 | vlandev->features &= ~dev->vlan_features; |
| 391 | vlandev->features &= ~VLAN_TSO_FEATURES; | 391 | vlandev->features |= dev->features & dev->vlan_features; |
| 392 | vlandev->features |= dev->features & VLAN_TSO_FEATURES; | ||
| 393 | } | ||
| 394 | if (dev->features & NETIF_F_VLAN_CSUM) { | ||
| 395 | vlandev->features &= ~NETIF_F_ALL_CSUM; | ||
| 396 | vlandev->features |= dev->features & NETIF_F_ALL_CSUM; | ||
| 397 | } | ||
| 398 | 392 | ||
| 399 | if (old_features != vlandev->features) | 393 | if (old_features != vlandev->features) |
| 400 | netdev_features_change(vlandev); | 394 | netdev_features_change(vlandev); |
diff --git a/net/8021q/vlan.h b/net/8021q/vlan.h index 79625696e86a..5229a72c7ea1 100644 --- a/net/8021q/vlan.h +++ b/net/8021q/vlan.h | |||
| @@ -7,8 +7,6 @@ | |||
| 7 | #define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT) | 7 | #define VLAN_GRP_HASH_SIZE (1 << VLAN_GRP_HASH_SHIFT) |
| 8 | #define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1) | 8 | #define VLAN_GRP_HASH_MASK (VLAN_GRP_HASH_SIZE - 1) |
| 9 | 9 | ||
| 10 | #define VLAN_TSO_FEATURES (NETIF_F_TSO | NETIF_F_TSO6 | NETIF_F_SG) | ||
| 11 | |||
| 12 | /* Find a VLAN device by the MAC address of its Ethernet device, and | 10 | /* Find a VLAN device by the MAC address of its Ethernet device, and |
| 13 | * it's VLAN ID. The default configuration is to have VLAN's scope | 11 | * it's VLAN ID. The default configuration is to have VLAN's scope |
| 14 | * to be box-wide, so the MAC will be ignored. The mac will only be | 12 | * to be box-wide, so the MAC will be ignored. The mac will only be |
diff --git a/net/8021q/vlan_dev.c b/net/8021q/vlan_dev.c index b1cfbaa88db2..5d055c242ed8 100644 --- a/net/8021q/vlan_dev.c +++ b/net/8021q/vlan_dev.c | |||
| @@ -663,10 +663,7 @@ static int vlan_dev_init(struct net_device *dev) | |||
| 663 | (1<<__LINK_STATE_DORMANT))) | | 663 | (1<<__LINK_STATE_DORMANT))) | |
| 664 | (1<<__LINK_STATE_PRESENT); | 664 | (1<<__LINK_STATE_PRESENT); |
| 665 | 665 | ||
| 666 | if (real_dev->features & NETIF_F_VLAN_TSO) | 666 | dev->features |= real_dev->features & real_dev->vlan_features; |
| 667 | dev->features |= real_dev->features & VLAN_TSO_FEATURES; | ||
| 668 | if (real_dev->features & NETIF_F_VLAN_CSUM) | ||
| 669 | dev->features |= real_dev->features & NETIF_F_ALL_CSUM; | ||
| 670 | 667 | ||
| 671 | /* ipv6 shared card related stuff */ | 668 | /* ipv6 shared card related stuff */ |
| 672 | dev->dev_id = real_dev->dev_id; | 669 | dev->dev_id = real_dev->dev_id; |
diff --git a/net/ax25/ax25_subr.c b/net/ax25/ax25_subr.c index d8f215733175..034aa10a5198 100644 --- a/net/ax25/ax25_subr.c +++ b/net/ax25/ax25_subr.c | |||
| @@ -64,20 +64,15 @@ void ax25_frames_acked(ax25_cb *ax25, unsigned short nr) | |||
| 64 | 64 | ||
| 65 | void ax25_requeue_frames(ax25_cb *ax25) | 65 | void ax25_requeue_frames(ax25_cb *ax25) |
| 66 | { | 66 | { |
| 67 | struct sk_buff *skb, *skb_prev = NULL; | 67 | struct sk_buff *skb; |
| 68 | 68 | ||
| 69 | /* | 69 | /* |
| 70 | * Requeue all the un-ack-ed frames on the output queue to be picked | 70 | * Requeue all the un-ack-ed frames on the output queue to be picked |
| 71 | * up by ax25_kick called from the timer. This arrangement handles the | 71 | * up by ax25_kick called from the timer. This arrangement handles the |
| 72 | * possibility of an empty output queue. | 72 | * possibility of an empty output queue. |
| 73 | */ | 73 | */ |
| 74 | while ((skb = skb_dequeue(&ax25->ack_queue)) != NULL) { | 74 | while ((skb = skb_dequeue_tail(&ax25->ack_queue)) != NULL) |
| 75 | if (skb_prev == NULL) | 75 | skb_queue_head(&ax25->write_queue, skb); |
| 76 | skb_queue_head(&ax25->write_queue, skb); | ||
| 77 | else | ||
| 78 | skb_append(skb_prev, skb, &ax25->write_queue); | ||
| 79 | skb_prev = skb; | ||
| 80 | } | ||
| 81 | } | 76 | } |
| 82 | 77 | ||
| 83 | /* | 78 | /* |
diff --git a/net/bluetooth/rfcomm/core.c b/net/bluetooth/rfcomm/core.c index eb62558e9b09..0c2c93735e93 100644 --- a/net/bluetooth/rfcomm/core.c +++ b/net/bluetooth/rfcomm/core.c | |||
| @@ -423,8 +423,8 @@ static int __rfcomm_dlc_close(struct rfcomm_dlc *d, int err) | |||
| 423 | 423 | ||
| 424 | rfcomm_dlc_lock(d); | 424 | rfcomm_dlc_lock(d); |
| 425 | d->state = BT_CLOSED; | 425 | d->state = BT_CLOSED; |
| 426 | rfcomm_dlc_unlock(d); | ||
| 427 | d->state_change(d, err); | 426 | d->state_change(d, err); |
| 427 | rfcomm_dlc_unlock(d); | ||
| 428 | 428 | ||
| 429 | skb_queue_purge(&d->tx_queue); | 429 | skb_queue_purge(&d->tx_queue); |
| 430 | rfcomm_dlc_unlink(d); | 430 | rfcomm_dlc_unlink(d); |
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index c3f749abb2d0..c9191871c1e0 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c | |||
| @@ -566,11 +566,22 @@ static void rfcomm_dev_state_change(struct rfcomm_dlc *dlc, int err) | |||
| 566 | if (dlc->state == BT_CLOSED) { | 566 | if (dlc->state == BT_CLOSED) { |
| 567 | if (!dev->tty) { | 567 | if (!dev->tty) { |
| 568 | if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) { | 568 | if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags)) { |
| 569 | if (rfcomm_dev_get(dev->id) == NULL) | 569 | /* Drop DLC lock here to avoid deadlock |
| 570 | * 1. rfcomm_dev_get will take rfcomm_dev_lock | ||
| 571 | * but in rfcomm_dev_add there's lock order: | ||
| 572 | * rfcomm_dev_lock -> dlc lock | ||
| 573 | * 2. rfcomm_dev_put will deadlock if it's | ||
| 574 | * the last reference | ||
| 575 | */ | ||
| 576 | rfcomm_dlc_unlock(dlc); | ||
| 577 | if (rfcomm_dev_get(dev->id) == NULL) { | ||
| 578 | rfcomm_dlc_lock(dlc); | ||
| 570 | return; | 579 | return; |
| 580 | } | ||
| 571 | 581 | ||
| 572 | rfcomm_dev_del(dev); | 582 | rfcomm_dev_del(dev); |
| 573 | rfcomm_dev_put(dev); | 583 | rfcomm_dev_put(dev); |
| 584 | rfcomm_dlc_lock(dlc); | ||
| 574 | } | 585 | } |
| 575 | } else | 586 | } else |
| 576 | tty_hangup(dev->tty); | 587 | tty_hangup(dev->tty); |
diff --git a/net/core/neighbour.c b/net/core/neighbour.c index 5d9d7130bd6e..65f01f71b3f3 100644 --- a/net/core/neighbour.c +++ b/net/core/neighbour.c | |||
| @@ -1714,7 +1714,8 @@ static int neightbl_fill_parms(struct sk_buff *skb, struct neigh_parms *parms) | |||
| 1714 | return nla_nest_end(skb, nest); | 1714 | return nla_nest_end(skb, nest); |
| 1715 | 1715 | ||
| 1716 | nla_put_failure: | 1716 | nla_put_failure: |
| 1717 | return nla_nest_cancel(skb, nest); | 1717 | nla_nest_cancel(skb, nest); |
| 1718 | return -EMSGSIZE; | ||
| 1718 | } | 1719 | } |
| 1719 | 1720 | ||
| 1720 | static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl, | 1721 | static int neightbl_fill_info(struct sk_buff *skb, struct neigh_table *tbl, |
| @@ -2057,9 +2058,9 @@ static int neigh_fill_info(struct sk_buff *skb, struct neighbour *neigh, | |||
| 2057 | goto nla_put_failure; | 2058 | goto nla_put_failure; |
| 2058 | } | 2059 | } |
| 2059 | 2060 | ||
| 2060 | ci.ndm_used = now - neigh->used; | 2061 | ci.ndm_used = jiffies_to_clock_t(now - neigh->used); |
| 2061 | ci.ndm_confirmed = now - neigh->confirmed; | 2062 | ci.ndm_confirmed = jiffies_to_clock_t(now - neigh->confirmed); |
| 2062 | ci.ndm_updated = now - neigh->updated; | 2063 | ci.ndm_updated = jiffies_to_clock_t(now - neigh->updated); |
| 2063 | ci.ndm_refcnt = atomic_read(&neigh->refcnt) - 1; | 2064 | ci.ndm_refcnt = atomic_read(&neigh->refcnt) - 1; |
| 2064 | read_unlock_bh(&neigh->lock); | 2065 | read_unlock_bh(&neigh->lock); |
| 2065 | 2066 | ||
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index cf857c4dc7b1..a9a77216310e 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
| @@ -498,7 +498,8 @@ int rtnetlink_put_metrics(struct sk_buff *skb, u32 *metrics) | |||
| 498 | return nla_nest_end(skb, mx); | 498 | return nla_nest_end(skb, mx); |
| 499 | 499 | ||
| 500 | nla_put_failure: | 500 | nla_put_failure: |
| 501 | return nla_nest_cancel(skb, mx); | 501 | nla_nest_cancel(skb, mx); |
| 502 | return -EMSGSIZE; | ||
| 502 | } | 503 | } |
| 503 | 504 | ||
| 504 | int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, | 505 | int rtnl_put_cacheinfo(struct sk_buff *skb, struct dst_entry *dst, u32 id, |
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index 5c459f2b7985..1e556d312117 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
| @@ -1445,6 +1445,7 @@ done: | |||
| 1445 | 1445 | ||
| 1446 | if (spd.nr_pages) { | 1446 | if (spd.nr_pages) { |
| 1447 | int ret; | 1447 | int ret; |
| 1448 | struct sock *sk = __skb->sk; | ||
| 1448 | 1449 | ||
| 1449 | /* | 1450 | /* |
| 1450 | * Drop the socket lock, otherwise we have reverse | 1451 | * Drop the socket lock, otherwise we have reverse |
| @@ -1455,9 +1456,9 @@ done: | |||
| 1455 | * we call into ->sendpage() with the i_mutex lock held | 1456 | * we call into ->sendpage() with the i_mutex lock held |
| 1456 | * and networking will grab the socket lock. | 1457 | * and networking will grab the socket lock. |
| 1457 | */ | 1458 | */ |
| 1458 | release_sock(__skb->sk); | 1459 | release_sock(sk); |
| 1459 | ret = splice_to_pipe(pipe, &spd); | 1460 | ret = splice_to_pipe(pipe, &spd); |
| 1460 | lock_sock(__skb->sk); | 1461 | lock_sock(sk); |
| 1461 | return ret; | 1462 | return ret; |
| 1462 | } | 1463 | } |
| 1463 | 1464 | ||
diff --git a/net/core/user_dma.c b/net/core/user_dma.c index 0ad1cd57bc39..c77aff9c6eb3 100644 --- a/net/core/user_dma.c +++ b/net/core/user_dma.c | |||
| @@ -75,7 +75,7 @@ int dma_skb_copy_datagram_iovec(struct dma_chan *chan, | |||
| 75 | 75 | ||
| 76 | end = start + skb_shinfo(skb)->frags[i].size; | 76 | end = start + skb_shinfo(skb)->frags[i].size; |
| 77 | copy = end - offset; | 77 | copy = end - offset; |
| 78 | if ((copy = end - offset) > 0) { | 78 | if (copy > 0) { |
| 79 | skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; | 79 | skb_frag_t *frag = &skb_shinfo(skb)->frags[i]; |
| 80 | struct page *page = frag->page; | 80 | struct page *page = frag->page; |
| 81 | 81 | ||
diff --git a/net/dccp/ccids/ccid3.c b/net/dccp/ccids/ccid3.c index cd61dea2eea1..f813077234b7 100644 --- a/net/dccp/ccids/ccid3.c +++ b/net/dccp/ccids/ccid3.c | |||
| @@ -193,22 +193,17 @@ static inline void ccid3_hc_tx_update_s(struct ccid3_hc_tx_sock *hctx, int len) | |||
| 193 | 193 | ||
| 194 | /* | 194 | /* |
| 195 | * Update Window Counter using the algorithm from [RFC 4342, 8.1]. | 195 | * Update Window Counter using the algorithm from [RFC 4342, 8.1]. |
| 196 | * The algorithm is not applicable if RTT < 4 microseconds. | 196 | * As elsewhere, RTT > 0 is assumed by using dccp_sample_rtt(). |
| 197 | */ | 197 | */ |
| 198 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, | 198 | static inline void ccid3_hc_tx_update_win_count(struct ccid3_hc_tx_sock *hctx, |
| 199 | ktime_t now) | 199 | ktime_t now) |
| 200 | { | 200 | { |
| 201 | u32 quarter_rtts; | 201 | u32 delta = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count), |
| 202 | 202 | quarter_rtts = (4 * delta) / hctx->ccid3hctx_rtt; | |
| 203 | if (unlikely(hctx->ccid3hctx_rtt < 4)) /* avoid divide-by-zero */ | ||
| 204 | return; | ||
| 205 | |||
| 206 | quarter_rtts = ktime_us_delta(now, hctx->ccid3hctx_t_last_win_count); | ||
| 207 | quarter_rtts /= hctx->ccid3hctx_rtt / 4; | ||
| 208 | 203 | ||
| 209 | if (quarter_rtts > 0) { | 204 | if (quarter_rtts > 0) { |
| 210 | hctx->ccid3hctx_t_last_win_count = now; | 205 | hctx->ccid3hctx_t_last_win_count = now; |
| 211 | hctx->ccid3hctx_last_win_count += min_t(u32, quarter_rtts, 5); | 206 | hctx->ccid3hctx_last_win_count += min(quarter_rtts, 5U); |
| 212 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ | 207 | hctx->ccid3hctx_last_win_count &= 0xF; /* mod 16 */ |
| 213 | } | 208 | } |
| 214 | } | 209 | } |
diff --git a/net/dccp/ipv4.c b/net/dccp/ipv4.c index b348dd70c685..c22a3780c14e 100644 --- a/net/dccp/ipv4.c +++ b/net/dccp/ipv4.c | |||
| @@ -739,8 +739,8 @@ int dccp_invalid_packet(struct sk_buff *skb) | |||
| 739 | * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet | 739 | * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet |
| 740 | * has short sequence numbers), drop packet and return | 740 | * has short sequence numbers), drop packet and return |
| 741 | */ | 741 | */ |
| 742 | if (dh->dccph_type >= DCCP_PKT_DATA && | 742 | if ((dh->dccph_type < DCCP_PKT_DATA || |
| 743 | dh->dccph_type <= DCCP_PKT_DATAACK && dh->dccph_x == 0) { | 743 | dh->dccph_type > DCCP_PKT_DATAACK) && dh->dccph_x == 0) { |
| 744 | DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", | 744 | DCCP_WARN("P.type (%s) not Data || [Data]Ack, while P.X == 0\n", |
| 745 | dccp_packet_name(dh->dccph_type)); | 745 | dccp_packet_name(dh->dccph_type)); |
| 746 | return 1; | 746 | return 1; |
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index 6848e4760f34..79a7ef6209ff 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c | |||
| @@ -90,7 +90,6 @@ static const struct nla_policy ifa_ipv4_policy[IFA_MAX+1] = { | |||
| 90 | [IFA_LOCAL] = { .type = NLA_U32 }, | 90 | [IFA_LOCAL] = { .type = NLA_U32 }, |
| 91 | [IFA_ADDRESS] = { .type = NLA_U32 }, | 91 | [IFA_ADDRESS] = { .type = NLA_U32 }, |
| 92 | [IFA_BROADCAST] = { .type = NLA_U32 }, | 92 | [IFA_BROADCAST] = { .type = NLA_U32 }, |
| 93 | [IFA_ANYCAST] = { .type = NLA_U32 }, | ||
| 94 | [IFA_LABEL] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, | 93 | [IFA_LABEL] = { .type = NLA_STRING, .len = IFNAMSIZ - 1 }, |
| 95 | }; | 94 | }; |
| 96 | 95 | ||
| @@ -536,9 +535,6 @@ static struct in_ifaddr *rtm_to_ifaddr(struct net *net, struct nlmsghdr *nlh) | |||
| 536 | if (tb[IFA_BROADCAST]) | 535 | if (tb[IFA_BROADCAST]) |
| 537 | ifa->ifa_broadcast = nla_get_be32(tb[IFA_BROADCAST]); | 536 | ifa->ifa_broadcast = nla_get_be32(tb[IFA_BROADCAST]); |
| 538 | 537 | ||
| 539 | if (tb[IFA_ANYCAST]) | ||
| 540 | ifa->ifa_anycast = nla_get_be32(tb[IFA_ANYCAST]); | ||
| 541 | |||
| 542 | if (tb[IFA_LABEL]) | 538 | if (tb[IFA_LABEL]) |
| 543 | nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ); | 539 | nla_strlcpy(ifa->ifa_label, tb[IFA_LABEL], IFNAMSIZ); |
| 544 | else | 540 | else |
| @@ -745,7 +741,6 @@ int devinet_ioctl(struct net *net, unsigned int cmd, void __user *arg) | |||
| 745 | break; | 741 | break; |
| 746 | inet_del_ifa(in_dev, ifap, 0); | 742 | inet_del_ifa(in_dev, ifap, 0); |
| 747 | ifa->ifa_broadcast = 0; | 743 | ifa->ifa_broadcast = 0; |
| 748 | ifa->ifa_anycast = 0; | ||
| 749 | ifa->ifa_scope = 0; | 744 | ifa->ifa_scope = 0; |
| 750 | } | 745 | } |
| 751 | 746 | ||
| @@ -1113,7 +1108,6 @@ static inline size_t inet_nlmsg_size(void) | |||
| 1113 | + nla_total_size(4) /* IFA_ADDRESS */ | 1108 | + nla_total_size(4) /* IFA_ADDRESS */ |
| 1114 | + nla_total_size(4) /* IFA_LOCAL */ | 1109 | + nla_total_size(4) /* IFA_LOCAL */ |
| 1115 | + nla_total_size(4) /* IFA_BROADCAST */ | 1110 | + nla_total_size(4) /* IFA_BROADCAST */ |
| 1116 | + nla_total_size(4) /* IFA_ANYCAST */ | ||
| 1117 | + nla_total_size(IFNAMSIZ); /* IFA_LABEL */ | 1111 | + nla_total_size(IFNAMSIZ); /* IFA_LABEL */ |
| 1118 | } | 1112 | } |
| 1119 | 1113 | ||
| @@ -1143,9 +1137,6 @@ static int inet_fill_ifaddr(struct sk_buff *skb, struct in_ifaddr *ifa, | |||
| 1143 | if (ifa->ifa_broadcast) | 1137 | if (ifa->ifa_broadcast) |
| 1144 | NLA_PUT_BE32(skb, IFA_BROADCAST, ifa->ifa_broadcast); | 1138 | NLA_PUT_BE32(skb, IFA_BROADCAST, ifa->ifa_broadcast); |
| 1145 | 1139 | ||
| 1146 | if (ifa->ifa_anycast) | ||
| 1147 | NLA_PUT_BE32(skb, IFA_ANYCAST, ifa->ifa_anycast); | ||
| 1148 | |||
| 1149 | if (ifa->ifa_label[0]) | 1140 | if (ifa->ifa_label[0]) |
| 1150 | NLA_PUT_STRING(skb, IFA_LABEL, ifa->ifa_label); | 1141 | NLA_PUT_STRING(skb, IFA_LABEL, ifa->ifa_label); |
| 1151 | 1142 | ||
diff --git a/net/ipv4/fib_frontend.c b/net/ipv4/fib_frontend.c index 0f1557a4ac7a..0b2ac6a3d903 100644 --- a/net/ipv4/fib_frontend.c +++ b/net/ipv4/fib_frontend.c | |||
| @@ -506,7 +506,6 @@ const struct nla_policy rtm_ipv4_policy[RTA_MAX+1] = { | |||
| 506 | [RTA_PREFSRC] = { .type = NLA_U32 }, | 506 | [RTA_PREFSRC] = { .type = NLA_U32 }, |
| 507 | [RTA_METRICS] = { .type = NLA_NESTED }, | 507 | [RTA_METRICS] = { .type = NLA_NESTED }, |
| 508 | [RTA_MULTIPATH] = { .len = sizeof(struct rtnexthop) }, | 508 | [RTA_MULTIPATH] = { .len = sizeof(struct rtnexthop) }, |
| 509 | [RTA_PROTOINFO] = { .type = NLA_U32 }, | ||
| 510 | [RTA_FLOW] = { .type = NLA_U32 }, | 509 | [RTA_FLOW] = { .type = NLA_U32 }, |
| 511 | }; | 510 | }; |
| 512 | 511 | ||
diff --git a/net/ipv4/netfilter/nf_nat_snmp_basic.c b/net/ipv4/netfilter/nf_nat_snmp_basic.c index 5daefad3d193..7750c97fde7b 100644 --- a/net/ipv4/netfilter/nf_nat_snmp_basic.c +++ b/net/ipv4/netfilter/nf_nat_snmp_basic.c | |||
| @@ -232,6 +232,11 @@ static unsigned char asn1_length_decode(struct asn1_ctx *ctx, | |||
| 232 | } | 232 | } |
| 233 | } | 233 | } |
| 234 | } | 234 | } |
| 235 | |||
| 236 | /* don't trust len bigger than ctx buffer */ | ||
| 237 | if (*len > ctx->end - ctx->pointer) | ||
| 238 | return 0; | ||
| 239 | |||
| 235 | return 1; | 240 | return 1; |
| 236 | } | 241 | } |
| 237 | 242 | ||
| @@ -250,6 +255,10 @@ static unsigned char asn1_header_decode(struct asn1_ctx *ctx, | |||
| 250 | if (!asn1_length_decode(ctx, &def, &len)) | 255 | if (!asn1_length_decode(ctx, &def, &len)) |
| 251 | return 0; | 256 | return 0; |
| 252 | 257 | ||
| 258 | /* primitive shall be definite, indefinite shall be constructed */ | ||
| 259 | if (*con == ASN1_PRI && !def) | ||
| 260 | return 0; | ||
| 261 | |||
| 253 | if (def) | 262 | if (def) |
| 254 | *eoc = ctx->pointer + len; | 263 | *eoc = ctx->pointer + len; |
| 255 | else | 264 | else |
| @@ -434,6 +443,11 @@ static unsigned char asn1_oid_decode(struct asn1_ctx *ctx, | |||
| 434 | unsigned long *optr; | 443 | unsigned long *optr; |
| 435 | 444 | ||
| 436 | size = eoc - ctx->pointer + 1; | 445 | size = eoc - ctx->pointer + 1; |
| 446 | |||
| 447 | /* first subid actually encodes first two subids */ | ||
| 448 | if (size < 2 || size > ULONG_MAX/sizeof(unsigned long)) | ||
| 449 | return 0; | ||
| 450 | |||
| 437 | *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC); | 451 | *oid = kmalloc(size * sizeof(unsigned long), GFP_ATOMIC); |
| 438 | if (*oid == NULL) { | 452 | if (*oid == NULL) { |
| 439 | if (net_ratelimit()) | 453 | if (net_ratelimit()) |
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index fead049daf43..e7e091d365ff 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
| @@ -608,6 +608,14 @@ static void raw_close(struct sock *sk, long timeout) | |||
| 608 | sk_common_release(sk); | 608 | sk_common_release(sk); |
| 609 | } | 609 | } |
| 610 | 610 | ||
| 611 | static int raw_destroy(struct sock *sk) | ||
| 612 | { | ||
| 613 | lock_sock(sk); | ||
| 614 | ip_flush_pending_frames(sk); | ||
| 615 | release_sock(sk); | ||
| 616 | return 0; | ||
| 617 | } | ||
| 618 | |||
| 611 | /* This gets rid of all the nasties in af_inet. -DaveM */ | 619 | /* This gets rid of all the nasties in af_inet. -DaveM */ |
| 612 | static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) | 620 | static int raw_bind(struct sock *sk, struct sockaddr *uaddr, int addr_len) |
| 613 | { | 621 | { |
| @@ -820,6 +828,7 @@ struct proto raw_prot = { | |||
| 820 | .name = "RAW", | 828 | .name = "RAW", |
| 821 | .owner = THIS_MODULE, | 829 | .owner = THIS_MODULE, |
| 822 | .close = raw_close, | 830 | .close = raw_close, |
| 831 | .destroy = raw_destroy, | ||
| 823 | .connect = ip4_datagram_connect, | 832 | .connect = ip4_datagram_connect, |
| 824 | .disconnect = udp_disconnect, | 833 | .disconnect = udp_disconnect, |
| 825 | .ioctl = raw_ioctl, | 834 | .ioctl = raw_ioctl, |
diff --git a/net/ipv4/route.c b/net/ipv4/route.c index df41026b60db..96be336064fb 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c | |||
| @@ -1792,7 +1792,7 @@ static int __mkroute_input(struct sk_buff *skb, | |||
| 1792 | if (err) | 1792 | if (err) |
| 1793 | flags |= RTCF_DIRECTSRC; | 1793 | flags |= RTCF_DIRECTSRC; |
| 1794 | 1794 | ||
| 1795 | if (out_dev == in_dev && err && !(flags & RTCF_MASQ) && | 1795 | if (out_dev == in_dev && err && |
| 1796 | (IN_DEV_SHARED_MEDIA(out_dev) || | 1796 | (IN_DEV_SHARED_MEDIA(out_dev) || |
| 1797 | inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res)))) | 1797 | inet_addr_onlink(out_dev, saddr, FIB_RES_GW(*res)))) |
| 1798 | flags |= RTCF_DOREDIRECT; | 1798 | flags |= RTCF_DOREDIRECT; |
diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index f88653138621..ab66683b8043 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c | |||
| @@ -1227,7 +1227,14 @@ int tcp_read_sock(struct sock *sk, read_descriptor_t *desc, | |||
| 1227 | copied += used; | 1227 | copied += used; |
| 1228 | offset += used; | 1228 | offset += used; |
| 1229 | } | 1229 | } |
| 1230 | if (offset != skb->len) | 1230 | /* |
| 1231 | * If recv_actor drops the lock (e.g. TCP splice | ||
| 1232 | * receive) the skb pointer might be invalid when | ||
| 1233 | * getting here: tcp_collapse might have deleted it | ||
| 1234 | * while aggregating skbs from the socket queue. | ||
| 1235 | */ | ||
| 1236 | skb = tcp_recv_skb(sk, seq-1, &offset); | ||
| 1237 | if (!skb || (offset+1 != skb->len)) | ||
| 1231 | break; | 1238 | break; |
| 1232 | } | 1239 | } |
| 1233 | if (tcp_hdr(skb)->fin) { | 1240 | if (tcp_hdr(skb)->fin) { |
diff --git a/net/ipv4/tcp_input.c b/net/ipv4/tcp_input.c index b54d9d37b636..eba873e9b560 100644 --- a/net/ipv4/tcp_input.c +++ b/net/ipv4/tcp_input.c | |||
| @@ -1392,9 +1392,9 @@ static struct sk_buff *tcp_maybe_skipping_dsack(struct sk_buff *skb, | |||
| 1392 | 1392 | ||
| 1393 | if (before(next_dup->start_seq, skip_to_seq)) { | 1393 | if (before(next_dup->start_seq, skip_to_seq)) { |
| 1394 | skb = tcp_sacktag_skip(skb, sk, next_dup->start_seq, fack_count); | 1394 | skb = tcp_sacktag_skip(skb, sk, next_dup->start_seq, fack_count); |
| 1395 | tcp_sacktag_walk(skb, sk, NULL, | 1395 | skb = tcp_sacktag_walk(skb, sk, NULL, |
| 1396 | next_dup->start_seq, next_dup->end_seq, | 1396 | next_dup->start_seq, next_dup->end_seq, |
| 1397 | 1, fack_count, reord, flag); | 1397 | 1, fack_count, reord, flag); |
| 1398 | } | 1398 | } |
| 1399 | 1399 | ||
| 1400 | return skb; | 1400 | return skb; |
| @@ -2483,6 +2483,20 @@ static inline void tcp_complete_cwr(struct sock *sk) | |||
| 2483 | tcp_ca_event(sk, CA_EVENT_COMPLETE_CWR); | 2483 | tcp_ca_event(sk, CA_EVENT_COMPLETE_CWR); |
| 2484 | } | 2484 | } |
| 2485 | 2485 | ||
| 2486 | static void tcp_try_keep_open(struct sock *sk) | ||
| 2487 | { | ||
| 2488 | struct tcp_sock *tp = tcp_sk(sk); | ||
| 2489 | int state = TCP_CA_Open; | ||
| 2490 | |||
| 2491 | if (tcp_left_out(tp) || tp->retrans_out || tp->undo_marker) | ||
| 2492 | state = TCP_CA_Disorder; | ||
| 2493 | |||
| 2494 | if (inet_csk(sk)->icsk_ca_state != state) { | ||
| 2495 | tcp_set_ca_state(sk, state); | ||
| 2496 | tp->high_seq = tp->snd_nxt; | ||
| 2497 | } | ||
| 2498 | } | ||
| 2499 | |||
| 2486 | static void tcp_try_to_open(struct sock *sk, int flag) | 2500 | static void tcp_try_to_open(struct sock *sk, int flag) |
| 2487 | { | 2501 | { |
| 2488 | struct tcp_sock *tp = tcp_sk(sk); | 2502 | struct tcp_sock *tp = tcp_sk(sk); |
| @@ -2496,15 +2510,7 @@ static void tcp_try_to_open(struct sock *sk, int flag) | |||
| 2496 | tcp_enter_cwr(sk, 1); | 2510 | tcp_enter_cwr(sk, 1); |
| 2497 | 2511 | ||
| 2498 | if (inet_csk(sk)->icsk_ca_state != TCP_CA_CWR) { | 2512 | if (inet_csk(sk)->icsk_ca_state != TCP_CA_CWR) { |
| 2499 | int state = TCP_CA_Open; | 2513 | tcp_try_keep_open(sk); |
| 2500 | |||
| 2501 | if (tcp_left_out(tp) || tp->retrans_out || tp->undo_marker) | ||
| 2502 | state = TCP_CA_Disorder; | ||
| 2503 | |||
| 2504 | if (inet_csk(sk)->icsk_ca_state != state) { | ||
| 2505 | tcp_set_ca_state(sk, state); | ||
| 2506 | tp->high_seq = tp->snd_nxt; | ||
| 2507 | } | ||
| 2508 | tcp_moderate_cwnd(tp); | 2514 | tcp_moderate_cwnd(tp); |
| 2509 | } else { | 2515 | } else { |
| 2510 | tcp_cwnd_down(sk, flag); | 2516 | tcp_cwnd_down(sk, flag); |
| @@ -3310,8 +3316,11 @@ no_queue: | |||
| 3310 | return 1; | 3316 | return 1; |
| 3311 | 3317 | ||
| 3312 | old_ack: | 3318 | old_ack: |
| 3313 | if (TCP_SKB_CB(skb)->sacked) | 3319 | if (TCP_SKB_CB(skb)->sacked) { |
| 3314 | tcp_sacktag_write_queue(sk, skb, prior_snd_una); | 3320 | tcp_sacktag_write_queue(sk, skb, prior_snd_una); |
| 3321 | if (icsk->icsk_ca_state == TCP_CA_Open) | ||
| 3322 | tcp_try_keep_open(sk); | ||
| 3323 | } | ||
| 3315 | 3324 | ||
| 3316 | uninteresting_ack: | 3325 | uninteresting_ack: |
| 3317 | SOCK_DEBUG(sk, "Ack %u out of %u:%u\n", ack, tp->snd_una, tp->snd_nxt); | 3326 | SOCK_DEBUG(sk, "Ack %u out of %u:%u\n", ack, tp->snd_una, tp->snd_nxt); |
diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index e399bde7813a..ad993ecb4810 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c | |||
| @@ -2131,6 +2131,8 @@ void tcp_send_active_reset(struct sock *sk, gfp_t priority) | |||
| 2131 | TCP_SKB_CB(skb)->when = tcp_time_stamp; | 2131 | TCP_SKB_CB(skb)->when = tcp_time_stamp; |
| 2132 | if (tcp_transmit_skb(sk, skb, 0, priority)) | 2132 | if (tcp_transmit_skb(sk, skb, 0, priority)) |
| 2133 | NET_INC_STATS(LINUX_MIB_TCPABORTFAILED); | 2133 | NET_INC_STATS(LINUX_MIB_TCPABORTFAILED); |
| 2134 | |||
| 2135 | TCP_INC_STATS(TCP_MIB_OUTRSTS); | ||
| 2134 | } | 2136 | } |
| 2135 | 2137 | ||
| 2136 | /* WARNING: This routine must only be called when we have already sent | 2138 | /* WARNING: This routine must only be called when we have already sent |
diff --git a/net/ipv4/tunnel4.c b/net/ipv4/tunnel4.c index d3b709a6f264..cb1f0e83830b 100644 --- a/net/ipv4/tunnel4.c +++ b/net/ipv4/tunnel4.c | |||
| @@ -97,7 +97,7 @@ static int tunnel64_rcv(struct sk_buff *skb) | |||
| 97 | { | 97 | { |
| 98 | struct xfrm_tunnel *handler; | 98 | struct xfrm_tunnel *handler; |
| 99 | 99 | ||
| 100 | if (!pskb_may_pull(skb, sizeof(struct iphdr))) | 100 | if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) |
| 101 | goto drop; | 101 | goto drop; |
| 102 | 102 | ||
| 103 | for (handler = tunnel64_handlers; handler; handler = handler->next) | 103 | for (handler = tunnel64_handlers; handler; handler = handler->next) |
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index db1cb7c96d63..56fcda3694ba 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
| @@ -420,7 +420,7 @@ void udp_err(struct sk_buff *skb, u32 info) | |||
| 420 | /* | 420 | /* |
| 421 | * Throw away all pending data and cancel the corking. Socket is locked. | 421 | * Throw away all pending data and cancel the corking. Socket is locked. |
| 422 | */ | 422 | */ |
| 423 | static void udp_flush_pending_frames(struct sock *sk) | 423 | void udp_flush_pending_frames(struct sock *sk) |
| 424 | { | 424 | { |
| 425 | struct udp_sock *up = udp_sk(sk); | 425 | struct udp_sock *up = udp_sk(sk); |
| 426 | 426 | ||
| @@ -430,6 +430,7 @@ static void udp_flush_pending_frames(struct sock *sk) | |||
| 430 | ip_flush_pending_frames(sk); | 430 | ip_flush_pending_frames(sk); |
| 431 | } | 431 | } |
| 432 | } | 432 | } |
| 433 | EXPORT_SYMBOL(udp_flush_pending_frames); | ||
| 433 | 434 | ||
| 434 | /** | 435 | /** |
| 435 | * udp4_hwcsum_outgoing - handle outgoing HW checksumming | 436 | * udp4_hwcsum_outgoing - handle outgoing HW checksumming |
diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 3a835578fd1c..147588f4c7c0 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c | |||
| @@ -731,8 +731,13 @@ static void ipv6_del_addr(struct inet6_ifaddr *ifp) | |||
| 731 | onlink = -1; | 731 | onlink = -1; |
| 732 | 732 | ||
| 733 | spin_lock(&ifa->lock); | 733 | spin_lock(&ifa->lock); |
| 734 | lifetime = min_t(unsigned long, | 734 | |
| 735 | ifa->valid_lft, 0x7fffffffUL/HZ); | 735 | lifetime = addrconf_timeout_fixup(ifa->valid_lft, HZ); |
| 736 | /* | ||
| 737 | * Note: Because this address is | ||
| 738 | * not permanent, lifetime < | ||
| 739 | * LONG_MAX / HZ here. | ||
| 740 | */ | ||
| 736 | if (time_before(expires, | 741 | if (time_before(expires, |
| 737 | ifa->tstamp + lifetime * HZ)) | 742 | ifa->tstamp + lifetime * HZ)) |
| 738 | expires = ifa->tstamp + lifetime * HZ; | 743 | expires = ifa->tstamp + lifetime * HZ; |
| @@ -1722,7 +1727,6 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) | |||
| 1722 | __u32 valid_lft; | 1727 | __u32 valid_lft; |
| 1723 | __u32 prefered_lft; | 1728 | __u32 prefered_lft; |
| 1724 | int addr_type; | 1729 | int addr_type; |
| 1725 | unsigned long rt_expires; | ||
| 1726 | struct inet6_dev *in6_dev; | 1730 | struct inet6_dev *in6_dev; |
| 1727 | 1731 | ||
| 1728 | pinfo = (struct prefix_info *) opt; | 1732 | pinfo = (struct prefix_info *) opt; |
| @@ -1764,28 +1768,23 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) | |||
| 1764 | * 2) Configure prefixes with the auto flag set | 1768 | * 2) Configure prefixes with the auto flag set |
| 1765 | */ | 1769 | */ |
| 1766 | 1770 | ||
| 1767 | if (valid_lft == INFINITY_LIFE_TIME) | 1771 | if (pinfo->onlink) { |
| 1768 | rt_expires = ~0UL; | 1772 | struct rt6_info *rt; |
| 1769 | else if (valid_lft >= 0x7FFFFFFF/HZ) { | 1773 | unsigned long rt_expires; |
| 1774 | |||
| 1770 | /* Avoid arithmetic overflow. Really, we could | 1775 | /* Avoid arithmetic overflow. Really, we could |
| 1771 | * save rt_expires in seconds, likely valid_lft, | 1776 | * save rt_expires in seconds, likely valid_lft, |
| 1772 | * but it would require division in fib gc, that it | 1777 | * but it would require division in fib gc, that it |
| 1773 | * not good. | 1778 | * not good. |
| 1774 | */ | 1779 | */ |
| 1775 | rt_expires = 0x7FFFFFFF - (0x7FFFFFFF % HZ); | 1780 | if (HZ > USER_HZ) |
| 1776 | } else | 1781 | rt_expires = addrconf_timeout_fixup(valid_lft, HZ); |
| 1777 | rt_expires = valid_lft * HZ; | 1782 | else |
| 1783 | rt_expires = addrconf_timeout_fixup(valid_lft, USER_HZ); | ||
| 1778 | 1784 | ||
| 1779 | /* | 1785 | if (addrconf_finite_timeout(rt_expires)) |
| 1780 | * We convert this (in jiffies) to clock_t later. | 1786 | rt_expires *= HZ; |
| 1781 | * Avoid arithmetic overflow there as well. | ||
| 1782 | * Overflow can happen only if HZ < USER_HZ. | ||
| 1783 | */ | ||
| 1784 | if (HZ < USER_HZ && ~rt_expires && rt_expires > 0x7FFFFFFF / USER_HZ) | ||
| 1785 | rt_expires = 0x7FFFFFFF / USER_HZ; | ||
| 1786 | 1787 | ||
| 1787 | if (pinfo->onlink) { | ||
| 1788 | struct rt6_info *rt; | ||
| 1789 | rt = rt6_lookup(dev_net(dev), &pinfo->prefix, NULL, | 1788 | rt = rt6_lookup(dev_net(dev), &pinfo->prefix, NULL, |
| 1790 | dev->ifindex, 1); | 1789 | dev->ifindex, 1); |
| 1791 | 1790 | ||
| @@ -1794,7 +1793,7 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) | |||
| 1794 | if (valid_lft == 0) { | 1793 | if (valid_lft == 0) { |
| 1795 | ip6_del_rt(rt); | 1794 | ip6_del_rt(rt); |
| 1796 | rt = NULL; | 1795 | rt = NULL; |
| 1797 | } else if (~rt_expires) { | 1796 | } else if (addrconf_finite_timeout(rt_expires)) { |
| 1798 | /* not infinity */ | 1797 | /* not infinity */ |
| 1799 | rt->rt6i_expires = jiffies + rt_expires; | 1798 | rt->rt6i_expires = jiffies + rt_expires; |
| 1800 | rt->rt6i_flags |= RTF_EXPIRES; | 1799 | rt->rt6i_flags |= RTF_EXPIRES; |
| @@ -1803,9 +1802,9 @@ void addrconf_prefix_rcv(struct net_device *dev, u8 *opt, int len) | |||
| 1803 | rt->rt6i_expires = 0; | 1802 | rt->rt6i_expires = 0; |
| 1804 | } | 1803 | } |
| 1805 | } else if (valid_lft) { | 1804 | } else if (valid_lft) { |
| 1806 | int flags = RTF_ADDRCONF | RTF_PREFIX_RT; | ||
| 1807 | clock_t expires = 0; | 1805 | clock_t expires = 0; |
| 1808 | if (~rt_expires) { | 1806 | int flags = RTF_ADDRCONF | RTF_PREFIX_RT; |
| 1807 | if (addrconf_finite_timeout(rt_expires)) { | ||
| 1809 | /* not infinity */ | 1808 | /* not infinity */ |
| 1810 | flags |= RTF_EXPIRES; | 1809 | flags |= RTF_EXPIRES; |
| 1811 | expires = jiffies_to_clock_t(rt_expires); | 1810 | expires = jiffies_to_clock_t(rt_expires); |
| @@ -2027,7 +2026,7 @@ err_exit: | |||
| 2027 | * Manual configuration of address on an interface | 2026 | * Manual configuration of address on an interface |
| 2028 | */ | 2027 | */ |
| 2029 | static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx, | 2028 | static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx, |
| 2030 | int plen, __u8 ifa_flags, __u32 prefered_lft, | 2029 | unsigned int plen, __u8 ifa_flags, __u32 prefered_lft, |
| 2031 | __u32 valid_lft) | 2030 | __u32 valid_lft) |
| 2032 | { | 2031 | { |
| 2033 | struct inet6_ifaddr *ifp; | 2032 | struct inet6_ifaddr *ifp; |
| @@ -2036,9 +2035,13 @@ static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx, | |||
| 2036 | int scope; | 2035 | int scope; |
| 2037 | u32 flags; | 2036 | u32 flags; |
| 2038 | clock_t expires; | 2037 | clock_t expires; |
| 2038 | unsigned long timeout; | ||
| 2039 | 2039 | ||
| 2040 | ASSERT_RTNL(); | 2040 | ASSERT_RTNL(); |
| 2041 | 2041 | ||
| 2042 | if (plen > 128) | ||
| 2043 | return -EINVAL; | ||
| 2044 | |||
| 2042 | /* check the lifetime */ | 2045 | /* check the lifetime */ |
| 2043 | if (!valid_lft || prefered_lft > valid_lft) | 2046 | if (!valid_lft || prefered_lft > valid_lft) |
| 2044 | return -EINVAL; | 2047 | return -EINVAL; |
| @@ -2052,22 +2055,23 @@ static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx, | |||
| 2052 | 2055 | ||
| 2053 | scope = ipv6_addr_scope(pfx); | 2056 | scope = ipv6_addr_scope(pfx); |
| 2054 | 2057 | ||
| 2055 | if (valid_lft == INFINITY_LIFE_TIME) { | 2058 | timeout = addrconf_timeout_fixup(valid_lft, HZ); |
| 2056 | ifa_flags |= IFA_F_PERMANENT; | 2059 | if (addrconf_finite_timeout(timeout)) { |
| 2057 | flags = 0; | 2060 | expires = jiffies_to_clock_t(timeout * HZ); |
| 2058 | expires = 0; | 2061 | valid_lft = timeout; |
| 2059 | } else { | ||
| 2060 | if (valid_lft >= 0x7FFFFFFF/HZ) | ||
| 2061 | valid_lft = 0x7FFFFFFF/HZ; | ||
| 2062 | flags = RTF_EXPIRES; | 2062 | flags = RTF_EXPIRES; |
| 2063 | expires = jiffies_to_clock_t(valid_lft * HZ); | 2063 | } else { |
| 2064 | expires = 0; | ||
| 2065 | flags = 0; | ||
| 2066 | ifa_flags |= IFA_F_PERMANENT; | ||
| 2064 | } | 2067 | } |
| 2065 | 2068 | ||
| 2066 | if (prefered_lft == 0) | 2069 | timeout = addrconf_timeout_fixup(prefered_lft, HZ); |
| 2067 | ifa_flags |= IFA_F_DEPRECATED; | 2070 | if (addrconf_finite_timeout(timeout)) { |
| 2068 | else if ((prefered_lft >= 0x7FFFFFFF/HZ) && | 2071 | if (timeout == 0) |
| 2069 | (prefered_lft != INFINITY_LIFE_TIME)) | 2072 | ifa_flags |= IFA_F_DEPRECATED; |
| 2070 | prefered_lft = 0x7FFFFFFF/HZ; | 2073 | prefered_lft = timeout; |
| 2074 | } | ||
| 2071 | 2075 | ||
| 2072 | ifp = ipv6_add_addr(idev, pfx, plen, scope, ifa_flags); | 2076 | ifp = ipv6_add_addr(idev, pfx, plen, scope, ifa_flags); |
| 2073 | 2077 | ||
| @@ -2095,12 +2099,15 @@ static int inet6_addr_add(struct net *net, int ifindex, struct in6_addr *pfx, | |||
| 2095 | } | 2099 | } |
| 2096 | 2100 | ||
| 2097 | static int inet6_addr_del(struct net *net, int ifindex, struct in6_addr *pfx, | 2101 | static int inet6_addr_del(struct net *net, int ifindex, struct in6_addr *pfx, |
| 2098 | int plen) | 2102 | unsigned int plen) |
| 2099 | { | 2103 | { |
| 2100 | struct inet6_ifaddr *ifp; | 2104 | struct inet6_ifaddr *ifp; |
| 2101 | struct inet6_dev *idev; | 2105 | struct inet6_dev *idev; |
| 2102 | struct net_device *dev; | 2106 | struct net_device *dev; |
| 2103 | 2107 | ||
| 2108 | if (plen > 128) | ||
| 2109 | return -EINVAL; | ||
| 2110 | |||
| 2104 | dev = __dev_get_by_index(net, ifindex); | 2111 | dev = __dev_get_by_index(net, ifindex); |
| 2105 | if (!dev) | 2112 | if (!dev) |
| 2106 | return -ENODEV; | 2113 | return -ENODEV; |
| @@ -3169,26 +3176,28 @@ static int inet6_addr_modify(struct inet6_ifaddr *ifp, u8 ifa_flags, | |||
| 3169 | { | 3176 | { |
| 3170 | u32 flags; | 3177 | u32 flags; |
| 3171 | clock_t expires; | 3178 | clock_t expires; |
| 3179 | unsigned long timeout; | ||
| 3172 | 3180 | ||
| 3173 | if (!valid_lft || (prefered_lft > valid_lft)) | 3181 | if (!valid_lft || (prefered_lft > valid_lft)) |
| 3174 | return -EINVAL; | 3182 | return -EINVAL; |
| 3175 | 3183 | ||
| 3176 | if (valid_lft == INFINITY_LIFE_TIME) { | 3184 | timeout = addrconf_timeout_fixup(valid_lft, HZ); |
| 3177 | ifa_flags |= IFA_F_PERMANENT; | 3185 | if (addrconf_finite_timeout(timeout)) { |
| 3178 | flags = 0; | 3186 | expires = jiffies_to_clock_t(timeout * HZ); |
| 3179 | expires = 0; | 3187 | valid_lft = timeout; |
| 3180 | } else { | ||
| 3181 | if (valid_lft >= 0x7FFFFFFF/HZ) | ||
| 3182 | valid_lft = 0x7FFFFFFF/HZ; | ||
| 3183 | flags = RTF_EXPIRES; | 3188 | flags = RTF_EXPIRES; |
| 3184 | expires = jiffies_to_clock_t(valid_lft * HZ); | 3189 | } else { |
| 3190 | expires = 0; | ||
| 3191 | flags = 0; | ||
| 3192 | ifa_flags |= IFA_F_PERMANENT; | ||
| 3185 | } | 3193 | } |
| 3186 | 3194 | ||
| 3187 | if (prefered_lft == 0) | 3195 | timeout = addrconf_timeout_fixup(prefered_lft, HZ); |
| 3188 | ifa_flags |= IFA_F_DEPRECATED; | 3196 | if (addrconf_finite_timeout(timeout)) { |
| 3189 | else if ((prefered_lft >= 0x7FFFFFFF/HZ) && | 3197 | if (timeout == 0) |
| 3190 | (prefered_lft != INFINITY_LIFE_TIME)) | 3198 | ifa_flags |= IFA_F_DEPRECATED; |
| 3191 | prefered_lft = 0x7FFFFFFF/HZ; | 3199 | prefered_lft = timeout; |
| 3200 | } | ||
| 3192 | 3201 | ||
| 3193 | spin_lock_bh(&ifp->lock); | 3202 | spin_lock_bh(&ifp->lock); |
| 3194 | ifp->flags = (ifp->flags & ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD | IFA_F_HOMEADDRESS)) | ifa_flags; | 3203 | ifp->flags = (ifp->flags & ~(IFA_F_DEPRECATED | IFA_F_PERMANENT | IFA_F_NODAD | IFA_F_HOMEADDRESS)) | ifa_flags; |
diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c index 94fa6ae77cfe..b9c2de84a8a2 100644 --- a/net/ipv6/datagram.c +++ b/net/ipv6/datagram.c | |||
| @@ -496,7 +496,8 @@ int datagram_recv_ctl(struct sock *sk, struct msghdr *msg, struct sk_buff *skb) | |||
| 496 | return 0; | 496 | return 0; |
| 497 | } | 497 | } |
| 498 | 498 | ||
| 499 | int datagram_send_ctl(struct msghdr *msg, struct flowi *fl, | 499 | int datagram_send_ctl(struct net *net, |
| 500 | struct msghdr *msg, struct flowi *fl, | ||
| 500 | struct ipv6_txoptions *opt, | 501 | struct ipv6_txoptions *opt, |
| 501 | int *hlimit, int *tclass) | 502 | int *hlimit, int *tclass) |
| 502 | { | 503 | { |
| @@ -509,7 +510,6 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl, | |||
| 509 | 510 | ||
| 510 | for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) { | 511 | for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) { |
| 511 | int addr_type; | 512 | int addr_type; |
| 512 | struct net_device *dev = NULL; | ||
| 513 | 513 | ||
| 514 | if (!CMSG_OK(msg, cmsg)) { | 514 | if (!CMSG_OK(msg, cmsg)) { |
| 515 | err = -EINVAL; | 515 | err = -EINVAL; |
| @@ -522,6 +522,9 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl, | |||
| 522 | switch (cmsg->cmsg_type) { | 522 | switch (cmsg->cmsg_type) { |
| 523 | case IPV6_PKTINFO: | 523 | case IPV6_PKTINFO: |
| 524 | case IPV6_2292PKTINFO: | 524 | case IPV6_2292PKTINFO: |
| 525 | { | ||
| 526 | struct net_device *dev = NULL; | ||
| 527 | |||
| 525 | if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct in6_pktinfo))) { | 528 | if (cmsg->cmsg_len < CMSG_LEN(sizeof(struct in6_pktinfo))) { |
| 526 | err = -EINVAL; | 529 | err = -EINVAL; |
| 527 | goto exit_f; | 530 | goto exit_f; |
| @@ -535,32 +538,32 @@ int datagram_send_ctl(struct msghdr *msg, struct flowi *fl, | |||
| 535 | fl->oif = src_info->ipi6_ifindex; | 538 | fl->oif = src_info->ipi6_ifindex; |
| 536 | } | 539 | } |
| 537 | 540 | ||
| 538 | addr_type = ipv6_addr_type(&src_info->ipi6_addr); | 541 | addr_type = __ipv6_addr_type(&src_info->ipi6_addr); |
| 539 | 542 | ||
| 540 | if (addr_type == IPV6_ADDR_ANY) | 543 | if (fl->oif) { |
| 541 | break; | 544 | dev = dev_get_by_index(net, fl->oif); |
| 545 | if (!dev) | ||
| 546 | return -ENODEV; | ||
| 547 | } else if (addr_type & IPV6_ADDR_LINKLOCAL) | ||
| 548 | return -EINVAL; | ||
| 542 | 549 | ||
| 543 | if (addr_type & IPV6_ADDR_LINKLOCAL) { | 550 | if (addr_type != IPV6_ADDR_ANY) { |
| 544 | if (!src_info->ipi6_ifindex) | 551 | int strict = __ipv6_addr_src_scope(addr_type) <= IPV6_ADDR_SCOPE_LINKLOCAL; |
| 545 | return -EINVAL; | 552 | if (!ipv6_chk_addr(net, &src_info->ipi6_addr, |
| 546 | else { | 553 | strict ? dev : NULL, 0)) |
| 547 | dev = dev_get_by_index(&init_net, src_info->ipi6_ifindex); | 554 | err = -EINVAL; |
| 548 | if (!dev) | 555 | else |
| 549 | return -ENODEV; | 556 | ipv6_addr_copy(&fl->fl6_src, &src_info->ipi6_addr); |
| 550 | } | ||
| 551 | } | ||
| 552 | if (!ipv6_chk_addr(&init_net, &src_info->ipi6_addr, | ||
| 553 | dev, 0)) { | ||
| 554 | if (dev) | ||
| 555 | dev_put(dev); | ||
| 556 | err = -EINVAL; | ||
| 557 | goto exit_f; | ||
| 558 | } | 557 | } |
| 558 | |||
| 559 | if (dev) | 559 | if (dev) |
| 560 | dev_put(dev); | 560 | dev_put(dev); |
| 561 | 561 | ||
| 562 | ipv6_addr_copy(&fl->fl6_src, &src_info->ipi6_addr); | 562 | if (err) |
| 563 | goto exit_f; | ||
| 564 | |||
| 563 | break; | 565 | break; |
| 566 | } | ||
| 564 | 567 | ||
| 565 | case IPV6_FLOWINFO: | 568 | case IPV6_FLOWINFO: |
| 566 | if (cmsg->cmsg_len < CMSG_LEN(4)) { | 569 | if (cmsg->cmsg_len < CMSG_LEN(4)) { |
diff --git a/net/ipv6/ip6_flowlabel.c b/net/ipv6/ip6_flowlabel.c index eb7a940310f4..37a4e777e347 100644 --- a/net/ipv6/ip6_flowlabel.c +++ b/net/ipv6/ip6_flowlabel.c | |||
| @@ -354,7 +354,7 @@ fl_create(struct net *net, struct in6_flowlabel_req *freq, char __user *optval, | |||
| 354 | msg.msg_control = (void*)(fl->opt+1); | 354 | msg.msg_control = (void*)(fl->opt+1); |
| 355 | flowi.oif = 0; | 355 | flowi.oif = 0; |
| 356 | 356 | ||
| 357 | err = datagram_send_ctl(&msg, &flowi, fl->opt, &junk, &junk); | 357 | err = datagram_send_ctl(net, &msg, &flowi, fl->opt, &junk, &junk); |
| 358 | if (err) | 358 | if (err) |
| 359 | goto done; | 359 | goto done; |
| 360 | err = -EINVAL; | 360 | err = -EINVAL; |
diff --git a/net/ipv6/ip6mr.c b/net/ipv6/ip6mr.c index 2de3c464fe75..14796181e8b5 100644 --- a/net/ipv6/ip6mr.c +++ b/net/ipv6/ip6mr.c | |||
| @@ -197,7 +197,7 @@ static int ip6mr_vif_seq_show(struct seq_file *seq, void *v) | |||
| 197 | const char *name = vif->dev ? vif->dev->name : "none"; | 197 | const char *name = vif->dev ? vif->dev->name : "none"; |
| 198 | 198 | ||
| 199 | seq_printf(seq, | 199 | seq_printf(seq, |
| 200 | "%2Zd %-10s %8ld %7ld %8ld %7ld %05X\n", | 200 | "%2td %-10s %8ld %7ld %8ld %7ld %05X\n", |
| 201 | vif - vif6_table, | 201 | vif - vif6_table, |
| 202 | name, vif->bytes_in, vif->pkt_in, | 202 | name, vif->bytes_in, vif->pkt_in, |
| 203 | vif->bytes_out, vif->pkt_out, | 203 | vif->bytes_out, vif->pkt_out, |
diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 56d55fecf8ec..26b83e512a09 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c | |||
| @@ -161,9 +161,17 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, | |||
| 161 | struct ipv6_txoptions *opt; | 161 | struct ipv6_txoptions *opt; |
| 162 | struct sk_buff *pktopt; | 162 | struct sk_buff *pktopt; |
| 163 | 163 | ||
| 164 | if (sk->sk_protocol != IPPROTO_UDP && | 164 | if (sk->sk_type == SOCK_RAW) |
| 165 | sk->sk_protocol != IPPROTO_UDPLITE && | 165 | break; |
| 166 | sk->sk_protocol != IPPROTO_TCP) | 166 | |
| 167 | if (sk->sk_protocol == IPPROTO_UDP || | ||
| 168 | sk->sk_protocol == IPPROTO_UDPLITE) { | ||
| 169 | struct udp_sock *up = udp_sk(sk); | ||
| 170 | if (up->pending == AF_INET6) { | ||
| 171 | retv = -EBUSY; | ||
| 172 | break; | ||
| 173 | } | ||
| 174 | } else if (sk->sk_protocol != IPPROTO_TCP) | ||
| 167 | break; | 175 | break; |
| 168 | 176 | ||
| 169 | if (sk->sk_state != TCP_ESTABLISHED) { | 177 | if (sk->sk_state != TCP_ESTABLISHED) { |
| @@ -416,7 +424,7 @@ sticky_done: | |||
| 416 | msg.msg_controllen = optlen; | 424 | msg.msg_controllen = optlen; |
| 417 | msg.msg_control = (void*)(opt+1); | 425 | msg.msg_control = (void*)(opt+1); |
| 418 | 426 | ||
| 419 | retv = datagram_send_ctl(&msg, &fl, opt, &junk, &junk); | 427 | retv = datagram_send_ctl(net, &msg, &fl, opt, &junk, &junk); |
| 420 | if (retv) | 428 | if (retv) |
| 421 | goto done; | 429 | goto done; |
| 422 | update: | 430 | update: |
| @@ -832,7 +840,7 @@ static int ipv6_getsockopt_sticky(struct sock *sk, struct ipv6_txoptions *opt, | |||
| 832 | len = min_t(unsigned int, len, ipv6_optlen(hdr)); | 840 | len = min_t(unsigned int, len, ipv6_optlen(hdr)); |
| 833 | if (copy_to_user(optval, hdr, len)) | 841 | if (copy_to_user(optval, hdr, len)) |
| 834 | return -EFAULT; | 842 | return -EFAULT; |
| 835 | return ipv6_optlen(hdr); | 843 | return len; |
| 836 | } | 844 | } |
| 837 | 845 | ||
| 838 | static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | 846 | static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, |
| @@ -975,6 +983,9 @@ static int do_ipv6_getsockopt(struct sock *sk, int level, int optname, | |||
| 975 | len = ipv6_getsockopt_sticky(sk, np->opt, | 983 | len = ipv6_getsockopt_sticky(sk, np->opt, |
| 976 | optname, optval, len); | 984 | optname, optval, len); |
| 977 | release_sock(sk); | 985 | release_sock(sk); |
| 986 | /* check if ipv6_getsockopt_sticky() returns err code */ | ||
| 987 | if (len < 0) | ||
| 988 | return len; | ||
| 978 | return put_user(len, optlen); | 989 | return put_user(len, optlen); |
| 979 | } | 990 | } |
| 980 | 991 | ||
diff --git a/net/ipv6/netfilter/nf_conntrack_reasm.c b/net/ipv6/netfilter/nf_conntrack_reasm.c index 2dccad48058c..e65e26e210ee 100644 --- a/net/ipv6/netfilter/nf_conntrack_reasm.c +++ b/net/ipv6/netfilter/nf_conntrack_reasm.c | |||
| @@ -209,7 +209,9 @@ fq_find(__be32 id, struct in6_addr *src, struct in6_addr *dst) | |||
| 209 | arg.dst = dst; | 209 | arg.dst = dst; |
| 210 | hash = ip6qhashfn(id, src, dst); | 210 | hash = ip6qhashfn(id, src, dst); |
| 211 | 211 | ||
| 212 | local_bh_disable(); | ||
| 212 | q = inet_frag_find(&nf_init_frags, &nf_frags, &arg, hash); | 213 | q = inet_frag_find(&nf_init_frags, &nf_frags, &arg, hash); |
| 214 | local_bh_enable(); | ||
| 213 | if (q == NULL) | 215 | if (q == NULL) |
| 214 | goto oom; | 216 | goto oom; |
| 215 | 217 | ||
| @@ -638,10 +640,10 @@ struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb) | |||
| 638 | goto ret_orig; | 640 | goto ret_orig; |
| 639 | } | 641 | } |
| 640 | 642 | ||
| 641 | spin_lock(&fq->q.lock); | 643 | spin_lock_bh(&fq->q.lock); |
| 642 | 644 | ||
| 643 | if (nf_ct_frag6_queue(fq, clone, fhdr, nhoff) < 0) { | 645 | if (nf_ct_frag6_queue(fq, clone, fhdr, nhoff) < 0) { |
| 644 | spin_unlock(&fq->q.lock); | 646 | spin_unlock_bh(&fq->q.lock); |
| 645 | pr_debug("Can't insert skb to queue\n"); | 647 | pr_debug("Can't insert skb to queue\n"); |
| 646 | fq_put(fq); | 648 | fq_put(fq); |
| 647 | goto ret_orig; | 649 | goto ret_orig; |
| @@ -653,7 +655,7 @@ struct sk_buff *nf_ct_frag6_gather(struct sk_buff *skb) | |||
| 653 | if (ret_skb == NULL) | 655 | if (ret_skb == NULL) |
| 654 | pr_debug("Can't reassemble fragmented packets\n"); | 656 | pr_debug("Can't reassemble fragmented packets\n"); |
| 655 | } | 657 | } |
| 656 | spin_unlock(&fq->q.lock); | 658 | spin_unlock_bh(&fq->q.lock); |
| 657 | 659 | ||
| 658 | fq_put(fq); | 660 | fq_put(fq); |
| 659 | return ret_skb; | 661 | return ret_skb; |
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c index 232e0dc45bf5..8fee9a15b2d3 100644 --- a/net/ipv6/raw.c +++ b/net/ipv6/raw.c | |||
| @@ -813,7 +813,7 @@ static int rawv6_sendmsg(struct kiocb *iocb, struct sock *sk, | |||
| 813 | memset(opt, 0, sizeof(struct ipv6_txoptions)); | 813 | memset(opt, 0, sizeof(struct ipv6_txoptions)); |
| 814 | opt->tot_len = sizeof(struct ipv6_txoptions); | 814 | opt->tot_len = sizeof(struct ipv6_txoptions); |
| 815 | 815 | ||
| 816 | err = datagram_send_ctl(msg, &fl, opt, &hlimit, &tclass); | 816 | err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, &tclass); |
| 817 | if (err < 0) { | 817 | if (err < 0) { |
| 818 | fl6_sock_release(flowlabel); | 818 | fl6_sock_release(flowlabel); |
| 819 | return err; | 819 | return err; |
| @@ -1164,6 +1164,14 @@ static void rawv6_close(struct sock *sk, long timeout) | |||
| 1164 | sk_common_release(sk); | 1164 | sk_common_release(sk); |
| 1165 | } | 1165 | } |
| 1166 | 1166 | ||
| 1167 | static int raw6_destroy(struct sock *sk) | ||
| 1168 | { | ||
| 1169 | lock_sock(sk); | ||
| 1170 | ip6_flush_pending_frames(sk); | ||
| 1171 | release_sock(sk); | ||
| 1172 | return 0; | ||
| 1173 | } | ||
| 1174 | |||
| 1167 | static int rawv6_init_sk(struct sock *sk) | 1175 | static int rawv6_init_sk(struct sock *sk) |
| 1168 | { | 1176 | { |
| 1169 | struct raw6_sock *rp = raw6_sk(sk); | 1177 | struct raw6_sock *rp = raw6_sk(sk); |
| @@ -1187,6 +1195,7 @@ struct proto rawv6_prot = { | |||
| 1187 | .name = "RAWv6", | 1195 | .name = "RAWv6", |
| 1188 | .owner = THIS_MODULE, | 1196 | .owner = THIS_MODULE, |
| 1189 | .close = rawv6_close, | 1197 | .close = rawv6_close, |
| 1198 | .destroy = raw6_destroy, | ||
| 1190 | .connect = ip6_datagram_connect, | 1199 | .connect = ip6_datagram_connect, |
| 1191 | .disconnect = udp_disconnect, | 1200 | .disconnect = udp_disconnect, |
| 1192 | .ioctl = rawv6_ioctl, | 1201 | .ioctl = rawv6_ioctl, |
diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 48534c6c0735..220cffe9e63b 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c | |||
| @@ -446,7 +446,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len, | |||
| 446 | struct route_info *rinfo = (struct route_info *) opt; | 446 | struct route_info *rinfo = (struct route_info *) opt; |
| 447 | struct in6_addr prefix_buf, *prefix; | 447 | struct in6_addr prefix_buf, *prefix; |
| 448 | unsigned int pref; | 448 | unsigned int pref; |
| 449 | u32 lifetime; | 449 | unsigned long lifetime; |
| 450 | struct rt6_info *rt; | 450 | struct rt6_info *rt; |
| 451 | 451 | ||
| 452 | if (len < sizeof(struct route_info)) { | 452 | if (len < sizeof(struct route_info)) { |
| @@ -472,13 +472,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len, | |||
| 472 | if (pref == ICMPV6_ROUTER_PREF_INVALID) | 472 | if (pref == ICMPV6_ROUTER_PREF_INVALID) |
| 473 | pref = ICMPV6_ROUTER_PREF_MEDIUM; | 473 | pref = ICMPV6_ROUTER_PREF_MEDIUM; |
| 474 | 474 | ||
| 475 | lifetime = ntohl(rinfo->lifetime); | 475 | lifetime = addrconf_timeout_fixup(ntohl(rinfo->lifetime), HZ); |
| 476 | if (lifetime == 0xffffffff) { | ||
| 477 | /* infinity */ | ||
| 478 | } else if (lifetime > 0x7fffffff/HZ - 1) { | ||
| 479 | /* Avoid arithmetic overflow */ | ||
| 480 | lifetime = 0x7fffffff/HZ - 1; | ||
| 481 | } | ||
| 482 | 476 | ||
| 483 | if (rinfo->length == 3) | 477 | if (rinfo->length == 3) |
| 484 | prefix = (struct in6_addr *)rinfo->prefix; | 478 | prefix = (struct in6_addr *)rinfo->prefix; |
| @@ -506,7 +500,7 @@ int rt6_route_rcv(struct net_device *dev, u8 *opt, int len, | |||
| 506 | (rt->rt6i_flags & ~RTF_PREF_MASK) | RTF_PREF(pref); | 500 | (rt->rt6i_flags & ~RTF_PREF_MASK) | RTF_PREF(pref); |
| 507 | 501 | ||
| 508 | if (rt) { | 502 | if (rt) { |
| 509 | if (lifetime == 0xffffffff) { | 503 | if (!addrconf_finite_timeout(lifetime)) { |
| 510 | rt->rt6i_flags &= ~RTF_EXPIRES; | 504 | rt->rt6i_flags &= ~RTF_EXPIRES; |
| 511 | } else { | 505 | } else { |
| 512 | rt->rt6i_expires = jiffies + HZ * lifetime; | 506 | rt->rt6i_expires = jiffies + HZ * lifetime; |
diff --git a/net/ipv6/tunnel6.c b/net/ipv6/tunnel6.c index 6323921b40be..669f280989c3 100644 --- a/net/ipv6/tunnel6.c +++ b/net/ipv6/tunnel6.c | |||
| @@ -109,7 +109,7 @@ static int tunnel46_rcv(struct sk_buff *skb) | |||
| 109 | { | 109 | { |
| 110 | struct xfrm6_tunnel *handler; | 110 | struct xfrm6_tunnel *handler; |
| 111 | 111 | ||
| 112 | if (!pskb_may_pull(skb, sizeof(struct ipv6hdr))) | 112 | if (!pskb_may_pull(skb, sizeof(struct iphdr))) |
| 113 | goto drop; | 113 | goto drop; |
| 114 | 114 | ||
| 115 | for (handler = tunnel46_handlers; handler; handler = handler->next) | 115 | for (handler = tunnel46_handlers; handler; handler = handler->next) |
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index 1fd784f3e2ec..dd309626ae9a 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c | |||
| @@ -534,7 +534,9 @@ static void udp_v6_flush_pending_frames(struct sock *sk) | |||
| 534 | { | 534 | { |
| 535 | struct udp_sock *up = udp_sk(sk); | 535 | struct udp_sock *up = udp_sk(sk); |
| 536 | 536 | ||
| 537 | if (up->pending) { | 537 | if (up->pending == AF_INET) |
| 538 | udp_flush_pending_frames(sk); | ||
| 539 | else if (up->pending) { | ||
| 538 | up->len = 0; | 540 | up->len = 0; |
| 539 | up->pending = 0; | 541 | up->pending = 0; |
| 540 | ip6_flush_pending_frames(sk); | 542 | ip6_flush_pending_frames(sk); |
| @@ -731,7 +733,7 @@ do_udp_sendmsg: | |||
| 731 | memset(opt, 0, sizeof(struct ipv6_txoptions)); | 733 | memset(opt, 0, sizeof(struct ipv6_txoptions)); |
| 732 | opt->tot_len = sizeof(*opt); | 734 | opt->tot_len = sizeof(*opt); |
| 733 | 735 | ||
| 734 | err = datagram_send_ctl(msg, &fl, opt, &hlimit, &tclass); | 736 | err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, &tclass); |
| 735 | if (err < 0) { | 737 | if (err < 0) { |
| 736 | fl6_sock_release(flowlabel); | 738 | fl6_sock_release(flowlabel); |
| 737 | return err; | 739 | return err; |
| @@ -848,12 +850,14 @@ do_append_data: | |||
| 848 | } else { | 850 | } else { |
| 849 | dst_release(dst); | 851 | dst_release(dst); |
| 850 | } | 852 | } |
| 853 | dst = NULL; | ||
| 851 | } | 854 | } |
| 852 | 855 | ||
| 853 | if (err > 0) | 856 | if (err > 0) |
| 854 | err = np->recverr ? net_xmit_errno(err) : 0; | 857 | err = np->recverr ? net_xmit_errno(err) : 0; |
| 855 | release_sock(sk); | 858 | release_sock(sk); |
| 856 | out: | 859 | out: |
| 860 | dst_release(dst); | ||
| 857 | fl6_sock_release(flowlabel); | 861 | fl6_sock_release(flowlabel); |
| 858 | if (!err) | 862 | if (!err) |
| 859 | return len; | 863 | return len; |
diff --git a/net/irda/af_irda.c b/net/irda/af_irda.c index ae54b20d0470..3eb5bcc75f99 100644 --- a/net/irda/af_irda.c +++ b/net/irda/af_irda.c | |||
| @@ -1093,11 +1093,6 @@ static int irda_create(struct net *net, struct socket *sock, int protocol) | |||
| 1093 | 1093 | ||
| 1094 | init_waitqueue_head(&self->query_wait); | 1094 | init_waitqueue_head(&self->query_wait); |
| 1095 | 1095 | ||
| 1096 | /* Initialise networking socket struct */ | ||
| 1097 | sock_init_data(sock, sk); /* Note : set sk->sk_refcnt to 1 */ | ||
| 1098 | sk->sk_family = PF_IRDA; | ||
| 1099 | sk->sk_protocol = protocol; | ||
| 1100 | |||
| 1101 | switch (sock->type) { | 1096 | switch (sock->type) { |
| 1102 | case SOCK_STREAM: | 1097 | case SOCK_STREAM: |
| 1103 | sock->ops = &irda_stream_ops; | 1098 | sock->ops = &irda_stream_ops; |
| @@ -1124,13 +1119,20 @@ static int irda_create(struct net *net, struct socket *sock, int protocol) | |||
| 1124 | self->max_sdu_size_rx = TTP_SAR_UNBOUND; | 1119 | self->max_sdu_size_rx = TTP_SAR_UNBOUND; |
| 1125 | break; | 1120 | break; |
| 1126 | default: | 1121 | default: |
| 1122 | sk_free(sk); | ||
| 1127 | return -ESOCKTNOSUPPORT; | 1123 | return -ESOCKTNOSUPPORT; |
| 1128 | } | 1124 | } |
| 1129 | break; | 1125 | break; |
| 1130 | default: | 1126 | default: |
| 1127 | sk_free(sk); | ||
| 1131 | return -ESOCKTNOSUPPORT; | 1128 | return -ESOCKTNOSUPPORT; |
| 1132 | } | 1129 | } |
| 1133 | 1130 | ||
| 1131 | /* Initialise networking socket struct */ | ||
| 1132 | sock_init_data(sock, sk); /* Note : set sk->sk_refcnt to 1 */ | ||
| 1133 | sk->sk_family = PF_IRDA; | ||
| 1134 | sk->sk_protocol = protocol; | ||
| 1135 | |||
| 1134 | /* Register as a client with IrLMP */ | 1136 | /* Register as a client with IrLMP */ |
| 1135 | self->ckey = irlmp_register_client(0, NULL, NULL, NULL); | 1137 | self->ckey = irlmp_register_client(0, NULL, NULL, NULL); |
| 1136 | self->mask.word = 0xffff; | 1138 | self->mask.word = 0xffff; |
diff --git a/net/llc/llc_sap.c b/net/llc/llc_sap.c index e2ddde755019..008de1fc42ca 100644 --- a/net/llc/llc_sap.c +++ b/net/llc/llc_sap.c | |||
| @@ -286,12 +286,14 @@ void llc_build_and_send_xid_pkt(struct llc_sap *sap, struct sk_buff *skb, | |||
| 286 | * | 286 | * |
| 287 | * Sends received pdus to the sap state machine. | 287 | * Sends received pdus to the sap state machine. |
| 288 | */ | 288 | */ |
| 289 | static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb) | 289 | static void llc_sap_rcv(struct llc_sap *sap, struct sk_buff *skb, |
| 290 | struct sock *sk) | ||
| 290 | { | 291 | { |
| 291 | struct llc_sap_state_ev *ev = llc_sap_ev(skb); | 292 | struct llc_sap_state_ev *ev = llc_sap_ev(skb); |
| 292 | 293 | ||
| 293 | ev->type = LLC_SAP_EV_TYPE_PDU; | 294 | ev->type = LLC_SAP_EV_TYPE_PDU; |
| 294 | ev->reason = 0; | 295 | ev->reason = 0; |
| 296 | skb->sk = sk; | ||
| 295 | llc_sap_state_process(sap, skb); | 297 | llc_sap_state_process(sap, skb); |
| 296 | } | 298 | } |
| 297 | 299 | ||
| @@ -360,8 +362,7 @@ static void llc_sap_mcast(struct llc_sap *sap, | |||
| 360 | break; | 362 | break; |
| 361 | 363 | ||
| 362 | sock_hold(sk); | 364 | sock_hold(sk); |
| 363 | skb_set_owner_r(skb1, sk); | 365 | llc_sap_rcv(sap, skb1, sk); |
| 364 | llc_sap_rcv(sap, skb1); | ||
| 365 | sock_put(sk); | 366 | sock_put(sk); |
| 366 | } | 367 | } |
| 367 | read_unlock_bh(&sap->sk_list.lock); | 368 | read_unlock_bh(&sap->sk_list.lock); |
| @@ -381,8 +382,7 @@ void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb) | |||
| 381 | } else { | 382 | } else { |
| 382 | struct sock *sk = llc_lookup_dgram(sap, &laddr); | 383 | struct sock *sk = llc_lookup_dgram(sap, &laddr); |
| 383 | if (sk) { | 384 | if (sk) { |
| 384 | skb_set_owner_r(skb, sk); | 385 | llc_sap_rcv(sap, skb, sk); |
| 385 | llc_sap_rcv(sap, skb); | ||
| 386 | sock_put(sk); | 386 | sock_put(sk); |
| 387 | } else | 387 | } else |
| 388 | kfree_skb(skb); | 388 | kfree_skb(skb); |
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index 699d97b8de5e..a9fce4afdf21 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c | |||
| @@ -672,7 +672,7 @@ static int ieee80211_add_station(struct wiphy *wiphy, struct net_device *dev, | |||
| 672 | if (params->vlan) { | 672 | if (params->vlan) { |
| 673 | sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); | 673 | sdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); |
| 674 | 674 | ||
| 675 | if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN || | 675 | if (sdata->vif.type != IEEE80211_IF_TYPE_VLAN && |
| 676 | sdata->vif.type != IEEE80211_IF_TYPE_AP) | 676 | sdata->vif.type != IEEE80211_IF_TYPE_AP) |
| 677 | return -EINVAL; | 677 | return -EINVAL; |
| 678 | } else | 678 | } else |
| @@ -760,7 +760,7 @@ static int ieee80211_change_station(struct wiphy *wiphy, | |||
| 760 | if (params->vlan && params->vlan != sta->sdata->dev) { | 760 | if (params->vlan && params->vlan != sta->sdata->dev) { |
| 761 | vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); | 761 | vlansdata = IEEE80211_DEV_TO_SUB_IF(params->vlan); |
| 762 | 762 | ||
| 763 | if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN || | 763 | if (vlansdata->vif.type != IEEE80211_IF_TYPE_VLAN && |
| 764 | vlansdata->vif.type != IEEE80211_IF_TYPE_AP) { | 764 | vlansdata->vif.type != IEEE80211_IF_TYPE_AP) { |
| 765 | rcu_read_unlock(); | 765 | rcu_read_unlock(); |
| 766 | return -EINVAL; | 766 | return -EINVAL; |
diff --git a/net/mac80211/main.c b/net/mac80211/main.c index 915afadb0602..5c876450b14c 100644 --- a/net/mac80211/main.c +++ b/net/mac80211/main.c | |||
| @@ -1313,7 +1313,7 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local, | |||
| 1313 | /* | 1313 | /* |
| 1314 | * Clear the TX filter mask for this STA when sending the next | 1314 | * Clear the TX filter mask for this STA when sending the next |
| 1315 | * packet. If the STA went to power save mode, this will happen | 1315 | * packet. If the STA went to power save mode, this will happen |
| 1316 | * happen when it wakes up for the next time. | 1316 | * when it wakes up for the next time. |
| 1317 | */ | 1317 | */ |
| 1318 | sta->flags |= WLAN_STA_CLEAR_PS_FILT; | 1318 | sta->flags |= WLAN_STA_CLEAR_PS_FILT; |
| 1319 | 1319 | ||
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 7cfd12e0d1e2..841278f1df8e 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
| @@ -1325,7 +1325,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev, | |||
| 1325 | 1325 | ||
| 1326 | /* prepare reordering buffer */ | 1326 | /* prepare reordering buffer */ |
| 1327 | tid_agg_rx->reorder_buf = | 1327 | tid_agg_rx->reorder_buf = |
| 1328 | kmalloc(buf_size * sizeof(struct sk_buf *), GFP_ATOMIC); | 1328 | kmalloc(buf_size * sizeof(struct sk_buff *), GFP_ATOMIC); |
| 1329 | if (!tid_agg_rx->reorder_buf) { | 1329 | if (!tid_agg_rx->reorder_buf) { |
| 1330 | if (net_ratelimit()) | 1330 | if (net_ratelimit()) |
| 1331 | printk(KERN_ERR "can not allocate reordering buffer " | 1331 | printk(KERN_ERR "can not allocate reordering buffer " |
| @@ -1334,7 +1334,7 @@ static void ieee80211_sta_process_addba_request(struct net_device *dev, | |||
| 1334 | goto end; | 1334 | goto end; |
| 1335 | } | 1335 | } |
| 1336 | memset(tid_agg_rx->reorder_buf, 0, | 1336 | memset(tid_agg_rx->reorder_buf, 0, |
| 1337 | buf_size * sizeof(struct sk_buf *)); | 1337 | buf_size * sizeof(struct sk_buff *)); |
| 1338 | 1338 | ||
| 1339 | if (local->ops->ampdu_action) | 1339 | if (local->ops->ampdu_action) |
| 1340 | ret = local->ops->ampdu_action(hw, IEEE80211_AMPDU_RX_START, | 1340 | ret = local->ops->ampdu_action(hw, IEEE80211_AMPDU_RX_START, |
| @@ -1614,7 +1614,7 @@ void sta_addba_resp_timer_expired(unsigned long data) | |||
| 1614 | * only one argument, and both sta_info and TID are needed, so init | 1614 | * only one argument, and both sta_info and TID are needed, so init |
| 1615 | * flow in sta_info_create gives the TID as data, while the timer_to_id | 1615 | * flow in sta_info_create gives the TID as data, while the timer_to_id |
| 1616 | * array gives the sta through container_of */ | 1616 | * array gives the sta through container_of */ |
| 1617 | u16 tid = *(int *)data; | 1617 | u16 tid = *(u8 *)data; |
| 1618 | struct sta_info *temp_sta = container_of((void *)data, | 1618 | struct sta_info *temp_sta = container_of((void *)data, |
| 1619 | struct sta_info, timer_to_tid[tid]); | 1619 | struct sta_info, timer_to_tid[tid]); |
| 1620 | 1620 | ||
| @@ -1662,7 +1662,7 @@ timer_expired_exit: | |||
| 1662 | void sta_rx_agg_session_timer_expired(unsigned long data) | 1662 | void sta_rx_agg_session_timer_expired(unsigned long data) |
| 1663 | { | 1663 | { |
| 1664 | /* not an elegant detour, but there is no choice as the timer passes | 1664 | /* not an elegant detour, but there is no choice as the timer passes |
| 1665 | * only one argument, and verious sta_info are needed here, so init | 1665 | * only one argument, and various sta_info are needed here, so init |
| 1666 | * flow in sta_info_create gives the TID as data, while the timer_to_id | 1666 | * flow in sta_info_create gives the TID as data, while the timer_to_id |
| 1667 | * array gives the sta through container_of */ | 1667 | * array gives the sta through container_of */ |
| 1668 | u8 *ptid = (u8 *)data; | 1668 | u8 *ptid = (u8 *)data; |
| @@ -2479,8 +2479,6 @@ static int ieee80211_sta_join_ibss(struct net_device *dev, | |||
| 2479 | ifsta->state = IEEE80211_IBSS_JOINED; | 2479 | ifsta->state = IEEE80211_IBSS_JOINED; |
| 2480 | mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL); | 2480 | mod_timer(&ifsta->timer, jiffies + IEEE80211_IBSS_MERGE_INTERVAL); |
| 2481 | 2481 | ||
| 2482 | ieee80211_rx_bss_put(dev, bss); | ||
| 2483 | |||
| 2484 | return res; | 2482 | return res; |
| 2485 | } | 2483 | } |
| 2486 | 2484 | ||
| @@ -3523,6 +3521,7 @@ static int ieee80211_sta_create_ibss(struct net_device *dev, | |||
| 3523 | struct ieee80211_supported_band *sband; | 3521 | struct ieee80211_supported_band *sband; |
| 3524 | u8 bssid[ETH_ALEN], *pos; | 3522 | u8 bssid[ETH_ALEN], *pos; |
| 3525 | int i; | 3523 | int i; |
| 3524 | int ret; | ||
| 3526 | DECLARE_MAC_BUF(mac); | 3525 | DECLARE_MAC_BUF(mac); |
| 3527 | 3526 | ||
| 3528 | #if 0 | 3527 | #if 0 |
| @@ -3567,7 +3566,9 @@ static int ieee80211_sta_create_ibss(struct net_device *dev, | |||
| 3567 | *pos++ = (u8) (rate / 5); | 3566 | *pos++ = (u8) (rate / 5); |
| 3568 | } | 3567 | } |
| 3569 | 3568 | ||
| 3570 | return ieee80211_sta_join_ibss(dev, ifsta, bss); | 3569 | ret = ieee80211_sta_join_ibss(dev, ifsta, bss); |
| 3570 | ieee80211_rx_bss_put(dev, bss); | ||
| 3571 | return ret; | ||
| 3571 | } | 3572 | } |
| 3572 | 3573 | ||
| 3573 | 3574 | ||
| @@ -3615,10 +3616,13 @@ static int ieee80211_sta_find_ibss(struct net_device *dev, | |||
| 3615 | (bss = ieee80211_rx_bss_get(dev, bssid, | 3616 | (bss = ieee80211_rx_bss_get(dev, bssid, |
| 3616 | local->hw.conf.channel->center_freq, | 3617 | local->hw.conf.channel->center_freq, |
| 3617 | ifsta->ssid, ifsta->ssid_len))) { | 3618 | ifsta->ssid, ifsta->ssid_len))) { |
| 3619 | int ret; | ||
| 3618 | printk(KERN_DEBUG "%s: Selected IBSS BSSID %s" | 3620 | printk(KERN_DEBUG "%s: Selected IBSS BSSID %s" |
| 3619 | " based on configured SSID\n", | 3621 | " based on configured SSID\n", |
| 3620 | dev->name, print_mac(mac, bssid)); | 3622 | dev->name, print_mac(mac, bssid)); |
| 3621 | return ieee80211_sta_join_ibss(dev, ifsta, bss); | 3623 | ret = ieee80211_sta_join_ibss(dev, ifsta, bss); |
| 3624 | ieee80211_rx_bss_put(dev, bss); | ||
| 3625 | return ret; | ||
| 3622 | } | 3626 | } |
| 3623 | #ifdef CONFIG_MAC80211_IBSS_DEBUG | 3627 | #ifdef CONFIG_MAC80211_IBSS_DEBUG |
| 3624 | printk(KERN_DEBUG " did not try to join ibss\n"); | 3628 | printk(KERN_DEBUG " did not try to join ibss\n"); |
| @@ -4095,18 +4099,17 @@ ieee80211_sta_scan_result(struct net_device *dev, | |||
| 4095 | 4099 | ||
| 4096 | memset(&iwe, 0, sizeof(iwe)); | 4100 | memset(&iwe, 0, sizeof(iwe)); |
| 4097 | iwe.cmd = SIOCGIWFREQ; | 4101 | iwe.cmd = SIOCGIWFREQ; |
| 4098 | iwe.u.freq.m = bss->freq; | 4102 | iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); |
| 4099 | iwe.u.freq.e = 6; | 4103 | iwe.u.freq.e = 0; |
| 4100 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, | 4104 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, |
| 4101 | IW_EV_FREQ_LEN); | 4105 | IW_EV_FREQ_LEN); |
| 4102 | 4106 | ||
| 4103 | memset(&iwe, 0, sizeof(iwe)); | 4107 | memset(&iwe, 0, sizeof(iwe)); |
| 4104 | iwe.cmd = SIOCGIWFREQ; | 4108 | iwe.cmd = SIOCGIWFREQ; |
| 4105 | iwe.u.freq.m = ieee80211_frequency_to_channel(bss->freq); | 4109 | iwe.u.freq.m = bss->freq; |
| 4106 | iwe.u.freq.e = 0; | 4110 | iwe.u.freq.e = 6; |
| 4107 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, | 4111 | current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, |
| 4108 | IW_EV_FREQ_LEN); | 4112 | IW_EV_FREQ_LEN); |
| 4109 | |||
| 4110 | memset(&iwe, 0, sizeof(iwe)); | 4113 | memset(&iwe, 0, sizeof(iwe)); |
| 4111 | iwe.cmd = IWEVQUAL; | 4114 | iwe.cmd = IWEVQUAL; |
| 4112 | iwe.u.qual.qual = bss->signal; | 4115 | iwe.u.qual.qual = bss->signal; |
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 1958bfb361c6..0941e5d6a522 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
| @@ -1091,7 +1091,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx) | |||
| 1091 | u16 fc, hdrlen, ethertype; | 1091 | u16 fc, hdrlen, ethertype; |
| 1092 | u8 *payload; | 1092 | u8 *payload; |
| 1093 | u8 dst[ETH_ALEN]; | 1093 | u8 dst[ETH_ALEN]; |
| 1094 | u8 src[ETH_ALEN]; | 1094 | u8 src[ETH_ALEN] __aligned(2); |
| 1095 | struct sk_buff *skb = rx->skb; | 1095 | struct sk_buff *skb = rx->skb; |
| 1096 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 1096 | struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| 1097 | DECLARE_MAC_BUF(mac); | 1097 | DECLARE_MAC_BUF(mac); |
| @@ -1234,7 +1234,7 @@ ieee80211_data_to_8023(struct ieee80211_rx_data *rx) | |||
| 1234 | */ | 1234 | */ |
| 1235 | static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx) | 1235 | static bool ieee80211_frame_allowed(struct ieee80211_rx_data *rx) |
| 1236 | { | 1236 | { |
| 1237 | static const u8 pae_group_addr[ETH_ALEN] | 1237 | static const u8 pae_group_addr[ETH_ALEN] __aligned(2) |
| 1238 | = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 }; | 1238 | = { 0x01, 0x80, 0xC2, 0x00, 0x00, 0x03 }; |
| 1239 | struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; | 1239 | struct ethhdr *ehdr = (struct ethhdr *) rx->skb->data; |
| 1240 | 1240 | ||
diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 131e9e6c8a32..4e97b266f907 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c | |||
| @@ -34,11 +34,11 @@ void *mac80211_wiphy_privid = &mac80211_wiphy_privid; | |||
| 34 | 34 | ||
| 35 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ | 35 | /* See IEEE 802.1H for LLC/SNAP encapsulation/decapsulation */ |
| 36 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ | 36 | /* Ethernet-II snap header (RFC1042 for most EtherTypes) */ |
| 37 | const unsigned char rfc1042_header[] = | 37 | const unsigned char rfc1042_header[] __aligned(2) = |
| 38 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; | 38 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0x00 }; |
| 39 | 39 | ||
| 40 | /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ | 40 | /* Bridge-Tunnel header (for EtherTypes ETH_P_AARP and ETH_P_IPX) */ |
| 41 | const unsigned char bridge_tunnel_header[] = | 41 | const unsigned char bridge_tunnel_header[] __aligned(2) = |
| 42 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; | 42 | { 0xaa, 0xaa, 0x03, 0x00, 0x00, 0xf8 }; |
| 43 | 43 | ||
| 44 | 44 | ||
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c index 457ebf9e85ae..8311bb24f9f3 100644 --- a/net/mac80211/wext.c +++ b/net/mac80211/wext.c | |||
| @@ -489,9 +489,14 @@ static int ieee80211_ioctl_giwap(struct net_device *dev, | |||
| 489 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); | 489 | sdata = IEEE80211_DEV_TO_SUB_IF(dev); |
| 490 | if (sdata->vif.type == IEEE80211_IF_TYPE_STA || | 490 | if (sdata->vif.type == IEEE80211_IF_TYPE_STA || |
| 491 | sdata->vif.type == IEEE80211_IF_TYPE_IBSS) { | 491 | sdata->vif.type == IEEE80211_IF_TYPE_IBSS) { |
| 492 | ap_addr->sa_family = ARPHRD_ETHER; | 492 | if (sdata->u.sta.state == IEEE80211_ASSOCIATED) { |
| 493 | memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN); | 493 | ap_addr->sa_family = ARPHRD_ETHER; |
| 494 | return 0; | 494 | memcpy(&ap_addr->sa_data, sdata->u.sta.bssid, ETH_ALEN); |
| 495 | return 0; | ||
| 496 | } else { | ||
| 497 | memset(&ap_addr->sa_data, 0, ETH_ALEN); | ||
| 498 | return 0; | ||
| 499 | } | ||
| 495 | } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) { | 500 | } else if (sdata->vif.type == IEEE80211_IF_TYPE_WDS) { |
| 496 | ap_addr->sa_family = ARPHRD_ETHER; | 501 | ap_addr->sa_family = ARPHRD_ETHER; |
| 497 | memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN); | 502 | memcpy(&ap_addr->sa_data, sdata->u.wds.remote_addr, ETH_ALEN); |
diff --git a/net/netfilter/nf_conntrack_expect.c b/net/netfilter/nf_conntrack_expect.c index e31beeb33b2b..e8f0dead267f 100644 --- a/net/netfilter/nf_conntrack_expect.c +++ b/net/netfilter/nf_conntrack_expect.c | |||
| @@ -587,10 +587,10 @@ int __init nf_conntrack_expect_init(void) | |||
| 587 | return 0; | 587 | return 0; |
| 588 | 588 | ||
| 589 | err3: | 589 | err3: |
| 590 | kmem_cache_destroy(nf_ct_expect_cachep); | ||
| 591 | err2: | ||
| 590 | nf_ct_free_hashtable(nf_ct_expect_hash, nf_ct_expect_vmalloc, | 592 | nf_ct_free_hashtable(nf_ct_expect_hash, nf_ct_expect_vmalloc, |
| 591 | nf_ct_expect_hsize); | 593 | nf_ct_expect_hsize); |
| 592 | err2: | ||
| 593 | kmem_cache_destroy(nf_ct_expect_cachep); | ||
| 594 | err1: | 594 | err1: |
| 595 | return err; | 595 | return err; |
| 596 | } | 596 | } |
diff --git a/net/netfilter/xt_connlimit.c b/net/netfilter/xt_connlimit.c index 2e89a00df92c..70907f6baac3 100644 --- a/net/netfilter/xt_connlimit.c +++ b/net/netfilter/xt_connlimit.c | |||
| @@ -73,7 +73,8 @@ connlimit_iphash6(const union nf_inet_addr *addr, | |||
| 73 | static inline bool already_closed(const struct nf_conn *conn) | 73 | static inline bool already_closed(const struct nf_conn *conn) |
| 74 | { | 74 | { |
| 75 | if (nf_ct_protonum(conn) == IPPROTO_TCP) | 75 | if (nf_ct_protonum(conn) == IPPROTO_TCP) |
| 76 | return conn->proto.tcp.state == TCP_CONNTRACK_TIME_WAIT; | 76 | return conn->proto.tcp.state == TCP_CONNTRACK_TIME_WAIT || |
| 77 | conn->proto.tcp.state == TCP_CONNTRACK_CLOSE; | ||
| 77 | else | 78 | else |
| 78 | return 0; | 79 | return 0; |
| 79 | } | 80 | } |
diff --git a/net/netlink/attr.c b/net/netlink/attr.c index feb326f4a752..47bbf45ae5d7 100644 --- a/net/netlink/attr.c +++ b/net/netlink/attr.c | |||
| @@ -400,13 +400,13 @@ void __nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data) | |||
| 400 | * @attrlen: length of attribute payload | 400 | * @attrlen: length of attribute payload |
| 401 | * @data: head of attribute payload | 401 | * @data: head of attribute payload |
| 402 | * | 402 | * |
| 403 | * Returns -1 if the tailroom of the skb is insufficient to store | 403 | * Returns -EMSGSIZE if the tailroom of the skb is insufficient to store |
| 404 | * the attribute header and payload. | 404 | * the attribute header and payload. |
| 405 | */ | 405 | */ |
| 406 | int nla_put(struct sk_buff *skb, int attrtype, int attrlen, const void *data) | 406 | int nla_put(struct sk_buff *skb, int attrtype, int attrlen, const void *data) |
| 407 | { | 407 | { |
| 408 | if (unlikely(skb_tailroom(skb) < nla_total_size(attrlen))) | 408 | if (unlikely(skb_tailroom(skb) < nla_total_size(attrlen))) |
| 409 | return -1; | 409 | return -EMSGSIZE; |
| 410 | 410 | ||
| 411 | __nla_put(skb, attrtype, attrlen, data); | 411 | __nla_put(skb, attrtype, attrlen, data); |
| 412 | return 0; | 412 | return 0; |
| @@ -418,13 +418,13 @@ int nla_put(struct sk_buff *skb, int attrtype, int attrlen, const void *data) | |||
| 418 | * @attrlen: length of attribute payload | 418 | * @attrlen: length of attribute payload |
| 419 | * @data: head of attribute payload | 419 | * @data: head of attribute payload |
| 420 | * | 420 | * |
| 421 | * Returns -1 if the tailroom of the skb is insufficient to store | 421 | * Returns -EMSGSIZE if the tailroom of the skb is insufficient to store |
| 422 | * the attribute payload. | 422 | * the attribute payload. |
| 423 | */ | 423 | */ |
| 424 | int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data) | 424 | int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data) |
| 425 | { | 425 | { |
| 426 | if (unlikely(skb_tailroom(skb) < NLA_ALIGN(attrlen))) | 426 | if (unlikely(skb_tailroom(skb) < NLA_ALIGN(attrlen))) |
| 427 | return -1; | 427 | return -EMSGSIZE; |
| 428 | 428 | ||
| 429 | __nla_put_nohdr(skb, attrlen, data); | 429 | __nla_put_nohdr(skb, attrlen, data); |
| 430 | return 0; | 430 | return 0; |
| @@ -436,13 +436,13 @@ int nla_put_nohdr(struct sk_buff *skb, int attrlen, const void *data) | |||
| 436 | * @attrlen: length of attribute payload | 436 | * @attrlen: length of attribute payload |
| 437 | * @data: head of attribute payload | 437 | * @data: head of attribute payload |
| 438 | * | 438 | * |
| 439 | * Returns -1 if the tailroom of the skb is insufficient to store | 439 | * Returns -EMSGSIZE if the tailroom of the skb is insufficient to store |
| 440 | * the attribute payload. | 440 | * the attribute payload. |
| 441 | */ | 441 | */ |
| 442 | int nla_append(struct sk_buff *skb, int attrlen, const void *data) | 442 | int nla_append(struct sk_buff *skb, int attrlen, const void *data) |
| 443 | { | 443 | { |
| 444 | if (unlikely(skb_tailroom(skb) < NLA_ALIGN(attrlen))) | 444 | if (unlikely(skb_tailroom(skb) < NLA_ALIGN(attrlen))) |
| 445 | return -1; | 445 | return -EMSGSIZE; |
| 446 | 446 | ||
| 447 | memcpy(skb_put(skb, attrlen), data, attrlen); | 447 | memcpy(skb_put(skb, attrlen), data, attrlen); |
| 448 | return 0; | 448 | return 0; |
diff --git a/net/netlink/genetlink.c b/net/netlink/genetlink.c index d16929c9b4bc..f5aa23c3e886 100644 --- a/net/netlink/genetlink.c +++ b/net/netlink/genetlink.c | |||
| @@ -554,7 +554,8 @@ static int ctrl_fill_info(struct genl_family *family, u32 pid, u32 seq, | |||
| 554 | return genlmsg_end(skb, hdr); | 554 | return genlmsg_end(skb, hdr); |
| 555 | 555 | ||
| 556 | nla_put_failure: | 556 | nla_put_failure: |
| 557 | return genlmsg_cancel(skb, hdr); | 557 | genlmsg_cancel(skb, hdr); |
| 558 | return -EMSGSIZE; | ||
| 558 | } | 559 | } |
| 559 | 560 | ||
| 560 | static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid, | 561 | static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid, |
| @@ -590,7 +591,8 @@ static int ctrl_fill_mcgrp_info(struct genl_multicast_group *grp, u32 pid, | |||
| 590 | return genlmsg_end(skb, hdr); | 591 | return genlmsg_end(skb, hdr); |
| 591 | 592 | ||
| 592 | nla_put_failure: | 593 | nla_put_failure: |
| 593 | return genlmsg_cancel(skb, hdr); | 594 | genlmsg_cancel(skb, hdr); |
| 595 | return -EMSGSIZE; | ||
| 594 | } | 596 | } |
| 595 | 597 | ||
| 596 | static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) | 598 | static int ctrl_dumpfamily(struct sk_buff *skb, struct netlink_callback *cb) |
diff --git a/net/sched/sch_dsmark.c b/net/sched/sch_dsmark.c index 0df911fd67b1..64465bacbe79 100644 --- a/net/sched/sch_dsmark.c +++ b/net/sched/sch_dsmark.c | |||
| @@ -444,7 +444,8 @@ static int dsmark_dump_class(struct Qdisc *sch, unsigned long cl, | |||
| 444 | return nla_nest_end(skb, opts); | 444 | return nla_nest_end(skb, opts); |
| 445 | 445 | ||
| 446 | nla_put_failure: | 446 | nla_put_failure: |
| 447 | return nla_nest_cancel(skb, opts); | 447 | nla_nest_cancel(skb, opts); |
| 448 | return -EMSGSIZE; | ||
| 448 | } | 449 | } |
| 449 | 450 | ||
| 450 | static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb) | 451 | static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb) |
| @@ -466,7 +467,8 @@ static int dsmark_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
| 466 | return nla_nest_end(skb, opts); | 467 | return nla_nest_end(skb, opts); |
| 467 | 468 | ||
| 468 | nla_put_failure: | 469 | nla_put_failure: |
| 469 | return nla_nest_cancel(skb, opts); | 470 | nla_nest_cancel(skb, opts); |
| 471 | return -EMSGSIZE; | ||
| 470 | } | 472 | } |
| 471 | 473 | ||
| 472 | static const struct Qdisc_class_ops dsmark_class_ops = { | 474 | static const struct Qdisc_class_ops dsmark_class_ops = { |
diff --git a/net/sched/sch_gred.c b/net/sched/sch_gred.c index 3a9d226ff1e4..c89fba56db56 100644 --- a/net/sched/sch_gred.c +++ b/net/sched/sch_gred.c | |||
| @@ -582,7 +582,8 @@ append_opt: | |||
| 582 | return nla_nest_end(skb, opts); | 582 | return nla_nest_end(skb, opts); |
| 583 | 583 | ||
| 584 | nla_put_failure: | 584 | nla_put_failure: |
| 585 | return nla_nest_cancel(skb, opts); | 585 | nla_nest_cancel(skb, opts); |
| 586 | return -EMSGSIZE; | ||
| 586 | } | 587 | } |
| 587 | 588 | ||
| 588 | static void gred_destroy(struct Qdisc *sch) | 589 | static void gred_destroy(struct Qdisc *sch) |
diff --git a/net/sched/sch_hfsc.c b/net/sched/sch_hfsc.c index 87293d0db1d7..fdfaa3fcc16d 100644 --- a/net/sched/sch_hfsc.c +++ b/net/sched/sch_hfsc.c | |||
| @@ -1360,7 +1360,7 @@ hfsc_dump_class(struct Qdisc *sch, unsigned long arg, struct sk_buff *skb, | |||
| 1360 | 1360 | ||
| 1361 | nla_put_failure: | 1361 | nla_put_failure: |
| 1362 | nla_nest_cancel(skb, nest); | 1362 | nla_nest_cancel(skb, nest); |
| 1363 | return -1; | 1363 | return -EMSGSIZE; |
| 1364 | } | 1364 | } |
| 1365 | 1365 | ||
| 1366 | static int | 1366 | static int |
diff --git a/net/sched/sch_red.c b/net/sched/sch_red.c index 3dcd493f4f4a..5c569853b9c0 100644 --- a/net/sched/sch_red.c +++ b/net/sched/sch_red.c | |||
| @@ -281,7 +281,8 @@ static int red_dump(struct Qdisc *sch, struct sk_buff *skb) | |||
| 281 | return nla_nest_end(skb, opts); | 281 | return nla_nest_end(skb, opts); |
| 282 | 282 | ||
| 283 | nla_put_failure: | 283 | nla_put_failure: |
| 284 | return nla_nest_cancel(skb, opts); | 284 | nla_nest_cancel(skb, opts); |
| 285 | return -EMSGSIZE; | ||
| 285 | } | 286 | } |
| 286 | 287 | ||
| 287 | static int red_dump_stats(struct Qdisc *sch, struct gnet_dump *d) | 288 | static int red_dump_stats(struct Qdisc *sch, struct gnet_dump *d) |
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index b4cd2b71953f..532634861db1 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c | |||
| @@ -1203,6 +1203,9 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc) | |||
| 1203 | struct list_head *head = &asoc->peer.transport_addr_list; | 1203 | struct list_head *head = &asoc->peer.transport_addr_list; |
| 1204 | struct list_head *pos; | 1204 | struct list_head *pos; |
| 1205 | 1205 | ||
| 1206 | if (asoc->peer.transport_count == 1) | ||
| 1207 | return; | ||
| 1208 | |||
| 1206 | /* Find the next transport in a round-robin fashion. */ | 1209 | /* Find the next transport in a round-robin fashion. */ |
| 1207 | t = asoc->peer.retran_path; | 1210 | t = asoc->peer.retran_path; |
| 1208 | pos = &t->transports; | 1211 | pos = &t->transports; |
| @@ -1217,6 +1220,15 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc) | |||
| 1217 | 1220 | ||
| 1218 | t = list_entry(pos, struct sctp_transport, transports); | 1221 | t = list_entry(pos, struct sctp_transport, transports); |
| 1219 | 1222 | ||
| 1223 | /* We have exhausted the list, but didn't find any | ||
| 1224 | * other active transports. If so, use the next | ||
| 1225 | * transport. | ||
| 1226 | */ | ||
| 1227 | if (t == asoc->peer.retran_path) { | ||
| 1228 | t = next; | ||
| 1229 | break; | ||
| 1230 | } | ||
| 1231 | |||
| 1220 | /* Try to find an active transport. */ | 1232 | /* Try to find an active transport. */ |
| 1221 | 1233 | ||
| 1222 | if ((t->state == SCTP_ACTIVE) || | 1234 | if ((t->state == SCTP_ACTIVE) || |
| @@ -1229,15 +1241,6 @@ void sctp_assoc_update_retran_path(struct sctp_association *asoc) | |||
| 1229 | if (!next) | 1241 | if (!next) |
| 1230 | next = t; | 1242 | next = t; |
| 1231 | } | 1243 | } |
| 1232 | |||
| 1233 | /* We have exhausted the list, but didn't find any | ||
| 1234 | * other active transports. If so, use the next | ||
| 1235 | * transport. | ||
| 1236 | */ | ||
| 1237 | if (t == asoc->peer.retran_path) { | ||
| 1238 | t = next; | ||
| 1239 | break; | ||
| 1240 | } | ||
| 1241 | } | 1244 | } |
| 1242 | 1245 | ||
| 1243 | asoc->peer.retran_path = t; | 1246 | asoc->peer.retran_path = t; |
diff --git a/net/sctp/ipv6.c b/net/sctp/ipv6.c index e45e44c60635..a2f4d4d51593 100644 --- a/net/sctp/ipv6.c +++ b/net/sctp/ipv6.c | |||
| @@ -299,7 +299,8 @@ static inline int sctp_v6_addr_match_len(union sctp_addr *s1, | |||
| 299 | /* Fills in the source address(saddr) based on the destination address(daddr) | 299 | /* Fills in the source address(saddr) based on the destination address(daddr) |
| 300 | * and asoc's bind address list. | 300 | * and asoc's bind address list. |
| 301 | */ | 301 | */ |
| 302 | static void sctp_v6_get_saddr(struct sctp_association *asoc, | 302 | static void sctp_v6_get_saddr(struct sctp_sock *sk, |
| 303 | struct sctp_association *asoc, | ||
| 303 | struct dst_entry *dst, | 304 | struct dst_entry *dst, |
| 304 | union sctp_addr *daddr, | 305 | union sctp_addr *daddr, |
| 305 | union sctp_addr *saddr) | 306 | union sctp_addr *saddr) |
| @@ -318,7 +319,7 @@ static void sctp_v6_get_saddr(struct sctp_association *asoc, | |||
| 318 | if (!asoc) { | 319 | if (!asoc) { |
| 319 | ipv6_dev_get_saddr(dst ? ip6_dst_idev(dst)->dev : NULL, | 320 | ipv6_dev_get_saddr(dst ? ip6_dst_idev(dst)->dev : NULL, |
| 320 | &daddr->v6.sin6_addr, | 321 | &daddr->v6.sin6_addr, |
| 321 | inet6_sk(asoc->base.sk)->srcprefs, | 322 | inet6_sk(&sk->inet.sk)->srcprefs, |
| 322 | &saddr->v6.sin6_addr); | 323 | &saddr->v6.sin6_addr); |
| 323 | SCTP_DEBUG_PRINTK("saddr from ipv6_get_saddr: " NIP6_FMT "\n", | 324 | SCTP_DEBUG_PRINTK("saddr from ipv6_get_saddr: " NIP6_FMT "\n", |
| 324 | NIP6(saddr->v6.sin6_addr)); | 325 | NIP6(saddr->v6.sin6_addr)); |
| @@ -726,6 +727,11 @@ static void sctp_v6_seq_dump_addr(struct seq_file *seq, union sctp_addr *addr) | |||
| 726 | seq_printf(seq, NIP6_FMT " ", NIP6(addr->v6.sin6_addr)); | 727 | seq_printf(seq, NIP6_FMT " ", NIP6(addr->v6.sin6_addr)); |
| 727 | } | 728 | } |
| 728 | 729 | ||
| 730 | static void sctp_v6_ecn_capable(struct sock *sk) | ||
| 731 | { | ||
| 732 | inet6_sk(sk)->tclass |= INET_ECN_ECT_0; | ||
| 733 | } | ||
| 734 | |||
| 729 | /* Initialize a PF_INET6 socket msg_name. */ | 735 | /* Initialize a PF_INET6 socket msg_name. */ |
| 730 | static void sctp_inet6_msgname(char *msgname, int *addr_len) | 736 | static void sctp_inet6_msgname(char *msgname, int *addr_len) |
| 731 | { | 737 | { |
| @@ -996,6 +1002,7 @@ static struct sctp_af sctp_af_inet6 = { | |||
| 996 | .skb_iif = sctp_v6_skb_iif, | 1002 | .skb_iif = sctp_v6_skb_iif, |
| 997 | .is_ce = sctp_v6_is_ce, | 1003 | .is_ce = sctp_v6_is_ce, |
| 998 | .seq_dump_addr = sctp_v6_seq_dump_addr, | 1004 | .seq_dump_addr = sctp_v6_seq_dump_addr, |
| 1005 | .ecn_capable = sctp_v6_ecn_capable, | ||
| 999 | .net_header_len = sizeof(struct ipv6hdr), | 1006 | .net_header_len = sizeof(struct ipv6hdr), |
| 1000 | .sockaddr_len = sizeof(struct sockaddr_in6), | 1007 | .sockaddr_len = sizeof(struct sockaddr_in6), |
| 1001 | #ifdef CONFIG_COMPAT | 1008 | #ifdef CONFIG_COMPAT |
diff --git a/net/sctp/output.c b/net/sctp/output.c index cf4f9fb6819d..6d45bae93b46 100644 --- a/net/sctp/output.c +++ b/net/sctp/output.c | |||
| @@ -548,7 +548,7 @@ int sctp_packet_transmit(struct sctp_packet *packet) | |||
| 548 | * Note: The works for IPv6 layer checks this bit too later | 548 | * Note: The works for IPv6 layer checks this bit too later |
| 549 | * in transmission. See IP6_ECN_flow_xmit(). | 549 | * in transmission. See IP6_ECN_flow_xmit(). |
| 550 | */ | 550 | */ |
| 551 | INET_ECN_xmit(nskb->sk); | 551 | (*tp->af_specific->ecn_capable)(nskb->sk); |
| 552 | 552 | ||
| 553 | /* Set up the IP options. */ | 553 | /* Set up the IP options. */ |
| 554 | /* BUG: not implemented | 554 | /* BUG: not implemented |
diff --git a/net/sctp/outqueue.c b/net/sctp/outqueue.c index 59edfd25a19c..ace6770e9048 100644 --- a/net/sctp/outqueue.c +++ b/net/sctp/outqueue.c | |||
| @@ -208,6 +208,7 @@ void sctp_outq_init(struct sctp_association *asoc, struct sctp_outq *q) | |||
| 208 | INIT_LIST_HEAD(&q->sacked); | 208 | INIT_LIST_HEAD(&q->sacked); |
| 209 | INIT_LIST_HEAD(&q->abandoned); | 209 | INIT_LIST_HEAD(&q->abandoned); |
| 210 | 210 | ||
| 211 | q->fast_rtx = 0; | ||
| 211 | q->outstanding_bytes = 0; | 212 | q->outstanding_bytes = 0; |
| 212 | q->empty = 1; | 213 | q->empty = 1; |
| 213 | q->cork = 0; | 214 | q->cork = 0; |
| @@ -500,6 +501,7 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, | |||
| 500 | case SCTP_RTXR_FAST_RTX: | 501 | case SCTP_RTXR_FAST_RTX: |
| 501 | SCTP_INC_STATS(SCTP_MIB_FAST_RETRANSMITS); | 502 | SCTP_INC_STATS(SCTP_MIB_FAST_RETRANSMITS); |
| 502 | sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_FAST_RTX); | 503 | sctp_transport_lower_cwnd(transport, SCTP_LOWER_CWND_FAST_RTX); |
| 504 | q->fast_rtx = 1; | ||
| 503 | break; | 505 | break; |
| 504 | case SCTP_RTXR_PMTUD: | 506 | case SCTP_RTXR_PMTUD: |
| 505 | SCTP_INC_STATS(SCTP_MIB_PMTUD_RETRANSMITS); | 507 | SCTP_INC_STATS(SCTP_MIB_PMTUD_RETRANSMITS); |
| @@ -518,9 +520,15 @@ void sctp_retransmit(struct sctp_outq *q, struct sctp_transport *transport, | |||
| 518 | * the sender SHOULD try to advance the "Advanced.Peer.Ack.Point" by | 520 | * the sender SHOULD try to advance the "Advanced.Peer.Ack.Point" by |
| 519 | * following the procedures outlined in C1 - C5. | 521 | * following the procedures outlined in C1 - C5. |
| 520 | */ | 522 | */ |
| 521 | sctp_generate_fwdtsn(q, q->asoc->ctsn_ack_point); | 523 | if (reason == SCTP_RTXR_T3_RTX) |
| 524 | sctp_generate_fwdtsn(q, q->asoc->ctsn_ack_point); | ||
| 522 | 525 | ||
| 523 | error = sctp_outq_flush(q, /* rtx_timeout */ 1); | 526 | /* Flush the queues only on timeout, since fast_rtx is only |
| 527 | * triggered during sack processing and the queue | ||
| 528 | * will be flushed at the end. | ||
| 529 | */ | ||
| 530 | if (reason != SCTP_RTXR_FAST_RTX) | ||
| 531 | error = sctp_outq_flush(q, /* rtx_timeout */ 1); | ||
| 524 | 532 | ||
| 525 | if (error) | 533 | if (error) |
| 526 | q->asoc->base.sk->sk_err = -error; | 534 | q->asoc->base.sk->sk_err = -error; |
| @@ -538,17 +546,23 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, | |||
| 538 | int rtx_timeout, int *start_timer) | 546 | int rtx_timeout, int *start_timer) |
| 539 | { | 547 | { |
| 540 | struct list_head *lqueue; | 548 | struct list_head *lqueue; |
| 541 | struct list_head *lchunk; | ||
| 542 | struct sctp_transport *transport = pkt->transport; | 549 | struct sctp_transport *transport = pkt->transport; |
| 543 | sctp_xmit_t status; | 550 | sctp_xmit_t status; |
| 544 | struct sctp_chunk *chunk, *chunk1; | 551 | struct sctp_chunk *chunk, *chunk1; |
| 545 | struct sctp_association *asoc; | 552 | struct sctp_association *asoc; |
| 553 | int fast_rtx; | ||
| 546 | int error = 0; | 554 | int error = 0; |
| 555 | int timer = 0; | ||
| 556 | int done = 0; | ||
| 547 | 557 | ||
| 548 | asoc = q->asoc; | 558 | asoc = q->asoc; |
| 549 | lqueue = &q->retransmit; | 559 | lqueue = &q->retransmit; |
| 560 | fast_rtx = q->fast_rtx; | ||
| 550 | 561 | ||
| 551 | /* RFC 2960 6.3.3 Handle T3-rtx Expiration | 562 | /* This loop handles time-out retransmissions, fast retransmissions, |
| 563 | * and retransmissions due to opening of whindow. | ||
| 564 | * | ||
| 565 | * RFC 2960 6.3.3 Handle T3-rtx Expiration | ||
| 552 | * | 566 | * |
| 553 | * E3) Determine how many of the earliest (i.e., lowest TSN) | 567 | * E3) Determine how many of the earliest (i.e., lowest TSN) |
| 554 | * outstanding DATA chunks for the address for which the | 568 | * outstanding DATA chunks for the address for which the |
| @@ -563,12 +577,12 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, | |||
| 563 | * [Just to be painfully clear, if we are retransmitting | 577 | * [Just to be painfully clear, if we are retransmitting |
| 564 | * because a timeout just happened, we should send only ONE | 578 | * because a timeout just happened, we should send only ONE |
| 565 | * packet of retransmitted data.] | 579 | * packet of retransmitted data.] |
| 580 | * | ||
| 581 | * For fast retransmissions we also send only ONE packet. However, | ||
| 582 | * if we are just flushing the queue due to open window, we'll | ||
| 583 | * try to send as much as possible. | ||
| 566 | */ | 584 | */ |
| 567 | lchunk = sctp_list_dequeue(lqueue); | 585 | list_for_each_entry_safe(chunk, chunk1, lqueue, transmitted_list) { |
| 568 | |||
| 569 | while (lchunk) { | ||
| 570 | chunk = list_entry(lchunk, struct sctp_chunk, | ||
| 571 | transmitted_list); | ||
| 572 | 586 | ||
| 573 | /* Make sure that Gap Acked TSNs are not retransmitted. A | 587 | /* Make sure that Gap Acked TSNs are not retransmitted. A |
| 574 | * simple approach is just to move such TSNs out of the | 588 | * simple approach is just to move such TSNs out of the |
| @@ -576,58 +590,60 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, | |||
| 576 | * next chunk. | 590 | * next chunk. |
| 577 | */ | 591 | */ |
| 578 | if (chunk->tsn_gap_acked) { | 592 | if (chunk->tsn_gap_acked) { |
| 579 | list_add_tail(lchunk, &transport->transmitted); | 593 | list_del(&chunk->transmitted_list); |
| 580 | lchunk = sctp_list_dequeue(lqueue); | 594 | list_add_tail(&chunk->transmitted_list, |
| 595 | &transport->transmitted); | ||
| 581 | continue; | 596 | continue; |
| 582 | } | 597 | } |
| 583 | 598 | ||
| 599 | /* If we are doing fast retransmit, ignore non-fast_rtransmit | ||
| 600 | * chunks | ||
| 601 | */ | ||
| 602 | if (fast_rtx && !chunk->fast_retransmit) | ||
| 603 | continue; | ||
| 604 | |||
| 584 | /* Attempt to append this chunk to the packet. */ | 605 | /* Attempt to append this chunk to the packet. */ |
| 585 | status = sctp_packet_append_chunk(pkt, chunk); | 606 | status = sctp_packet_append_chunk(pkt, chunk); |
| 586 | 607 | ||
| 587 | switch (status) { | 608 | switch (status) { |
| 588 | case SCTP_XMIT_PMTU_FULL: | 609 | case SCTP_XMIT_PMTU_FULL: |
| 589 | /* Send this packet. */ | 610 | /* Send this packet. */ |
| 590 | if ((error = sctp_packet_transmit(pkt)) == 0) | 611 | error = sctp_packet_transmit(pkt); |
| 591 | *start_timer = 1; | ||
| 592 | 612 | ||
| 593 | /* If we are retransmitting, we should only | 613 | /* If we are retransmitting, we should only |
| 594 | * send a single packet. | 614 | * send a single packet. |
| 595 | */ | 615 | */ |
| 596 | if (rtx_timeout) { | 616 | if (rtx_timeout || fast_rtx) |
| 597 | list_add(lchunk, lqueue); | 617 | done = 1; |
| 598 | lchunk = NULL; | ||
| 599 | } | ||
| 600 | 618 | ||
| 601 | /* Bundle lchunk in the next round. */ | 619 | /* Bundle next chunk in the next round. */ |
| 602 | break; | 620 | break; |
| 603 | 621 | ||
| 604 | case SCTP_XMIT_RWND_FULL: | 622 | case SCTP_XMIT_RWND_FULL: |
| 605 | /* Send this packet. */ | 623 | /* Send this packet. */ |
| 606 | if ((error = sctp_packet_transmit(pkt)) == 0) | 624 | error = sctp_packet_transmit(pkt); |
| 607 | *start_timer = 1; | ||
| 608 | 625 | ||
| 609 | /* Stop sending DATA as there is no more room | 626 | /* Stop sending DATA as there is no more room |
| 610 | * at the receiver. | 627 | * at the receiver. |
| 611 | */ | 628 | */ |
| 612 | list_add(lchunk, lqueue); | 629 | done = 1; |
| 613 | lchunk = NULL; | ||
| 614 | break; | 630 | break; |
| 615 | 631 | ||
| 616 | case SCTP_XMIT_NAGLE_DELAY: | 632 | case SCTP_XMIT_NAGLE_DELAY: |
| 617 | /* Send this packet. */ | 633 | /* Send this packet. */ |
| 618 | if ((error = sctp_packet_transmit(pkt)) == 0) | 634 | error = sctp_packet_transmit(pkt); |
| 619 | *start_timer = 1; | ||
| 620 | 635 | ||
| 621 | /* Stop sending DATA because of nagle delay. */ | 636 | /* Stop sending DATA because of nagle delay. */ |
| 622 | list_add(lchunk, lqueue); | 637 | done = 1; |
| 623 | lchunk = NULL; | ||
| 624 | break; | 638 | break; |
| 625 | 639 | ||
| 626 | default: | 640 | default: |
| 627 | /* The append was successful, so add this chunk to | 641 | /* The append was successful, so add this chunk to |
| 628 | * the transmitted list. | 642 | * the transmitted list. |
| 629 | */ | 643 | */ |
| 630 | list_add_tail(lchunk, &transport->transmitted); | 644 | list_del(&chunk->transmitted_list); |
| 645 | list_add_tail(&chunk->transmitted_list, | ||
| 646 | &transport->transmitted); | ||
| 631 | 647 | ||
| 632 | /* Mark the chunk as ineligible for fast retransmit | 648 | /* Mark the chunk as ineligible for fast retransmit |
| 633 | * after it is retransmitted. | 649 | * after it is retransmitted. |
| @@ -635,27 +651,44 @@ static int sctp_outq_flush_rtx(struct sctp_outq *q, struct sctp_packet *pkt, | |||
| 635 | if (chunk->fast_retransmit > 0) | 651 | if (chunk->fast_retransmit > 0) |
| 636 | chunk->fast_retransmit = -1; | 652 | chunk->fast_retransmit = -1; |
| 637 | 653 | ||
| 638 | *start_timer = 1; | 654 | /* Force start T3-rtx timer when fast retransmitting |
| 639 | q->empty = 0; | 655 | * the earliest outstanding TSN |
| 656 | */ | ||
| 657 | if (!timer && fast_rtx && | ||
| 658 | ntohl(chunk->subh.data_hdr->tsn) == | ||
| 659 | asoc->ctsn_ack_point + 1) | ||
| 660 | timer = 2; | ||
| 640 | 661 | ||
| 641 | /* Retrieve a new chunk to bundle. */ | 662 | q->empty = 0; |
| 642 | lchunk = sctp_list_dequeue(lqueue); | ||
| 643 | break; | 663 | break; |
| 644 | } | 664 | } |
| 645 | 665 | ||
| 646 | /* If we are here due to a retransmit timeout or a fast | 666 | /* Set the timer if there were no errors */ |
| 647 | * retransmit and if there are any chunks left in the retransmit | 667 | if (!error && !timer) |
| 648 | * queue that could not fit in the PMTU sized packet, they need | 668 | timer = 1; |
| 649 | * to be marked as ineligible for a subsequent fast retransmit. | 669 | |
| 650 | */ | 670 | if (done) |
| 651 | if (rtx_timeout && !lchunk) { | 671 | break; |
| 652 | list_for_each_entry(chunk1, lqueue, transmitted_list) { | 672 | } |
| 653 | if (chunk1->fast_retransmit > 0) | 673 | |
| 654 | chunk1->fast_retransmit = -1; | 674 | /* If we are here due to a retransmit timeout or a fast |
| 655 | } | 675 | * retransmit and if there are any chunks left in the retransmit |
| 676 | * queue that could not fit in the PMTU sized packet, they need | ||
| 677 | * to be marked as ineligible for a subsequent fast retransmit. | ||
| 678 | */ | ||
| 679 | if (rtx_timeout || fast_rtx) { | ||
| 680 | list_for_each_entry(chunk1, lqueue, transmitted_list) { | ||
| 681 | if (chunk1->fast_retransmit > 0) | ||
| 682 | chunk1->fast_retransmit = -1; | ||
| 656 | } | 683 | } |
| 657 | } | 684 | } |
| 658 | 685 | ||
| 686 | *start_timer = timer; | ||
| 687 | |||
| 688 | /* Clear fast retransmit hint */ | ||
| 689 | if (fast_rtx) | ||
| 690 | q->fast_rtx = 0; | ||
| 691 | |||
| 659 | return error; | 692 | return error; |
| 660 | } | 693 | } |
| 661 | 694 | ||
| @@ -862,7 +895,8 @@ int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout) | |||
| 862 | rtx_timeout, &start_timer); | 895 | rtx_timeout, &start_timer); |
| 863 | 896 | ||
| 864 | if (start_timer) | 897 | if (start_timer) |
| 865 | sctp_transport_reset_timers(transport); | 898 | sctp_transport_reset_timers(transport, |
| 899 | start_timer-1); | ||
| 866 | 900 | ||
| 867 | /* This can happen on COOKIE-ECHO resend. Only | 901 | /* This can happen on COOKIE-ECHO resend. Only |
| 868 | * one chunk can get bundled with a COOKIE-ECHO. | 902 | * one chunk can get bundled with a COOKIE-ECHO. |
| @@ -977,7 +1011,7 @@ int sctp_outq_flush(struct sctp_outq *q, int rtx_timeout) | |||
| 977 | list_add_tail(&chunk->transmitted_list, | 1011 | list_add_tail(&chunk->transmitted_list, |
| 978 | &transport->transmitted); | 1012 | &transport->transmitted); |
| 979 | 1013 | ||
| 980 | sctp_transport_reset_timers(transport); | 1014 | sctp_transport_reset_timers(transport, start_timer-1); |
| 981 | 1015 | ||
| 982 | q->empty = 0; | 1016 | q->empty = 0; |
| 983 | 1017 | ||
diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 0ec234b762c2..b435a193c5df 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c | |||
| @@ -470,11 +470,11 @@ static struct dst_entry *sctp_v4_get_dst(struct sctp_association *asoc, | |||
| 470 | /* Walk through the bind address list and look for a bind | 470 | /* Walk through the bind address list and look for a bind |
| 471 | * address that matches the source address of the returned dst. | 471 | * address that matches the source address of the returned dst. |
| 472 | */ | 472 | */ |
| 473 | sctp_v4_dst_saddr(&dst_saddr, dst, htons(bp->port)); | ||
| 473 | rcu_read_lock(); | 474 | rcu_read_lock(); |
| 474 | list_for_each_entry_rcu(laddr, &bp->address_list, list) { | 475 | list_for_each_entry_rcu(laddr, &bp->address_list, list) { |
| 475 | if (!laddr->valid || (laddr->state != SCTP_ADDR_SRC)) | 476 | if (!laddr->valid || (laddr->state != SCTP_ADDR_SRC)) |
| 476 | continue; | 477 | continue; |
| 477 | sctp_v4_dst_saddr(&dst_saddr, dst, htons(bp->port)); | ||
| 478 | if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a)) | 478 | if (sctp_v4_cmp_addr(&dst_saddr, &laddr->a)) |
| 479 | goto out_unlock; | 479 | goto out_unlock; |
| 480 | } | 480 | } |
| @@ -519,7 +519,8 @@ out: | |||
| 519 | /* For v4, the source address is cached in the route entry(dst). So no need | 519 | /* For v4, the source address is cached in the route entry(dst). So no need |
| 520 | * to cache it separately and hence this is an empty routine. | 520 | * to cache it separately and hence this is an empty routine. |
| 521 | */ | 521 | */ |
| 522 | static void sctp_v4_get_saddr(struct sctp_association *asoc, | 522 | static void sctp_v4_get_saddr(struct sctp_sock *sk, |
| 523 | struct sctp_association *asoc, | ||
| 523 | struct dst_entry *dst, | 524 | struct dst_entry *dst, |
| 524 | union sctp_addr *daddr, | 525 | union sctp_addr *daddr, |
| 525 | union sctp_addr *saddr) | 526 | union sctp_addr *saddr) |
| @@ -616,6 +617,11 @@ static void sctp_v4_seq_dump_addr(struct seq_file *seq, union sctp_addr *addr) | |||
| 616 | seq_printf(seq, "%d.%d.%d.%d ", NIPQUAD(addr->v4.sin_addr)); | 617 | seq_printf(seq, "%d.%d.%d.%d ", NIPQUAD(addr->v4.sin_addr)); |
| 617 | } | 618 | } |
| 618 | 619 | ||
| 620 | static void sctp_v4_ecn_capable(struct sock *sk) | ||
| 621 | { | ||
| 622 | INET_ECN_xmit(sk); | ||
| 623 | } | ||
| 624 | |||
| 619 | /* Event handler for inet address addition/deletion events. | 625 | /* Event handler for inet address addition/deletion events. |
| 620 | * The sctp_local_addr_list needs to be protocted by a spin lock since | 626 | * The sctp_local_addr_list needs to be protocted by a spin lock since |
| 621 | * multiple notifiers (say IPv4 and IPv6) may be running at the same | 627 | * multiple notifiers (say IPv4 and IPv6) may be running at the same |
| @@ -934,6 +940,7 @@ static struct sctp_af sctp_af_inet = { | |||
| 934 | .skb_iif = sctp_v4_skb_iif, | 940 | .skb_iif = sctp_v4_skb_iif, |
| 935 | .is_ce = sctp_v4_is_ce, | 941 | .is_ce = sctp_v4_is_ce, |
| 936 | .seq_dump_addr = sctp_v4_seq_dump_addr, | 942 | .seq_dump_addr = sctp_v4_seq_dump_addr, |
| 943 | .ecn_capable = sctp_v4_ecn_capable, | ||
| 937 | .net_header_len = sizeof(struct iphdr), | 944 | .net_header_len = sizeof(struct iphdr), |
| 938 | .sockaddr_len = sizeof(struct sockaddr_in), | 945 | .sockaddr_len = sizeof(struct sockaddr_in), |
| 939 | #ifdef CONFIG_COMPAT | 946 | #ifdef CONFIG_COMPAT |
diff --git a/net/sctp/transport.c b/net/sctp/transport.c index f4938f6c5abe..3f34f61221ec 100644 --- a/net/sctp/transport.c +++ b/net/sctp/transport.c | |||
| @@ -79,6 +79,7 @@ static struct sctp_transport *sctp_transport_init(struct sctp_transport *peer, | |||
| 79 | peer->rttvar = 0; | 79 | peer->rttvar = 0; |
| 80 | peer->srtt = 0; | 80 | peer->srtt = 0; |
| 81 | peer->rto_pending = 0; | 81 | peer->rto_pending = 0; |
| 82 | peer->fast_recovery = 0; | ||
| 82 | 83 | ||
| 83 | peer->last_time_heard = jiffies; | 84 | peer->last_time_heard = jiffies; |
| 84 | peer->last_time_used = jiffies; | 85 | peer->last_time_used = jiffies; |
| @@ -190,7 +191,7 @@ static void sctp_transport_destroy(struct sctp_transport *transport) | |||
| 190 | /* Start T3_rtx timer if it is not already running and update the heartbeat | 191 | /* Start T3_rtx timer if it is not already running and update the heartbeat |
| 191 | * timer. This routine is called every time a DATA chunk is sent. | 192 | * timer. This routine is called every time a DATA chunk is sent. |
| 192 | */ | 193 | */ |
| 193 | void sctp_transport_reset_timers(struct sctp_transport *transport) | 194 | void sctp_transport_reset_timers(struct sctp_transport *transport, int force) |
| 194 | { | 195 | { |
| 195 | /* RFC 2960 6.3.2 Retransmission Timer Rules | 196 | /* RFC 2960 6.3.2 Retransmission Timer Rules |
| 196 | * | 197 | * |
| @@ -200,7 +201,7 @@ void sctp_transport_reset_timers(struct sctp_transport *transport) | |||
| 200 | * address. | 201 | * address. |
| 201 | */ | 202 | */ |
| 202 | 203 | ||
| 203 | if (!timer_pending(&transport->T3_rtx_timer)) | 204 | if (force || !timer_pending(&transport->T3_rtx_timer)) |
| 204 | if (!mod_timer(&transport->T3_rtx_timer, | 205 | if (!mod_timer(&transport->T3_rtx_timer, |
| 205 | jiffies + transport->rto)) | 206 | jiffies + transport->rto)) |
| 206 | sctp_transport_hold(transport); | 207 | sctp_transport_hold(transport); |
| @@ -291,7 +292,7 @@ void sctp_transport_route(struct sctp_transport *transport, | |||
| 291 | if (saddr) | 292 | if (saddr) |
| 292 | memcpy(&transport->saddr, saddr, sizeof(union sctp_addr)); | 293 | memcpy(&transport->saddr, saddr, sizeof(union sctp_addr)); |
| 293 | else | 294 | else |
| 294 | af->get_saddr(asoc, dst, daddr, &transport->saddr); | 295 | af->get_saddr(opt, asoc, dst, daddr, &transport->saddr); |
| 295 | 296 | ||
| 296 | transport->dst = dst; | 297 | transport->dst = dst; |
| 297 | if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) { | 298 | if ((transport->param_flags & SPP_PMTUD_DISABLE) && transport->pathmtu) { |
| @@ -403,11 +404,16 @@ void sctp_transport_raise_cwnd(struct sctp_transport *transport, | |||
| 403 | cwnd = transport->cwnd; | 404 | cwnd = transport->cwnd; |
| 404 | flight_size = transport->flight_size; | 405 | flight_size = transport->flight_size; |
| 405 | 406 | ||
| 407 | /* See if we need to exit Fast Recovery first */ | ||
| 408 | if (transport->fast_recovery && | ||
| 409 | TSN_lte(transport->fast_recovery_exit, sack_ctsn)) | ||
| 410 | transport->fast_recovery = 0; | ||
| 411 | |||
| 406 | /* The appropriate cwnd increase algorithm is performed if, and only | 412 | /* The appropriate cwnd increase algorithm is performed if, and only |
| 407 | * if the cumulative TSN has advanced and the congestion window is | 413 | * if the cumulative TSN whould advanced and the congestion window is |
| 408 | * being fully utilized. | 414 | * being fully utilized. |
| 409 | */ | 415 | */ |
| 410 | if ((transport->asoc->ctsn_ack_point >= sack_ctsn) || | 416 | if (TSN_lte(sack_ctsn, transport->asoc->ctsn_ack_point) || |
| 411 | (flight_size < cwnd)) | 417 | (flight_size < cwnd)) |
| 412 | return; | 418 | return; |
| 413 | 419 | ||
| @@ -416,17 +422,23 @@ void sctp_transport_raise_cwnd(struct sctp_transport *transport, | |||
| 416 | pmtu = transport->asoc->pathmtu; | 422 | pmtu = transport->asoc->pathmtu; |
| 417 | 423 | ||
| 418 | if (cwnd <= ssthresh) { | 424 | if (cwnd <= ssthresh) { |
| 419 | /* RFC 2960 7.2.1, sctpimpguide-05 2.14.2 When cwnd is less | 425 | /* RFC 4960 7.2.1 |
| 420 | * than or equal to ssthresh an SCTP endpoint MUST use the | 426 | * o When cwnd is less than or equal to ssthresh, an SCTP |
| 421 | * slow start algorithm to increase cwnd only if the current | 427 | * endpoint MUST use the slow-start algorithm to increase |
| 422 | * congestion window is being fully utilized and an incoming | 428 | * cwnd only if the current congestion window is being fully |
| 423 | * SACK advances the Cumulative TSN Ack Point. Only when these | 429 | * utilized, an incoming SACK advances the Cumulative TSN |
| 424 | * two conditions are met can the cwnd be increased otherwise | 430 | * Ack Point, and the data sender is not in Fast Recovery. |
| 425 | * the cwnd MUST not be increased. If these conditions are met | 431 | * Only when these three conditions are met can the cwnd be |
| 426 | * then cwnd MUST be increased by at most the lesser of | 432 | * increased; otherwise, the cwnd MUST not be increased. |
| 427 | * 1) the total size of the previously outstanding DATA | 433 | * If these conditions are met, then cwnd MUST be increased |
| 428 | * chunk(s) acknowledged, and 2) the destination's path MTU. | 434 | * by, at most, the lesser of 1) the total size of the |
| 435 | * previously outstanding DATA chunk(s) acknowledged, and | ||
| 436 | * 2) the destination's path MTU. This upper bound protects | ||
| 437 | * against the ACK-Splitting attack outlined in [SAVAGE99]. | ||
| 429 | */ | 438 | */ |
| 439 | if (transport->fast_recovery) | ||
| 440 | return; | ||
| 441 | |||
| 430 | if (bytes_acked > pmtu) | 442 | if (bytes_acked > pmtu) |
| 431 | cwnd += pmtu; | 443 | cwnd += pmtu; |
| 432 | else | 444 | else |
| @@ -502,6 +514,13 @@ void sctp_transport_lower_cwnd(struct sctp_transport *transport, | |||
| 502 | * cwnd = ssthresh | 514 | * cwnd = ssthresh |
| 503 | * partial_bytes_acked = 0 | 515 | * partial_bytes_acked = 0 |
| 504 | */ | 516 | */ |
| 517 | if (transport->fast_recovery) | ||
| 518 | return; | ||
| 519 | |||
| 520 | /* Mark Fast recovery */ | ||
| 521 | transport->fast_recovery = 1; | ||
| 522 | transport->fast_recovery_exit = transport->asoc->next_tsn - 1; | ||
| 523 | |||
| 505 | transport->ssthresh = max(transport->cwnd/2, | 524 | transport->ssthresh = max(transport->cwnd/2, |
| 506 | 4*transport->asoc->pathmtu); | 525 | 4*transport->asoc->pathmtu); |
| 507 | transport->cwnd = transport->ssthresh; | 526 | transport->cwnd = transport->ssthresh; |
| @@ -586,6 +605,7 @@ void sctp_transport_reset(struct sctp_transport *t) | |||
| 586 | t->flight_size = 0; | 605 | t->flight_size = 0; |
| 587 | t->error_count = 0; | 606 | t->error_count = 0; |
| 588 | t->rto_pending = 0; | 607 | t->rto_pending = 0; |
| 608 | t->fast_recovery = 0; | ||
| 589 | 609 | ||
| 590 | /* Initialize the state information for SFR-CACC */ | 610 | /* Initialize the state information for SFR-CACC */ |
| 591 | t->cacc.changeover_active = 0; | 611 | t->cacc.changeover_active = 0; |
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 2bdd4dddc0e1..fb75f265b39c 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
| @@ -187,7 +187,8 @@ static int nl80211_send_wiphy(struct sk_buff *msg, u32 pid, u32 seq, int flags, | |||
| 187 | return genlmsg_end(msg, hdr); | 187 | return genlmsg_end(msg, hdr); |
| 188 | 188 | ||
| 189 | nla_put_failure: | 189 | nla_put_failure: |
| 190 | return genlmsg_cancel(msg, hdr); | 190 | genlmsg_cancel(msg, hdr); |
| 191 | return -EMSGSIZE; | ||
| 191 | } | 192 | } |
| 192 | 193 | ||
| 193 | static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb) | 194 | static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb) |
| @@ -273,7 +274,8 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 pid, u32 seq, int flags, | |||
| 273 | return genlmsg_end(msg, hdr); | 274 | return genlmsg_end(msg, hdr); |
| 274 | 275 | ||
| 275 | nla_put_failure: | 276 | nla_put_failure: |
| 276 | return genlmsg_cancel(msg, hdr); | 277 | genlmsg_cancel(msg, hdr); |
| 278 | return -EMSGSIZE; | ||
| 277 | } | 279 | } |
| 278 | 280 | ||
| 279 | static int nl80211_dump_interface(struct sk_buff *skb, struct netlink_callback *cb) | 281 | static int nl80211_dump_interface(struct sk_buff *skb, struct netlink_callback *cb) |
| @@ -928,7 +930,8 @@ static int nl80211_send_station(struct sk_buff *msg, u32 pid, u32 seq, | |||
| 928 | return genlmsg_end(msg, hdr); | 930 | return genlmsg_end(msg, hdr); |
| 929 | 931 | ||
| 930 | nla_put_failure: | 932 | nla_put_failure: |
| 931 | return genlmsg_cancel(msg, hdr); | 933 | genlmsg_cancel(msg, hdr); |
| 934 | return -EMSGSIZE; | ||
| 932 | } | 935 | } |
| 933 | 936 | ||
| 934 | static int nl80211_dump_station(struct sk_buff *skb, | 937 | static int nl80211_dump_station(struct sk_buff *skb, |
| @@ -1267,7 +1270,8 @@ static int nl80211_send_mpath(struct sk_buff *msg, u32 pid, u32 seq, | |||
| 1267 | return genlmsg_end(msg, hdr); | 1270 | return genlmsg_end(msg, hdr); |
| 1268 | 1271 | ||
| 1269 | nla_put_failure: | 1272 | nla_put_failure: |
| 1270 | return genlmsg_cancel(msg, hdr); | 1273 | genlmsg_cancel(msg, hdr); |
| 1274 | return -EMSGSIZE; | ||
| 1271 | } | 1275 | } |
| 1272 | 1276 | ||
| 1273 | static int nl80211_dump_mpath(struct sk_buff *skb, | 1277 | static int nl80211_dump_mpath(struct sk_buff *skb, |
diff --git a/net/xfrm/xfrm_algo.c b/net/xfrm/xfrm_algo.c index ac765dd9c7f5..23a2cc04b8cd 100644 --- a/net/xfrm/xfrm_algo.c +++ b/net/xfrm/xfrm_algo.c | |||
| @@ -200,8 +200,8 @@ static struct xfrm_algo_desc aalg_list[] = { | |||
| 200 | } | 200 | } |
| 201 | }, | 201 | }, |
| 202 | { | 202 | { |
| 203 | .name = "hmac(ripemd160)", | 203 | .name = "hmac(rmd160)", |
| 204 | .compat = "ripemd160", | 204 | .compat = "rmd160", |
| 205 | 205 | ||
| 206 | .uinfo = { | 206 | .uinfo = { |
| 207 | .auth = { | 207 | .auth = { |
diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index a098a0454dc8..17092d6c7db3 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost | |||
| @@ -43,7 +43,13 @@ _modpost: __modpost | |||
| 43 | include include/config/auto.conf | 43 | include include/config/auto.conf |
| 44 | include scripts/Kbuild.include | 44 | include scripts/Kbuild.include |
| 45 | 45 | ||
| 46 | # When building external modules load the Kbuild file to retreive EXTRA_SYMBOLS info | ||
| 46 | ifneq ($(KBUILD_EXTMOD),) | 47 | ifneq ($(KBUILD_EXTMOD),) |
| 48 | |||
| 49 | # set src + obj - they may be used when building the .mod.c file | ||
| 50 | obj := $(KBUILD_EXTMOD) | ||
| 51 | src := $(obj) | ||
| 52 | |||
| 47 | # Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS | 53 | # Include the module's Makefile to find KBUILD_EXTRA_SYMBOLS |
| 48 | include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \ | 54 | include $(if $(wildcard $(KBUILD_EXTMOD)/Kbuild), \ |
| 49 | $(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile) | 55 | $(KBUILD_EXTMOD)/Kbuild, $(KBUILD_EXTMOD)/Makefile) |
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl index b6bbbcdc557e..6971bf078d13 100755 --- a/scripts/checkpatch.pl +++ b/scripts/checkpatch.pl | |||
| @@ -9,7 +9,7 @@ use strict; | |||
| 9 | my $P = $0; | 9 | my $P = $0; |
| 10 | $P =~ s@.*/@@g; | 10 | $P =~ s@.*/@@g; |
| 11 | 11 | ||
| 12 | my $V = '0.18'; | 12 | my $V = '0.19'; |
| 13 | 13 | ||
| 14 | use Getopt::Long qw(:config no_auto_abbrev); | 14 | use Getopt::Long qw(:config no_auto_abbrev); |
| 15 | 15 | ||
| @@ -115,6 +115,7 @@ our $Attribute = qr{ | |||
| 115 | __kprobes| | 115 | __kprobes| |
| 116 | __(?:mem|cpu|dev|)(?:initdata|init) | 116 | __(?:mem|cpu|dev|)(?:initdata|init) |
| 117 | }x; | 117 | }x; |
| 118 | our $Modifier; | ||
| 118 | our $Inline = qr{inline|__always_inline|noinline}; | 119 | our $Inline = qr{inline|__always_inline|noinline}; |
| 119 | our $Member = qr{->$Ident|\.$Ident|\[[^]]*\]}; | 120 | our $Member = qr{->$Ident|\.$Ident|\[[^]]*\]}; |
| 120 | our $Lval = qr{$Ident(?:$Member)*}; | 121 | our $Lval = qr{$Ident(?:$Member)*}; |
| @@ -144,17 +145,17 @@ our $UTF8 = qr { | |||
| 144 | 145 | ||
| 145 | our @typeList = ( | 146 | our @typeList = ( |
| 146 | qr{void}, | 147 | qr{void}, |
| 147 | qr{char}, | 148 | qr{(?:unsigned\s+)?char}, |
| 148 | qr{short}, | 149 | qr{(?:unsigned\s+)?short}, |
| 149 | qr{int}, | 150 | qr{(?:unsigned\s+)?int}, |
| 150 | qr{long}, | 151 | qr{(?:unsigned\s+)?long}, |
| 152 | qr{(?:unsigned\s+)?long\s+int}, | ||
| 153 | qr{(?:unsigned\s+)?long\s+long}, | ||
| 154 | qr{(?:unsigned\s+)?long\s+long\s+int}, | ||
| 151 | qr{unsigned}, | 155 | qr{unsigned}, |
| 152 | qr{float}, | 156 | qr{float}, |
| 153 | qr{double}, | 157 | qr{double}, |
| 154 | qr{bool}, | 158 | qr{bool}, |
| 155 | qr{long\s+int}, | ||
| 156 | qr{long\s+long}, | ||
| 157 | qr{long\s+long\s+int}, | ||
| 158 | qr{(?:__)?(?:u|s|be|le)(?:8|16|32|64)}, | 159 | qr{(?:__)?(?:u|s|be|le)(?:8|16|32|64)}, |
| 159 | qr{struct\s+$Ident}, | 160 | qr{struct\s+$Ident}, |
| 160 | qr{union\s+$Ident}, | 161 | qr{union\s+$Ident}, |
| @@ -163,26 +164,29 @@ our @typeList = ( | |||
| 163 | qr{${Ident}_handler}, | 164 | qr{${Ident}_handler}, |
| 164 | qr{${Ident}_handler_fn}, | 165 | qr{${Ident}_handler_fn}, |
| 165 | ); | 166 | ); |
| 167 | our @modifierList = ( | ||
| 168 | qr{fastcall}, | ||
| 169 | ); | ||
| 166 | 170 | ||
| 167 | sub build_types { | 171 | sub build_types { |
| 172 | my $mods = "(?: \n" . join("|\n ", @modifierList) . "\n)"; | ||
| 168 | my $all = "(?: \n" . join("|\n ", @typeList) . "\n)"; | 173 | my $all = "(?: \n" . join("|\n ", @typeList) . "\n)"; |
| 169 | $NonptrType = qr{ | 174 | $NonptrType = qr{ |
| 170 | \b | ||
| 171 | (?:const\s+)? | 175 | (?:const\s+)? |
| 172 | (?:unsigned\s+)? | 176 | (?:$mods\s+)? |
| 173 | (?: | 177 | (?: |
| 174 | $all| | 178 | (?:typeof|__typeof__)\s*\(\s*\**\s*$Ident\s*\)| |
| 175 | (?:typeof|__typeof__)\s*\(\s*\**\s*$Ident\s*\) | 179 | (?:${all}\b) |
| 176 | ) | 180 | ) |
| 177 | (?:\s+$Sparse|\s+const)* | 181 | (?:\s+$Sparse|\s+const)* |
| 178 | \b | ||
| 179 | }x; | 182 | }x; |
| 180 | $Type = qr{ | 183 | $Type = qr{ |
| 181 | \b$NonptrType\b | 184 | $NonptrType |
| 182 | (?:\s*\*+\s*const|\s*\*+|(?:\s*\[\s*\])+)? | 185 | (?:\s*\*+\s*const|\s*\*+|(?:\s*\[\s*\])+)? |
| 183 | (?:\s+$Inline|\s+$Sparse|\s+$Attribute)* | 186 | (?:\s+$Inline|\s+$Sparse|\s+$Attribute|\s+$mods)* |
| 184 | }x; | 187 | }x; |
| 185 | $Declare = qr{(?:$Storage\s+)?$Type}; | 188 | $Declare = qr{(?:$Storage\s+)?$Type}; |
| 189 | $Modifier = qr{(?:$Attribute|$Sparse|$mods)}; | ||
| 186 | } | 190 | } |
| 187 | build_types(); | 191 | build_types(); |
| 188 | 192 | ||
| @@ -329,7 +333,7 @@ sub sanitise_line { | |||
| 329 | $off++; | 333 | $off++; |
| 330 | next; | 334 | next; |
| 331 | } | 335 | } |
| 332 | if (substr($line, $off, 2) eq $sanitise_quote) { | 336 | if (substr($line, $off, 2) eq '*/') { |
| 333 | $sanitise_quote = ''; | 337 | $sanitise_quote = ''; |
| 334 | substr($res, $off, 2, "$;$;"); | 338 | substr($res, $off, 2, "$;$;"); |
| 335 | $off++; | 339 | $off++; |
| @@ -366,14 +370,14 @@ sub sanitise_line { | |||
| 366 | } | 370 | } |
| 367 | 371 | ||
| 368 | # The pathname on a #include may be surrounded by '<' and '>'. | 372 | # The pathname on a #include may be surrounded by '<' and '>'. |
| 369 | if ($res =~ /^.#\s*include\s+\<(.*)\>/) { | 373 | if ($res =~ /^.\s*\#\s*include\s+\<(.*)\>/) { |
| 370 | my $clean = 'X' x length($1); | 374 | my $clean = 'X' x length($1); |
| 371 | $res =~ s@\<.*\>@<$clean>@; | 375 | $res =~ s@\<.*\>@<$clean>@; |
| 372 | 376 | ||
| 373 | # The whole of a #error is a string. | 377 | # The whole of a #error is a string. |
| 374 | } elsif ($res =~ /^.#\s*(?:error|warning)\s+(.*)\b/) { | 378 | } elsif ($res =~ /^.\s*\#\s*(?:error|warning)\s+(.*)\b/) { |
| 375 | my $clean = 'X' x length($1); | 379 | my $clean = 'X' x length($1); |
| 376 | $res =~ s@(#\s*(?:error|warning)\s+).*@$1$clean@; | 380 | $res =~ s@(\#\s*(?:error|warning)\s+).*@$1$clean@; |
| 377 | } | 381 | } |
| 378 | 382 | ||
| 379 | return $res; | 383 | return $res; |
| @@ -715,7 +719,7 @@ sub annotate_values { | |||
| 715 | print "DECLARE($1)\n" if ($dbg_values > 1); | 719 | print "DECLARE($1)\n" if ($dbg_values > 1); |
| 716 | $type = 'T'; | 720 | $type = 'T'; |
| 717 | 721 | ||
| 718 | } elsif ($cur =~ /^(#\s*define\s*$Ident)(\(?)/o) { | 722 | } elsif ($cur =~ /^(\#\s*define\s*$Ident)(\(?)/o) { |
| 719 | print "DEFINE($1,$2)\n" if ($dbg_values > 1); | 723 | print "DEFINE($1,$2)\n" if ($dbg_values > 1); |
| 720 | $av_preprocessor = 1; | 724 | $av_preprocessor = 1; |
| 721 | push(@av_paren_type, $type); | 725 | push(@av_paren_type, $type); |
| @@ -724,12 +728,12 @@ sub annotate_values { | |||
| 724 | } | 728 | } |
| 725 | $type = 'E'; | 729 | $type = 'E'; |
| 726 | 730 | ||
| 727 | } elsif ($cur =~ /^(#\s*undef\s*$Ident)/o) { | 731 | } elsif ($cur =~ /^(\#\s*(?:undef\s*$Ident|include\b))/o) { |
| 728 | print "UNDEF($1)\n" if ($dbg_values > 1); | 732 | print "UNDEF($1)\n" if ($dbg_values > 1); |
| 729 | $av_preprocessor = 1; | 733 | $av_preprocessor = 1; |
| 730 | push(@av_paren_type, $type); | 734 | push(@av_paren_type, $type); |
| 731 | 735 | ||
| 732 | } elsif ($cur =~ /^(#\s*(?:ifdef|ifndef|if))/o) { | 736 | } elsif ($cur =~ /^(\#\s*(?:ifdef|ifndef|if))/o) { |
| 733 | print "PRE_START($1)\n" if ($dbg_values > 1); | 737 | print "PRE_START($1)\n" if ($dbg_values > 1); |
| 734 | $av_preprocessor = 1; | 738 | $av_preprocessor = 1; |
| 735 | 739 | ||
| @@ -737,7 +741,7 @@ sub annotate_values { | |||
| 737 | push(@av_paren_type, $type); | 741 | push(@av_paren_type, $type); |
| 738 | $type = 'E'; | 742 | $type = 'E'; |
| 739 | 743 | ||
| 740 | } elsif ($cur =~ /^(#\s*(?:else|elif))/o) { | 744 | } elsif ($cur =~ /^(\#\s*(?:else|elif))/o) { |
| 741 | print "PRE_RESTART($1)\n" if ($dbg_values > 1); | 745 | print "PRE_RESTART($1)\n" if ($dbg_values > 1); |
| 742 | $av_preprocessor = 1; | 746 | $av_preprocessor = 1; |
| 743 | 747 | ||
| @@ -745,7 +749,7 @@ sub annotate_values { | |||
| 745 | 749 | ||
| 746 | $type = 'E'; | 750 | $type = 'E'; |
| 747 | 751 | ||
| 748 | } elsif ($cur =~ /^(#\s*(?:endif))/o) { | 752 | } elsif ($cur =~ /^(\#\s*(?:endif))/o) { |
| 749 | print "PRE_END($1)\n" if ($dbg_values > 1); | 753 | print "PRE_END($1)\n" if ($dbg_values > 1); |
| 750 | 754 | ||
| 751 | $av_preprocessor = 1; | 755 | $av_preprocessor = 1; |
| @@ -837,14 +841,26 @@ sub annotate_values { | |||
| 837 | sub possible { | 841 | sub possible { |
| 838 | my ($possible, $line) = @_; | 842 | my ($possible, $line) = @_; |
| 839 | 843 | ||
| 840 | #print "CHECK<$possible>\n"; | 844 | print "CHECK<$possible> ($line)\n" if ($dbg_possible > 1); |
| 841 | if ($possible !~ /^(?:$Storage|$Type|DEFINE_\S+)$/ && | 845 | if ($possible !~ /^(?:$Storage|$Type|DEFINE_\S+)$/ && |
| 842 | $possible ne 'goto' && $possible ne 'return' && | 846 | $possible ne 'goto' && $possible ne 'return' && |
| 843 | $possible ne 'struct' && $possible ne 'enum' && | ||
| 844 | $possible ne 'case' && $possible ne 'else' && | 847 | $possible ne 'case' && $possible ne 'else' && |
| 845 | $possible ne 'typedef') { | 848 | $possible ne 'asm' && |
| 846 | warn "POSSIBLE: $possible ($line)\n" if ($dbg_possible); | 849 | $possible !~ /^(typedef|struct|enum)\b/) { |
| 847 | push(@typeList, $possible); | 850 | # Check for modifiers. |
| 851 | $possible =~ s/\s*$Storage\s*//g; | ||
| 852 | $possible =~ s/\s*$Sparse\s*//g; | ||
| 853 | if ($possible =~ /^\s*$/) { | ||
| 854 | |||
| 855 | } elsif ($possible =~ /\s/) { | ||
| 856 | $possible =~ s/\s*$Type\s*//g; | ||
| 857 | warn "MODIFIER: $possible ($line)\n" if ($dbg_possible); | ||
| 858 | push(@modifierList, $possible); | ||
| 859 | |||
| 860 | } else { | ||
| 861 | warn "POSSIBLE: $possible ($line)\n" if ($dbg_possible); | ||
| 862 | push(@typeList, $possible); | ||
| 863 | } | ||
| 848 | build_types(); | 864 | build_types(); |
| 849 | } | 865 | } |
| 850 | } | 866 | } |
| @@ -949,6 +965,7 @@ sub process { | |||
| 949 | } else { | 965 | } else { |
| 950 | $realcnt=1+1; | 966 | $realcnt=1+1; |
| 951 | } | 967 | } |
| 968 | $in_comment = 0; | ||
| 952 | 969 | ||
| 953 | # Guestimate if this is a continuing comment. Run | 970 | # Guestimate if this is a continuing comment. Run |
| 954 | # the context looking for a comment "edge". If this | 971 | # the context looking for a comment "edge". If this |
| @@ -1117,7 +1134,9 @@ sub process { | |||
| 1117 | ERROR("trailing whitespace\n" . $herevet); | 1134 | ERROR("trailing whitespace\n" . $herevet); |
| 1118 | } | 1135 | } |
| 1119 | #80 column limit | 1136 | #80 column limit |
| 1120 | if ($line =~ /^\+/ && !($prevrawline=~/\/\*\*/) && $length > 80) { | 1137 | if ($line =~ /^\+/ && $prevrawline !~ /\/\*\*/ && |
| 1138 | $rawline !~ /^.\s*\*\s*\@$Ident\s/ && $length > 80) | ||
| 1139 | { | ||
| 1121 | WARN("line over 80 characters\n" . $herecurr); | 1140 | WARN("line over 80 characters\n" . $herecurr); |
| 1122 | } | 1141 | } |
| 1123 | 1142 | ||
| @@ -1159,18 +1178,20 @@ sub process { | |||
| 1159 | # Ignore functions being called | 1178 | # Ignore functions being called |
| 1160 | } elsif ($s =~ /^.\s*$Ident\s*\(/s) { | 1179 | } elsif ($s =~ /^.\s*$Ident\s*\(/s) { |
| 1161 | 1180 | ||
| 1181 | # declarations always start with types | ||
| 1182 | } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?((?:\s*$Ident)+)\b(?:\s+$Sparse)?\s*\**\s*(?:$Ident|\(\*[^\)]*\))\s*(?:;|=|,|\()/s) { | ||
| 1183 | my $type = $1; | ||
| 1184 | $type =~ s/\s+/ /g; | ||
| 1185 | possible($type, "A:" . $s); | ||
| 1186 | |||
| 1162 | # definitions in global scope can only start with types | 1187 | # definitions in global scope can only start with types |
| 1163 | } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/s) { | 1188 | } elsif ($s =~ /^.(?:$Storage\s+)?(?:$Inline\s+)?(?:const\s+)?($Ident)\b/s) { |
| 1164 | possible($1, $s); | 1189 | possible($1, "B:" . $s); |
| 1165 | |||
| 1166 | # declarations always start with types | ||
| 1167 | } elsif ($prev_values eq 'E' && $s =~ /^.\s*(?:$Storage\s+)?(?:const\s+)?($Ident)\b(:?\s+$Sparse)?\s*\**\s*$Ident\s*(?:;|=|,)/s) { | ||
| 1168 | possible($1, $s); | ||
| 1169 | } | 1190 | } |
| 1170 | 1191 | ||
| 1171 | # any (foo ... *) is a pointer cast, and foo is a type | 1192 | # any (foo ... *) is a pointer cast, and foo is a type |
| 1172 | while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/sg) { | 1193 | while ($s =~ /\(($Ident)(?:\s+$Sparse)*\s*\*+\s*\)/sg) { |
| 1173 | possible($1, $s); | 1194 | possible($1, "C:" . $s); |
| 1174 | } | 1195 | } |
| 1175 | 1196 | ||
| 1176 | # Check for any sort of function declaration. | 1197 | # Check for any sort of function declaration. |
| @@ -1184,9 +1205,9 @@ sub process { | |||
| 1184 | $ctx =~ s/\)[^\)]*$//; | 1205 | $ctx =~ s/\)[^\)]*$//; |
| 1185 | 1206 | ||
| 1186 | for my $arg (split(/\s*,\s*/, $ctx)) { | 1207 | for my $arg (split(/\s*,\s*/, $ctx)) { |
| 1187 | if ($arg =~ /^(?:const\s+)?($Ident)(?:\s+$Sparse)*\s*\**\s*(:?\b$Ident)?$/ || $arg =~ /^($Ident)$/) { | 1208 | if ($arg =~ /^(?:const\s+)?($Ident)(?:\s+$Sparse)*\s*\**\s*(:?\b$Ident)?$/s || $arg =~ /^($Ident)$/s) { |
| 1188 | 1209 | ||
| 1189 | possible($1, $s); | 1210 | possible($1, "D:" . $s); |
| 1190 | } | 1211 | } |
| 1191 | } | 1212 | } |
| 1192 | } | 1213 | } |
| @@ -1221,7 +1242,7 @@ sub process { | |||
| 1221 | 1242 | ||
| 1222 | # if/while/etc brace do not go on next line, unless defining a do while loop, | 1243 | # if/while/etc brace do not go on next line, unless defining a do while loop, |
| 1223 | # or if that brace on the next line is for something else | 1244 | # or if that brace on the next line is for something else |
| 1224 | if ($line =~ /(.*)\b((?:if|while|for|switch)\s*\(|do\b|else\b)/ && $line !~ /^.#/) { | 1245 | if ($line =~ /(.*)\b((?:if|while|for|switch)\s*\(|do\b|else\b)/ && $line !~ /^.\s*\#/) { |
| 1225 | my $pre_ctx = "$1$2"; | 1246 | my $pre_ctx = "$1$2"; |
| 1226 | 1247 | ||
| 1227 | my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0); | 1248 | my ($level, @ctx) = ctx_statement_level($linenr, $realcnt, 0); |
| @@ -1239,7 +1260,7 @@ sub process { | |||
| 1239 | 1260 | ||
| 1240 | if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) { | 1261 | if ($ctx !~ /{\s*/ && defined($lines[$ctx_ln -1]) && $lines[$ctx_ln - 1] =~ /^\+\s*{/) { |
| 1241 | ERROR("that open brace { should be on the previous line\n" . | 1262 | ERROR("that open brace { should be on the previous line\n" . |
| 1242 | "$here\n$ctx\n$lines[$ctx_ln - 1]"); | 1263 | "$here\n$ctx\n$lines[$ctx_ln - 1]\n"); |
| 1243 | } | 1264 | } |
| 1244 | if ($level == 0 && $pre_ctx !~ /}\s*while\s*\($/ && | 1265 | if ($level == 0 && $pre_ctx !~ /}\s*while\s*\($/ && |
| 1245 | $ctx =~ /\)\s*\;\s*$/ && | 1266 | $ctx =~ /\)\s*\;\s*$/ && |
| @@ -1248,7 +1269,7 @@ sub process { | |||
| 1248 | my ($nlength, $nindent) = line_stats($lines[$ctx_ln - 1]); | 1269 | my ($nlength, $nindent) = line_stats($lines[$ctx_ln - 1]); |
| 1249 | if ($nindent > $indent) { | 1270 | if ($nindent > $indent) { |
| 1250 | WARN("trailing semicolon indicates no statements, indent implies otherwise\n" . | 1271 | WARN("trailing semicolon indicates no statements, indent implies otherwise\n" . |
| 1251 | "$here\n$ctx\n$lines[$ctx_ln - 1]"); | 1272 | "$here\n$ctx\n$lines[$ctx_ln - 1]\n"); |
| 1252 | } | 1273 | } |
| 1253 | } | 1274 | } |
| 1254 | } | 1275 | } |
| @@ -1284,7 +1305,7 @@ sub process { | |||
| 1284 | # | 1305 | # |
| 1285 | 1306 | ||
| 1286 | # check for malformed paths in #include statements (uses RAW line) | 1307 | # check for malformed paths in #include statements (uses RAW line) |
| 1287 | if ($rawline =~ m{^.#\s*include\s+[<"](.*)[">]}) { | 1308 | if ($rawline =~ m{^.\s*\#\s*include\s+[<"](.*)[">]}) { |
| 1288 | my $path = $1; | 1309 | my $path = $1; |
| 1289 | if ($path =~ m{//}) { | 1310 | if ($path =~ m{//}) { |
| 1290 | ERROR("malformed #include filename\n" . | 1311 | ERROR("malformed #include filename\n" . |
| @@ -1316,7 +1337,7 @@ sub process { | |||
| 1316 | } | 1337 | } |
| 1317 | 1338 | ||
| 1318 | # check for external initialisers. | 1339 | # check for external initialisers. |
| 1319 | if ($line =~ /^.$Type\s*$Ident\s*=\s*(0|NULL|false)\s*;/) { | 1340 | if ($line =~ /^.$Type\s*$Ident\s*(?:\s+$Modifier)*\s*=\s*(0|NULL|false)\s*;/) { |
| 1320 | ERROR("do not initialise externals to 0 or NULL\n" . | 1341 | ERROR("do not initialise externals to 0 or NULL\n" . |
| 1321 | $herecurr); | 1342 | $herecurr); |
| 1322 | } | 1343 | } |
| @@ -1330,6 +1351,7 @@ sub process { | |||
| 1330 | # make sense. | 1351 | # make sense. |
| 1331 | if ($line =~ /\btypedef\s/ && | 1352 | if ($line =~ /\btypedef\s/ && |
| 1332 | $line !~ /\btypedef\s+$Type\s+\(\s*\*?$Ident\s*\)\s*\(/ && | 1353 | $line !~ /\btypedef\s+$Type\s+\(\s*\*?$Ident\s*\)\s*\(/ && |
| 1354 | $line !~ /\btypedef\s+$Type\s+$Ident\s*\(/ && | ||
| 1333 | $line !~ /\b__bitwise(?:__|)\b/) { | 1355 | $line !~ /\b__bitwise(?:__|)\b/) { |
| 1334 | WARN("do not add new typedefs\n" . $herecurr); | 1356 | WARN("do not add new typedefs\n" . $herecurr); |
| 1335 | } | 1357 | } |
| @@ -1388,8 +1410,8 @@ sub process { | |||
| 1388 | 1410 | ||
| 1389 | # function brace can't be on same line, except for #defines of do while, | 1411 | # function brace can't be on same line, except for #defines of do while, |
| 1390 | # or if closed on same line | 1412 | # or if closed on same line |
| 1391 | if (($line=~/$Type\s*[A-Za-z\d_]+\(.*\).*\s{/) and | 1413 | if (($line=~/$Type\s*$Ident\(.*\).*\s{/) and |
| 1392 | !($line=~/\#define.*do\s{/) and !($line=~/}/)) { | 1414 | !($line=~/\#\s*define.*do\s{/) and !($line=~/}/)) { |
| 1393 | ERROR("open brace '{' following function declarations go on the next line\n" . $herecurr); | 1415 | ERROR("open brace '{' following function declarations go on the next line\n" . $herecurr); |
| 1394 | } | 1416 | } |
| 1395 | 1417 | ||
| @@ -1416,10 +1438,10 @@ sub process { | |||
| 1416 | # cpp #define statements have non-optional spaces, ie | 1438 | # cpp #define statements have non-optional spaces, ie |
| 1417 | # if there is a space between the name and the open | 1439 | # if there is a space between the name and the open |
| 1418 | # parenthesis it is simply not a parameter group. | 1440 | # parenthesis it is simply not a parameter group. |
| 1419 | } elsif ($ctx_before =~ /^.\#\s*define\s*$/) { | 1441 | } elsif ($ctx_before =~ /^.\s*\#\s*define\s*$/) { |
| 1420 | 1442 | ||
| 1421 | # cpp #elif statement condition may start with a ( | 1443 | # cpp #elif statement condition may start with a ( |
| 1422 | } elsif ($ctx =~ /^.\#\s*elif\s*$/) { | 1444 | } elsif ($ctx =~ /^.\s*\#\s*elif\s*$/) { |
| 1423 | 1445 | ||
| 1424 | # If this whole things ends with a type its most | 1446 | # If this whole things ends with a type its most |
| 1425 | # likely a typedef for a function. | 1447 | # likely a typedef for a function. |
| @@ -1625,13 +1647,14 @@ sub process { | |||
| 1625 | ERROR("space prohibited before that close square bracket ']'\n" . $herecurr); | 1647 | ERROR("space prohibited before that close square bracket ']'\n" . $herecurr); |
| 1626 | } | 1648 | } |
| 1627 | 1649 | ||
| 1628 | # check spacing on paretheses | 1650 | # check spacing on parentheses |
| 1629 | if ($line =~ /\(\s/ && $line !~ /\(\s*(?:\\)?$/ && | 1651 | if ($line =~ /\(\s/ && $line !~ /\(\s*(?:\\)?$/ && |
| 1630 | $line !~ /for\s*\(\s+;/) { | 1652 | $line !~ /for\s*\(\s+;/) { |
| 1631 | ERROR("space prohibited after that open parenthesis '('\n" . $herecurr); | 1653 | ERROR("space prohibited after that open parenthesis '('\n" . $herecurr); |
| 1632 | } | 1654 | } |
| 1633 | if ($line =~ /(\s+)\)/ && $line !~ /^.\s*\)/ && | 1655 | if ($line =~ /(\s+)\)/ && $line !~ /^.\s*\)/ && |
| 1634 | $line !~ /for\s*\(.*;\s+\)/) { | 1656 | $line !~ /for\s*\(.*;\s+\)/ && |
| 1657 | $line !~ /:\s+\)/) { | ||
| 1635 | ERROR("space prohibited before that close parenthesis ')'\n" . $herecurr); | 1658 | ERROR("space prohibited before that close parenthesis ')'\n" . $herecurr); |
| 1636 | } | 1659 | } |
| 1637 | 1660 | ||
| @@ -1641,6 +1664,23 @@ sub process { | |||
| 1641 | WARN("labels should not be indented\n" . $herecurr); | 1664 | WARN("labels should not be indented\n" . $herecurr); |
| 1642 | } | 1665 | } |
| 1643 | 1666 | ||
| 1667 | # Return is not a function. | ||
| 1668 | if (defined($stat) && $stat =~ /^.\s*return(\s*)(\(.*);/s) { | ||
| 1669 | my $spacing = $1; | ||
| 1670 | my $value = $2; | ||
| 1671 | |||
| 1672 | # Flatten any parentheses and braces | ||
| 1673 | while ($value =~ s/\([^\(\)]*\)/1/) { | ||
| 1674 | } | ||
| 1675 | |||
| 1676 | if ($value =~ /^(?:$Ident|-?$Constant)$/) { | ||
| 1677 | ERROR("return is not a function, parentheses are not required\n" . $herecurr); | ||
| 1678 | |||
| 1679 | } elsif ($spacing !~ /\s+/) { | ||
| 1680 | ERROR("space required before the open parenthesis '('\n" . $herecurr); | ||
| 1681 | } | ||
| 1682 | } | ||
| 1683 | |||
| 1644 | # Need a space before open parenthesis after if, while etc | 1684 | # Need a space before open parenthesis after if, while etc |
| 1645 | if ($line=~/\b(if|while|for|switch)\(/) { | 1685 | if ($line=~/\b(if|while|for|switch)\(/) { |
| 1646 | ERROR("space required before the open parenthesis '('\n" . $herecurr); | 1686 | ERROR("space required before the open parenthesis '('\n" . $herecurr); |
| @@ -1660,7 +1700,7 @@ sub process { | |||
| 1660 | $s =~ s/\n.*//g; | 1700 | $s =~ s/\n.*//g; |
| 1661 | $s =~ s/$;//g; # Remove any comments | 1701 | $s =~ s/$;//g; # Remove any comments |
| 1662 | if (length($c) && $s !~ /^\s*({|;|)\s*\\*\s*$/ && | 1702 | if (length($c) && $s !~ /^\s*({|;|)\s*\\*\s*$/ && |
| 1663 | $c !~ /^.\#\s*if/) | 1703 | $c !~ /^.\s*\#\s*if/) |
| 1664 | { | 1704 | { |
| 1665 | ERROR("trailing statements should be on next line\n" . $herecurr); | 1705 | ERROR("trailing statements should be on next line\n" . $herecurr); |
| 1666 | } | 1706 | } |
| @@ -1719,14 +1759,16 @@ sub process { | |||
| 1719 | # } | 1759 | # } |
| 1720 | 1760 | ||
| 1721 | #no spaces allowed after \ in define | 1761 | #no spaces allowed after \ in define |
| 1722 | if ($line=~/\#define.*\\\s$/) { | 1762 | if ($line=~/\#\s*define.*\\\s$/) { |
| 1723 | WARN("Whitepspace after \\ makes next lines useless\n" . $herecurr); | 1763 | WARN("Whitepspace after \\ makes next lines useless\n" . $herecurr); |
| 1724 | } | 1764 | } |
| 1725 | 1765 | ||
| 1726 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) | 1766 | #warn if <asm/foo.h> is #included and <linux/foo.h> is available (uses RAW line) |
| 1727 | if ($tree && $rawline =~ m{^.\#\s*include\s*\<asm\/(.*)\.h\>}) { | 1767 | if ($tree && $rawline =~ m{^.\s*\#\s*include\s*\<asm\/(.*)\.h\>}) { |
| 1728 | my $checkfile = "$root/include/linux/$1.h"; | 1768 | my $checkfile = "include/linux/$1.h"; |
| 1729 | if (-f $checkfile && $1 ne 'irq') { | 1769 | if (-f "$root/$checkfile" && $realfile ne $checkfile && |
| 1770 | $1 ne 'irq') | ||
| 1771 | { | ||
| 1730 | WARN("Use #include <linux/$1.h> instead of <asm/$1.h>\n" . | 1772 | WARN("Use #include <linux/$1.h> instead of <asm/$1.h>\n" . |
| 1731 | $herecurr); | 1773 | $herecurr); |
| 1732 | } | 1774 | } |
| @@ -1735,45 +1777,87 @@ sub process { | |||
| 1735 | # multi-statement macros should be enclosed in a do while loop, grab the | 1777 | # multi-statement macros should be enclosed in a do while loop, grab the |
| 1736 | # first statement and ensure its the whole macro if its not enclosed | 1778 | # first statement and ensure its the whole macro if its not enclosed |
| 1737 | # in a known good container | 1779 | # in a known good container |
| 1738 | if ($prevline =~ /\#define.*\\/ && | 1780 | if ($line =~ /^.\s*\#\s*define\s*$Ident(\()?/) { |
| 1739 | $prevline !~/(?:do\s+{|\(\{|\{)/ && | ||
| 1740 | $line !~ /(?:do\s+{|\(\{|\{)/ && | ||
| 1741 | $line !~ /^.\s*$Declare\s/) { | ||
| 1742 | # Grab the first statement, if that is the entire macro | ||
| 1743 | # its ok. This may start either on the #define line | ||
| 1744 | # or the one below. | ||
| 1745 | my $ln = $linenr; | 1781 | my $ln = $linenr; |
| 1746 | my $cnt = $realcnt; | 1782 | my $cnt = $realcnt; |
| 1747 | my $off = 0; | 1783 | my ($off, $dstat, $dcond, $rest); |
| 1784 | my $ctx = ''; | ||
| 1748 | 1785 | ||
| 1749 | # If the macro starts on the define line start | 1786 | my $args = defined($1); |
| 1750 | # grabbing the statement after the identifier | 1787 | |
| 1751 | $prevline =~ m{^(.#\s*define\s*$Ident(?:\([^\)]*\))?\s*)(.*)\\\s*$}; | 1788 | # Find the end of the macro and limit our statement |
| 1752 | ##print "1<$1> 2<$2>\n"; | 1789 | # search to that. |
| 1753 | if (defined $2 && $2 ne '') { | 1790 | while ($cnt > 0 && defined $lines[$ln - 1] && |
| 1754 | $off = length($1); | 1791 | $lines[$ln - 1] =~ /^(?:-|..*\\$)/) |
| 1755 | $ln--; | 1792 | { |
| 1756 | $cnt++; | 1793 | $ctx .= $rawlines[$ln - 1] . "\n"; |
| 1757 | while ($lines[$ln - 1] =~ /^-/) { | 1794 | $ln++; |
| 1758 | $ln--; | 1795 | $cnt--; |
| 1759 | $cnt++; | 1796 | } |
| 1760 | } | 1797 | $ctx .= $rawlines[$ln - 1]; |
| 1798 | |||
| 1799 | ($dstat, $dcond, $ln, $cnt, $off) = | ||
| 1800 | ctx_statement_block($linenr, $ln - $linenr + 1, 0); | ||
| 1801 | #print "dstat<$dstat> dcond<$dcond> cnt<$cnt> off<$off>\n"; | ||
| 1802 | #print "LINE<$lines[$ln]> len<" . length($lines[$ln]) . "\n"; | ||
| 1803 | |||
| 1804 | # Extract the remainder of the define (if any) and | ||
| 1805 | # rip off surrounding spaces, and trailing \'s. | ||
| 1806 | $rest = ''; | ||
| 1807 | if (defined $lines[$ln - 1] && | ||
| 1808 | $off > length($lines[$ln - 1])) | ||
| 1809 | { | ||
| 1810 | $ln++; | ||
| 1811 | $cnt--; | ||
| 1812 | $off = 0; | ||
| 1813 | } | ||
| 1814 | while ($cnt > 0) { | ||
| 1815 | $rest .= substr($lines[$ln - 1], $off) . "\n"; | ||
| 1816 | $ln++; | ||
| 1817 | $cnt--; | ||
| 1818 | $off = 0; | ||
| 1819 | } | ||
| 1820 | $rest =~ s/\\\n.//g; | ||
| 1821 | $rest =~ s/^\s*//s; | ||
| 1822 | $rest =~ s/\s*$//s; | ||
| 1823 | |||
| 1824 | # Clean up the original statement. | ||
| 1825 | if ($args) { | ||
| 1826 | substr($dstat, 0, length($dcond), ''); | ||
| 1827 | } else { | ||
| 1828 | $dstat =~ s/^.\s*\#\s*define\s+$Ident\s*//; | ||
| 1761 | } | 1829 | } |
| 1762 | my @ctx = ctx_statement($ln, $cnt, $off); | 1830 | $dstat =~ s/\\\n.//g; |
| 1763 | my $ctx_ln = $ln + $#ctx + 1; | 1831 | $dstat =~ s/^\s*//s; |
| 1764 | my $ctx = join("\n", @ctx); | 1832 | $dstat =~ s/\s*$//s; |
| 1765 | 1833 | ||
| 1766 | # Pull in any empty extension lines. | 1834 | # Flatten any parentheses and braces |
| 1767 | while ($ctx =~ /\\$/ && | 1835 | while ($dstat =~ s/\([^\(\)]*\)/1/) { |
| 1768 | $lines[$ctx_ln - 1] =~ /^.\s*(?:\\)?$/) { | 1836 | } |
| 1769 | $ctx .= $lines[$ctx_ln - 1]; | 1837 | while ($dstat =~ s/\{[^\{\}]*\}/1/) { |
| 1770 | $ctx_ln++; | ||
| 1771 | } | 1838 | } |
| 1772 | 1839 | ||
| 1773 | if ($ctx =~ /\\$/) { | 1840 | my $exceptions = qr{ |
| 1774 | if ($ctx =~ /;/) { | 1841 | $Declare| |
| 1842 | module_param_named| | ||
| 1843 | MODULE_PARAM_DESC| | ||
| 1844 | DECLARE_PER_CPU| | ||
| 1845 | DEFINE_PER_CPU| | ||
| 1846 | __typeof__\( | ||
| 1847 | }x; | ||
| 1848 | if ($rest ne '') { | ||
| 1849 | if ($rest !~ /while\s*\(/ && | ||
| 1850 | $dstat !~ /$exceptions/) | ||
| 1851 | { | ||
| 1775 | ERROR("Macros with multiple statements should be enclosed in a do - while loop\n" . "$here\n$ctx\n"); | 1852 | ERROR("Macros with multiple statements should be enclosed in a do - while loop\n" . "$here\n$ctx\n"); |
| 1776 | } else { | 1853 | } |
| 1854 | |||
| 1855 | } elsif ($ctx !~ /;/) { | ||
| 1856 | if ($dstat ne '' && | ||
| 1857 | $dstat !~ /^(?:$Ident|-?$Constant)$/ && | ||
| 1858 | $dstat !~ /$exceptions/ && | ||
| 1859 | $dstat =~ /$Operators/) | ||
| 1860 | { | ||
| 1777 | ERROR("Macros with complex values should be enclosed in parenthesis\n" . "$here\n$ctx\n"); | 1861 | ERROR("Macros with complex values should be enclosed in parenthesis\n" . "$here\n$ctx\n"); |
| 1778 | } | 1862 | } |
| 1779 | } | 1863 | } |
| @@ -1884,7 +1968,7 @@ sub process { | |||
| 1884 | 1968 | ||
| 1885 | # don't include deprecated include files (uses RAW line) | 1969 | # don't include deprecated include files (uses RAW line) |
| 1886 | for my $inc (@dep_includes) { | 1970 | for my $inc (@dep_includes) { |
| 1887 | if ($rawline =~ m@\#\s*include\s*\<$inc>@) { | 1971 | if ($rawline =~ m@^.\s*\#\s*include\s*\<$inc>@) { |
| 1888 | ERROR("Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n" . $herecurr); | 1972 | ERROR("Don't use <$inc>: see Documentation/feature-removal-schedule.txt\n" . $herecurr); |
| 1889 | } | 1973 | } |
| 1890 | } | 1974 | } |
| @@ -1908,7 +1992,7 @@ sub process { | |||
| 1908 | } | 1992 | } |
| 1909 | 1993 | ||
| 1910 | # warn about #if 0 | 1994 | # warn about #if 0 |
| 1911 | if ($line =~ /^.#\s*if\s+0\b/) { | 1995 | if ($line =~ /^.\s*\#\s*if\s+0\b/) { |
| 1912 | CHK("if this code is redundant consider removing it\n" . | 1996 | CHK("if this code is redundant consider removing it\n" . |
| 1913 | $herecurr); | 1997 | $herecurr); |
| 1914 | } | 1998 | } |
| @@ -1920,23 +2004,16 @@ sub process { | |||
| 1920 | WARN("kfree(NULL) is safe this check is probabally not required\n" . $hereprev); | 2004 | WARN("kfree(NULL) is safe this check is probabally not required\n" . $hereprev); |
| 1921 | } | 2005 | } |
| 1922 | } | 2006 | } |
| 1923 | # check for needless usb_free_urb() checks | ||
| 1924 | if ($prevline =~ /\bif\s*\(([^\)]*)\)/) { | ||
| 1925 | my $expr = $1; | ||
| 1926 | if ($line =~ /\busb_free_urb\(\Q$expr\E\);/) { | ||
| 1927 | WARN("usb_free_urb(NULL) is safe this check is probabally not required\n" . $hereprev); | ||
| 1928 | } | ||
| 1929 | } | ||
| 1930 | 2007 | ||
| 1931 | # warn about #ifdefs in C files | 2008 | # warn about #ifdefs in C files |
| 1932 | # if ($line =~ /^.#\s*if(|n)def/ && ($realfile =~ /\.c$/)) { | 2009 | # if ($line =~ /^.\s*\#\s*if(|n)def/ && ($realfile =~ /\.c$/)) { |
| 1933 | # print "#ifdef in C files should be avoided\n"; | 2010 | # print "#ifdef in C files should be avoided\n"; |
| 1934 | # print "$herecurr"; | 2011 | # print "$herecurr"; |
| 1935 | # $clean = 0; | 2012 | # $clean = 0; |
| 1936 | # } | 2013 | # } |
| 1937 | 2014 | ||
| 1938 | # warn about spacing in #ifdefs | 2015 | # warn about spacing in #ifdefs |
| 1939 | if ($line =~ /^.#\s*(ifdef|ifndef|elif)\s\s+/) { | 2016 | if ($line =~ /^.\s*\#\s*(ifdef|ifndef|elif)\s\s+/) { |
| 1940 | ERROR("exactly one space required after that #$1\n" . $herecurr); | 2017 | ERROR("exactly one space required after that #$1\n" . $herecurr); |
| 1941 | } | 2018 | } |
| 1942 | 2019 | ||
| @@ -1955,7 +2032,7 @@ sub process { | |||
| 1955 | } | 2032 | } |
| 1956 | } | 2033 | } |
| 1957 | # check of hardware specific defines | 2034 | # check of hardware specific defines |
| 1958 | if ($line =~ m@^.#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) { | 2035 | if ($line =~ m@^.\s*\#\s*if.*\b(__i386__|__powerpc64__|__sun__|__s390x__)\b@ && $realfile !~ m@include/asm-@) { |
| 1959 | CHK("architecture specific defines should be avoided\n" . $herecurr); | 2036 | CHK("architecture specific defines should be avoided\n" . $herecurr); |
| 1960 | } | 2037 | } |
| 1961 | 2038 | ||
| @@ -1973,15 +2050,18 @@ sub process { | |||
| 1973 | 2050 | ||
| 1974 | # check for new externs in .c files. | 2051 | # check for new externs in .c files. |
| 1975 | if ($realfile =~ /\.c$/ && defined $stat && | 2052 | if ($realfile =~ /\.c$/ && defined $stat && |
| 1976 | $stat =~ /^.\s*(?:extern\s+)?$Type\s+$Ident(\s*)\(/s) | 2053 | $stat =~ /^.\s*(?:extern\s+)?$Type\s+($Ident)(\s*)\(/s) |
| 1977 | { | 2054 | { |
| 1978 | my $paren_space = $1; | 2055 | my $function_name = $1; |
| 2056 | my $paren_space = $2; | ||
| 1979 | 2057 | ||
| 1980 | my $s = $stat; | 2058 | my $s = $stat; |
| 1981 | if (defined $cond) { | 2059 | if (defined $cond) { |
| 1982 | substr($s, 0, length($cond), ''); | 2060 | substr($s, 0, length($cond), ''); |
| 1983 | } | 2061 | } |
| 1984 | if ($s =~ /^\s*;/) { | 2062 | if ($s =~ /^\s*;/ && |
| 2063 | $function_name ne 'uninitialized_var') | ||
| 2064 | { | ||
| 1985 | WARN("externs should be avoided in .c files\n" . $herecurr); | 2065 | WARN("externs should be avoided in .c files\n" . $herecurr); |
| 1986 | } | 2066 | } |
| 1987 | 2067 | ||
| @@ -2030,8 +2110,8 @@ sub process { | |||
| 2030 | # use of NR_CPUS is usually wrong | 2110 | # use of NR_CPUS is usually wrong |
| 2031 | # ignore definitions of NR_CPUS and usage to define arrays as likely right | 2111 | # ignore definitions of NR_CPUS and usage to define arrays as likely right |
| 2032 | if ($line =~ /\bNR_CPUS\b/ && | 2112 | if ($line =~ /\bNR_CPUS\b/ && |
| 2033 | $line !~ /^.#\s*if\b.*\bNR_CPUS\b/ && | 2113 | $line !~ /^.\s*\s*#\s*if\b.*\bNR_CPUS\b/ && |
| 2034 | $line !~ /^.#\s*define\b.*\bNR_CPUS\b/ && | 2114 | $line !~ /^.\s*\s*#\s*define\b.*\bNR_CPUS\b/ && |
| 2035 | $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/ && | 2115 | $line !~ /^.\s*$Declare\s.*\[[^\]]*NR_CPUS[^\]]*\]/ && |
| 2036 | $line !~ /\[[^\]]*\.\.\.[^\]]*NR_CPUS[^\]]*\]/ && | 2116 | $line !~ /\[[^\]]*\.\.\.[^\]]*NR_CPUS[^\]]*\]/ && |
| 2037 | $line !~ /\[[^\]]*NR_CPUS[^\]]*\.\.\.[^\]]*\]/) | 2117 | $line !~ /\[[^\]]*NR_CPUS[^\]]*\.\.\.[^\]]*\]/) |
diff --git a/scripts/decodecode b/scripts/decodecode index 235d3938529d..235d3938529d 100644..100755 --- a/scripts/decodecode +++ b/scripts/decodecode | |||
diff --git a/scripts/ver_linux b/scripts/ver_linux index ab69ecefedbd..7ac0e309be09 100755 --- a/scripts/ver_linux +++ b/scripts/ver_linux | |||
| @@ -12,12 +12,9 @@ echo ' ' | |||
| 12 | uname -a | 12 | uname -a |
| 13 | echo ' ' | 13 | echo ' ' |
| 14 | 14 | ||
| 15 | gcc --version 2>&1| head -n 1 | grep -v gcc | awk \ | 15 | gcc -dumpversion 2>&1| awk \ |
| 16 | 'NR==1{print "Gnu C ", $1}' | 16 | 'NR==1{print "Gnu C ", $1}' |
| 17 | 17 | ||
| 18 | gcc --version 2>&1| grep gcc | awk \ | ||
| 19 | 'NR==1{print "Gnu C ", $3}' | ||
| 20 | |||
| 21 | make --version 2>&1 | awk -F, '{print $1}' | awk \ | 18 | make --version 2>&1 | awk -F, '{print $1}' | awk \ |
| 22 | '/GNU Make/{print "Gnu make ",$NF}' | 19 | '/GNU Make/{print "Gnu make ",$NF}' |
| 23 | 20 | ||
diff --git a/security/device_cgroup.c b/security/device_cgroup.c index 4ea583689eec..baf348834b66 100644 --- a/security/device_cgroup.c +++ b/security/device_cgroup.c | |||
| @@ -49,10 +49,14 @@ struct dev_cgroup { | |||
| 49 | spinlock_t lock; | 49 | spinlock_t lock; |
| 50 | }; | 50 | }; |
| 51 | 51 | ||
| 52 | static inline struct dev_cgroup *css_to_devcgroup(struct cgroup_subsys_state *s) | ||
| 53 | { | ||
| 54 | return container_of(s, struct dev_cgroup, css); | ||
| 55 | } | ||
| 56 | |||
| 52 | static inline struct dev_cgroup *cgroup_to_devcgroup(struct cgroup *cgroup) | 57 | static inline struct dev_cgroup *cgroup_to_devcgroup(struct cgroup *cgroup) |
| 53 | { | 58 | { |
| 54 | return container_of(cgroup_subsys_state(cgroup, devices_subsys_id), | 59 | return css_to_devcgroup(cgroup_subsys_state(cgroup, devices_subsys_id)); |
| 55 | struct dev_cgroup, css); | ||
| 56 | } | 60 | } |
| 57 | 61 | ||
| 58 | struct cgroup_subsys devices_subsys; | 62 | struct cgroup_subsys devices_subsys; |
| @@ -102,7 +106,7 @@ free_and_exit: | |||
| 102 | static int dev_whitelist_add(struct dev_cgroup *dev_cgroup, | 106 | static int dev_whitelist_add(struct dev_cgroup *dev_cgroup, |
| 103 | struct dev_whitelist_item *wh) | 107 | struct dev_whitelist_item *wh) |
| 104 | { | 108 | { |
| 105 | struct dev_whitelist_item *whcopy; | 109 | struct dev_whitelist_item *whcopy, *walk; |
| 106 | 110 | ||
| 107 | whcopy = kmalloc(sizeof(*whcopy), GFP_KERNEL); | 111 | whcopy = kmalloc(sizeof(*whcopy), GFP_KERNEL); |
| 108 | if (!whcopy) | 112 | if (!whcopy) |
| @@ -110,7 +114,21 @@ static int dev_whitelist_add(struct dev_cgroup *dev_cgroup, | |||
| 110 | 114 | ||
| 111 | memcpy(whcopy, wh, sizeof(*whcopy)); | 115 | memcpy(whcopy, wh, sizeof(*whcopy)); |
| 112 | spin_lock(&dev_cgroup->lock); | 116 | spin_lock(&dev_cgroup->lock); |
| 113 | list_add_tail(&whcopy->list, &dev_cgroup->whitelist); | 117 | list_for_each_entry(walk, &dev_cgroup->whitelist, list) { |
| 118 | if (walk->type != wh->type) | ||
| 119 | continue; | ||
| 120 | if (walk->major != wh->major) | ||
| 121 | continue; | ||
| 122 | if (walk->minor != wh->minor) | ||
| 123 | continue; | ||
| 124 | |||
| 125 | walk->access |= wh->access; | ||
| 126 | kfree(whcopy); | ||
| 127 | whcopy = NULL; | ||
| 128 | } | ||
| 129 | |||
| 130 | if (whcopy != NULL) | ||
| 131 | list_add_tail(&whcopy->list, &dev_cgroup->whitelist); | ||
| 114 | spin_unlock(&dev_cgroup->lock); | 132 | spin_unlock(&dev_cgroup->lock); |
| 115 | return 0; | 133 | return 0; |
| 116 | } | 134 | } |
| @@ -502,7 +520,6 @@ struct cgroup_subsys devices_subsys = { | |||
| 502 | 520 | ||
| 503 | int devcgroup_inode_permission(struct inode *inode, int mask) | 521 | int devcgroup_inode_permission(struct inode *inode, int mask) |
| 504 | { | 522 | { |
| 505 | struct cgroup *cgroup; | ||
| 506 | struct dev_cgroup *dev_cgroup; | 523 | struct dev_cgroup *dev_cgroup; |
| 507 | struct dev_whitelist_item *wh; | 524 | struct dev_whitelist_item *wh; |
| 508 | 525 | ||
| @@ -511,8 +528,8 @@ int devcgroup_inode_permission(struct inode *inode, int mask) | |||
| 511 | return 0; | 528 | return 0; |
| 512 | if (!S_ISBLK(inode->i_mode) && !S_ISCHR(inode->i_mode)) | 529 | if (!S_ISBLK(inode->i_mode) && !S_ISCHR(inode->i_mode)) |
| 513 | return 0; | 530 | return 0; |
| 514 | cgroup = task_cgroup(current, devices_subsys.subsys_id); | 531 | dev_cgroup = css_to_devcgroup(task_subsys_state(current, |
| 515 | dev_cgroup = cgroup_to_devcgroup(cgroup); | 532 | devices_subsys_id)); |
| 516 | if (!dev_cgroup) | 533 | if (!dev_cgroup) |
| 517 | return 0; | 534 | return 0; |
| 518 | 535 | ||
| @@ -543,12 +560,11 @@ acc_check: | |||
| 543 | 560 | ||
| 544 | int devcgroup_inode_mknod(int mode, dev_t dev) | 561 | int devcgroup_inode_mknod(int mode, dev_t dev) |
| 545 | { | 562 | { |
| 546 | struct cgroup *cgroup; | ||
| 547 | struct dev_cgroup *dev_cgroup; | 563 | struct dev_cgroup *dev_cgroup; |
| 548 | struct dev_whitelist_item *wh; | 564 | struct dev_whitelist_item *wh; |
| 549 | 565 | ||
| 550 | cgroup = task_cgroup(current, devices_subsys.subsys_id); | 566 | dev_cgroup = css_to_devcgroup(task_subsys_state(current, |
| 551 | dev_cgroup = cgroup_to_devcgroup(cgroup); | 567 | devices_subsys_id)); |
| 552 | if (!dev_cgroup) | 568 | if (!dev_cgroup) |
| 553 | return 0; | 569 | return 0; |
| 554 | 570 | ||
diff --git a/security/keys/internal.h b/security/keys/internal.h index 8c05587f5018..b39f5c2e2c4b 100644 --- a/security/keys/internal.h +++ b/security/keys/internal.h | |||
| @@ -78,7 +78,6 @@ extern unsigned key_quota_maxbytes; | |||
| 78 | 78 | ||
| 79 | extern struct rb_root key_serial_tree; | 79 | extern struct rb_root key_serial_tree; |
| 80 | extern spinlock_t key_serial_lock; | 80 | extern spinlock_t key_serial_lock; |
| 81 | extern struct semaphore key_alloc_sem; | ||
| 82 | extern struct mutex key_construction_mutex; | 81 | extern struct mutex key_construction_mutex; |
| 83 | extern wait_queue_head_t request_key_conswq; | 82 | extern wait_queue_head_t request_key_conswq; |
| 84 | 83 | ||
diff --git a/security/smack/smack_lsm.c b/security/smack/smack_lsm.c index b5c8f9237008..4a09293efa00 100644 --- a/security/smack/smack_lsm.c +++ b/security/smack/smack_lsm.c | |||
| @@ -1881,6 +1881,18 @@ static void smack_d_instantiate(struct dentry *opt_dentry, struct inode *inode) | |||
| 1881 | final = sbsp->smk_default; | 1881 | final = sbsp->smk_default; |
| 1882 | 1882 | ||
| 1883 | /* | 1883 | /* |
| 1884 | * If this is the root inode the superblock | ||
| 1885 | * may be in the process of initialization. | ||
| 1886 | * If that is the case use the root value out | ||
| 1887 | * of the superblock. | ||
| 1888 | */ | ||
| 1889 | if (opt_dentry->d_parent == opt_dentry) { | ||
| 1890 | isp->smk_inode = sbsp->smk_root; | ||
| 1891 | isp->smk_flags |= SMK_INODE_INSTANT; | ||
| 1892 | goto unlockandout; | ||
| 1893 | } | ||
| 1894 | |||
| 1895 | /* | ||
| 1884 | * This is pretty hackish. | 1896 | * This is pretty hackish. |
| 1885 | * Casey says that we shouldn't have to do | 1897 | * Casey says that we shouldn't have to do |
| 1886 | * file system specific code, but it does help | 1898 | * file system specific code, but it does help |
diff --git a/sound/drivers/pcsp/pcsp.h b/sound/drivers/pcsp/pcsp.h index f07cc1ee1fe7..1d661f795e8c 100644 --- a/sound/drivers/pcsp/pcsp.h +++ b/sound/drivers/pcsp/pcsp.h | |||
| @@ -24,7 +24,8 @@ static DEFINE_SPINLOCK(i8253_lock); | |||
| 24 | /* default timer freq for PC-Speaker: 18643 Hz */ | 24 | /* default timer freq for PC-Speaker: 18643 Hz */ |
| 25 | #define DIV_18KHZ 64 | 25 | #define DIV_18KHZ 64 |
| 26 | #define MAX_DIV DIV_18KHZ | 26 | #define MAX_DIV DIV_18KHZ |
| 27 | #define CUR_DIV() (MAX_DIV >> chip->treble) | 27 | #define CALC_DIV(d) (MAX_DIV >> (d)) |
| 28 | #define CUR_DIV() CALC_DIV(chip->treble) | ||
| 28 | #define PCSP_MAX_TREBLE 1 | 29 | #define PCSP_MAX_TREBLE 1 |
| 29 | 30 | ||
| 30 | /* unfortunately, with hrtimers 37KHz does not work very well :( */ | 31 | /* unfortunately, with hrtimers 37KHz does not work very well :( */ |
| @@ -36,7 +37,8 @@ static DEFINE_SPINLOCK(i8253_lock); | |||
| 36 | #define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1) | 37 | #define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1) |
| 37 | #define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV) | 38 | #define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV) |
| 38 | #define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble)) | 39 | #define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble)) |
| 39 | #define PCSP_RATE() (PIT_TICK_RATE / CUR_DIV()) | 40 | #define PCSP_CALC_RATE(i) (PIT_TICK_RATE / CALC_DIV(i)) |
| 41 | #define PCSP_RATE() PCSP_CALC_RATE(chip->treble) | ||
| 40 | #define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE | 42 | #define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE |
| 41 | #define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE | 43 | #define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE |
| 42 | #define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1) | 44 | #define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1) |
diff --git a/sound/drivers/pcsp/pcsp_mixer.c b/sound/drivers/pcsp/pcsp_mixer.c index 64a695fef74e..caeb0f57fcca 100644 --- a/sound/drivers/pcsp/pcsp_mixer.c +++ b/sound/drivers/pcsp/pcsp_mixer.c | |||
| @@ -50,7 +50,8 @@ static int pcsp_treble_info(struct snd_kcontrol *kcontrol, | |||
| 50 | uinfo->value.enumerated.items = chip->max_treble + 1; | 50 | uinfo->value.enumerated.items = chip->max_treble + 1; |
| 51 | if (uinfo->value.enumerated.item > chip->max_treble) | 51 | if (uinfo->value.enumerated.item > chip->max_treble) |
| 52 | uinfo->value.enumerated.item = chip->max_treble; | 52 | uinfo->value.enumerated.item = chip->max_treble; |
| 53 | sprintf(uinfo->value.enumerated.name, "%d", PCSP_RATE()); | 53 | sprintf(uinfo->value.enumerated.name, "%d", |
| 54 | PCSP_CALC_RATE(uinfo->value.enumerated.item)); | ||
| 54 | return 0; | 55 | return 0; |
| 55 | } | 56 | } |
| 56 | 57 | ||
diff --git a/sound/pci/ac97/ac97_patch.c b/sound/pci/ac97/ac97_patch.c index 2da89810ca10..1292dcee072d 100644 --- a/sound/pci/ac97/ac97_patch.c +++ b/sound/pci/ac97/ac97_patch.c | |||
| @@ -1971,6 +1971,9 @@ static int snd_ac97_ad1888_lohpsel_get(struct snd_kcontrol *kcontrol, struct snd | |||
| 1971 | 1971 | ||
| 1972 | val = ac97->regs[AC97_AD_MISC]; | 1972 | val = ac97->regs[AC97_AD_MISC]; |
| 1973 | ucontrol->value.integer.value[0] = !(val & AC97_AD198X_LOSEL); | 1973 | ucontrol->value.integer.value[0] = !(val & AC97_AD198X_LOSEL); |
| 1974 | if (ac97->spec.ad18xx.lo_as_master) | ||
| 1975 | ucontrol->value.integer.value[0] = | ||
| 1976 | !ucontrol->value.integer.value[0]; | ||
| 1974 | return 0; | 1977 | return 0; |
| 1975 | } | 1978 | } |
| 1976 | 1979 | ||
| @@ -1979,8 +1982,10 @@ static int snd_ac97_ad1888_lohpsel_put(struct snd_kcontrol *kcontrol, struct snd | |||
| 1979 | struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); | 1982 | struct snd_ac97 *ac97 = snd_kcontrol_chip(kcontrol); |
| 1980 | unsigned short val; | 1983 | unsigned short val; |
| 1981 | 1984 | ||
| 1982 | val = !ucontrol->value.integer.value[0] | 1985 | val = !ucontrol->value.integer.value[0]; |
| 1983 | ? (AC97_AD198X_LOSEL | AC97_AD198X_HPSEL) : 0; | 1986 | if (ac97->spec.ad18xx.lo_as_master) |
| 1987 | val = !val; | ||
| 1988 | val = val ? (AC97_AD198X_LOSEL | AC97_AD198X_HPSEL) : 0; | ||
| 1984 | return snd_ac97_update_bits(ac97, AC97_AD_MISC, | 1989 | return snd_ac97_update_bits(ac97, AC97_AD_MISC, |
| 1985 | AC97_AD198X_LOSEL | AC97_AD198X_HPSEL, val); | 1990 | AC97_AD198X_LOSEL | AC97_AD198X_HPSEL, val); |
| 1986 | } | 1991 | } |
| @@ -2031,7 +2036,7 @@ static void ad1888_update_jacks(struct snd_ac97 *ac97) | |||
| 2031 | { | 2036 | { |
| 2032 | unsigned short val = 0; | 2037 | unsigned short val = 0; |
| 2033 | /* clear LODIS if shared jack is to be used for Surround out */ | 2038 | /* clear LODIS if shared jack is to be used for Surround out */ |
| 2034 | if (is_shared_linein(ac97)) | 2039 | if (!ac97->spec.ad18xx.lo_as_master && is_shared_linein(ac97)) |
| 2035 | val |= (1 << 12); | 2040 | val |= (1 << 12); |
| 2036 | /* clear CLDIS if shared jack is to be used for C/LFE out */ | 2041 | /* clear CLDIS if shared jack is to be used for C/LFE out */ |
| 2037 | if (is_shared_micin(ac97)) | 2042 | if (is_shared_micin(ac97)) |
| @@ -2067,9 +2072,13 @@ static const struct snd_kcontrol_new snd_ac97_ad1888_controls[] = { | |||
| 2067 | 2072 | ||
| 2068 | static int patch_ad1888_specific(struct snd_ac97 *ac97) | 2073 | static int patch_ad1888_specific(struct snd_ac97 *ac97) |
| 2069 | { | 2074 | { |
| 2070 | /* rename 0x04 as "Master" and 0x02 as "Master Surround" */ | 2075 | if (!ac97->spec.ad18xx.lo_as_master) { |
| 2071 | snd_ac97_rename_vol_ctl(ac97, "Master Playback", "Master Surround Playback"); | 2076 | /* rename 0x04 as "Master" and 0x02 as "Master Surround" */ |
| 2072 | snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", "Master Playback"); | 2077 | snd_ac97_rename_vol_ctl(ac97, "Master Playback", |
| 2078 | "Master Surround Playback"); | ||
| 2079 | snd_ac97_rename_vol_ctl(ac97, "Headphone Playback", | ||
| 2080 | "Master Playback"); | ||
| 2081 | } | ||
| 2073 | return patch_build_controls(ac97, snd_ac97_ad1888_controls, ARRAY_SIZE(snd_ac97_ad1888_controls)); | 2082 | return patch_build_controls(ac97, snd_ac97_ad1888_controls, ARRAY_SIZE(snd_ac97_ad1888_controls)); |
| 2074 | } | 2083 | } |
| 2075 | 2084 | ||
| @@ -2088,16 +2097,27 @@ static int patch_ad1888(struct snd_ac97 * ac97) | |||
| 2088 | 2097 | ||
| 2089 | patch_ad1881(ac97); | 2098 | patch_ad1881(ac97); |
| 2090 | ac97->build_ops = &patch_ad1888_build_ops; | 2099 | ac97->build_ops = &patch_ad1888_build_ops; |
| 2091 | /* Switch FRONT/SURROUND LINE-OUT/HP-OUT default connection */ | 2100 | |
| 2092 | /* it seems that most vendors connect line-out connector to headphone out of AC'97 */ | 2101 | /* |
| 2102 | * LO can be used as a real line-out on some devices, | ||
| 2103 | * and we need to revert the front/surround mixer switches | ||
| 2104 | */ | ||
| 2105 | if (ac97->subsystem_vendor == 0x1043 && | ||
| 2106 | ac97->subsystem_device == 0x1193) /* ASUS A9T laptop */ | ||
| 2107 | ac97->spec.ad18xx.lo_as_master = 1; | ||
| 2108 | |||
| 2109 | misc = snd_ac97_read(ac97, AC97_AD_MISC); | ||
| 2093 | /* AD-compatible mode */ | 2110 | /* AD-compatible mode */ |
| 2094 | /* Stereo mutes enabled */ | 2111 | /* Stereo mutes enabled */ |
| 2095 | misc = snd_ac97_read(ac97, AC97_AD_MISC); | 2112 | misc |= AC97_AD198X_MSPLT | AC97_AD198X_AC97NC; |
| 2096 | snd_ac97_write_cache(ac97, AC97_AD_MISC, misc | | 2113 | if (!ac97->spec.ad18xx.lo_as_master) |
| 2097 | AC97_AD198X_LOSEL | | 2114 | /* Switch FRONT/SURROUND LINE-OUT/HP-OUT default connection */ |
| 2098 | AC97_AD198X_HPSEL | | 2115 | /* it seems that most vendors connect line-out connector to |
| 2099 | AC97_AD198X_MSPLT | | 2116 | * headphone out of AC'97 |
| 2100 | AC97_AD198X_AC97NC); | 2117 | */ |
| 2118 | misc |= AC97_AD198X_LOSEL | AC97_AD198X_HPSEL; | ||
| 2119 | |||
| 2120 | snd_ac97_write_cache(ac97, AC97_AD_MISC, misc); | ||
| 2101 | ac97->flags |= AC97_STEREO_MUTES; | 2121 | ac97->flags |= AC97_STEREO_MUTES; |
| 2102 | return 0; | 2122 | return 0; |
| 2103 | } | 2123 | } |
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index abde5b901884..548c9cc81af5 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
| @@ -1818,13 +1818,6 @@ int __devinit snd_emu10k1_create(struct snd_card *card, | |||
| 1818 | } | 1818 | } |
| 1819 | emu->port = pci_resource_start(pci, 0); | 1819 | emu->port = pci_resource_start(pci, 0); |
| 1820 | 1820 | ||
| 1821 | if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED, | ||
| 1822 | "EMU10K1", emu)) { | ||
| 1823 | err = -EBUSY; | ||
| 1824 | goto error; | ||
| 1825 | } | ||
| 1826 | emu->irq = pci->irq; | ||
| 1827 | |||
| 1828 | emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT; | 1821 | emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT; |
| 1829 | if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), | 1822 | if (snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), |
| 1830 | 32 * 1024, &emu->ptb_pages) < 0) { | 1823 | 32 * 1024, &emu->ptb_pages) < 0) { |
| @@ -1887,6 +1880,14 @@ int __devinit snd_emu10k1_create(struct snd_card *card, | |||
| 1887 | emu->fx8010.etram_pages.area = NULL; | 1880 | emu->fx8010.etram_pages.area = NULL; |
| 1888 | emu->fx8010.etram_pages.bytes = 0; | 1881 | emu->fx8010.etram_pages.bytes = 0; |
| 1889 | 1882 | ||
| 1883 | /* irq handler must be registered after I/O ports are activated */ | ||
| 1884 | if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED, | ||
| 1885 | "EMU10K1", emu)) { | ||
| 1886 | err = -EBUSY; | ||
| 1887 | goto error; | ||
| 1888 | } | ||
| 1889 | emu->irq = pci->irq; | ||
| 1890 | |||
| 1890 | /* | 1891 | /* |
| 1891 | * Init to 0x02109204 : | 1892 | * Init to 0x02109204 : |
| 1892 | * Clock accuracy = 0 (1000ppm) | 1893 | * Clock accuracy = 0 (1000ppm) |
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index e0a605adde42..a99e86d74278 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
| @@ -2858,6 +2858,7 @@ static const char *ad1988_models[AD1988_MODEL_LAST] = { | |||
| 2858 | static struct snd_pci_quirk ad1988_cfg_tbl[] = { | 2858 | static struct snd_pci_quirk ad1988_cfg_tbl[] = { |
| 2859 | SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG), | 2859 | SND_PCI_QUIRK(0x1043, 0x81ec, "Asus P5B-DLX", AD1988_6STACK_DIG), |
| 2860 | SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG), | 2860 | SND_PCI_QUIRK(0x1043, 0x81f6, "Asus M2N-SLI", AD1988_6STACK_DIG), |
| 2861 | SND_PCI_QUIRK(0x1043, 0x8277, "Asus P5K-E/WIFI-AP", AD1988_6STACK_DIG), | ||
| 2861 | {} | 2862 | {} |
| 2862 | }; | 2863 | }; |
| 2863 | 2864 | ||
| @@ -3643,33 +3644,17 @@ static struct snd_kcontrol_new ad1884a_laptop_mixers[] = { | |||
| 3643 | { } /* end */ | 3644 | { } /* end */ |
| 3644 | }; | 3645 | }; |
| 3645 | 3646 | ||
| 3646 | static struct hda_input_mux ad1884a_mobile_capture_source = { | ||
| 3647 | .num_items = 2, | ||
| 3648 | .items = { | ||
| 3649 | { "Mic", 0x1 }, /* port-C */ | ||
| 3650 | { "Mix", 0x3 }, | ||
| 3651 | }, | ||
| 3652 | }; | ||
| 3653 | |||
| 3654 | static struct snd_kcontrol_new ad1884a_mobile_mixers[] = { | 3647 | static struct snd_kcontrol_new ad1884a_mobile_mixers[] = { |
| 3655 | HDA_CODEC_VOLUME("Master Playback Volume", 0x21, 0x0, HDA_OUTPUT), | 3648 | HDA_CODEC_VOLUME("Master Playback Volume", 0x21, 0x0, HDA_OUTPUT), |
| 3656 | HDA_CODEC_MUTE("Master Playback Switch", 0x21, 0x0, HDA_OUTPUT), | 3649 | HDA_CODEC_MUTE("Master Playback Switch", 0x21, 0x0, HDA_OUTPUT), |
| 3657 | HDA_CODEC_VOLUME("PCM Playback Volume", 0x20, 0x5, HDA_INPUT), | 3650 | HDA_CODEC_VOLUME("PCM Playback Volume", 0x20, 0x5, HDA_INPUT), |
| 3658 | HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT), | 3651 | HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT), |
| 3659 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x20, 0x01, HDA_INPUT), | ||
| 3660 | HDA_CODEC_MUTE("Mic Playback Switch", 0x20, 0x01, HDA_INPUT), | ||
| 3661 | HDA_CODEC_VOLUME("Beep Playback Volume", 0x20, 0x03, HDA_INPUT), | 3652 | HDA_CODEC_VOLUME("Beep Playback Volume", 0x20, 0x03, HDA_INPUT), |
| 3662 | HDA_CODEC_MUTE("Beep Playback Switch", 0x20, 0x03, HDA_INPUT), | 3653 | HDA_CODEC_MUTE("Beep Playback Switch", 0x20, 0x03, HDA_INPUT), |
| 3663 | HDA_CODEC_VOLUME("Mic Boost", 0x15, 0x0, HDA_INPUT), | 3654 | HDA_CODEC_VOLUME("Mic Capture Volume", 0x14, 0x0, HDA_INPUT), |
| 3655 | HDA_CODEC_VOLUME("Internal Mic Capture Volume", 0x15, 0x0, HDA_INPUT), | ||
| 3664 | HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), | 3656 | HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), |
| 3665 | HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), | 3657 | HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), |
| 3666 | { | ||
| 3667 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
| 3668 | .name = "Capture Source", | ||
| 3669 | .info = ad198x_mux_enum_info, | ||
| 3670 | .get = ad198x_mux_enum_get, | ||
| 3671 | .put = ad198x_mux_enum_put, | ||
| 3672 | }, | ||
| 3673 | { } /* end */ | 3658 | { } /* end */ |
| 3674 | }; | 3659 | }; |
| 3675 | 3660 | ||
| @@ -3686,14 +3671,31 @@ static void ad1884a_hp_automute(struct hda_codec *codec) | |||
| 3686 | present ? 0x00 : 0x02); | 3671 | present ? 0x00 : 0x02); |
| 3687 | } | 3672 | } |
| 3688 | 3673 | ||
| 3674 | /* switch to external mic if plugged */ | ||
| 3675 | static void ad1884a_hp_automic(struct hda_codec *codec) | ||
| 3676 | { | ||
| 3677 | unsigned int present; | ||
| 3678 | |||
| 3679 | present = snd_hda_codec_read(codec, 0x14, 0, | ||
| 3680 | AC_VERB_GET_PIN_SENSE, 0) & 0x80000000; | ||
| 3681 | snd_hda_codec_write(codec, 0x0c, 0, AC_VERB_SET_CONNECT_SEL, | ||
| 3682 | present ? 0 : 1); | ||
| 3683 | } | ||
| 3684 | |||
| 3689 | #define AD1884A_HP_EVENT 0x37 | 3685 | #define AD1884A_HP_EVENT 0x37 |
| 3686 | #define AD1884A_MIC_EVENT 0x36 | ||
| 3690 | 3687 | ||
| 3691 | /* unsolicited event for HP jack sensing */ | 3688 | /* unsolicited event for HP jack sensing */ |
| 3692 | static void ad1884a_hp_unsol_event(struct hda_codec *codec, unsigned int res) | 3689 | static void ad1884a_hp_unsol_event(struct hda_codec *codec, unsigned int res) |
| 3693 | { | 3690 | { |
| 3694 | if ((res >> 26) != AD1884A_HP_EVENT) | 3691 | switch (res >> 26) { |
| 3695 | return; | 3692 | case AD1884A_HP_EVENT: |
| 3696 | ad1884a_hp_automute(codec); | 3693 | ad1884a_hp_automute(codec); |
| 3694 | break; | ||
| 3695 | case AD1884A_MIC_EVENT: | ||
| 3696 | ad1884a_hp_automic(codec); | ||
| 3697 | break; | ||
| 3698 | } | ||
| 3697 | } | 3699 | } |
| 3698 | 3700 | ||
| 3699 | /* initialize jack-sensing, too */ | 3701 | /* initialize jack-sensing, too */ |
| @@ -3701,6 +3703,7 @@ static int ad1884a_hp_init(struct hda_codec *codec) | |||
| 3701 | { | 3703 | { |
| 3702 | ad198x_init(codec); | 3704 | ad198x_init(codec); |
| 3703 | ad1884a_hp_automute(codec); | 3705 | ad1884a_hp_automute(codec); |
| 3706 | ad1884a_hp_automic(codec); | ||
| 3704 | return 0; | 3707 | return 0; |
| 3705 | } | 3708 | } |
| 3706 | 3709 | ||
| @@ -3714,10 +3717,15 @@ static struct hda_verb ad1884a_laptop_verbs[] = { | |||
| 3714 | /* Port-F pin */ | 3717 | /* Port-F pin */ |
| 3715 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | 3718 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, |
| 3716 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | 3719 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, |
| 3720 | /* Port-C pin - internal mic-in */ | ||
| 3721 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
| 3722 | {0x14, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */ | ||
| 3723 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, 0x7002}, /* raise mic as default */ | ||
| 3717 | /* analog mix */ | 3724 | /* analog mix */ |
| 3718 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | 3725 | {0x20, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, |
| 3719 | /* unsolicited event for pin-sense */ | 3726 | /* unsolicited event for pin-sense */ |
| 3720 | {0x11, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_HP_EVENT}, | 3727 | {0x11, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_HP_EVENT}, |
| 3728 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | AD1884A_MIC_EVENT}, | ||
| 3721 | { } /* end */ | 3729 | { } /* end */ |
| 3722 | }; | 3730 | }; |
| 3723 | 3731 | ||
| @@ -3877,7 +3885,6 @@ static int patch_ad1884a(struct hda_codec *codec) | |||
| 3877 | spec->mixers[0] = ad1884a_mobile_mixers; | 3885 | spec->mixers[0] = ad1884a_mobile_mixers; |
| 3878 | spec->init_verbs[spec->num_init_verbs++] = ad1884a_laptop_verbs; | 3886 | spec->init_verbs[spec->num_init_verbs++] = ad1884a_laptop_verbs; |
| 3879 | spec->multiout.dig_out_nid = 0; | 3887 | spec->multiout.dig_out_nid = 0; |
| 3880 | spec->input_mux = &ad1884a_mobile_capture_source; | ||
| 3881 | codec->patch_ops.unsol_event = ad1884a_hp_unsol_event; | 3888 | codec->patch_ops.unsol_event = ad1884a_hp_unsol_event; |
| 3882 | codec->patch_ops.init = ad1884a_hp_init; | 3889 | codec->patch_ops.init = ad1884a_hp_init; |
| 3883 | break; | 3890 | break; |
diff --git a/sound/pci/hda/patch_cmedia.c b/sound/pci/hda/patch_cmedia.c index c73ce074a6ea..6ef57fbfb6eb 100644 --- a/sound/pci/hda/patch_cmedia.c +++ b/sound/pci/hda/patch_cmedia.c | |||
| @@ -611,6 +611,7 @@ static const char *cmi9880_models[CMI_MODELS] = { | |||
| 611 | 611 | ||
| 612 | static struct snd_pci_quirk cmi9880_cfg_tbl[] = { | 612 | static struct snd_pci_quirk cmi9880_cfg_tbl[] = { |
| 613 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", CMI_FULL_DIG), | 613 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", CMI_FULL_DIG), |
| 614 | SND_PCI_QUIRK(0x1854, 0x002b, "LG LS75", CMI_MINIMAL), | ||
| 614 | SND_PCI_QUIRK(0x1854, 0x0032, "LG", CMI_FULL_DIG), | 615 | SND_PCI_QUIRK(0x1854, 0x0032, "LG", CMI_FULL_DIG), |
| 615 | {} /* terminator */ | 616 | {} /* terminator */ |
| 616 | }; | 617 | }; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 864b2f598c38..518b7cab5102 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -853,6 +853,7 @@ do_sku: | |||
| 853 | case 0x10ec0269: | 853 | case 0x10ec0269: |
| 854 | case 0x10ec0862: | 854 | case 0x10ec0862: |
| 855 | case 0x10ec0662: | 855 | case 0x10ec0662: |
| 856 | case 0x10ec0889: | ||
| 856 | snd_hda_codec_write(codec, 0x14, 0, | 857 | snd_hda_codec_write(codec, 0x14, 0, |
| 857 | AC_VERB_SET_EAPD_BTLENABLE, 2); | 858 | AC_VERB_SET_EAPD_BTLENABLE, 2); |
| 858 | snd_hda_codec_write(codec, 0x15, 0, | 859 | snd_hda_codec_write(codec, 0x15, 0, |
| @@ -877,6 +878,7 @@ do_sku: | |||
| 877 | case 0x10ec0883: | 878 | case 0x10ec0883: |
| 878 | case 0x10ec0885: | 879 | case 0x10ec0885: |
| 879 | case 0x10ec0888: | 880 | case 0x10ec0888: |
| 881 | case 0x10ec0889: | ||
| 880 | snd_hda_codec_write(codec, 0x20, 0, | 882 | snd_hda_codec_write(codec, 0x20, 0, |
| 881 | AC_VERB_SET_COEF_INDEX, 7); | 883 | AC_VERB_SET_COEF_INDEX, 7); |
| 882 | tmp = snd_hda_codec_read(codec, 0x20, 0, | 884 | tmp = snd_hda_codec_read(codec, 0x20, 0, |
| @@ -940,7 +942,6 @@ do_sku: | |||
| 940 | AC_VERB_SET_UNSOLICITED_ENABLE, | 942 | AC_VERB_SET_UNSOLICITED_ENABLE, |
| 941 | AC_USRSP_EN | ALC880_HP_EVENT); | 943 | AC_USRSP_EN | ALC880_HP_EVENT); |
| 942 | spec->unsol_event = alc_sku_unsol_event; | 944 | spec->unsol_event = alc_sku_unsol_event; |
| 943 | spec->init_hook = alc_sku_automute; | ||
| 944 | } | 945 | } |
| 945 | 946 | ||
| 946 | /* | 947 | /* |
| @@ -7743,6 +7744,7 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = { | |||
| 7743 | SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), | 7744 | SND_PCI_QUIRK(0x103c, 0x2a60, "HP Lucknow", ALC888_3ST_HP), |
| 7744 | SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), | 7745 | SND_PCI_QUIRK(0x103c, 0x2a61, "HP Nettle", ALC883_6ST_DIG), |
| 7745 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), | 7746 | SND_PCI_QUIRK(0x1043, 0x8249, "Asus M2A-VM HDMI", ALC883_3ST_6ch_DIG), |
| 7747 | SND_PCI_QUIRK(0x105b, 0x0ce8, "Foxconn P35AX-S", ALC883_6ST_DIG), | ||
| 7746 | SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG), | 7748 | SND_PCI_QUIRK(0x105b, 0x6668, "Foxconn", ALC883_6ST_DIG), |
| 7747 | SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC), | 7749 | SND_PCI_QUIRK(0x1071, 0x8253, "Mitac 8252d", ALC883_MITAC), |
| 7748 | SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD), | 7750 | SND_PCI_QUIRK(0x1071, 0x8258, "Evesham Voyaeger", ALC883_LAPTOP_EAPD), |
| @@ -10510,6 +10512,7 @@ static struct snd_pci_quirk alc268_cfg_tbl[] = { | |||
| 10510 | SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST), | 10512 | SND_PCI_QUIRK(0x1043, 0x1205, "ASUS W7J", ALC268_3ST), |
| 10511 | SND_PCI_QUIRK(0x1179, 0xff10, "TOSHIBA A205", ALC268_TOSHIBA), | 10513 | SND_PCI_QUIRK(0x1179, 0xff10, "TOSHIBA A205", ALC268_TOSHIBA), |
| 10512 | SND_PCI_QUIRK(0x1179, 0xff50, "TOSHIBA A305", ALC268_TOSHIBA), | 10514 | SND_PCI_QUIRK(0x1179, 0xff50, "TOSHIBA A305", ALC268_TOSHIBA), |
| 10515 | SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), | ||
| 10513 | SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), | 10516 | SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), |
| 10514 | SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), | 10517 | SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), |
| 10515 | SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO), | 10518 | SND_PCI_QUIRK(0x1170, 0x0040, "ZEPTO", ALC268_ZEPTO), |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 393f7fd2b1be..a4f44a00bae8 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
| @@ -840,7 +840,7 @@ static struct snd_kcontrol_new stac92hd71bxx_mixer[] = { | |||
| 840 | static struct snd_kcontrol_new stac925x_mixer[] = { | 840 | static struct snd_kcontrol_new stac925x_mixer[] = { |
| 841 | STAC_INPUT_SOURCE(1), | 841 | STAC_INPUT_SOURCE(1), |
| 842 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_OUTPUT), | 842 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0, HDA_OUTPUT), |
| 843 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0, HDA_OUTPUT), | 843 | HDA_CODEC_MUTE("Capture Switch", 0x14, 0, HDA_OUTPUT), |
| 844 | HDA_CODEC_VOLUME("Capture Mux Volume", 0x0f, 0, HDA_OUTPUT), | 844 | HDA_CODEC_VOLUME("Capture Mux Volume", 0x0f, 0, HDA_OUTPUT), |
| 845 | { } /* end */ | 845 | { } /* end */ |
| 846 | }; | 846 | }; |
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index 52b1d81a26f7..e7e43524f8c7 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c | |||
| @@ -447,6 +447,23 @@ static struct hda_pcm_stream vt1708_pcm_analog_playback = { | |||
| 447 | }, | 447 | }, |
| 448 | }; | 448 | }; |
| 449 | 449 | ||
| 450 | static struct hda_pcm_stream vt1708_pcm_analog_s16_playback = { | ||
| 451 | .substreams = 1, | ||
| 452 | .channels_min = 2, | ||
| 453 | .channels_max = 8, | ||
| 454 | .nid = 0x10, /* NID to query formats and rates */ | ||
| 455 | /* We got noisy outputs on the right channel on VT1708 when | ||
| 456 | * 24bit samples are used. Until any workaround is found, | ||
| 457 | * disable the 24bit format, so far. | ||
| 458 | */ | ||
| 459 | .formats = SNDRV_PCM_FMTBIT_S16_LE, | ||
| 460 | .ops = { | ||
| 461 | .open = via_playback_pcm_open, | ||
| 462 | .prepare = via_playback_pcm_prepare, | ||
| 463 | .cleanup = via_playback_pcm_cleanup | ||
| 464 | }, | ||
| 465 | }; | ||
| 466 | |||
| 450 | static struct hda_pcm_stream vt1708_pcm_analog_capture = { | 467 | static struct hda_pcm_stream vt1708_pcm_analog_capture = { |
| 451 | .substreams = 2, | 468 | .substreams = 2, |
| 452 | .channels_min = 2, | 469 | .channels_min = 2, |
| @@ -899,6 +916,9 @@ static int patch_vt1708(struct hda_codec *codec) | |||
| 899 | 916 | ||
| 900 | spec->stream_name_analog = "VT1708 Analog"; | 917 | spec->stream_name_analog = "VT1708 Analog"; |
| 901 | spec->stream_analog_playback = &vt1708_pcm_analog_playback; | 918 | spec->stream_analog_playback = &vt1708_pcm_analog_playback; |
| 919 | /* disable 32bit format on VT1708 */ | ||
| 920 | if (codec->vendor_id == 0x11061708) | ||
| 921 | spec->stream_analog_playback = &vt1708_pcm_analog_s16_playback; | ||
| 902 | spec->stream_analog_capture = &vt1708_pcm_analog_capture; | 922 | spec->stream_analog_capture = &vt1708_pcm_analog_capture; |
| 903 | 923 | ||
| 904 | spec->stream_name_digital = "VT1708 Digital"; | 924 | spec->stream_name_digital = "VT1708 Digital"; |
