VirtualBox

Ignore:
Timestamp:
Jun 15, 2010 11:57:37 AM (15 years ago)
Author:
vboxsync
Message:

Solaris/VBI: fix segvbi_fault and segvbi_getprot routines. Some style cleanup.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/r0drv/solaris/vbi/i86pc/os/vbi.c

    r29476 r30190  
    124124#define IS_KERNEL(v)    ((uintptr_t)(v) >= kernelbase)
    125125
     126#if 0
    126127static int vbi_verbose = 0;
    127128
    128129#define VBI_VERBOSE(msg) {if (vbi_verbose) cmn_err(CE_WARN, msg);}
     130#endif
    129131
    130132/* Introduced in v6 */
     
    212214                 * actual number of CPUs running in the sytem.
    213215                 */
    214                 if (ncpus > VBI_NCPU)
     216                if (ncpus > VBI_NCPU) {
     217                    cmn_err(CE_NOTE, "cpu count mismatch.\n");
    215218                        return (EINVAL);
     219                }
    216220        } else {
    217221                use_old = 1;
     
    219223                        use_old_with_ulong = 1;
    220224                else if (max_cpuid + 1 != VBI_NCPU)
     225                {
     226                    cmn_err(CE_NOTE, "cpuset_t size mismatch. probably too old a kernel.\n");
    221227                        return (EINVAL);        /* cpuset_t size mismatch */
     228                }
    222229        }
    223230
     
    229236                        kobj_getsymvalue("contig_free", 1);
    230237                if (p_contig_free == NULL) {
    231                         cmn_err(CE_NOTE, " contig_free() not found in kernel");
     238                        cmn_err(CE_NOTE, " contig_free() not found in kernel\n");
    232239                        return (EINVAL);
    233240                }
     
    237244         * Check if this is S10 or Nevada
    238245         */
    239         if (!strncmp(utsname.release, "5.11", sizeof("5.11") - 1))
    240         {
     246        if (!strncmp(utsname.release, "5.11", sizeof("5.11") - 1)) {
    241247                /* Nevada detected... */
    242248                vbi_is_nevada = 1;
     
    245251                off_cpu_kprunrun = off_s11_cpu_kprunrun;
    246252                off_t_preempt = off_s11_t_preempt;
    247         }
    248         else
    249         {
     253        } else {
    250254                /* Solaris 10 detected... */
    251255                vbi_is_nevada = 0;
     
    263267        char krr = VBI_CPU_KPRUNRUN;
    264268        if (   (crr < 0 || crr > 1)
    265                 || (krr < 0 || krr > 1))
    266         {
     269                || (krr < 0 || krr > 1)) {
    267270                cmn_err(CE_NOTE, ":CPU structure sanity check failed! OS version mismatch.\n");
    268271                return EINVAL;
     
    271274        /* Thread */
    272275        char t_preempt = VBI_T_PREEMPT;
    273         if (t_preempt < 0 || t_preempt > 32)
    274         {
     276        if (t_preempt < 0 || t_preempt > 32) {
    275277                cmn_err(CE_NOTE, ":Thread structure sanity check failed! OS version mismatch.\n");
    276278                return EINVAL;
    277279        }
     280
    278281        return (0);
    279282}
     
    335338
    336339        if (ptr == NULL) {
    337                 VBI_VERBOSE("vbi_internal_alloc() failure");
     340                cmn_err(CE_NOTE, "vbi_internal_alloc() failure for %lu bytes", size);
    338341                return (NULL);
    339342        }
     
    366369
    367370        if ((pa & PAGEOFFSET) || (size & PAGEOFFSET)) {
    368                 VBI_VERBOSE("vbi_kernel_map() bad pa or size");
     371                cmn_err(CE_NOTE, "vbi_kernel_map() bad pa (0x%lx) or size (%lu)", pa, size);
    369372                return (NULL);
    370373        }
     
    682685                        (caddr_t)addr, len, F_SOFTLOCK, access);
    683686                if (err != 0) {
    684                         VBI_VERBOSE("vbi_lock_va() failed to lock");
     687                        cmn_err(CE_NOTE, "vbi_lock_va() failed to lock");
    685688                        return (-1);
    686689                }
     
    733736        struct segvbi_data *data;
    734737        struct as *as = seg->s_as;
    735         int error = 0;
    736738        caddr_t va;
    737739        ulong_t pgcnt;
     
    756758        }
    757759
    758         return (error);
     760        return (0);
    759761}
    760762
     
    801803
    802804/*
    803  * We never demand-fault for seg_vbi.
     805 * We would demand fault if the (u)read() path would SEGOP_FAULT()
     806 * on buffers mapped in via vbi_user_map() i.e. prefaults before DMA.
     807 * Don't fail in such case where we're called directly, see #5047.
    804808 */
    805809static int
     
    807811        enum fault_type type, enum seg_rw rw)
    808812{
    809         return (FC_MAKE_ERR(EFAULT));
     813        return (0);
    810814}
    811815
     
    862866{
    863867        struct segvbi_data *data = seg->s_data;
    864         return (data->prot);
     868        size_t pgno = seg_page(seg, addr + len) - seg_page(seg, addr) + 1;
     869        if (pgno != 0)
     870        {
     871            do
     872            {
     873                pgno--;
     874                protv[pgno] = data->prot;
     875            } while (pgno != 0);
     876        }
     877        return (0);
    865878}
    866879
     
    977990                error = ENOMEM;
    978991        if (error)
    979                 VBI_VERBOSE("vbi_user_map() failed");
     992                cmn_err(CE_NOTE, "vbi_user_map() failed error=%d", error);
    980993        as_rangeunlock(as);
    981994        return (error);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette