Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
da501825
Commit
da501825
authored
Sep 25, 2003
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://linux-sound.bkbits.net/linux-sound
into home.osdl.org:/home/torvalds/v2.5/linux
parents
c1fabdad
2a98ed00
Changes
33
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
724 additions
and
597 deletions
+724
-597
drivers/char/drm/Kconfig
drivers/char/drm/Kconfig
+2
-2
drivers/char/drm/drmP.h
drivers/char/drm/drmP.h
+11
-12
drivers/char/drm/drm_agpsupport.h
drivers/char/drm/drm_agpsupport.h
+6
-6
drivers/char/drm/drm_memory.h
drivers/char/drm/drm_memory.h
+4
-4
drivers/char/drm/drm_memory_debug.h
drivers/char/drm/drm_memory_debug.h
+5
-5
drivers/char/drm/drm_os_linux.h
drivers/char/drm/drm_os_linux.h
+8
-3
drivers/char/drm/gamma_dma.c
drivers/char/drm/gamma_dma.c
+4
-3
drivers/char/drm/i830_irq.c
drivers/char/drm/i830_irq.c
+2
-2
drivers/char/drm/sis.h
drivers/char/drm/sis.h
+17
-20
drivers/char/drm/sis_drm.h
drivers/char/drm/sis_drm.h
+21
-34
drivers/char/drm/sis_drv.h
drivers/char/drm/sis_drv.h
+11
-9
drivers/char/drm/sis_ds.c
drivers/char/drm/sis_ds.c
+250
-271
drivers/char/drm/sis_ds.h
drivers/char/drm/sis_ds.h
+31
-30
drivers/char/drm/sis_mm.c
drivers/char/drm/sis_mm.c
+291
-195
include/asm-alpha/mman.h
include/asm-alpha/mman.h
+2
-0
include/asm-arm/mman.h
include/asm-arm/mman.h
+2
-0
include/asm-arm26/mman.h
include/asm-arm26/mman.h
+2
-0
include/asm-cris/mman.h
include/asm-cris/mman.h
+2
-0
include/asm-h8300/mman.h
include/asm-h8300/mman.h
+2
-0
include/asm-i386/mman.h
include/asm-i386/mman.h
+4
-0
include/asm-ia64/mman.h
include/asm-ia64/mman.h
+2
-0
include/asm-m68k/mman.h
include/asm-m68k/mman.h
+2
-0
include/asm-mips/mman.h
include/asm-mips/mman.h
+2
-0
include/asm-parisc/mman.h
include/asm-parisc/mman.h
+2
-0
include/asm-ppc/mman.h
include/asm-ppc/mman.h
+2
-0
include/asm-ppc64/mman.h
include/asm-ppc64/mman.h
+2
-0
include/asm-s390/mman.h
include/asm-s390/mman.h
+2
-0
include/asm-sh/mman.h
include/asm-sh/mman.h
+2
-0
include/asm-sparc/mman.h
include/asm-sparc/mman.h
+2
-0
include/asm-sparc64/mman.h
include/asm-sparc64/mman.h
+2
-0
include/asm-v850/mman.h
include/asm-v850/mman.h
+2
-0
include/asm-x86_64/mman.h
include/asm-x86_64/mman.h
+2
-0
mm/mprotect.c
mm/mprotect.c
+23
-1
No files found.
drivers/char/drm/Kconfig
View file @
da501825
...
...
@@ -75,9 +75,9 @@ config DRM_MGA
config DRM_SIS
tristate "SiS video cards"
depends on DRM && AGP
&& FB_SIS
depends on DRM && AGP
help
Choose this option if you have a SiS 630 or compatibel video
chipset. If M is selected the module will be called sis. AGP
and SiS FB
support is required for this driver to work.
support is required for this driver to work.
drivers/char/drm/drmP.h
View file @
da501825
...
...
@@ -551,7 +551,7 @@ typedef struct drm_device_dma {
*/
typedef
struct
drm_agp_mem
{
unsigned
long
handle
;
/**< handle */
struct
agp_memory
*
memory
;
DRM_AGP_MEM
*
memory
;
unsigned
long
bound
;
/**< address */
int
pages
;
struct
drm_agp_mem
*
prev
;
/**< previous entry */
...
...
@@ -564,7 +564,7 @@ typedef struct drm_agp_mem {
* \sa DRM(agp_init)() and drm_device::agp.
*/
typedef
struct
drm_agp_head
{
struct
agp_kern_info
agp_info
;
/**< AGP device information */
DRM_AGP_KERN
agp_info
;
/**< AGP device information */
drm_agp_mem_t
*
memory
;
/**< memory entries */
unsigned
long
mode
;
/**< AGP mode */
int
enabled
;
/**< whether the AGP bus as been enabled */
...
...
@@ -797,10 +797,10 @@ extern void *DRM(ioremap_nocache)(unsigned long offset, unsigned long size,
extern
void
DRM
(
ioremapfree
)(
void
*
pt
,
unsigned
long
size
,
drm_device_t
*
dev
);
#if __REALLY_HAVE_AGP
extern
struct
agp_memory
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
);
extern
int
DRM
(
free_agp
)(
struct
agp_memory
*
handle
,
int
pages
);
extern
int
DRM
(
bind_agp
)(
struct
agp_memory
*
handle
,
unsigned
int
start
);
extern
int
DRM
(
unbind_agp
)(
struct
agp_memory
*
handle
);
extern
DRM_AGP_MEM
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
);
extern
int
DRM
(
free_agp
)(
DRM_AGP_MEM
*
handle
,
int
pages
);
extern
int
DRM
(
bind_agp
)(
DRM_AGP_MEM
*
handle
,
unsigned
int
start
);
extern
int
DRM
(
unbind_agp
)(
DRM_AGP_MEM
*
handle
);
#endif
/* Misc. IOCTL support (drm_ioctl.h) */
...
...
@@ -905,8 +905,7 @@ extern int DRM(control)( struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
irq_install
)(
drm_device_t
*
dev
,
int
irq
);
extern
int
DRM
(
irq_uninstall
)(
drm_device_t
*
dev
);
extern
irqreturn_t
DRM
(
dma_service
)(
int
irq
,
void
*
device
,
struct
pt_regs
*
regs
);
extern
irqreturn_t
DRM
(
dma_service
)(
DRM_IRQ_ARGS
);
extern
void
DRM
(
driver_irq_preinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_postinstall
)(
drm_device_t
*
dev
);
extern
void
DRM
(
driver_irq_uninstall
)(
drm_device_t
*
dev
);
...
...
@@ -944,10 +943,10 @@ extern int DRM(agp_unbind)(struct inode *inode, struct file *filp,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
int
DRM
(
agp_bind
)(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
extern
struct
agp_memory
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
);
extern
int
DRM
(
agp_free_memory
)(
struct
agp_memory
*
handle
);
extern
int
DRM
(
agp_bind_memory
)(
struct
agp_memory
*
handle
,
off_t
start
);
extern
int
DRM
(
agp_unbind_memory
)(
struct
agp_memory
*
handle
);
extern
DRM_AGP_MEM
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
);
extern
int
DRM
(
agp_free_memory
)(
DRM_AGP_MEM
*
handle
);
extern
int
DRM
(
agp_bind_memory
)(
DRM_AGP_MEM
*
handle
,
off_t
start
);
extern
int
DRM
(
agp_unbind_memory
)(
DRM_AGP_MEM
*
handle
);
#endif
/* Stub support (drm_stub.h) */
...
...
drivers/char/drm/drm_agpsupport.h
View file @
da501825
...
...
@@ -62,7 +62,7 @@ int DRM(agp_info)(struct inode *inode, struct file *filp,
{
drm_file_t
*
priv
=
filp
->
private_data
;
drm_device_t
*
dev
=
priv
->
dev
;
struct
agp_kern_info
*
kern
;
DRM_AGP_KERN
*
kern
;
drm_agp_info_t
info
;
if
(
!
dev
->
agp
||
!
dev
->
agp
->
acquired
||
!
drm_agp
->
copy_info
)
...
...
@@ -198,7 +198,7 @@ int DRM(agp_alloc)(struct inode *inode, struct file *filp,
drm_device_t
*
dev
=
priv
->
dev
;
drm_agp_buffer_t
request
;
drm_agp_mem_t
*
entry
;
struct
agp_memory
*
memory
;
DRM_AGP_MEM
*
memory
;
unsigned
long
pages
;
u32
type
;
...
...
@@ -429,7 +429,7 @@ void DRM(agp_uninit)(void)
}
/** Calls drm_agp->allocate_memory() */
struct
agp_memory
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
)
DRM_AGP_MEM
*
DRM
(
agp_allocate_memory
)(
size_t
pages
,
u32
type
)
{
if
(
!
drm_agp
->
allocate_memory
)
return
NULL
;
...
...
@@ -437,7 +437,7 @@ struct agp_memory *DRM(agp_allocate_memory)(size_t pages, u32 type)
}
/** Calls drm_agp->free_memory() */
int
DRM
(
agp_free_memory
)(
struct
agp_memory
*
handle
)
int
DRM
(
agp_free_memory
)(
DRM_AGP_MEM
*
handle
)
{
if
(
!
handle
||
!
drm_agp
->
free_memory
)
return
0
;
...
...
@@ -446,7 +446,7 @@ int DRM(agp_free_memory)(struct agp_memory *handle)
}
/** Calls drm_agp->bind_memory() */
int
DRM
(
agp_bind_memory
)(
struct
agp_memory
*
handle
,
off_t
start
)
int
DRM
(
agp_bind_memory
)(
DRM_AGP_MEM
*
handle
,
off_t
start
)
{
if
(
!
handle
||
!
drm_agp
->
bind_memory
)
return
-
EINVAL
;
...
...
@@ -454,7 +454,7 @@ int DRM(agp_bind_memory)(struct agp_memory *handle, off_t start)
}
/** Calls drm_agp->unbind_memory() */
int
DRM
(
agp_unbind_memory
)(
struct
agp_memory
*
handle
)
int
DRM
(
agp_unbind_memory
)(
DRM_AGP_MEM
*
handle
)
{
if
(
!
handle
||
!
drm_agp
->
unbind_memory
)
return
-
EINVAL
;
...
...
drivers/char/drm/drm_memory.h
View file @
da501825
...
...
@@ -333,25 +333,25 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
#if __REALLY_HAVE_AGP
/** Wrapper around agp_allocate_memory() */
struct
agp_memory
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
DRM_AGP_MEM
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
{
return
DRM
(
agp_allocate_memory
)(
pages
,
type
);
}
/** Wrapper around agp_free_memory() */
int
DRM
(
free_agp
)(
struct
agp_memory
*
handle
,
int
pages
)
int
DRM
(
free_agp
)(
DRM_AGP_MEM
*
handle
,
int
pages
)
{
return
DRM
(
agp_free_memory
)(
handle
)
?
0
:
-
EINVAL
;
}
/** Wrapper around agp_bind_memory() */
int
DRM
(
bind_agp
)(
struct
agp_memory
*
handle
,
unsigned
int
start
)
int
DRM
(
bind_agp
)(
DRM_AGP_MEM
*
handle
,
unsigned
int
start
)
{
return
DRM
(
agp_bind_memory
)(
handle
,
start
);
}
/** Wrapper around agp_unbind_memory() */
int
DRM
(
unbind_agp
)(
struct
agp_memory
*
handle
)
int
DRM
(
unbind_agp
)(
DRM_AGP_MEM
*
handle
)
{
return
DRM
(
agp_unbind_memory
)(
handle
);
}
...
...
drivers/char/drm/drm_memory_debug.h
View file @
da501825
...
...
@@ -353,9 +353,9 @@ void DRM(ioremapfree)(void *pt, unsigned long size, drm_device_t *dev)
#if __REALLY_HAVE_AGP
agp_memory
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
DRM_AGP_MEM
*
DRM
(
alloc_agp
)(
int
pages
,
u32
type
)
{
agp_memory
*
handle
;
DRM_AGP_MEM
*
handle
;
if
(
!
pages
)
{
DRM_MEM_ERROR
(
DRM_MEM_TOTALAGP
,
"Allocating 0 pages
\n
"
);
...
...
@@ -376,7 +376,7 @@ agp_memory *DRM(alloc_agp)(int pages, u32 type)
return
NULL
;
}
int
DRM
(
free_agp
)(
agp_memory
*
handle
,
int
pages
)
int
DRM
(
free_agp
)(
DRM_AGP_MEM
*
handle
,
int
pages
)
{
int
alloc_count
;
int
free_count
;
...
...
@@ -405,7 +405,7 @@ int DRM(free_agp)(agp_memory *handle, int pages)
return
retval
;
}
int
DRM
(
bind_agp
)(
agp_memory
*
handle
,
unsigned
int
start
)
int
DRM
(
bind_agp
)(
DRM_AGP_MEM
*
handle
,
unsigned
int
start
)
{
int
retcode
=
-
EINVAL
;
...
...
@@ -429,7 +429,7 @@ int DRM(bind_agp)(agp_memory *handle, unsigned int start)
return
retcode
;
}
int
DRM
(
unbind_agp
)(
agp_memory
*
handle
)
int
DRM
(
unbind_agp
)(
DRM_AGP_MEM
*
handle
)
{
int
alloc_count
;
int
free_count
;
...
...
drivers/char/drm/drm_os_linux.h
View file @
da501825
...
...
@@ -33,8 +33,13 @@
#define DRM_DEVICE drm_file_t *priv = filp->private_data; \
drm_device_t *dev = priv->dev
/** IRQ handler arguments */
/** IRQ handler arguments
and return type and values
*/
#define DRM_IRQ_ARGS int irq, void *arg, struct pt_regs *regs
/** AGP types */
#define DRM_AGP_MEM struct agp_memory
#define DRM_AGP_KERN struct agp_kern_info
/** Task queue handler arguments */
#define DRM_TASKQUEUE_ARGS void *arg
...
...
drivers/char/drm/gamma_dma.c
View file @
da501825
...
...
@@ -116,13 +116,14 @@ static inline int gamma_dma_is_ready(drm_device_t *dev)
return
(
!
GAMMA_READ
(
GAMMA_DMACOUNT
));
}
irqreturn_t
gamma_dma_service
(
int
irq
,
void
*
device
,
struct
pt_regs
*
regs
)
irqreturn_t
gamma_dma_service
(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
device
;
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_device_dma_t
*
dma
=
dev
->
dma
;
drm_gamma_private_t
*
dev_priv
=
(
drm_gamma_private_t
*
)
dev
->
dev_private
;
/* FIXME: should check whether we're actually interested in the interrupt? */
atomic_inc
(
&
dev
->
counts
[
6
]);
/* _DRM_STAT_IRQ */
while
(
GAMMA_READ
(
GAMMA_INFIFOSPACE
)
<
3
)
...
...
drivers/char/drm/i830_irq.c
View file @
da501825
...
...
@@ -35,9 +35,9 @@
#include <linux/delay.h>
irqreturn_t
DRM
(
dma_service
)(
int
irq
,
void
*
device
,
struct
pt_regs
*
regs
)
irqreturn_t
DRM
(
dma_service
)(
DRM_IRQ_ARGS
)
{
drm_device_t
*
dev
=
(
drm_device_t
*
)
device
;
drm_device_t
*
dev
=
(
drm_device_t
*
)
arg
;
drm_i830_private_t
*
dev_priv
=
(
drm_i830_private_t
*
)
dev
->
dev_private
;
u16
temp
;
...
...
drivers/char/drm/sis.h
View file @
da501825
...
...
@@ -33,7 +33,11 @@
* Name it sisdrv_##x as there's a conflict with sis_free/malloc in the kernel
* that's used for fb devices
*/
#ifdef __linux__
#define DRM(x) sisdrv_##x
#else
#define DRM(x) sis_##x
#endif
/* General customization:
*/
...
...
@@ -45,25 +49,18 @@
#define DRIVER_AUTHOR "SIS"
#define DRIVER_NAME "sis"
#define DRIVER_DESC "SIS 300/630/540"
#define DRIVER_DATE
"20010503
"
#define DRIVER_DATE
"20030826
"
#define DRIVER_MAJOR 1
#define DRIVER_MINOR
0
#define DRIVER_MINOR
1
#define DRIVER_PATCHLEVEL 0
#define DRIVER_IOCTLS \
[DRM_IOCTL_NR(SIS_IOCTL_FB_ALLOC)] = { sis_fb_alloc, 1, 0 }, \
[DRM_IOCTL_NR(SIS_IOCTL_FB_FREE)] = { sis_fb_free, 1, 0 }, \
/* AGP Memory Management */
\
[DRM_IOCTL_NR(SIS_IOCTL_AGP_INIT)] = { sisp_agp_init, 1, 0 }, \
[DRM_IOCTL_NR(SIS_IOCTL_AGP_ALLOC)] = { sisp_agp_alloc, 1, 0 }, \
[DRM_IOCTL_NR(SIS_IOCTL_AGP_FREE)] = { sisp_agp_free, 1, 0 }
#if 0 /* these don't appear to be defined */
/* SIS Stereo */
[DRM_IOCTL_NR(DRM_IOCTL_CONTROL)] = { sis_control, 1, 1 },
[DRM_IOCTL_NR(SIS_IOCTL_FLIP)] = { sis_flip, 1, 1 },
[DRM_IOCTL_NR(SIS_IOCTL_FLIP_INIT)] = { sis_flip_init, 1, 1 },
[DRM_IOCTL_NR(SIS_IOCTL_FLIP_FINAL)] = { sis_flip_final, 1, 1 }
#endif
[DRM_IOCTL_NR(DRM_IOCTL_SIS_FB_ALLOC)] = { sis_fb_alloc, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_FB_FREE)] = { sis_fb_free, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_AGP_INIT)] = { sis_ioctl_agp_init, 1, 1 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_AGP_ALLOC)] = { sis_ioctl_agp_alloc, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_AGP_FREE)] = { sis_ioctl_agp_free, 1, 0 }, \
[DRM_IOCTL_NR(DRM_IOCTL_SIS_FB_INIT)] = { sis_fb_init, 1, 1 }
#define __HAVE_COUNTERS 5
...
...
drivers/char/drm/sis_drm.h
View file @
da501825
#ifndef _
sis_drm_public_h
_
#define _
sis_drm_public_h
_
#ifndef _
_SIS_DRM_H_
_
#define _
_SIS_DRM_H_
_
/* SiS specific ioctls */
#define SIS_IOCTL_FB_ALLOC DRM_IOWR(0x44, drm_sis_mem_t)
#define SIS_IOCTL_FB_FREE DRM_IOW( 0x45, drm_sis_mem_t)
#define SIS_IOCTL_AGP_INIT DRM_IOWR(0x53, drm_sis_agp_t)
#define SIS_IOCTL_AGP_ALLOC DRM_IOWR(0x54, drm_sis_mem_t)
#define SIS_IOCTL_AGP_FREE DRM_IOW( 0x55, drm_sis_mem_t)
#define SIS_IOCTL_FLIP DRM_IOW( 0x48, drm_sis_flip_t)
#define SIS_IOCTL_FLIP_INIT DRM_IO( 0x49)
#define SIS_IOCTL_FLIP_FINAL DRM_IO( 0x50)
#define DRM_IOCTL_SIS_FB_ALLOC DRM_IOWR(0x44, drm_sis_mem_t)
#define DRM_IOCTL_SIS_FB_FREE DRM_IOW( 0x45, drm_sis_mem_t)
#define DRM_IOCTL_SIS_AGP_INIT DRM_IOWR(0x53, drm_sis_agp_t)
#define DRM_IOCTL_SIS_AGP_ALLOC DRM_IOWR(0x54, drm_sis_mem_t)
#define DRM_IOCTL_SIS_AGP_FREE DRM_IOW( 0x55, drm_sis_mem_t)
#define DRM_IOCTL_SIS_FB_INIT DRM_IOW( 0x56, drm_sis_fb_t)
/*
#define DRM_IOCTL_SIS_FLIP DRM_IOW( 0x48, drm_sis_flip_t)
#define DRM_IOCTL_SIS_FLIP_INIT DRM_IO( 0x49)
#define DRM_IOCTL_SIS_FLIP_FINAL DRM_IO( 0x50)
*/
typedef
struct
{
int
context
;
unsigned
int
offset
;
unsigned
int
size
;
unsigned
int
free
;
unsigned
long
free
;
}
drm_sis_mem_t
;
typedef
struct
{
...
...
@@ -24,23 +27,7 @@ typedef struct {
}
drm_sis_agp_t
;
typedef
struct
{
unsigned
int
left
,
right
;
}
drm_sis_flip_t
;
#ifdef __KERNEL__
int
sis_fb_alloc
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sis_fb_free
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sisp_agp_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sisp_agp_alloc
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sisp_agp_free
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
#endif
unsigned
int
offset
,
size
;
}
drm_sis_fb_t
;
#endif
#endif
/* __SIS_DRM_H__ */
drivers/char/drm/sis_drv.h
View file @
da501825
...
...
@@ -28,18 +28,20 @@
#ifndef _SIS_DRV_H_
#define _SIS_DRV_H_
#include "sis_ds.h"
typedef
struct
drm_sis_private
{
drm_map_t
*
buffers
;
}
drm_sis_private_t
;
/* Stereo ? - this was never committed */
memHeap_t
*
AGPHeap
;
memHeap_t
*
FBHeap
;
}
drm_sis_private_t
;
int
sis_flip
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sis_flip_init
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
int
sis_flip_final
(
struct
inode
*
inode
,
struct
file
*
filp
,
unsigned
int
cmd
,
unsigned
long
arg
);
void
flip_final
(
void
);
extern
int
sis_fb_alloc
(
DRM_IOCTL_ARGS
);
extern
int
sis_fb_free
(
DRM_IOCTL_ARGS
);
extern
int
sis_ioctl_agp_init
(
DRM_IOCTL_ARGS
);
extern
int
sis_ioctl_agp_alloc
(
DRM_IOCTL_ARGS
);
extern
int
sis_ioctl_agp_free
(
DRM_IOCTL_ARGS
);
extern
int
sis_fb_init
(
DRM_IOCTL_ARGS
);
#endif
drivers/char/drm/sis_ds.c
View file @
da501825
...
...
@@ -28,15 +28,9 @@
*
*/
#include <linux/module.h>
#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/poll.h>
#include <asm/io.h>
#include <linux/pci.h>
#include "sis.h"
#include "drmP.h"
#include "drm.h"
#include "sis_ds.h"
/* Set Data Structure, not check repeated value
...
...
@@ -48,10 +42,10 @@ set_t *setInit(void)
int
i
;
set_t
*
set
;
set
=
(
set_t
*
)
MALLOC
(
sizeof
(
set_t
)
);
if
(
set
)
{
for
(
i
=
0
;
i
<
SET_SIZE
;
i
++
)
{
set
->
list
[
i
].
free_next
=
i
+
1
;
set
=
(
set_t
*
)
DRM
(
alloc
)(
sizeof
(
set_t
),
DRM_MEM_DRIVER
);
if
(
set
!=
NULL
)
{
for
(
i
=
0
;
i
<
SET_SIZE
;
i
++
)
{
set
->
list
[
i
].
free_next
=
i
+
1
;
set
->
list
[
i
].
alloc_next
=
-
1
;
}
set
->
list
[
SET_SIZE
-
1
].
free_next
=
-
1
;
...
...
@@ -66,11 +60,10 @@ int setAdd(set_t *set, ITEM_TYPE item)
{
int
free
=
set
->
free
;
if
(
free
!=
-
1
)
{
if
(
free
!=
-
1
)
{
set
->
list
[
free
].
val
=
item
;
set
->
free
=
set
->
list
[
free
].
free_next
;
}
else
{
}
else
{
return
0
;
}
...
...
@@ -86,10 +79,11 @@ int setDel(set_t *set, ITEM_TYPE item)
int
alloc
=
set
->
alloc
;
int
prev
=
-
1
;
while
(
alloc
!=
-
1
){
if
(
set
->
list
[
alloc
].
val
==
item
){
if
(
prev
!=
-
1
)
set
->
list
[
prev
].
alloc_next
=
set
->
list
[
alloc
].
alloc_next
;
while
(
alloc
!=
-
1
)
{
if
(
set
->
list
[
alloc
].
val
==
item
)
{
if
(
prev
!=
-
1
)
set
->
list
[
prev
].
alloc_next
=
set
->
list
[
alloc
].
alloc_next
;
else
set
->
alloc
=
set
->
list
[
alloc
].
alloc_next
;
break
;
...
...
@@ -98,7 +92,7 @@ int setDel(set_t *set, ITEM_TYPE item)
alloc
=
set
->
list
[
alloc
].
alloc_next
;
}
if
(
alloc
==
-
1
)
if
(
alloc
==
-
1
)
return
0
;
set
->
list
[
alloc
].
free_next
=
set
->
free
;
...
...
@@ -112,7 +106,7 @@ int setDel(set_t *set, ITEM_TYPE item)
int
setFirst
(
set_t
*
set
,
ITEM_TYPE
*
item
)
{
if
(
set
->
alloc
==
-
1
)
if
(
set
->
alloc
==
-
1
)
return
0
;
*
item
=
set
->
list
[
set
->
alloc
].
val
;
...
...
@@ -123,7 +117,7 @@ int setFirst(set_t *set, ITEM_TYPE *item)
int
setNext
(
set_t
*
set
,
ITEM_TYPE
*
item
)
{
if
(
set
->
trace
==
-
1
)
if
(
set
->
trace
==
-
1
)
return
0
;
*
item
=
set
->
list
[
set
->
trace
].
val
;
...
...
@@ -134,7 +128,7 @@ int setNext(set_t *set, ITEM_TYPE *item)
int
setDestroy
(
set_t
*
set
)
{
FREE
(
set
);
DRM
(
free
)(
set
,
sizeof
(
set_t
),
DRM_MEM_DRIVER
);
return
1
;
}
...
...
@@ -165,48 +159,16 @@ int setDestroy(set_t *set)
#define ISFREE(bptr) ((bptr)->free)
#define PRINTF(fmt, arg...) do{}while(0)
#define fprintf(fmt, arg...) do{}while(0)
static
void
*
calloc
(
size_t
nmemb
,
size_t
size
)
{
void
*
addr
;
addr
=
kmalloc
(
nmemb
*
size
,
GFP_KERNEL
);
if
(
addr
)
memset
(
addr
,
0
,
nmemb
*
size
);
return
addr
;
}
#define free(n) kfree(n)
void
mmDumpMemInfo
(
memHeap_t
*
heap
)
{
TMemBlock
*
p
;
PRINTF
(
"Memory heap %p:
\n
"
,
heap
);
if
(
heap
==
0
)
{
PRINTF
(
" heap == 0
\n
"
);
}
else
{
p
=
(
TMemBlock
*
)
heap
;
while
(
p
)
{
PRINTF
(
" Offset:%08x, Size:%08x, %c%c
\n
"
,
p
->
ofs
,
p
->
size
,
p
->
free
?
'.'
:
'U'
,
p
->
reserved
?
'R'
:
'.'
);
p
=
p
->
next
;
}
}
PRINTF
(
"End of memory blocks
\n
"
);
}
memHeap_t
*
mmInit
(
int
ofs
,
int
size
)
{
PMemBlock
blocks
;
if
(
size
<=
0
)
{
if
(
size
<=
0
)
return
0
;
}
blocks
=
(
TMemBlock
*
)
calloc
(
1
,
sizeof
(
TMemBlock
)
);
if
(
blocks
)
{
blocks
=
(
TMemBlock
*
)
DRM
(
calloc
)(
1
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
if
(
blocks
!=
NULL
)
{
blocks
->
ofs
=
ofs
;
blocks
->
size
=
size
;
blocks
->
free
=
1
;
...
...
@@ -215,6 +177,24 @@ memHeap_t *mmInit(int ofs,
return
0
;
}
/* Checks if a pointer 'b' is part of the heap 'heap' */
int
mmBlockInHeap
(
memHeap_t
*
heap
,
PMemBlock
b
)
{
TMemBlock
*
p
;
if
(
heap
==
NULL
||
b
==
NULL
)
return
0
;
p
=
heap
;
while
(
p
!=
NULL
&&
p
!=
b
)
{
p
=
p
->
next
;
}
if
(
p
==
b
)
return
1
;
else
return
0
;
}
/* Kludgey workaround for existing i810 server. Remove soon.
*/
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
...
...
@@ -222,23 +202,22 @@ memHeap_t *mmAddRange( memHeap_t *heap,
int
size
)
{
PMemBlock
blocks
;
blocks
=
(
TMemBlock
*
)
calloc
(
2
,
sizeof
(
TMemBlock
)
);
if
(
blocks
)
{
blocks
=
(
TMemBlock
*
)
DRM
(
calloc
)(
2
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
if
(
blocks
!=
NULL
)
{
blocks
[
0
].
size
=
size
;
blocks
[
0
].
free
=
1
;
blocks
[
0
].
ofs
=
ofs
;
blocks
[
0
].
next
=
&
blocks
[
1
];
/* Discontinuity - stops JoinBlock from trying to join non-adjacent
*
ranges.
/* Discontinuity - stops JoinBlock from trying to join
* non-adjacent
ranges.
*/
blocks
[
1
].
size
=
0
;
blocks
[
1
].
free
=
0
;
blocks
[
1
].
ofs
=
ofs
+
size
;
blocks
[
1
].
next
=
(
PMemBlock
)
heap
;
blocks
[
1
].
next
=
(
PMemBlock
)
heap
;
return
(
memHeap_t
*
)
blocks
;
}
else
}
else
return
heap
;
}
...
...
@@ -250,7 +229,8 @@ static TMemBlock* SliceBlock(TMemBlock *p,
/* break left */
if
(
startofs
>
p
->
ofs
)
{
newblock
=
(
TMemBlock
*
)
calloc
(
1
,
sizeof
(
TMemBlock
));
newblock
=
(
TMemBlock
*
)
DRM
(
calloc
)(
1
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
newblock
->
ofs
=
startofs
;
newblock
->
size
=
p
->
size
-
(
startofs
-
p
->
ofs
);
newblock
->
free
=
1
;
...
...
@@ -262,7 +242,8 @@ static TMemBlock* SliceBlock(TMemBlock *p,
/* break right */
if
(
size
<
p
->
size
)
{
newblock
=
(
TMemBlock
*
)
calloc
(
1
,
sizeof
(
TMemBlock
));
newblock
=
(
TMemBlock
*
)
DRM
(
calloc
)(
1
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
newblock
->
ofs
=
startofs
+
size
;
newblock
->
size
=
p
->
size
-
size
;
newblock
->
free
=
1
;
...
...
@@ -280,15 +261,16 @@ static TMemBlock* SliceBlock(TMemBlock *p,
PMemBlock
mmAllocMem
(
memHeap_t
*
heap
,
int
size
,
int
align2
,
int
startSearch
)
{
int
mask
,
startofs
,
endofs
;
int
mask
,
startofs
,
endofs
;
TMemBlock
*
p
;
if
(
!
heap
||
align2
<
0
||
size
<=
0
)
if
(
heap
==
NULL
||
align2
<
0
||
size
<=
0
)
return
NULL
;
mask
=
(
1
<<
align2
)
-
1
;
startofs
=
0
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
)
{
while
(
p
!=
NULL
)
{
if
(
ISFREE
(
p
))
{
startofs
=
(
p
->
ofs
+
mask
)
&
~
mask
;
if
(
startofs
<
startSearch
)
{
...
...
@@ -300,7 +282,7 @@ PMemBlock mmAllocMem( memHeap_t *heap, int size, int align2, int startSearch)
}
p
=
p
->
next
;
}
if
(
!
p
)
if
(
p
==
NULL
)
return
NULL
;
p
=
SliceBlock
(
p
,
startofs
,
size
,
0
,
mask
+
1
);
p
->
heap
=
heap
;
...
...
@@ -313,7 +295,7 @@ static __inline__ int Join2Blocks(TMemBlock *p)
TMemBlock
*
q
=
p
->
next
;
p
->
size
+=
q
->
size
;
p
->
next
=
q
->
next
;
free
(
q
);
DRM
(
free
)(
q
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
return
1
;
}
return
0
;
...
...
@@ -321,29 +303,22 @@ static __inline__ int Join2Blocks(TMemBlock *p)
int
mmFreeMem
(
PMemBlock
b
)
{
TMemBlock
*
p
,
*
prev
;
TMemBlock
*
p
,
*
prev
;
if
(
!
b
)
if
(
b
==
NULL
)
return
0
;
if
(
!
b
->
heap
)
{
fprintf
(
stderr
,
"no heap
\n
"
);
if
(
b
->
heap
==
NULL
)
return
-
1
;
}
p
=
b
->
heap
;
prev
=
NULL
;
while
(
p
&&
p
!=
b
)
{
while
(
p
!=
NULL
&&
p
!=
b
)
{
prev
=
p
;
p
=
p
->
next
;
}
if
(
!
p
||
p
->
free
||
p
->
reserved
)
{
if
(
!
p
)
fprintf
(
stderr
,
"block not found in heap
\n
"
);
else
if
(
p
->
free
)
fprintf
(
stderr
,
"block already free
\n
"
);
else
fprintf
(
stderr
,
"block is reserved
\n
"
);
if
(
p
==
NULL
||
p
->
free
||
p
->
reserved
)
return
-
1
;
}
p
->
free
=
1
;
Join2Blocks
(
p
);
if
(
prev
)
...
...
@@ -356,9 +331,10 @@ int mmReserveMem(memHeap_t *heap, int offset,int size)
int
endofs
;
TMemBlock
*
p
;
if
(
!
heap
||
size
<=
0
)
if
(
heap
==
NULL
||
size
<=
0
)
return
-
1
;
endofs
=
offset
+
size
;
endofs
=
offset
+
size
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
&&
p
->
ofs
<=
offset
)
{
if
(
ISFREE
(
p
)
&&
endofs
<=
(
p
->
ofs
+
p
->
size
))
{
...
...
@@ -374,20 +350,22 @@ int mmFreeReserved(memHeap_t *heap, int offset)
{
TMemBlock
*
p
,
*
prev
;
if
(
!
heap
)
if
(
heap
==
NULL
)
return
-
1
;
p
=
(
TMemBlock
*
)
heap
;
prev
=
NULL
;
while
(
p
&&
p
->
ofs
!=
offset
)
{
while
(
p
!=
NULL
&&
p
->
ofs
!=
offset
)
{
prev
=
p
;
p
=
p
->
next
;
}
if
(
!
p
||
!
p
->
reserved
)
if
(
p
==
NULL
||
!
p
->
reserved
)
return
-
1
;
p
->
free
=
1
;
p
->
reserved
=
0
;
Join2Blocks
(
p
);
if
(
prev
)
if
(
prev
!=
NULL
)
Join2Blocks
(
prev
);
return
0
;
}
...
...
@@ -396,12 +374,13 @@ void mmDestroy(memHeap_t *heap)
{
TMemBlock
*
p
,
*
q
;
if
(
!
heap
)
if
(
heap
==
NULL
)
return
;
p
=
(
TMemBlock
*
)
heap
;
while
(
p
)
{
while
(
p
!=
NULL
)
{
q
=
p
->
next
;
free
(
p
);
DRM
(
free
)(
p
,
sizeof
(
TMemBlock
),
DRM_MEM_DRIVER
);
p
=
q
;
}
}
drivers/char/drm/sis_ds.h
View file @
da501825
...
...
@@ -28,14 +28,12 @@
*
*/
#ifndef _
sis_ds_h
_
#define _
sis_ds_h
_
#ifndef _
_SIS_DS_H_
_
#define _
_SIS_DS_H_
_
/* Set Data Structure */
#define SET_SIZE 5000
#define MALLOC(s) kmalloc(s, GFP_KERNEL)
#define FREE(s) kfree(s)
typedef
unsigned
int
ITEM_TYPE
;
...
...
@@ -58,8 +56,6 @@ int setFirst(set_t *set, ITEM_TYPE *item);
int
setNext
(
set_t
*
set
,
ITEM_TYPE
*
item
);
int
setDestroy
(
set_t
*
set
);
#endif
/*
* GLX Hardware Device Driver common code
* Copyright (C) 1999 Keith Whitwell
...
...
@@ -84,9 +80,6 @@ int setDestroy(set_t *set);
*
*/
#ifndef MM_INC
#define MM_INC
struct
mem_block_t
{
struct
mem_block_t
*
next
;
struct
mem_block_t
*
heap
;
...
...
@@ -102,13 +95,19 @@ typedef struct mem_block_t *PMemBlock;
typedef
struct
mem_block_t
memHeap_t
;
static
__inline__
int
mmBlockSize
(
PMemBlock
b
)
{
return
b
->
size
;
}
{
return
b
->
size
;
}
static
__inline__
int
mmOffset
(
PMemBlock
b
)
{
return
b
->
ofs
;
}
{
return
b
->
ofs
;
}
static
__inline__
void
mmMarkReserved
(
PMemBlock
b
)
{
b
->
reserved
=
1
;
}
{
b
->
reserved
=
1
;
}
/*
* input: total size in bytes
...
...
@@ -116,13 +115,10 @@ static __inline__ void mmMarkReserved(PMemBlock b)
*/
memHeap_t
*
mmInit
(
int
ofs
,
int
size
);
memHeap_t
*
mmAddRange
(
memHeap_t
*
heap
,
int
ofs
,
int
size
);
/*
* Allocate 'size' bytes with 2^align2 bytes alignment,
* restrict the search to free memory after 'startSearch'
...
...
@@ -135,6 +131,11 @@ memHeap_t *mmAddRange( memHeap_t *heap,
*/
PMemBlock
mmAllocMem
(
memHeap_t
*
heap
,
int
size
,
int
align2
,
int
startSearch
);
/*
* Returns 1 if the block 'b' is part of the heap 'heap'
*/
int
mmBlockInHeap
(
PMemBlock
heap
,
PMemBlock
b
);
/*
* Free block starts at offset
* input: pointer to a block
...
...
@@ -160,4 +161,4 @@ void mmDestroy( memHeap_t *mmInit );
/* For debuging purpose. */
void
mmDumpMemInfo
(
memHeap_t
*
mmInit
);
#endif
#endif
/* __SIS_DS_H__ */
drivers/char/drm/sis_mm.c
View file @
da501825
This diff is collapsed.
Click to expand it.
include/asm-alpha/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-arm/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-arm26/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-cris/mman.h
View file @
da501825
...
...
@@ -8,6 +8,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-h8300/mman.h
View file @
da501825
...
...
@@ -5,6 +5,8 @@
#define PROT_WRITE 0x2
/* page can be written */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-i386/mman.h
View file @
da501825
...
...
@@ -6,6 +6,10 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-ia64/mman.h
View file @
da501825
...
...
@@ -11,6 +11,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-m68k/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-mips/mman.h
View file @
da501825
...
...
@@ -20,6 +20,8 @@
#define PROT_EXEC 0x04
/* page can be executed */
/* 0x08 reserved for PROT_EXEC_NOFLUSH */
#define PROT_SEM 0x10
/* page may be used for atomic ops */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
/*
* Flags for mmap
...
...
include/asm-parisc/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-ppc/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-ppc64/mman.h
View file @
da501825
...
...
@@ -13,6 +13,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-s390/mman.h
View file @
da501825
...
...
@@ -14,6 +14,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-sh/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-sparc/mman.h
View file @
da501825
...
...
@@ -9,6 +9,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-sparc64/mman.h
View file @
da501825
...
...
@@ -9,6 +9,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_SEM 0x8
/* page may be used for atomic ops */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-v850/mman.h
View file @
da501825
...
...
@@ -5,6 +5,8 @@
#define PROT_WRITE 0x2
/* page can be written */
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
include/asm-x86_64/mman.h
View file @
da501825
...
...
@@ -6,6 +6,8 @@
#define PROT_EXEC 0x4
/* page can be executed */
#define PROT_NONE 0x0
/* page can not be accessed */
#define PROT_SEM 0x8
#define PROT_GROWSDOWN 0x01000000
/* mprotect flag: extend change to start of growsdown vma */
#define PROT_GROWSUP 0x02000000
/* mprotect flag: extend change to end of growsup vma */
#define MAP_SHARED 0x01
/* Share changes */
#define MAP_PRIVATE 0x02
/* Changes are private */
...
...
mm/mprotect.c
View file @
da501825
...
...
@@ -227,6 +227,10 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
unsigned
long
vm_flags
,
nstart
,
end
,
tmp
;
struct
vm_area_struct
*
vma
,
*
next
,
*
prev
;
int
error
=
-
EINVAL
;
const
int
grows
=
prot
&
(
PROT_GROWSDOWN
|
PROT_GROWSUP
);
prot
&=
~
(
PROT_GROWSDOWN
|
PROT_GROWSUP
);
if
(
grows
==
(
PROT_GROWSDOWN
|
PROT_GROWSUP
))
/* can't be both */
return
-
EINVAL
;
if
(
start
&
~
PAGE_MASK
)
return
-
EINVAL
;
...
...
@@ -245,8 +249,26 @@ sys_mprotect(unsigned long start, size_t len, unsigned long prot)
vma
=
find_vma_prev
(
current
->
mm
,
start
,
&
prev
);
error
=
-
ENOMEM
;
if
(
!
vma
||
vma
->
vm_start
>
start
)
if
(
!
vma
)
goto
out
;
if
(
unlikely
(
grows
&
PROT_GROWSDOWN
))
{
if
(
vma
->
vm_start
>=
end
)
goto
out
;
start
=
vma
->
vm_start
;
error
=
-
EINVAL
;
if
(
!
(
vma
->
vm_flags
&
VM_GROWSDOWN
))
goto
out
;
}
else
{
if
(
vma
->
vm_start
>
start
)
goto
out
;
if
(
unlikely
(
grows
&
PROT_GROWSUP
))
{
end
=
vma
->
vm_end
;
error
=
-
EINVAL
;
if
(
!
(
vma
->
vm_flags
&
VM_GROWSUP
))
goto
out
;
}
}
for
(
nstart
=
start
;
;
)
{
unsigned
int
newflags
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment