Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 107786
b: refs/heads/master
c: e34a8ae
h: refs/heads/master
v: v3
  • Loading branch information
Dan Williams committed Aug 5, 2008
1 parent 1cf22bc commit 635c339
Show file tree
Hide file tree
Showing 190 changed files with 1,954 additions and 3,459 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: d6606683a5e3dac35cb979c7195f54ed827567bd
refs/heads/master: e34a8ae79056e6cea4a1ac21119ee3c91f378f99
2 changes: 2 additions & 0 deletions trunk/Documentation/00-INDEX
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,8 @@ cciss.txt
- info, major/minor #'s for Compaq's SMART Array Controllers.
cdrom/
- directory with information on the CD-ROM drivers that Linux has.
cli-sti-removal.txt
- cli()/sti() removal guide.
computone.txt
- info on Computone Intelliport II/Plus Multiport Serial Driver.
connector/
Expand Down
8 changes: 4 additions & 4 deletions trunk/Documentation/DocBook/s390-drivers.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@
the hardware structures represented here, please consult the Principles
of Operation.
</para>
!Iarch/s390/include/asm/cio.h
!Iinclude/asm-s390/cio.h
</sect1>
<sect1 id="ccwdev">
<title>ccw devices</title>
Expand All @@ -114,7 +114,7 @@
ccw device structure. Device drivers must not bypass those functions
or strange side effects may happen.
</para>
!Iarch/s390/include/asm/ccwdev.h
!Iinclude/asm-s390/ccwdev.h
!Edrivers/s390/cio/device.c
!Edrivers/s390/cio/device_ops.c
</sect1>
Expand All @@ -125,7 +125,7 @@
measurement data which is made available by the channel subsystem
for each channel attached device.
</para>
!Iarch/s390/include/asm/cmb.h
!Iinclude/asm-s390/cmb.h
!Edrivers/s390/cio/cmf.c
</sect1>
</chapter>
Expand All @@ -142,7 +142,7 @@
</para>
<sect1 id="ccwgroupdevices">
<title>ccw group devices</title>
!Iarch/s390/include/asm/ccwgroup.h
!Iinclude/asm-s390/ccwgroup.h
!Edrivers/s390/cio/ccwgroup.c
</sect1>
</chapter>
Expand Down
2 changes: 1 addition & 1 deletion trunk/Documentation/DocBook/videobook.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -1648,7 +1648,7 @@ static struct video_buffer capture_fb;

<chapter id="pubfunctions">
<title>Public Functions Provided</title>
!Edrivers/media/video/v4l2-dev.c
!Edrivers/media/video/videodev.c
</chapter>

</book>
133 changes: 133 additions & 0 deletions trunk/Documentation/cli-sti-removal.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@

#### cli()/sti() removal guide, started by Ingo Molnar <mingo@redhat.com>


as of 2.5.28, five popular macros have been removed on SMP, and
are being phased out on UP:

cli(), sti(), save_flags(flags), save_flags_cli(flags), restore_flags(flags)

until now it was possible to protect driver code against interrupt
handlers via a cli(), but from now on other, more lightweight methods
have to be used for synchronization, such as spinlocks or semaphores.

for example, driver code that used to do something like:

struct driver_data;

irq_handler (...)
{
....
driver_data.finish = 1;
driver_data.new_work = 0;
....
}

...

ioctl_func (...)
{
...
cli();
...
driver_data.finish = 0;
driver_data.new_work = 2;
...
sti();
...
}

was SMP-correct because the cli() function ensured that no
interrupt handler (amongst them the above irq_handler()) function
would execute while the cli()-ed section is executing.

but from now on a more direct method of locking has to be used:

DEFINE_SPINLOCK(driver_lock);
struct driver_data;

irq_handler (...)
{
unsigned long flags;
....
spin_lock_irqsave(&driver_lock, flags);
....
driver_data.finish = 1;
driver_data.new_work = 0;
....
spin_unlock_irqrestore(&driver_lock, flags);
....
}

...

ioctl_func (...)
{
...
spin_lock_irq(&driver_lock);
...
driver_data.finish = 0;
driver_data.new_work = 2;
...
spin_unlock_irq(&driver_lock);
...
}

the above code has a number of advantages:

- the locking relation is easier to understand - actual lock usage
pinpoints the critical sections. cli() usage is too opaque.
Easier to understand means it's easier to debug.

- it's faster, because spinlocks are faster to acquire than the
potentially heavily-used IRQ lock. Furthermore, your driver does
not have to wait eg. for a big heavy SCSI interrupt to finish,
because the driver_lock spinlock is only used by your driver.
cli() on the other hand was used by many drivers, and extended
the critical section to the whole IRQ handler function - creating
serious lock contention.


to make the transition easier, we've still kept the cli(), sti(),
save_flags(), save_flags_cli() and restore_flags() macros defined
on UP systems - but their usage will be phased out until 2.6 is
released.

drivers that want to disable local interrupts (interrupts on the
current CPU), can use the following five macros:

local_irq_disable(), local_irq_enable(), local_save_flags(flags),
local_irq_save(flags), local_irq_restore(flags)

but beware, their meaning and semantics are much simpler, far from
that of the old cli(), sti(), save_flags(flags) and restore_flags(flags)
SMP meaning:

local_irq_disable() => turn local IRQs off

local_irq_enable() => turn local IRQs on

local_save_flags(flags) => save the current IRQ state into flags. The
state can be on or off. (on some
architectures there's even more bits in it.)

local_irq_save(flags) => save the current IRQ state into flags and
disable interrupts.

local_irq_restore(flags) => restore the IRQ state from flags.

(local_irq_save can save both irqs on and irqs off state, and
local_irq_restore can restore into both irqs on and irqs off state.)

another related change is that synchronize_irq() now takes a parameter:
synchronize_irq(irq). This change too has the purpose of making SMP
synchronization more lightweight - this way you can wait for your own
interrupt handler to finish, no need to wait for other IRQ sources.


why were these changes done? The main reason was the architectural burden
of maintaining the cli()/sti() interface - it became a real problem. The
new interrupt system is much more streamlined, easier to understand, debug,
and it's also a bit faster - the same happened to it that will happen to
cli()/sti() using drivers once they convert to spinlocks :-)

7 changes: 1 addition & 6 deletions trunk/Documentation/power/pm_qos_interface.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PM Quality Of Service Interface.
PM quality of Service interface.

This interface provides a kernel and user mode interface for registering
performance expectations by drivers, subsystems and user space applications on
Expand All @@ -7,11 +7,6 @@ one of the parameters.
Currently we have {cpu_dma_latency, network_latency, network_throughput} as the
initial set of pm_qos parameters.

Each parameters have defined units:
* latency: usec
* timeout: usec
* throughput: kbs (kilo bit / sec)

The infrastructure exposes multiple misc device nodes one per implemented
parameter. The set of parameters implement is defined by pm_qos_power_init()
and pm_qos_params.h. This is done because having the available parameters
Expand Down
2 changes: 1 addition & 1 deletion trunk/Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 27
EXTRAVERSION = -rc2
EXTRAVERSION = -rc1
NAME = Rotary Wombat

# *DOCUMENTATION*
Expand Down
10 changes: 5 additions & 5 deletions trunk/arch/ia64/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,8 @@ config IA64_SGI_SN2
to select this option. If in doubt, select ia64 generic support
instead.

config IA64_SGI_UV
bool "SGI-UV"
config IA64_SGI_UV`
bool "SGI-UV`"
select NUMA
select ACPI_NUMA
select SWIOTLB
Expand Down Expand Up @@ -321,10 +321,10 @@ config SMP
If you don't know what to do here, say N.

config NR_CPUS
int "Maximum number of CPUs (2-4096)"
range 2 4096
int "Maximum number of CPUs (2-1024)"
range 2 1024
depends on SMP
default "4096"
default "1024"
help
You should set this to the number of CPUs in your system, but
keep in mind that a kernel compiled for, e.g., 2 CPUs will boot but
Expand Down
Loading

0 comments on commit 635c339

Please sign in to comment.