Commit 8e85a4d9 authored by Paul Mackerras's avatar Paul Mackerras

Merge samba.org:/home/paulus/kernel/linux-2.5

into samba.org:/home/paulus/kernel/for-linus-ppc
parents 3e2adaf6 abe68253
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 0 SUBLEVEL = 0
EXTRAVERSION = -test4 EXTRAVERSION = -test5
# *DOCUMENTATION* # *DOCUMENTATION*
# To see a list of typical targets execute "make help" # To see a list of typical targets execute "make help"
......
...@@ -24,8 +24,10 @@ int elevator_noop_merge(request_queue_t *q, struct request **req, ...@@ -24,8 +24,10 @@ int elevator_noop_merge(request_queue_t *q, struct request **req,
struct request *__rq; struct request *__rq;
int ret; int ret;
if ((ret = elv_try_last_merge(q, bio))) if ((ret = elv_try_last_merge(q, bio))) {
*req = q->last_merge;
return ret; return ret;
}
while ((entry = entry->prev) != &q->queue_head) { while ((entry = entry->prev) != &q->queue_head) {
__rq = list_entry_rq(entry); __rq = list_entry_rq(entry);
......
...@@ -1719,9 +1719,9 @@ static void __exit exit_sdla(void) ...@@ -1719,9 +1719,9 @@ static void __exit exit_sdla(void)
unregister_frad(devname); unregister_frad(devname);
} }
#endif
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
module_init(init_sdla); module_init(init_sdla);
module_exit(exit_sdla); module_exit(exit_sdla);
#endif
...@@ -398,7 +398,7 @@ static int sa1100_startup(struct uart_port *port) ...@@ -398,7 +398,7 @@ static int sa1100_startup(struct uart_port *port)
* Allocate the IRQ * Allocate the IRQ
*/ */
retval = request_irq(sport->port.irq, sa1100_int, 0, retval = request_irq(sport->port.irq, sa1100_int, 0,
"serial_sa1100", sport); "sa11x0-uart", sport);
if (retval) if (retval)
return retval; return retval;
...@@ -568,7 +568,7 @@ static int sa1100_request_port(struct uart_port *port) ...@@ -568,7 +568,7 @@ static int sa1100_request_port(struct uart_port *port)
struct sa1100_port *sport = (struct sa1100_port *)port; struct sa1100_port *sport = (struct sa1100_port *)port;
return request_mem_region(sport->port.mapbase, UART_PORT_SIZE, return request_mem_region(sport->port.mapbase, UART_PORT_SIZE,
"serial_sa1100") != NULL ? 0 : -EBUSY; "sa11x0-uart") != NULL ? 0 : -EBUSY;
} }
/* /*
...@@ -858,71 +858,91 @@ static struct uart_driver sa1100_reg = { ...@@ -858,71 +858,91 @@ static struct uart_driver sa1100_reg = {
.cons = SA1100_CONSOLE, .cons = SA1100_CONSOLE,
}; };
static int sa1100_serial_suspend(struct device *dev, u32 state, u32 level) static int sa1100_serial_suspend(struct device *_dev, u32 state, u32 level)
{ {
int i; struct sa1100_port *sport = dev_get_drvdata(_dev);
if (sport)
uart_suspend_port(&sa1100_reg, &sport->port, level);
return 0;
}
static int sa1100_serial_resume(struct device *_dev, u32 level)
{
struct sa1100_port *sport = dev_get_drvdata(_dev);
for (i = 0; i < NR_PORTS; i++) if (sport)
uart_suspend_port(&sa1100_reg, &sa1100_ports[i].port, level); uart_resume_port(&sa1100_reg, &sport->port, level);
return 0; return 0;
} }
static int sa1100_serial_resume(struct device *dev, u32 level) static int sa1100_serial_probe(struct device *_dev)
{ {
struct platform_device *dev = to_platform_device(_dev);
struct resource *res = dev->resource;
int i; int i;
for (i = 0; i < NR_PORTS; i++) for (i = 0; i < dev->num_resources; i++, res++)
uart_resume_port(&sa1100_reg, &sa1100_ports[i].port, level); if (res->flags & IORESOURCE_MEM)
break;
if (i < dev->num_resources) {
for (i = 0; i < NR_PORTS; i++) {
if (sa1100_ports[i].port.mapbase != res->start)
continue;
uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port);
dev_set_drvdata(_dev, &sa1100_ports[i]);
break;
}
}
return 0;
}
static int sa1100_serial_remove(struct device *_dev)
{
struct sa1100_port *sport = dev_get_drvdata(_dev);
dev_set_drvdata(_dev, NULL);
if (sport)
uart_remove_one_port(&sa1100_reg, &sport->port);
return 0; return 0;
} }
static struct device_driver sa11x0_serial_driver = { static struct device_driver sa11x0_serial_driver = {
.name = "sa11x0_serial", .name = "sa11x0-uart",
.bus = &system_bus_type, .bus = &platform_bus_type,
.probe = sa1100_serial_probe,
.remove = sa1100_serial_remove,
.suspend = sa1100_serial_suspend, .suspend = sa1100_serial_suspend,
.resume = sa1100_serial_resume, .resume = sa1100_serial_resume,
}; };
/*
* This "device" covers _all_ ISA 8250-compatible serial devices.
*/
static struct sys_device sa11x0_serial_devs = {
.name = "sa11x0_serial",
.id = 0,
.dev = {
.driver = &sa11x0_serial_driver,
},
};
static int __init sa1100_serial_init(void) static int __init sa1100_serial_init(void)
{ {
int ret; int ret;
printk(KERN_INFO "Serial: SA11x0 driver $Revision: 1.50 $\n"); printk(KERN_INFO "Serial: SA11x0 driver $Revision: 1.50 $\n");
driver_register(&sa11x0_serial_driver);
sys_device_register(&sa11x0_serial_devs);
sa1100_init_ports(); sa1100_init_ports();
ret = uart_register_driver(&sa1100_reg); ret = uart_register_driver(&sa1100_reg);
if (ret == 0) { if (ret == 0) {
int i; ret = driver_register(&sa11x0_serial_driver);
if (ret)
for (i = 0; i < NR_PORTS; i++) uart_unregister_driver(&sa1100_reg);
uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port);
} }
return ret; return ret;
} }
static void __exit sa1100_serial_exit(void) static void __exit sa1100_serial_exit(void)
{ {
int i; driver_unregister(&sa11x0_serial_driver);
for (i = 0; i < NR_PORTS; i++)
uart_remove_one_port(&sa1100_reg, &sa1100_ports[i].port);
uart_unregister_driver(&sa1100_reg); uart_unregister_driver(&sa1100_reg);
} }
......
...@@ -52,11 +52,21 @@ ...@@ -52,11 +52,21 @@
((nr) << _IOC_NRSHIFT) | \ ((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT)) ((size) << _IOC_SIZESHIFT))
/* provoke compile error for invalid uses of size argument */
extern int __invalid_size_argument_for_IOC;
#define _IOC_TYPECHECK(t) \
((sizeof(t) == sizeof(t[1]) && \
sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
sizeof(t) : __invalid_size_argument_for_IOC)
/* used to create numbers */ /* used to create numbers */
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0) #define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size)) #define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size)) #define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size)) #define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
/* used to decode ioctl numbers.. */ /* used to decode ioctl numbers.. */
#define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK) #define _IOC_DIR(nr) (((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)
......
...@@ -71,7 +71,8 @@ struct _snd_hdsp_firmware { ...@@ -71,7 +71,8 @@ struct _snd_hdsp_firmware {
unsigned long firmware_data[24413]; unsigned long firmware_data[24413];
}; };
#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW('H', 0x42, hdsp_firmware_t) /* This ioctl is marked bad because the type is bigger than the IOCTL description */
#define SNDRV_HDSP_IOCTL_UPLOAD_FIRMWARE _IOW_BAD('H', 0x42, hdsp_firmware_t)
typedef struct _snd_hdsp_version hdsp_version_t; typedef struct _snd_hdsp_version hdsp_version_t;
......
...@@ -14,6 +14,8 @@ struct sscape_microcode ...@@ -14,6 +14,8 @@ struct sscape_microcode
}; };
#define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock) #define SND_SSCAPE_LOAD_BOOTB _IOWR('P', 100, struct sscape_bootblock)
#define SND_SSCAPE_LOAD_MCODE _IOW('P', 101, struct sscape_microcode)
/* This ioctl is marked bad because the type is bigger than the IOCTL description */
#define SND_SSCAPE_LOAD_MCODE _IOW_BAD('P', 101, struct sscape_microcode)
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment