[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] Fix several warnings for -Wmissing-prototypes (part 2)
From: |
Samuel Thibault |
Subject: |
Re: [PATCH] Fix several warnings for -Wmissing-prototypes (part 2) |
Date: |
Wed, 25 Jan 2023 02:06:47 +0100 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Flavio Cruz, le mar. 24 janv. 2023 01:44:23 -0500, a ecrit:
> * i386/i386/io_map.c: code is unused.
> * i386/i386/io_perm.c: include mig prototypes.
> * i386/i386/mp_desc.c: Deleted interrupt_stack_alloc since it is not
> used.
> * i386/i386/seg.h: Moved descriptor structs to
> i386/include/mach/i386/mach_i386_types.h
> as that represents the interface types for RPCs.
> Defined aliases for real_descriptor since those are used by the i386 RPCs.
> Inlined many
> functions here too and removed seg.c.
> * i386/i386/seg.c: Removed. All the functions are inline now.
> * i386/i386/trap.c: Use static.
> * i386/i386/trap.h: Define missing prototypes.
> * i386/i386/tss.h: Use static inline for ltr.
> * i386/i386/user_ldt.c: Include mig prototypes.
> * i386/include/mach/i386/mach_i386.defs: Define real_descriptor_t types
> since those are used in the RPC definition. Now both prototypes and
> definitions will match.
> * i386/include/mach/i386/mach_i386_types.h: Move struct descriptor
> from seg.h since we need those for the RPC interfaces. Removed include
> of io_perm.h since it generates circular includes otherwise.
> * i386/intel/pmap.c: pmap_map is unused. Added static qualifier for
> several functions.
> * i386/intel/pmap.h: pmap_update_interrupt declared for non-SMP and SMP.
> ---
> i386/Makefrag.am | 2 -
> i386/i386/io_map.c | 92 ------------------------
> i386/i386/io_perm.c | 2 +
> i386/i386/mp_desc.c | 53 +-------------
> i386/i386/seg.c | 5 --
> i386/i386/seg.h | 42 ++---------
> i386/i386/trap.c | 2 +-
> i386/i386/trap.h | 20 ++++++
> i386/i386/tss.h | 2 +-
> i386/i386/user_ldt.c | 1 +
> i386/include/mach/i386/mach_i386.defs | 13 ++--
> i386/include/mach/i386/mach_i386_types.h | 49 ++++++++++---
> i386/intel/pmap.c | 32 ++-------
> i386/intel/pmap.h | 3 +-
> 14 files changed, 89 insertions(+), 229 deletions(-)
> delete mode 100644 i386/i386/io_map.c
> delete mode 100644 i386/i386/seg.c
>
> diff --git a/i386/Makefrag.am b/i386/Makefrag.am
> index c1043c4f..0d9b084d 100644
> --- a/i386/Makefrag.am
> +++ b/i386/Makefrag.am
> @@ -140,7 +140,6 @@ libkernel_a_SOURCES += \
> i386/i386/pmap.h \
> i386/i386/proc_reg.h \
> i386/i386/sched_param.h \
> - i386/i386/seg.c \
> i386/i386/seg.h \
> i386/i386/setjmp.h \
> i386/i386/smp.h \
> @@ -169,7 +168,6 @@ libkernel_a_SOURCES += \
> i386/i386/apic.c \
> i386/i386/hardclock.c \
> i386/i386/hardclock.h \
> - i386/i386/io_map.c \
> i386/i386/irq.c \
> i386/i386/irq.h \
> i386/i386/pit.c \
> diff --git a/i386/i386/io_map.c b/i386/i386/io_map.c
> deleted file mode 100644
> index 368f200b..00000000
> --- a/i386/i386/io_map.c
> +++ /dev/null
> @@ -1,92 +0,0 @@
> -/*
> - * Mach Operating System
> - * Copyright (c) 1991,1990 Carnegie Mellon University
> - * All Rights Reserved.
> - *
> - * Permission to use, copy, modify and distribute this software and its
> - * documentation is hereby granted, provided that both the copyright
> - * notice and this permission notice appear in all copies of the
> - * software, derivative works or modified versions, and any portions
> - * thereof, and that both notices appear in supporting documentation.
> - *
> - * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
> - * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
> - * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
> - *
> - * Carnegie Mellon requests users of this software to return to
> - *
> - * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
> - * School of Computer Science
> - * Carnegie Mellon University
> - * Pittsburgh PA 15213-3890
> - *
> - * any improvements or extensions that they make and grant Carnegie Mellon
> - * the rights to redistribute these changes.
> - */
> -
> -#include <kern/printf.h>
> -#include <mach/vm_param.h>
> -#include <vm/pmap.h>
> -#include <vm/vm_kern.h>
> -#include <vm/vm_map.h>
> -
> -extern vm_offset_t kernel_virtual_start;
> -
> -/*
> - * Allocate and map memory for devices that may need to be mapped before
> - * Mach VM is running.
> - */
> -static vm_offset_t
> -io_map(
> - phys_addr_t phys_addr,
> - vm_size_t size)
> -{
> - vm_offset_t start;
> -
> - if (kernel_map == VM_MAP_NULL) {
> - /*
> - * VM is not initialized. Grab memory.
> - */
> - start = kernel_virtual_start;
> - kernel_virtual_start += round_page(size);
> - printf("stealing kernel virtual addresses %08zx-%08zx\n", start,
> kernel_virtual_start);
> - }
> - else {
> - (void) kmem_alloc_pageable(kernel_map, &start, round_page(size));
> - }
> - (void) pmap_map_bd(start, phys_addr, phys_addr + round_page(size),
> - VM_PROT_READ|VM_PROT_WRITE);
> - return (start);
> -}
> -
> -/*
> - * Allocate and map memory for devices that may need to be mapped before
> - * Mach VM is running.
> - *
> - * This maps the all pages containing [PHYS_ADDR:PHYS_ADDR + SIZE].
> - * For contiguous requests to those pages will reuse the previously
> - * established mapping.
> - *
> - * Warning: this leaks memory maps for now, do not use it yet for something
> - * else than Mach shutdown.
> - */
> -vm_offset_t
> -io_map_cached(
> - phys_addr_t phys_addr,
> - vm_size_t size)
> -{
> - static phys_addr_t base;
> - static vm_size_t length;
> - static vm_offset_t map;
> -
> - if (! map
> - || (phys_addr < base)
> - || (base + length < phys_addr + size))
> - {
> - base = trunc_phys(phys_addr);
> - length = round_phys(phys_addr - base + size);
> - map = io_map(base, length);
> - }
> -
> - return map + (phys_addr - base);
> -}
> diff --git a/i386/i386/io_perm.c b/i386/i386/io_perm.c
> index 6db60f73..aabff49b 100644
> --- a/i386/i386/io_perm.c
> +++ b/i386/i386/io_perm.c
> @@ -64,6 +64,8 @@
> #include <device/device_emul.h>
> #include <device/device_port.h>
>
> +#include <i386/i386/mach_i386.server.h>
> +
> #include "io_perm.h"
> #include "gdt.h"
> #include "pcb.h"
> diff --git a/i386/i386/mp_desc.c b/i386/i386/mp_desc.c
> index 1e9ea0fc..bcf2fbe7 100644
> --- a/i386/i386/mp_desc.c
> +++ b/i386/i386/mp_desc.c
> @@ -167,59 +167,10 @@ mp_desc_init(int mycpu)
> }
> }
>
> -kern_return_t intel_startCPU(int slot_num)
> +static kern_return_t intel_startCPU(int slot_num)
> {
> printf("TODO: intel_startCPU\n");
> -}
> -
> -/*
> - * Called after all CPUs have been found, but before the VM system
> - * is running. The machine array must show which CPUs exist.
> - */
> -void
> -interrupt_stack_alloc(void)
> -{
> - int i;
> - int cpu_count;
> - vm_offset_t stack_start;
> -
> - /*
> - * Count the number of CPUs.
> - */
> - cpu_count = 0;
> - for (i = 0; i < NCPUS; i++)
> - if (machine_slot[i].is_cpu)
> - cpu_count++;
> -
> - /*
> - * Allocate an interrupt stack for each CPU except for
> - * the master CPU (which uses the bootstrap stack)
> - */
> - if (!init_alloc_aligned(INTSTACK_SIZE*(cpu_count-1), &stack_start))
> - panic("not enough memory for interrupt stacks");
> - stack_start = phystokv(stack_start);
> -
> - /*
> - * Set up pointers to the top of the interrupt stack.
> - */
> - for (i = 0; i < NCPUS; i++) {
> - if (i == master_cpu) {
> - interrupt_stack[i] = (vm_offset_t) _intstack;
> - int_stack_top[i] = (vm_offset_t) _eintstack;
> - }
> - else if (machine_slot[i].is_cpu) {
> - interrupt_stack[i] = stack_start;
> - int_stack_top[i] = stack_start + INTSTACK_SIZE;
> -
> - stack_start += INTSTACK_SIZE;
> - }
> - }
> -
> - /*
> - * Set up the barrier address. All thread stacks MUST
> - * be above this address.
> - */
> - int_stack_high = stack_start;
> + return KERN_FAILURE;
> }
>
> /* XXX should be adjusted per CPU speed */
> diff --git a/i386/i386/seg.c b/i386/i386/seg.c
> deleted file mode 100644
> index d57c255e..00000000
> --- a/i386/i386/seg.c
> +++ /dev/null
> @@ -1,5 +0,0 @@
> -
> -#define MACH_INLINE
> -#include "seg.h"
> -#include "tss.h"
> -
> diff --git a/i386/i386/seg.h b/i386/i386/seg.h
> index 30cfdc86..74853718 100644
> --- a/i386/i386/seg.h
> +++ b/i386/i386/seg.h
> @@ -32,6 +32,7 @@
> #define _I386_SEG_H_
>
> #include <mach/inline.h>
> +#include <mach/machine/mach_i386_types.h>
>
> /*
> * i386 segmentation.
> @@ -46,35 +47,6 @@
>
> #ifndef __ASSEMBLER__
>
> -/*
> - * Real segment descriptor.
> - */
> -struct real_descriptor {
> - unsigned int limit_low:16, /* limit 0..15 */
> - base_low:16, /* base 0..15 */
> - base_med:8, /* base 16..23 */
> - access:8, /* access byte */
> - limit_high:4, /* limit 16..19 */
> - granularity:4, /* granularity */
> - base_high:8; /* base 24..31 */
> -};
> -
> -#ifdef __x86_64__
> -struct real_descriptor64 {
> - unsigned int limit_low:16, /* limit 0..15 */
> - base_low:16, /* base 0..15 */
> - base_med:8, /* base 16..23 */
> - access:8, /* access byte */
> - limit_high:4, /* limit 16..19 */
> - granularity:4, /* granularity */
> - base_high:8, /* base 24..31 */
> - base_ext:32, /* base 32..63 */
> - reserved1:8,
> - zero:5,
> - reserved2:19;
> -};
> -#endif
> -
> struct real_gate {
> unsigned int offset_low:16, /* offset 0..15 */
> selector:16,
> @@ -156,15 +128,15 @@ struct pseudo_descriptor
>
>
> /* Load the processor's IDT, GDT, or LDT pointers. */
> -MACH_INLINE void lgdt(struct pseudo_descriptor *pdesc)
> +static inline void lgdt(struct pseudo_descriptor *pdesc)
> {
> __asm volatile("lgdt %0" : : "m" (*pdesc));
> }
> -MACH_INLINE void lidt(struct pseudo_descriptor *pdesc)
> +static inline void lidt(struct pseudo_descriptor *pdesc)
> {
> __asm volatile("lidt %0" : : "m" (*pdesc));
> }
> -MACH_INLINE void lldt(unsigned short ldt_selector)
> +static inline void lldt(unsigned short ldt_selector)
> {
> __asm volatile("lldt %w0" : : "r" (ldt_selector) : "memory");
> }
> @@ -177,7 +149,7 @@ MACH_INLINE void lldt(unsigned short ldt_selector)
>
>
> /* Fill a segment descriptor. */
> -MACH_INLINE void
> +static inline void
> fill_descriptor(struct real_descriptor *_desc, unsigned base, unsigned limit,
> unsigned char access, unsigned char sizebits)
> {
> @@ -206,7 +178,7 @@ fill_descriptor(struct real_descriptor *_desc, unsigned
> base, unsigned limit,
> }
>
> #ifdef __x86_64__
> -MACH_INLINE void
> +static inline void
> fill_descriptor64(struct real_descriptor64 *_desc, unsigned long base,
> unsigned limit,
> unsigned char access, unsigned char sizebits)
> {
> @@ -240,7 +212,7 @@ fill_descriptor64(struct real_descriptor64 *_desc,
> unsigned long base, unsigned
> #endif
>
> /* Fill a gate with particular values. */
> -MACH_INLINE void
> +static inline void
> fill_gate(struct real_gate *gate, unsigned long offset, unsigned short
> selector,
> unsigned char access, unsigned char word_count)
> {
> diff --git a/i386/i386/trap.c b/i386/i386/trap.c
> index 1128145e..1e04ae7d 100644
> --- a/i386/i386/trap.c
> +++ b/i386/i386/trap.c
> @@ -88,7 +88,7 @@ extern boolean_t kttd_enabled;
> boolean_t debug_all_traps_with_kttd = TRUE;
> #endif /* MACH_TTD */
>
> -void
> +static void
> user_page_fault_continue(kern_return_t kr)
> {
> thread_t thread = current_thread();
> diff --git a/i386/i386/trap.h b/i386/i386/trap.h
> index 46612db5..d9df7afa 100644
> --- a/i386/i386/trap.h
> +++ b/i386/i386/trap.h
> @@ -45,6 +45,26 @@ i386_exception(
> extern void
> thread_kdb_return(void);
>
> +/*
> + * Trap from kernel mode. Only page-fault errors are recoverable,
> + * and then only in special circumstances. All other errors are
> + * fatal.
> + */
> +void kernel_trap(struct i386_saved_state *regs);
> +
> +/*
> + * Trap from user mode.
> + * Return TRUE if from emulated system call.
> + */
> +int user_trap(struct i386_saved_state *regs);
> +
> +/*
> + * Handle AST traps for i386.
> + * Check for delayed floating-point exception from
> + * AT-bus machines.
> + */
> +void i386_astintr(void);
> +
> #endif /* !__ASSEMBLER__ */
>
> #endif /* _I386_TRAP_H_ */
> diff --git a/i386/i386/tss.h b/i386/i386/tss.h
> index 31e1f5cb..fd7e7147 100644
> --- a/i386/i386/tss.h
> +++ b/i386/i386/tss.h
> @@ -100,7 +100,7 @@ struct task_tss
>
>
> /* Load the current task register. */
> -MACH_INLINE void
> +static inline void
> ltr(unsigned short segment)
> {
> __asm volatile("ltr %0" : : "r" (segment) : "memory");
> diff --git a/i386/i386/user_ldt.c b/i386/i386/user_ldt.c
> index fdff518e..858da681 100644
> --- a/i386/i386/user_ldt.c
> +++ b/i386/i386/user_ldt.c
> @@ -39,6 +39,7 @@
> #include <i386/seg.h>
> #include <i386/thread.h>
> #include <i386/user_ldt.h>
> +#include <i386/i386/mach_i386.server.h>
> #include <stddef.h>
> #include "ldt.h"
> #include "vm_param.h"
> diff --git a/i386/include/mach/i386/mach_i386.defs
> b/i386/include/mach/i386/mach_i386.defs
> index e110c899..4694522b 100644
> --- a/i386/include/mach/i386/mach_i386.defs
> +++ b/i386/include/mach/i386/mach_i386.defs
> @@ -40,9 +40,12 @@ subsystem
> MACH_I386_IMPORTS
> #endif
>
> -type descriptor_t = struct[2] of int;
> +type descriptor_t = struct[2] of uint32_t;
> type descriptor_list_t = array[*] of descriptor_t;
>
> +type real_descriptor_t = descriptor_t;
> +type real_descriptor_list_t = array[*] of real_descriptor_t;
> +
> import <mach/machine/mach_i386_types.h>;
>
> #if KERNEL_SERVER
> @@ -66,13 +69,13 @@ skip; /* i386_io_port_list */
> routine i386_set_ldt(
> target_thread : thread_t;
> first_selector : int;
> - desc_list : descriptor_list_t, serverCopy);
> + desc_list : real_descriptor_list_t, serverCopy);
>
> routine i386_get_ldt(
> target_thread : thread_t;
> first_selector : int;
> selector_count : int;
> - out desc_list : descriptor_list_t);
> + out desc_list : real_descriptor_list_t);
>
> /* Request a new port IO_PERM that represents the capability to access
> the I/O ports [FROM; TO] directly. MASTER_PORT is the master device port.
> @@ -104,10 +107,10 @@ routine i386_io_perm_modify(
> routine i386_set_gdt(
> target_thread : thread_t;
> inout selector : int;
> - desc : descriptor_t);
> + desc : real_descriptor_t);
>
> /* Fetch a segment descriptor set with a prior i386_set_gdt call. */
> routine i386_get_gdt(
> target_thread : thread_t;
> selector : int;
> - out desc : descriptor_t);
> + out desc : real_descriptor_t);
> diff --git a/i386/include/mach/i386/mach_i386_types.h
> b/i386/include/mach/i386/mach_i386_types.h
> index f003636d..bfa91ca0 100644
> --- a/i386/include/mach/i386/mach_i386_types.h
> +++ b/i386/include/mach/i386/mach_i386_types.h
> @@ -30,27 +30,60 @@
> #ifndef _MACH_MACH_I386_TYPES_H_
> #define _MACH_MACH_I386_TYPES_H_
>
> +#ifndef __ASSEMBLER__
> /*
> * i386 segment descriptor.
> */
> -struct descriptor {
> +struct segment_descriptor {
> unsigned int low_word;
> unsigned int high_word;
> };
>
> -typedef struct descriptor descriptor_t;
> -typedef struct descriptor *descriptor_list_t;
> -typedef const struct descriptor *const_descriptor_list_t;
> +typedef struct segment_descriptor descriptor_t;
> +typedef struct segment_descriptor *descriptor_list_t;
> +typedef const struct descriptor *const_segment_descriptor_list_t;
> +
> +/*
> + * Real segment descriptor.
> + */
> +struct real_descriptor {
> + unsigned int limit_low:16, /* limit 0..15 */
> + base_low:16, /* base 0..15 */
> + base_med:8, /* base 16..23 */
> + access:8, /* access byte */
> + limit_high:4, /* limit 16..19 */
> + granularity:4, /* granularity */
> + base_high:8; /* base 24..31 */
> +};
> +typedef struct real_descriptor real_descriptor_t;
> +typedef real_descriptor_t *real_descriptor_list_t;
> +typedef const real_descriptor_list_t const_real_descriptor_list_t;
> +
> +#ifdef __x86_64__
> +struct real_descriptor64 {
> + unsigned int limit_low:16, /* limit 0..15 */
> + base_low:16, /* base 0..15 */
> + base_med:8, /* base 16..23 */
> + access:8, /* access byte */
> + limit_high:4, /* limit 16..19 */
> + granularity:4, /* granularity */
> + base_high:8, /* base 24..31 */
> + base_ext:32, /* base 32..63 */
> + reserved1:8,
> + zero:5,
> + reserved2:19;
> +};
> +#endif
> +
> +#endif /* !__ASSEMBLER__ */
>
> /*
> * i386 I/O port
> */
>
> -#ifdef MACH_KERNEL
> -#include <i386/io_perm.h>
> -#else /* MACH_KERNEL */
> +#ifndef MACH_KERNEL
> typedef unsigned short io_port_t;
> typedef mach_port_t io_perm_t;
> -#endif /* MACH_KERNEL */
> +#endif /* !MACH_KERNEL */
>
> #endif /* _MACH_MACH_I386_TYPES_H_ */
> diff --git a/i386/intel/pmap.c b/i386/intel/pmap.c
> index 199f824e..d4a5df73 100644
> --- a/i386/intel/pmap.c
> +++ b/i386/intel/pmap.c
> @@ -501,30 +501,6 @@ void ptep_check(ptep_t ptep)
> }
> #endif /* DEBUG_PTE_PAGE */
>
> -/*
> - * Map memory at initialization. The physical addresses being
> - * mapped are not managed and are never unmapped.
> - *
> - * For now, VM is already on, we only need to map the
> - * specified memory.
> - */
> -vm_offset_t pmap_map(
> - vm_offset_t virt,
> - phys_addr_t start,
> - phys_addr_t end,
> - int prot)
> -{
> - int ps;
> -
> - ps = PAGE_SIZE;
> - while (start < end) {
> - pmap_enter(kernel_pmap, virt, start, prot, FALSE);
> - virt += ps;
> - start += ps;
> - }
> - return(virt);
> -}
> -
> /*
> * Back-door routine for mapping kernel VM at initialization.
> * Useful for mapping memory outside the range of direct mapped
> @@ -1108,7 +1084,7 @@ valid_page(phys_addr_t addr)
> * Must be called with the pmap system and the pmap unlocked,
> * since these must be unlocked to use vm_page_grab.
> */
> -vm_offset_t
> +static vm_offset_t
> pmap_page_table_page_alloc(void)
> {
> vm_page_t m;
> @@ -1198,7 +1174,7 @@ void pmap_map_mfn(void *_addr, unsigned long mfn) {
> * The page-table page must have all mappings removed,
> * and be removed from its page directory.
> */
> -void
> +static void
> pmap_page_table_page_dealloc(vm_offset_t pa)
> {
> vm_page_t m;
> @@ -2600,7 +2576,7 @@ pmap_pageable(
> /*
> * Clear specified attribute bits.
> */
> -void
> +static void
> phys_attribute_clear(
> phys_addr_t phys,
> int bits)
> @@ -2684,7 +2660,7 @@ phys_attribute_clear(
> /*
> * Check specified attribute bits.
> */
> -boolean_t
> +static boolean_t
> phys_attribute_test(
> phys_addr_t phys,
> int bits)
> diff --git a/i386/intel/pmap.h b/i386/intel/pmap.h
> index bad640c1..d6bf85fb 100644
> --- a/i386/intel/pmap.h
> +++ b/i386/intel/pmap.h
> @@ -268,11 +268,12 @@ boolean_t cpu_update_needed[NCPUS];
> */
>
> void process_pmap_updates(pmap_t);
> -void pmap_update_interrupt(void);
> extern pmap_t kernel_pmap;
>
> #endif /* NCPUS > 1 */
>
> +void pmap_update_interrupt(void);
> +
> /*
> * Machine dependent routines that are used only for i386/i486.
> */
> --
> 2.39.0
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.