mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-07-16 17:57:38 -04:00
pcmcia: pcmcia_dev_present bugfix
pcmcia_dev_present is in and by itself buggy. Add a note specifying why it is broken, and replace the broken locking -- taking a mutex is a bad idea in IRQ context, from which this function is rarely called -- by an atomic_t. Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
#ifdef __KERNEL__
|
||||
#include <linux/device.h>
|
||||
#include <pcmcia/ss.h>
|
||||
#include <asm/atomic.h>
|
||||
|
||||
/*
|
||||
* PCMCIA device drivers (16-bit cards only; 32-bit cards require CardBus
|
||||
@@ -94,10 +95,8 @@ struct pcmcia_device {
|
||||
config_req_t conf;
|
||||
window_handle_t win;
|
||||
|
||||
/* Is the device suspended, or in the process of
|
||||
* being removed? */
|
||||
/* Is the device suspended? */
|
||||
u16 suspended:1;
|
||||
u16 _removed:1;
|
||||
|
||||
/* Flags whether io, irq, win configurations were
|
||||
* requested, and whether the configuration is "locked" */
|
||||
@@ -115,7 +114,7 @@ struct pcmcia_device {
|
||||
u16 has_card_id:1;
|
||||
u16 has_func_id:1;
|
||||
|
||||
u16 reserved:3;
|
||||
u16 reserved:4;
|
||||
|
||||
u8 func_id;
|
||||
u16 manf_id;
|
||||
|
||||
@@ -224,18 +224,16 @@ struct pcmcia_socket {
|
||||
|
||||
/* 16-bit state: */
|
||||
struct {
|
||||
/* PCMCIA card is present in socket */
|
||||
u8 present:1;
|
||||
/* "master" ioctl is used */
|
||||
u8 busy:1;
|
||||
/* pcmcia module is being unloaded */
|
||||
u8 dead:1;
|
||||
/* the PCMCIA card consists of two pseudo devices */
|
||||
u8 has_pfc:1;
|
||||
|
||||
u8 reserved:4;
|
||||
u8 reserved:6;
|
||||
} pcmcia_state;
|
||||
|
||||
/* non-zero if PCMCIA card is present */
|
||||
atomic_t present;
|
||||
|
||||
#ifdef CONFIG_PCMCIA_IOCTL
|
||||
struct user_info_t *user;
|
||||
|
||||
Reference in New Issue
Block a user