mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-17 20:54:10 +00:00
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
Pull sparc updates from David Miller: "A host of mall cleanups and adjustments that have accumulated while I was away, nothing major" * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc: (26 commits) sparc: make xchg() into a statement expression sparc64: Use arch_validate_flags() to validate ADI flag sparc32: Fix comparing pointer to 0 coccicheck warning sparc: fix led.c driver when PROC_FS is not enabled sparc: Fix handling of page table constructor failure sparc64: only select COMPAT_BINFMT_ELF if BINFMT_ELF is set tty: hvcs: Drop unnecessary if block tty: vcc: Drop unnecessary if block tty: vcc: Drop impossible to hit WARN_ON sparc: sparc64_defconfig: add necessary configs for qemu sparc64: switch defconfig from the legacy ide driver to libata sparc32: Preserve clone syscall flags argument for restarts due to signals sparc32: Limit memblock allocation to low memory sparc: Replace test_ti_thread_flag() with test_tsk_thread_flag() sbus: char: Remove meaningless jump label out_free sparc32: signal: Fix stack trampoline for RT signals sparc: remove SA_STATIC_ALLOC macro definition sparc: use for_each_child_of_node() macro sparc: Use fallthrough pseudo-keyword sparc32: srmmu: improve type safety of __nocache_fix() ...
This commit is contained in:
commit
6dd580b93d
19 changed files with 75 additions and 75 deletions
|
@ -175,7 +175,7 @@ config SMP
|
|||
Management" code will be disabled if you say Y here.
|
||||
|
||||
See also <file:Documentation/admin-guide/lockup-watchdogs.rst> and the SMP-HOWTO
|
||||
available at <http://www.tldp.org/docs.html#howto>.
|
||||
available at <https://www.tldp.org/docs.html#howto>.
|
||||
|
||||
If you don't know what to do here, say N.
|
||||
|
||||
|
|
|
@ -154,6 +154,10 @@ static off_t get_hdrs_offset(int kernelfd, const char *filename)
|
|||
offset -= LOOKBACK;
|
||||
/* skip a.out header */
|
||||
offset += AOUT_TEXT_OFFSET;
|
||||
if (offset < 0) {
|
||||
errno = -EINVAL;
|
||||
die("Calculated a negative offset, probably elftoaout generated an invalid image. Did you use a recent elftoaout ?");
|
||||
}
|
||||
if (lseek(kernelfd, offset, SEEK_SET) < 0)
|
||||
die("lseek");
|
||||
if (read(kernelfd, buffer, BUFSIZE) != BUFSIZE)
|
||||
|
|
|
@ -65,9 +65,8 @@ CONFIG_CDROM_PKTCDVD=m
|
|||
CONFIG_CDROM_PKTCDVD_WCACHE=y
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
CONFIG_SUNVDC=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_BLK_DEV_ALI15X3=y
|
||||
CONFIG_ATA=y
|
||||
CONFIG_PATA_ALI=y
|
||||
CONFIG_RAID_ATTRS=m
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
|
@ -235,3 +234,9 @@ CONFIG_CRYPTO_TWOFISH=m
|
|||
CONFIG_CRC16=m
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_VCC=m
|
||||
CONFIG_ATA=y
|
||||
CONFIG_PATA_CMD64X=y
|
||||
CONFIG_HAPPYMEAL=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
*
|
||||
* When we spin, we try to use an operation that will cause the
|
||||
* current cpu strand to block, and therefore make the core fully
|
||||
* available to any other other runnable strands. There are two
|
||||
* available to any other runnable strands. There are two
|
||||
* options, based upon cpu capabilities.
|
||||
*
|
||||
* On all cpus prior to SPARC-T4 we do three dummy reads of the
|
||||
|
|
|
@ -25,7 +25,7 @@ static inline unsigned long __xchg(unsigned long x, __volatile__ void * ptr, int
|
|||
return x;
|
||||
}
|
||||
|
||||
#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
|
||||
#define xchg(ptr,x) ({(__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)));})
|
||||
|
||||
/* Emulate cmpxchg() the same way we emulate atomics,
|
||||
* by hashing the object address and indexing into an array
|
||||
|
|
|
@ -57,36 +57,40 @@ static inline int sparc_validate_prot(unsigned long prot, unsigned long addr)
|
|||
{
|
||||
if (prot & ~(PROT_READ | PROT_WRITE | PROT_EXEC | PROT_SEM | PROT_ADI))
|
||||
return 0;
|
||||
if (prot & PROT_ADI) {
|
||||
if (!adi_capable())
|
||||
return 0;
|
||||
|
||||
if (addr) {
|
||||
struct vm_area_struct *vma;
|
||||
|
||||
vma = find_vma(current->mm, addr);
|
||||
if (vma) {
|
||||
/* ADI can not be enabled on PFN
|
||||
* mapped pages
|
||||
*/
|
||||
if (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP))
|
||||
return 0;
|
||||
|
||||
/* Mergeable pages can become unmergeable
|
||||
* if ADI is enabled on them even if they
|
||||
* have identical data on them. This can be
|
||||
* because ADI enabled pages with identical
|
||||
* data may still not have identical ADI
|
||||
* tags on them. Disallow ADI on mergeable
|
||||
* pages.
|
||||
*/
|
||||
if (vma->vm_flags & VM_MERGEABLE)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
#define arch_validate_flags(vm_flags) arch_validate_flags(vm_flags)
|
||||
/* arch_validate_flags() - Ensure combination of flags is valid for a
|
||||
* VMA.
|
||||
*/
|
||||
static inline bool arch_validate_flags(unsigned long vm_flags)
|
||||
{
|
||||
/* If ADI is being enabled on this VMA, check for ADI
|
||||
* capability on the platform and ensure VMA is suitable
|
||||
* for ADI
|
||||
*/
|
||||
if (vm_flags & VM_SPARC_ADI) {
|
||||
if (!adi_capable())
|
||||
return false;
|
||||
|
||||
/* ADI can not be enabled on PFN mapped pages */
|
||||
if (vm_flags & (VM_PFNMAP | VM_MIXEDMAP))
|
||||
return false;
|
||||
|
||||
/* Mergeable pages can become unmergeable
|
||||
* if ADI is enabled on them even if they
|
||||
* have identical data on them. This can be
|
||||
* because ADI enabled pages with identical
|
||||
* data may still not have identical ADI
|
||||
* tags on them. Disallow ADI on mergeable
|
||||
* pages.
|
||||
*/
|
||||
if (vm_flags & VM_MERGEABLE)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif /* CONFIG_SPARC64 */
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
|
|
@ -113,7 +113,7 @@ extern unsigned long last_valid_pfn;
|
|||
extern void *srmmu_nocache_pool;
|
||||
#define __nocache_pa(VADDR) (((unsigned long)VADDR) - SRMMU_NOCACHE_VADDR + __pa((unsigned long)srmmu_nocache_pool))
|
||||
#define __nocache_va(PADDR) (__va((unsigned long)PADDR) - (unsigned long)srmmu_nocache_pool + SRMMU_NOCACHE_VADDR)
|
||||
#define __nocache_fix(VADDR) __va(__nocache_pa(VADDR))
|
||||
#define __nocache_fix(VADDR) ((__typeof__(VADDR))__va(__nocache_pa(VADDR)))
|
||||
|
||||
/* Accessing the MMU control register. */
|
||||
unsigned int srmmu_get_mmureg(void);
|
||||
|
|
|
@ -9,18 +9,6 @@
|
|||
#include <uapi/asm/signal.h>
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
/*
|
||||
* DJHR
|
||||
* SA_STATIC_ALLOC is used for the sparc32 system to indicate that this
|
||||
* interrupt handler's irq structure should be statically allocated
|
||||
* by the request_irq routine.
|
||||
* The alternative is that arch/sparc/kernel/irq.c has carnal knowledge
|
||||
* of interrupt usage and that sucks. Also without a flag like this
|
||||
* it may be possible for the free_irq routine to attempt to free
|
||||
* statically allocated data.. which is NOT GOOD.
|
||||
*
|
||||
*/
|
||||
#define SA_STATIC_ALLOC 0x8000
|
||||
|
||||
#define __ARCH_HAS_KA_RESTORER
|
||||
#define __ARCH_HAS_SA_RESTORER
|
||||
|
|
|
@ -994,7 +994,7 @@ do_syscall:
|
|||
andcc %l5, _TIF_SYSCALL_TRACE, %g0
|
||||
mov %i4, %o4
|
||||
bne linux_syscall_trace
|
||||
mov %i0, %l5
|
||||
mov %i0, %l6
|
||||
2:
|
||||
call %l7
|
||||
mov %i5, %o5
|
||||
|
@ -1003,16 +1003,15 @@ do_syscall:
|
|||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
|
||||
ret_sys_call:
|
||||
ld [%curptr + TI_FLAGS], %l6
|
||||
ld [%curptr + TI_FLAGS], %l5
|
||||
cmp %o0, -ERESTART_RESTARTBLOCK
|
||||
ld [%sp + STACKFRAME_SZ + PT_PSR], %g3
|
||||
set PSR_C, %g2
|
||||
bgeu 1f
|
||||
andcc %l6, _TIF_SYSCALL_TRACE, %g0
|
||||
andcc %l5, _TIF_SYSCALL_TRACE, %g0
|
||||
|
||||
/* System call success, clear Carry condition code. */
|
||||
andn %g3, %g2, %g3
|
||||
clr %l6
|
||||
st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
|
||||
bne linux_syscall_trace2
|
||||
ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
|
||||
|
@ -1027,7 +1026,6 @@ ret_sys_call:
|
|||
sub %g0, %o0, %o0
|
||||
or %g3, %g2, %g3
|
||||
st %o0, [%sp + STACKFRAME_SZ + PT_I0]
|
||||
mov 1, %l6
|
||||
st %g3, [%sp + STACKFRAME_SZ + PT_PSR]
|
||||
bne linux_syscall_trace2
|
||||
ld [%sp + STACKFRAME_SZ + PT_NPC], %l1 /* pc = npc */
|
||||
|
|
|
@ -50,6 +50,7 @@ static void led_blink(struct timer_list *unused)
|
|||
add_timer(&led_blink_timer);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PROC_FS
|
||||
static int led_proc_show(struct seq_file *m, void *v)
|
||||
{
|
||||
if (get_auxio() & AUXIO_LED)
|
||||
|
@ -111,6 +112,7 @@ static const struct proc_ops led_proc_ops = {
|
|||
.proc_release = single_release,
|
||||
.proc_write = led_proc_write,
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct proc_dir_entry *led;
|
||||
|
||||
|
|
|
@ -552,9 +552,8 @@ static void pci_of_scan_bus(struct pci_pbm_info *pbm,
|
|||
pci_info(bus, "scan_bus[%pOF] bus no %d\n",
|
||||
node, bus->number);
|
||||
|
||||
child = NULL;
|
||||
prev_devfn = -1;
|
||||
while ((child = of_get_next_child(node, child)) != NULL) {
|
||||
for_each_child_of_node(node, child) {
|
||||
if (ofpci_verbose)
|
||||
pci_info(bus, " * %pOF\n", child);
|
||||
reg = of_get_property(child, "reg", ®len);
|
||||
|
|
|
@ -183,7 +183,7 @@ void exit_thread(struct task_struct *tsk)
|
|||
#ifndef CONFIG_SMP
|
||||
if (last_task_used_math == tsk) {
|
||||
#else
|
||||
if (test_ti_thread_flag(task_thread_info(tsk), TIF_USEDFPU)) {
|
||||
if (test_tsk_thread_flag(tsk, TIF_USEDFPU)) {
|
||||
#endif
|
||||
/* Keep process from leaving FPU in a bogon state. */
|
||||
put_psr(get_psr() | PSR_EF);
|
||||
|
|
|
@ -75,7 +75,7 @@ signal_p:
|
|||
ld [%sp + STACKFRAME_SZ + PT_PSR], %t_psr
|
||||
|
||||
mov %g2, %o2
|
||||
mov %l5, %o1
|
||||
mov %l6, %o1
|
||||
call do_notify_resume
|
||||
add %sp, STACKFRAME_SZ, %o0 ! pt_regs ptr
|
||||
|
||||
|
|
|
@ -400,8 +400,8 @@ static int setup_rt_frame(struct ksignal *ksig, struct pt_regs *regs,
|
|||
else {
|
||||
regs->u_regs[UREG_I7] = (unsigned long)(&(sf->insns[0]) - 2);
|
||||
|
||||
/* mov __NR_sigreturn, %g1 */
|
||||
err |= __put_user(0x821020d8, &sf->insns[0]);
|
||||
/* mov __NR_rt_sigreturn, %g1 */
|
||||
err |= __put_user(0x82102065, &sf->insns[0]);
|
||||
|
||||
/* t 0x10 */
|
||||
err |= __put_user(0x91d02010, &sf->insns[1]);
|
||||
|
|
|
@ -428,7 +428,7 @@ static int process_dreg_info(struct vio_driver_state *vio,
|
|||
struct vio_dring_register *pkt)
|
||||
{
|
||||
struct vio_dring_state *dr;
|
||||
int i, len;
|
||||
int i;
|
||||
|
||||
viodbg(HS, "GOT DRING_REG INFO ident[%llx] "
|
||||
"ndesc[%u] dsz[%u] opt[0x%x] ncookies[%u]\n",
|
||||
|
@ -482,9 +482,7 @@ static int process_dreg_info(struct vio_driver_state *vio,
|
|||
pkt->num_descr, pkt->descr_size, pkt->options,
|
||||
pkt->num_cookies);
|
||||
|
||||
len = (sizeof(*pkt) +
|
||||
(dr->ncookies * sizeof(struct ldc_trans_cookie)));
|
||||
if (send_ctrl(vio, &pkt->tag, len) < 0)
|
||||
if (send_ctrl(vio, &pkt->tag, struct_size(pkt, cookies, dr->ncookies)) < 0)
|
||||
goto send_nack;
|
||||
|
||||
vio->dr_state |= VIO_DR_STATE_RXREG;
|
||||
|
|
|
@ -142,6 +142,7 @@ __bzero:
|
|||
ZERO_LAST_BLOCKS(%o0, 0x48, %g2)
|
||||
ZERO_LAST_BLOCKS(%o0, 0x08, %g2)
|
||||
13:
|
||||
EXT(12b, 13b, 21f)
|
||||
be 8f
|
||||
andcc %o1, 4, %g0
|
||||
|
||||
|
|
|
@ -197,6 +197,9 @@ unsigned long __init bootmem_init(unsigned long *pages_avail)
|
|||
size = memblock_phys_mem_size() - memblock_reserved_size();
|
||||
*pages_avail = (size >> PAGE_SHIFT) - high_pages;
|
||||
|
||||
/* Only allow low memory to be allocated via memblock allocation */
|
||||
memblock_set_current_limit(max_low_pfn << PAGE_SHIFT);
|
||||
|
||||
return max_pfn;
|
||||
}
|
||||
|
||||
|
|
|
@ -351,7 +351,7 @@ pgtable_t pte_alloc_one(struct mm_struct *mm)
|
|||
pte_t *ptep;
|
||||
struct page *page;
|
||||
|
||||
if ((ptep = pte_alloc_one_kernel(mm)) == 0)
|
||||
if (!(ptep = pte_alloc_one_kernel(mm)))
|
||||
return NULL;
|
||||
page = pfn_to_page(__nocache_pa((unsigned long)ptep) >> PAGE_SHIFT);
|
||||
spin_lock(&mm->page_table_lock);
|
||||
|
@ -689,7 +689,7 @@ static void __init srmmu_early_allocate_ptable_skeleton(unsigned long start,
|
|||
pgdp = pgd_offset_k(start);
|
||||
p4dp = p4d_offset(pgdp, start);
|
||||
pudp = pud_offset(p4dp, start);
|
||||
if (pud_none(*(pud_t *)__nocache_fix(pudp))) {
|
||||
if (pud_none(*__nocache_fix(pudp))) {
|
||||
pmdp = __srmmu_get_nocache(
|
||||
SRMMU_PMD_TABLE_SIZE, SRMMU_PMD_TABLE_SIZE);
|
||||
if (pmdp == NULL)
|
||||
|
@ -698,7 +698,7 @@ static void __init srmmu_early_allocate_ptable_skeleton(unsigned long start,
|
|||
pud_set(__nocache_fix(pudp), pmdp);
|
||||
}
|
||||
pmdp = pmd_offset(__nocache_fix(pudp), start);
|
||||
if (srmmu_pmd_none(*(pmd_t *)__nocache_fix(pmdp))) {
|
||||
if (srmmu_pmd_none(*__nocache_fix(pmdp))) {
|
||||
ptep = __srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
|
||||
if (ptep == NULL)
|
||||
early_pgtable_allocfail("pte");
|
||||
|
@ -810,11 +810,11 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
|
|||
p4dp = p4d_offset(pgdp, start);
|
||||
pudp = pud_offset(p4dp, start);
|
||||
if (what == 2) {
|
||||
*(pgd_t *)__nocache_fix(pgdp) = __pgd(probed);
|
||||
*__nocache_fix(pgdp) = __pgd(probed);
|
||||
start += PGDIR_SIZE;
|
||||
continue;
|
||||
}
|
||||
if (pud_none(*(pud_t *)__nocache_fix(pudp))) {
|
||||
if (pud_none(*__nocache_fix(pudp))) {
|
||||
pmdp = __srmmu_get_nocache(SRMMU_PMD_TABLE_SIZE,
|
||||
SRMMU_PMD_TABLE_SIZE);
|
||||
if (pmdp == NULL)
|
||||
|
@ -822,13 +822,13 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
|
|||
memset(__nocache_fix(pmdp), 0, SRMMU_PMD_TABLE_SIZE);
|
||||
pud_set(__nocache_fix(pudp), pmdp);
|
||||
}
|
||||
pmdp = pmd_offset(__nocache_fix(pgdp), start);
|
||||
pmdp = pmd_offset(__nocache_fix(pudp), start);
|
||||
if (what == 1) {
|
||||
*(pmd_t *)__nocache_fix(pmdp) = __pmd(probed);
|
||||
start += PMD_SIZE;
|
||||
continue;
|
||||
}
|
||||
if (srmmu_pmd_none(*(pmd_t *)__nocache_fix(pmdp))) {
|
||||
if (srmmu_pmd_none(*__nocache_fix(pmdp))) {
|
||||
ptep = __srmmu_get_nocache(PTE_SIZE, PTE_SIZE);
|
||||
if (ptep == NULL)
|
||||
early_pgtable_allocfail("pte");
|
||||
|
@ -836,7 +836,7 @@ static void __init srmmu_inherit_prom_mappings(unsigned long start,
|
|||
pmd_set(__nocache_fix(pmdp), ptep);
|
||||
}
|
||||
ptep = pte_offset_kernel(__nocache_fix(pmdp), start);
|
||||
*(pte_t *)__nocache_fix(ptep) = __pte(probed);
|
||||
*__nocache_fix(ptep) = __pte(probed);
|
||||
start += PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
|
@ -850,7 +850,7 @@ static void __init do_large_mapping(unsigned long vaddr, unsigned long phys_base
|
|||
unsigned long big_pte;
|
||||
|
||||
big_pte = KERNEL_PTE(phys_base >> 4);
|
||||
*(pgd_t *)__nocache_fix(pgdp) = __pgd(big_pte);
|
||||
*__nocache_fix(pgdp) = __pgd(big_pte);
|
||||
}
|
||||
|
||||
/* Map sp_bank entry SP_ENTRY, starting at virtual address VBASE. */
|
||||
|
@ -940,7 +940,7 @@ void __init srmmu_paging_init(void)
|
|||
srmmu_ctx_table_phys = (ctxd_t *)__nocache_pa(srmmu_context_table);
|
||||
|
||||
for (i = 0; i < num_contexts; i++)
|
||||
srmmu_ctxd_set((ctxd_t *)__nocache_fix(&srmmu_context_table[i]), srmmu_swapper_pg_dir);
|
||||
srmmu_ctxd_set(__nocache_fix(&srmmu_context_table[i]), srmmu_swapper_pg_dir);
|
||||
|
||||
flush_cache_all();
|
||||
srmmu_set_ctable_ptr((unsigned long)srmmu_ctx_table_phys);
|
||||
|
|
|
@ -186,7 +186,7 @@ static int d7s_probe(struct platform_device *op)
|
|||
p->regs = of_ioremap(&op->resource[0], 0, sizeof(u8), "d7s");
|
||||
if (!p->regs) {
|
||||
printk(KERN_ERR PFX "Cannot map chip registers\n");
|
||||
goto out_free;
|
||||
goto out;
|
||||
}
|
||||
|
||||
err = misc_register(&d7s_miscdev);
|
||||
|
@ -228,8 +228,6 @@ out:
|
|||
|
||||
out_iounmap:
|
||||
of_iounmap(&op->resource[0], p->regs, sizeof(u8));
|
||||
|
||||
out_free:
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue