1#ifndef _LINUX_MM_H
2#define _LINUX_MM_H
3
4#include <linux/sched.h>
5#include <linux/errno.h>
6
7#ifdef __KERNEL__
8
9#include <linux/config.h>
10#include <linux/gfp.h>
11#include <linux/list.h>
12#include <linux/mmzone.h>
13#include <linux/rbtree.h>
14#include <linux/prio_tree.h>
15#include <linux/fs.h>
16
17struct mempolicy;
18struct anon_vma;
19
20#ifndef CONFIG_DISCONTIGMEM
21extern unsigned long max_mapnr;
22#endif
23
24extern unsigned long num_physpages;
25extern void * high_memory;
26extern unsigned long vmalloc_earlyreserve;
27extern int page_cluster;
28
29#ifdef CONFIG_SYSCTL
30extern int sysctl_legacy_va_layout;
31#else
32#define sysctl_legacy_va_layout 0
33#endif
34
35#include <asm/page.h>
36#include <asm/pgtable.h>
37#include <asm/processor.h>
38#include <asm/atomic.h>
39
40#ifndef MM_VM_SIZE
41#define MM_VM_SIZE(mm) ((TASK_SIZE + PGDIR_SIZE - 1) & PGDIR_MASK)
42#endif
43
44#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n))
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61struct vm_area_struct {
62 struct mm_struct * vm_mm;
63 unsigned long vm_start;
64 unsigned long vm_end;
65
66
67
68 struct vm_area_struct *vm_next;
69
70 pgprot_t vm_page_prot;
71 unsigned long vm_flags;
72
73 struct rb_node vm_rb;
74
75
76
77
78
79
80
81 union {
82 struct {
83 struct list_head list;
84 void *parent;
85 struct vm_area_struct *head;
86 } vm_set;
87
88 struct raw_prio_tree_node prio_tree_node;
89 } shared;
90
91
92
93
94
95
96
97 struct list_head anon_vma_node;
98 struct anon_vma *anon_vma;
99
100
101 struct vm_operations_struct * vm_ops;
102
103
104 unsigned long vm_pgoff;
105
106 struct file * vm_file;
107 void * vm_private_data;
108 unsigned long vm_truncate_count;
109
110#ifndef CONFIG_MMU
111 atomic_t vm_usage;
112#endif
113#ifdef CONFIG_NUMA
114 struct mempolicy *vm_policy;
115#endif
116};
117
118
119
120
121
122
123struct vm_list_struct {
124 struct vm_list_struct *next;
125 struct vm_area_struct *vma;
126};
127
128#ifndef CONFIG_MMU
129extern struct rb_root nommu_vma_tree;
130extern struct rw_semaphore nommu_vma_sem;
131
132extern unsigned int kobjsize(const void *objp);
133#endif
134
135
136
137
138#define VM_READ 0x00000001
139#define VM_WRITE 0x00000002
140#define VM_EXEC 0x00000004
141#define VM_SHARED 0x00000008
142
143#define VM_MAYREAD 0x00000010
144#define VM_MAYWRITE 0x00000020
145#define VM_MAYEXEC 0x00000040
146#define VM_MAYSHARE 0x00000080
147
148#define VM_GROWSDOWN 0x00000100
149#define VM_GROWSUP 0x00000200
150#define VM_SHM 0x00000400
151#define VM_DENYWRITE 0x00000800
152
153#define VM_EXECUTABLE 0x00001000
154#define VM_LOCKED 0x00002000
155#define VM_IO 0x00004000
156
157
158#define VM_SEQ_READ 0x00008000
159#define VM_RAND_READ 0x00010000
160
161#define VM_DONTCOPY 0x00020000
162#define VM_DONTEXPAND 0x00040000
163#define VM_RESERVED 0x00080000
164#define VM_ACCOUNT 0x00100000
165#define VM_HUGETLB 0x00400000
166#define VM_NONLINEAR 0x00800000
167
168#ifndef VM_STACK_DEFAULT_FLAGS
169#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
170#endif
171
172#ifdef CONFIG_STACK_GROWSUP
173#define VM_STACK_FLAGS (VM_GROWSUP | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
174#else
175#define VM_STACK_FLAGS (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
176#endif
177
178#define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ)
179#define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK
180#define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK))
181#define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ)
182#define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ)
183
184
185
186
187
188extern pgprot_t protection_map[16];
189
190
191
192
193
194
195
196struct vm_operations_struct {
197 void (*open)(struct vm_area_struct * area);
198 void (*close)(struct vm_area_struct * area);
199 struct page * (*nopage)(struct vm_area_struct * area, unsigned long address, int *type);
200 int (*populate)(struct vm_area_struct * area, unsigned long address, unsigned long len, pgprot_t prot, unsigned long pgoff, int nonblock);
201#ifdef CONFIG_NUMA
202 int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
203 struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
204 unsigned long addr);
205#endif
206};
207
208struct mmu_gather;
209struct inode;
210
211#ifdef ARCH_HAS_ATOMIC_UNSIGNED
212typedef unsigned page_flags_t;
213#else
214typedef unsigned long page_flags_t;
215#endif
216
217
218
219
220
221
222
223struct page {
224 page_flags_t flags;
225
226 atomic_t _count;
227 atomic_t _mapcount;
228
229
230
231 unsigned long private;
232
233
234
235
236
237
238 struct address_space *mapping;
239
240
241
242
243
244
245 pgoff_t index;
246 struct list_head lru;
247
248
249
250
251
252
253
254
255
256
257
258
259#if defined(WANT_PAGE_VIRTUAL)
260 void *virtual;
261
262#endif
263};
264
265
266
267
268
269#include <linux/page-flags.h>
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297#define put_page_testzero(p) \
298 ({ \
299 BUG_ON(page_count(p) == 0); \
300 atomic_add_negative(-1, &(p)->_count); \
301 })
302
303
304
305
306
307#define get_page_testone(p) atomic_inc_and_test(&(p)->_count)
308
309#define set_page_count(p,v) atomic_set(&(p)->_count, v - 1)
310#define __put_page(p) atomic_dec(&(p)->_count)
311
312extern void FASTCALL(__page_cache_release(struct page *));
313
314#ifdef CONFIG_HUGETLB_PAGE
315
316static inline int page_count(struct page *p)
317{
318 if (PageCompound(p))
319 p = (struct page *)p->private;
320 return atomic_read(&(p)->_count) + 1;
321}
322
323static inline void get_page(struct page *page)
324{
325 if (unlikely(PageCompound(page)))
326 page = (struct page *)page->private;
327 atomic_inc(&page->_count);
328}
329
330void put_page(struct page *page);
331
332#else
333
334#define page_count(p) (atomic_read(&(p)->_count) + 1)
335
336static inline void get_page(struct page *page)
337{
338 atomic_inc(&page->_count);
339}
340
341static inline void put_page(struct page *page)
342{
343 if (!PageReserved(page) && put_page_testzero(page))
344 __page_cache_release(page);
345}
346
347#endif
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404#define NODEZONE_SHIFT (sizeof(page_flags_t)*8 - MAX_NODES_SHIFT - MAX_ZONES_SHIFT)
405#define NODEZONE(node, zone) ((node << ZONES_SHIFT) | zone)
406
407static inline unsigned long page_zonenum(struct page *page)
408{
409 return (page->flags >> NODEZONE_SHIFT) & (~(~0UL << ZONES_SHIFT));
410}
411static inline unsigned long page_to_nid(struct page *page)
412{
413 return (page->flags >> (NODEZONE_SHIFT + ZONES_SHIFT));
414}
415
416struct zone;
417extern struct zone *zone_table[];
418
419static inline struct zone *page_zone(struct page *page)
420{
421 return zone_table[page->flags >> NODEZONE_SHIFT];
422}
423
424static inline void set_page_zone(struct page *page, unsigned long nodezone_num)
425{
426 page->flags &= ~(~0UL << NODEZONE_SHIFT);
427 page->flags |= nodezone_num << NODEZONE_SHIFT;
428}
429
430#ifndef CONFIG_DISCONTIGMEM
431
432extern struct page *mem_map;
433#endif
434
435static inline void *lowmem_page_address(struct page *page)
436{
437 return __va(page_to_pfn(page) << PAGE_SHIFT);
438}
439
440#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
441#define HASHED_PAGE_VIRTUAL
442#endif
443
444#if defined(WANT_PAGE_VIRTUAL)
445#define page_address(page) ((page)->virtual)
446#define set_page_address(page, address) \
447 do { \
448 (page)->virtual = (address); \
449 } while(0)
450#define page_address_init() do { } while(0)
451#endif
452
453#if defined(HASHED_PAGE_VIRTUAL)
454void *page_address(struct page *page);
455void set_page_address(struct page *page, void *virtual);
456void page_address_init(void);
457#endif
458
459#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL)
460#define page_address(page) lowmem_page_address(page)
461#define set_page_address(page, address) do { } while(0)
462#define page_address_init() do { } while(0)
463#endif
464
465
466
467
468
469
470
471
472
473
474#define PAGE_MAPPING_ANON 1
475
476extern struct address_space swapper_space;
477static inline struct address_space *page_mapping(struct page *page)
478{
479 struct address_space *mapping = page->mapping;
480
481 if (unlikely(PageSwapCache(page)))
482 mapping = &swapper_space;
483 else if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON))
484 mapping = NULL;
485 return mapping;
486}
487
488static inline int PageAnon(struct page *page)
489{
490 return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
491}
492
493
494
495
496
497static inline pgoff_t page_index(struct page *page)
498{
499 if (unlikely(PageSwapCache(page)))
500 return page->private;
501 return page->index;
502}
503
504
505
506
507
508
509static inline void reset_page_mapcount(struct page *page)
510{
511 atomic_set(&(page)->_mapcount, -1);
512}
513
514static inline int page_mapcount(struct page *page)
515{
516 return atomic_read(&(page)->_mapcount) + 1;
517}
518
519
520
521
522static inline int page_mapped(struct page *page)
523{
524 return atomic_read(&(page)->_mapcount) >= 0;
525}
526
527
528
529
530#define NOPAGE_SIGBUS (NULL)
531#define NOPAGE_OOM ((struct page *) (-1))
532
533
534
535
536
537
538#define VM_FAULT_OOM (-1)
539#define VM_FAULT_SIGBUS 0
540#define VM_FAULT_MINOR 1
541#define VM_FAULT_MAJOR 2
542
543#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
544
545extern void show_free_areas(void);
546
547#ifdef CONFIG_SHMEM
548struct page *shmem_nopage(struct vm_area_struct *vma,
549 unsigned long address, int *type);
550int shmem_set_policy(struct vm_area_struct *vma, struct mempolicy *new);
551struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
552 unsigned long addr);
553int shmem_lock(struct file *file, int lock, struct user_struct *user);
554#else
555#define shmem_nopage filemap_nopage
556#define shmem_lock(a, b, c) ({0;})
557#define shmem_set_policy(a, b) (0)
558#define shmem_get_policy(a, b) (NULL)
559#endif
560struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags);
561
562int shmem_zero_setup(struct vm_area_struct *);
563
564static inline int can_do_mlock(void)
565{
566 if (capable(CAP_IPC_LOCK))
567 return 1;
568 if (current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur != 0)
569 return 1;
570 return 0;
571}
572extern int user_shm_lock(size_t, struct user_struct *);
573extern void user_shm_unlock(size_t, struct user_struct *);
574
575
576
577
578struct zap_details {
579 struct vm_area_struct *nonlinear_vma;
580 struct address_space *check_mapping;
581 pgoff_t first_index;
582 pgoff_t last_index;
583 spinlock_t *i_mmap_lock;
584 unsigned long break_addr;
585 unsigned long truncate_count;
586};
587
588void zap_page_range(struct vm_area_struct *vma, unsigned long address,
589 unsigned long size, struct zap_details *);
590int unmap_vmas(struct mmu_gather **tlbp, struct mm_struct *mm,
591 struct vm_area_struct *start_vma, unsigned long start_addr,
592 unsigned long end_addr, unsigned long *nr_accounted,
593 struct zap_details *);
594void clear_page_range(struct mmu_gather *tlb, unsigned long addr, unsigned long end);
595int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
596 struct vm_area_struct *vma);
597int zeromap_page_range(struct vm_area_struct *vma, unsigned long from,
598 unsigned long size, pgprot_t prot);
599void unmap_mapping_range(struct address_space *mapping,
600 loff_t const holebegin, loff_t const holelen, int even_cows);
601
602static inline void unmap_shared_mapping_range(struct address_space *mapping,
603 loff_t const holebegin, loff_t const holelen)
604{
605 unmap_mapping_range(mapping, holebegin, holelen, 0);
606}
607
608extern int vmtruncate(struct inode * inode, loff_t offset);
609extern pud_t *FASTCALL(__pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address));
610extern pmd_t *FASTCALL(__pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address));
611extern pte_t *FASTCALL(pte_alloc_kernel(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
612extern pte_t *FASTCALL(pte_alloc_map(struct mm_struct *mm, pmd_t *pmd, unsigned long address));
613extern int install_page(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, struct page *page, pgprot_t prot);
614extern int install_file_pte(struct mm_struct *mm, struct vm_area_struct *vma, unsigned long addr, unsigned long pgoff, pgprot_t prot);
615extern int handle_mm_fault(struct mm_struct *mm,struct vm_area_struct *vma, unsigned long address, int write_access);
616extern int make_pages_present(unsigned long addr, unsigned long end);
617extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
618void install_arg_page(struct vm_area_struct *, struct page *, unsigned long);
619
620int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start,
621 int len, int write, int force, struct page **pages, struct vm_area_struct **vmas);
622
623int __set_page_dirty_buffers(struct page *page);
624int __set_page_dirty_nobuffers(struct page *page);
625int redirty_page_for_writepage(struct writeback_control *wbc,
626 struct page *page);
627int FASTCALL(set_page_dirty(struct page *page));
628int set_page_dirty_lock(struct page *page);
629int clear_page_dirty_for_io(struct page *page);
630
631extern unsigned long do_mremap(unsigned long addr,
632 unsigned long old_len, unsigned long new_len,
633 unsigned long flags, unsigned long new_addr);
634
635
636
637
638
639
640
641
642
643
644
645
646typedef int (*shrinker_t)(int nr_to_scan, unsigned int gfp_mask);
647
648
649
650
651
652
653#define DEFAULT_SEEKS 2
654struct shrinker;
655extern struct shrinker *set_shrinker(int, shrinker_t);
656extern void remove_shrinker(struct shrinker *shrinker);
657
658
659
660
661
662
663
664
665
666
667#ifdef CONFIG_MMU
668#ifndef __ARCH_HAS_4LEVEL_HACK
669static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
670{
671 if (pgd_none(*pgd))
672 return __pud_alloc(mm, pgd, address);
673 return pud_offset(pgd, address);
674}
675
676static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
677{
678 if (pud_none(*pud))
679 return __pmd_alloc(mm, pud, address);
680 return pmd_offset(pud, address);
681}
682#endif
683#endif
684
685extern void free_area_init(unsigned long * zones_size);
686extern void free_area_init_node(int nid, pg_data_t *pgdat,
687 unsigned long * zones_size, unsigned long zone_start_pfn,
688 unsigned long *zholes_size);
689extern void memmap_init_zone(unsigned long, int, unsigned long, unsigned long);
690extern void mem_init(void);
691extern void show_mem(void);
692extern void si_meminfo(struct sysinfo * val);
693extern void si_meminfo_node(struct sysinfo *val, int nid);
694
695
696void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
697void vma_prio_tree_insert(struct vm_area_struct *, struct prio_tree_root *);
698void vma_prio_tree_remove(struct vm_area_struct *, struct prio_tree_root *);
699struct vm_area_struct *vma_prio_tree_next(struct vm_area_struct *vma,
700 struct prio_tree_iter *iter);
701
702#define vma_prio_tree_foreach(vma, iter, root, begin, end) \
703 for (prio_tree_iter_init(iter, root, begin, end), vma = NULL; \
704 (vma = vma_prio_tree_next(vma, iter)); )
705
706static inline void vma_nonlinear_insert(struct vm_area_struct *vma,
707 struct list_head *list)
708{
709 vma->shared.vm_set.parent = NULL;
710 list_add_tail(&vma->shared.vm_set.list, list);
711}
712
713
714extern int __vm_enough_memory(long pages, int cap_sys_admin);
715extern void vma_adjust(struct vm_area_struct *vma, unsigned long start,
716 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert);
717extern struct vm_area_struct *vma_merge(struct mm_struct *,
718 struct vm_area_struct *prev, unsigned long addr, unsigned long end,
719 unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
720 struct mempolicy *);
721extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
722extern int split_vma(struct mm_struct *,
723 struct vm_area_struct *, unsigned long addr, int new_below);
724extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
725extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *,
726 struct rb_node **, struct rb_node *);
727extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
728 unsigned long addr, unsigned long len, pgoff_t pgoff);
729extern void exit_mmap(struct mm_struct *);
730
731extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
732
733extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
734 unsigned long len, unsigned long prot,
735 unsigned long flag, unsigned long pgoff);
736
737static inline unsigned long do_mmap(struct file *file, unsigned long addr,
738 unsigned long len, unsigned long prot,
739 unsigned long flag, unsigned long offset)
740{
741 unsigned long ret = -EINVAL;
742 if ((offset + PAGE_ALIGN(len)) < offset)
743 goto out;
744 if (!(offset & ~PAGE_MASK))
745 ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
746out:
747 return ret;
748}
749
750extern int do_munmap(struct mm_struct *, unsigned long, size_t);
751
752extern unsigned long do_brk(unsigned long, unsigned long);
753
754
755extern unsigned long page_unuse(struct page *);
756extern void truncate_inode_pages(struct address_space *, loff_t);
757
758
759extern struct page *filemap_nopage(struct vm_area_struct *, unsigned long, int *);
760extern int filemap_populate(struct vm_area_struct *, unsigned long,
761 unsigned long, pgprot_t, unsigned long, int);
762
763
764int write_one_page(struct page *page, int wait);
765
766
767#define VM_MAX_READAHEAD 128
768#define VM_MIN_READAHEAD 16
769#define VM_MAX_CACHE_HIT 256
770
771
772int do_page_cache_readahead(struct address_space *mapping, struct file *filp,
773 unsigned long offset, unsigned long nr_to_read);
774int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
775 unsigned long offset, unsigned long nr_to_read);
776unsigned long page_cache_readahead(struct address_space *mapping,
777 struct file_ra_state *ra,
778 struct file *filp,
779 unsigned long offset,
780 unsigned long size);
781void handle_ra_miss(struct address_space *mapping,
782 struct file_ra_state *ra, pgoff_t offset);
783unsigned long max_sane_readahead(unsigned long nr);
784
785
786extern int expand_stack(struct vm_area_struct * vma, unsigned long address);
787
788
789extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
790extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
791 struct vm_area_struct **pprev);
792
793
794
795static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
796{
797 struct vm_area_struct * vma = find_vma(mm,start_addr);
798
799 if (vma && end_addr <= vma->vm_start)
800 vma = NULL;
801 return vma;
802}
803
804static inline unsigned long vma_pages(struct vm_area_struct *vma)
805{
806 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
807}
808
809extern struct vm_area_struct *find_extend_vma(struct mm_struct *mm, unsigned long addr);
810
811extern struct page * vmalloc_to_page(void *addr);
812extern unsigned long vmalloc_to_pfn(void *addr);
813extern struct page * follow_page(struct mm_struct *mm, unsigned long address,
814 int write);
815extern int check_user_page_readable(struct mm_struct *mm, unsigned long address);
816int remap_pfn_range(struct vm_area_struct *, unsigned long,
817 unsigned long, unsigned long, pgprot_t);
818
819#ifdef CONFIG_PROC_FS
820void __vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
821#else
822static inline void __vm_stat_account(struct mm_struct *mm,
823 unsigned long flags, struct file *file, long pages)
824{
825}
826#endif
827
828static inline void vm_stat_account(struct vm_area_struct *vma)
829{
830 __vm_stat_account(vma->vm_mm, vma->vm_flags, vma->vm_file,
831 vma_pages(vma));
832}
833
834static inline void vm_stat_unaccount(struct vm_area_struct *vma)
835{
836 __vm_stat_account(vma->vm_mm, vma->vm_flags, vma->vm_file,
837 -vma_pages(vma));
838}
839
840
841extern void update_mem_hiwater(void);
842
843#ifndef CONFIG_DEBUG_PAGEALLOC
844static inline void
845kernel_map_pages(struct page *page, int numpages, int enable)
846{
847}
848#endif
849
850extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
851#ifdef __HAVE_ARCH_GATE_AREA
852int in_gate_area_no_task(unsigned long addr);
853int in_gate_area(struct task_struct *task, unsigned long addr);
854#else
855int in_gate_area_no_task(unsigned long addr);
856#define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);})
857#endif
858
859#endif
860#endif
861