Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 190628
b: refs/heads/master
c: 0fd6b32
h: refs/heads/master
v: v3
  • Loading branch information
Jeff Garzik authored and Jeff Garzik committed May 5, 2010
1 parent 89f401f commit 4c12c16
Show file tree
Hide file tree
Showing 9 changed files with 59 additions and 45 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: 1d7746cb411d8b10c0ac934cae6c58bd1ece9616
refs/heads/master: 0fd6b32b3b2f5c1bfd412de7b5fd040fb31b6712
49 changes: 33 additions & 16 deletions trunk/Documentation/DocBook/libata.tmpl
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ void (*dev_config) (struct ata_port *, struct ata_device *);
issue of SET FEATURES - XFER MODE, and prior to operation.
</para>
<para>
Called by ata_device_add() after ata_dev_identify() determines
a device is present.
</para>
<para>
This entry may be specified as NULL in ata_port_operations.
</para>

Expand Down Expand Up @@ -150,8 +154,8 @@ unsigned int (*mode_filter) (struct ata_port *, struct ata_device *, unsigned in

<sect2><title>Taskfile read/write</title>
<programlisting>
void (*sff_tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
void (*sff_tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
</programlisting>

<para>
Expand All @@ -160,35 +164,36 @@ void (*sff_tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
hardware registers / DMA buffers, to obtain the current set of
taskfile register values.
Most drivers for taskfile-based hardware (PIO or MMIO) use
ata_sff_tf_load() and ata_sff_tf_read() for these hooks.
ata_tf_load() and ata_tf_read() for these hooks.
</para>

</sect2>

<sect2><title>PIO data read/write</title>
<programlisting>
void (*sff_data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
void (*data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
</programlisting>

<para>
All bmdma-style drivers must implement this hook. This is the low-level
operation that actually copies the data bytes during a PIO data
transfer.
Typically the driver will choose one of ata_sff_data_xfer_noirq(),
ata_sff_data_xfer(), or ata_sff_data_xfer32().
Typically the driver
will choose one of ata_pio_data_xfer_noirq(), ata_pio_data_xfer(), or
ata_mmio_data_xfer().
</para>

</sect2>

<sect2><title>ATA command execute</title>
<programlisting>
void (*sff_exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
</programlisting>

<para>
causes an ATA command, previously loaded with
->tf_load(), to be initiated in hardware.
Most drivers for taskfile-based hardware use ata_sff_exec_command()
Most drivers for taskfile-based hardware use ata_exec_command()
for this hook.
</para>

Expand All @@ -213,23 +218,29 @@ command.

<sect2><title>Read specific ATA shadow registers</title>
<programlisting>
u8 (*sff_check_status)(struct ata_port *ap);
u8 (*sff_check_altstatus)(struct ata_port *ap);
u8 (*check_status)(struct ata_port *ap);
u8 (*check_altstatus)(struct ata_port *ap);
</programlisting>

<para>
Reads the Status/AltStatus ATA shadow register from
hardware. On some hardware, reading the Status register has
the side effect of clearing the interrupt condition.
Most drivers for taskfile-based hardware use
ata_sff_check_status() for this hook.
ata_check_status() for this hook.
</para>
<para>
Note that because this is called from ata_device_add(), at
least a dummy function that clears device interrupts must be
provided for all drivers, even if the controller doesn't
actually have a taskfile status register.
</para>

</sect2>

<sect2><title>Select ATA device on bus</title>
<programlisting>
void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
void (*dev_select)(struct ata_port *ap, unsigned int device);
</programlisting>

<para>
Expand All @@ -240,7 +251,9 @@ void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
</para>
<para>
Most drivers for taskfile-based hardware use
ata_sff_dev_select() for this hook.
ata_std_dev_select() for this hook. Controllers which do not
support second drives on a port (such as SATA contollers) will
use ata_noop_dev_select().
</para>

</sect2>
Expand Down Expand Up @@ -428,13 +441,13 @@ void (*irq_clear) (struct ata_port *);
to struct ata_host_set.
</para>
<para>
Most legacy IDE drivers use ata_sff_interrupt() for the
Most legacy IDE drivers use ata_interrupt() for the
irq_handler hook, which scans all ports in the host_set,
determines which queued command was active (if any), and calls
ata_sff_host_intr(ap,qc).
ata_host_intr(ap,qc).
</para>
<para>
Most legacy IDE drivers use ata_sff_irq_clear() for the
Most legacy IDE drivers use ata_bmdma_irq_clear() for the
irq_clear() hook, which simply clears the interrupt and error
flags in the DMA status register.
</para>
Expand Down Expand Up @@ -483,6 +496,10 @@ void (*host_stop) (struct ata_host_set *host_set);
data from port at this time.
</para>
<para>
Many drivers use ata_port_stop() as this hook, which frees the
PRD table.
</para>
<para>
->host_stop() is called after all ->port_stop() calls
have completed. The hook must finalize hardware shutdown, release DMA
and other resources, etc.
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/ata/pata_pcmcia.c
Original file line number Diff line number Diff line change
Expand Up @@ -424,7 +424,7 @@ static struct pcmcia_device_id pcmcia_devices[] = {
PCMCIA_DEVICE_PROD_ID12("Hyperstone", "Model1", 0x3d5b9ef5, 0xca6ab420),
PCMCIA_DEVICE_PROD_ID12("IBM", "microdrive", 0xb569a6e5, 0xa6d76178),
PCMCIA_DEVICE_PROD_ID12("IBM", "IBM17JSSFP20", 0xb569a6e5, 0xf2508753),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF CARD 1GB", 0x2e6d1829, 0x55d5bffb),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF CARD 1GB", 0x2e6d1829, 0x3e520e17),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF CARD 4GB", 0x2e6d1829, 0x531e7d10),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF8GB", 0x2e6d1829, 0xacbe682e),
PCMCIA_DEVICE_PROD_ID12("IO DATA", "CBIDE2 ", 0x547e66dc, 0x8671043b),
Expand All @@ -446,7 +446,7 @@ static struct pcmcia_device_id pcmcia_devices[] = {
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS1GCF80", 0x709b1bf1, 0x2a54d4b1),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS2GCF120", 0x709b1bf1, 0x969aa4f2),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF133", 0x709b1bf1, 0x7558f133),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF133", 0x709b1bf1, 0x9351e59d),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS8GCF133", 0x709b1bf1, 0xb2f89b47),
PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
PCMCIA_DEVICE_PROD_ID12("WEIDA", "TWTTI", 0xcc7cf69c, 0x212bb918),
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/ide/ide-cs.c
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ static struct pcmcia_device_id ide_ids[] = {
PCMCIA_DEVICE_PROD_ID12("Hyperstone", "Model1", 0x3d5b9ef5, 0xca6ab420),
PCMCIA_DEVICE_PROD_ID12("IBM", "microdrive", 0xb569a6e5, 0xa6d76178),
PCMCIA_DEVICE_PROD_ID12("IBM", "IBM17JSSFP20", 0xb569a6e5, 0xf2508753),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF CARD 1GB", 0x2e6d1829, 0x55d5bffb),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF CARD 1GB", 0x2e6d1829, 0x3e520e17),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF CARD 4GB", 0x2e6d1829, 0x531e7d10),
PCMCIA_DEVICE_PROD_ID12("KINGSTON", "CF8GB", 0x2e6d1829, 0xacbe682e),
PCMCIA_DEVICE_PROD_ID12("IO DATA", "CBIDE2 ", 0x547e66dc, 0x8671043b),
Expand All @@ -431,7 +431,7 @@ static struct pcmcia_device_id ide_ids[] = {
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS1GCF80", 0x709b1bf1, 0x2a54d4b1),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS2GCF120", 0x709b1bf1, 0x969aa4f2),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF120", 0x709b1bf1, 0xf54a91c8),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF133", 0x709b1bf1, 0x7558f133),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS4GCF133", 0x709b1bf1, 0x9351e59d),
PCMCIA_DEVICE_PROD_ID12("TRANSCEND", "TS8GCF133", 0x709b1bf1, 0xb2f89b47),
PCMCIA_DEVICE_PROD_ID12("WIT", "IDE16", 0x244e5994, 0x3e232852),
PCMCIA_DEVICE_PROD_ID12("WEIDA", "TWTTI", 0xcc7cf69c, 0x212bb918),
Expand Down
Empty file removed trunk/drivers/mtd/internal.h
Empty file.
Empty file removed trunk/drivers/mtd/mtdbdi.c
Empty file.
2 changes: 1 addition & 1 deletion trunk/mm/slub.c
Original file line number Diff line number Diff line change
Expand Up @@ -2153,7 +2153,7 @@ static int init_kmem_cache_nodes(struct kmem_cache *s, gfp_t gfpflags)
int local_node;

if (slab_state >= UP && (s < kmalloc_caches ||
s >= kmalloc_caches + KMALLOC_CACHES))
s > kmalloc_caches + KMALLOC_CACHES))
local_node = page_to_nid(virt_to_page(s));
else
local_node = 0;
Expand Down
41 changes: 19 additions & 22 deletions trunk/security/keys/keyring.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,6 @@
#include <asm/uaccess.h>
#include "internal.h"

#define rcu_dereference_locked_keyring(keyring) \
(rcu_dereference_protected( \
(keyring)->payload.subscriptions, \
rwsem_is_locked((struct rw_semaphore *)&(keyring)->sem)))

/*
* when plumbing the depths of the key tree, this sets a hard limit set on how
* deep we're willing to go
Expand Down Expand Up @@ -206,7 +201,8 @@ static long keyring_read(const struct key *keyring,
int loop, ret;

ret = 0;
klist = rcu_dereference_locked_keyring(keyring);
klist = keyring->payload.subscriptions;

if (klist) {
/* calculate how much data we could return */
qty = klist->nkeys * sizeof(key_serial_t);
Expand Down Expand Up @@ -530,8 +526,9 @@ struct key *find_keyring_by_name(const char *name, bool skip_perm_check)
struct key *keyring;
int bucket;

keyring = ERR_PTR(-EINVAL);
if (!name)
return ERR_PTR(-EINVAL);
goto error;

bucket = keyring_hash(name);

Expand All @@ -558,18 +555,17 @@ struct key *find_keyring_by_name(const char *name, bool skip_perm_check)
KEY_SEARCH) < 0)
continue;

/* we've got a match but we might end up racing with
* key_cleanup() if the keyring is currently 'dead'
* (ie. it has a zero usage count) */
if (!atomic_inc_not_zero(&keyring->usage))
continue;
goto out;
/* we've got a match */
atomic_inc(&keyring->usage);
read_unlock(&keyring_name_lock);
goto error;
}
}

keyring = ERR_PTR(-ENOKEY);
out:
read_unlock(&keyring_name_lock);
keyring = ERR_PTR(-ENOKEY);

error:
return keyring;

} /* end find_keyring_by_name() */
Expand Down Expand Up @@ -724,7 +720,8 @@ int __key_link(struct key *keyring, struct key *key)
}

/* see if there's a matching key we can displace */
klist = rcu_dereference_locked_keyring(keyring);
klist = keyring->payload.subscriptions;

if (klist && klist->nkeys > 0) {
struct key_type *type = key->type;

Expand Down Expand Up @@ -768,6 +765,8 @@ int __key_link(struct key *keyring, struct key *key)
if (ret < 0)
goto error2;

klist = keyring->payload.subscriptions;

if (klist && klist->nkeys < klist->maxkeys) {
/* there's sufficient slack space to add directly */
atomic_inc(&key->usage);
Expand Down Expand Up @@ -869,7 +868,7 @@ int key_unlink(struct key *keyring, struct key *key)

down_write(&keyring->sem);

klist = rcu_dereference_locked_keyring(keyring);
klist = keyring->payload.subscriptions;
if (klist) {
/* search the keyring for the key */
for (loop = 0; loop < klist->nkeys; loop++)
Expand Down Expand Up @@ -960,7 +959,7 @@ int keyring_clear(struct key *keyring)
/* detach the pointer block with the locks held */
down_write(&keyring->sem);

klist = rcu_dereference_locked_keyring(keyring);
klist = keyring->payload.subscriptions;
if (klist) {
/* adjust the quota */
key_payload_reserve(keyring,
Expand Down Expand Up @@ -992,9 +991,7 @@ EXPORT_SYMBOL(keyring_clear);
*/
static void keyring_revoke(struct key *keyring)
{
struct keyring_list *klist;

klist = rcu_dereference_locked_keyring(keyring);
struct keyring_list *klist = keyring->payload.subscriptions;

/* adjust the quota */
key_payload_reserve(keyring, 0);
Expand Down Expand Up @@ -1028,7 +1025,7 @@ void keyring_gc(struct key *keyring, time_t limit)

down_write(&keyring->sem);

klist = rcu_dereference_locked_keyring(keyring);
klist = keyring->payload.subscriptions;
if (!klist)
goto no_klist;

Expand Down
2 changes: 1 addition & 1 deletion trunk/security/keys/request_key.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ static int call_sbin_request_key(struct key_construction *cons,
}

/* attach the auth key to the session keyring */
ret = key_link(keyring, authkey);
ret = __key_link(keyring, authkey);
if (ret < 0)
goto error_link;

Expand Down

0 comments on commit 4c12c16

Please sign in to comment.