741 static int
742 segkmem_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
743 {
744 ASSERT(RW_LOCK_HELD(&seg->s_as->a_lock));
745
746 if (seg->s_as != &kas)
747 segkmem_badop();
748
749 /*
750 * If it is one of segkp pages, call into segkp.
751 */
752 if (segkp_bitmap && seg == &kvseg &&
753 BT_TEST(segkp_bitmap, btop((uintptr_t)(addr - seg->s_base))))
754 return (segop_getmemid(segkp, addr, memidp));
755
756 segkmem_badop();
757 return (0);
758 }
759
760 /*ARGSUSED*/
761 static lgrp_mem_policy_info_t *
762 segkmem_getpolicy(struct seg *seg, caddr_t addr)
763 {
764 return (NULL);
765 }
766
767 /*ARGSUSED*/
768 static int
769 segkmem_capable(struct seg *seg, segcapability_t capability)
770 {
771 if (capability == S_CAPABILITY_NOMINFLT)
772 return (1);
773 return (0);
774 }
775
776 static struct seg_ops segkmem_ops = {
777 .dup = SEGKMEM_BADOP(int),
778 .unmap = SEGKMEM_BADOP(int),
779 .free = SEGKMEM_BADOP(void),
780 .fault = segkmem_fault,
781 .faulta = SEGKMEM_BADOP(faultcode_t),
782 .setprot = segkmem_setprot,
783 .checkprot = segkmem_checkprot,
784 .kluster = segkmem_kluster,
785 .swapout = SEGKMEM_BADOP(size_t),
786 .sync = SEGKMEM_BADOP(int),
787 .incore = SEGKMEM_BADOP(size_t),
788 .lockop = SEGKMEM_BADOP(int),
789 .getprot = SEGKMEM_BADOP(int),
790 .getoffset = SEGKMEM_BADOP(u_offset_t),
791 .gettype = SEGKMEM_BADOP(int),
792 .getvp = SEGKMEM_BADOP(int),
793 .advise = SEGKMEM_BADOP(int),
794 .dump = segkmem_dump,
795 .pagelock = segkmem_pagelock,
796 .setpagesize = SEGKMEM_BADOP(int),
797 .getmemid = segkmem_getmemid,
798 .getpolicy = segkmem_getpolicy,
799 .capable = segkmem_capable,
800 };
801
802 int
803 segkmem_zio_create(struct seg *seg)
804 {
805 ASSERT(seg->s_as == &kas && RW_WRITE_HELD(&kas.a_lock));
806 seg->s_ops = &segkmem_ops;
807 seg->s_data = &zvp;
808 kas.a_size += seg->s_size;
809 return (0);
810 }
811
812 int
813 segkmem_create(struct seg *seg)
814 {
815 ASSERT(seg->s_as == &kas && RW_WRITE_HELD(&kas.a_lock));
816 seg->s_ops = &segkmem_ops;
817 seg->s_data = &kvp;
818 kas.a_size += seg->s_size;
|
741 static int
742 segkmem_getmemid(struct seg *seg, caddr_t addr, memid_t *memidp)
743 {
744 ASSERT(RW_LOCK_HELD(&seg->s_as->a_lock));
745
746 if (seg->s_as != &kas)
747 segkmem_badop();
748
749 /*
750 * If it is one of segkp pages, call into segkp.
751 */
752 if (segkp_bitmap && seg == &kvseg &&
753 BT_TEST(segkp_bitmap, btop((uintptr_t)(addr - seg->s_base))))
754 return (segop_getmemid(segkp, addr, memidp));
755
756 segkmem_badop();
757 return (0);
758 }
759
760 /*ARGSUSED*/
761 static int
762 segkmem_capable(struct seg *seg, segcapability_t capability)
763 {
764 if (capability == S_CAPABILITY_NOMINFLT)
765 return (1);
766 return (0);
767 }
768
769 static struct seg_ops segkmem_ops = {
770 .dup = SEGKMEM_BADOP(int),
771 .unmap = SEGKMEM_BADOP(int),
772 .free = SEGKMEM_BADOP(void),
773 .fault = segkmem_fault,
774 .faulta = SEGKMEM_BADOP(faultcode_t),
775 .setprot = segkmem_setprot,
776 .checkprot = segkmem_checkprot,
777 .kluster = segkmem_kluster,
778 .swapout = SEGKMEM_BADOP(size_t),
779 .sync = SEGKMEM_BADOP(int),
780 .incore = SEGKMEM_BADOP(size_t),
781 .lockop = SEGKMEM_BADOP(int),
782 .getprot = SEGKMEM_BADOP(int),
783 .getoffset = SEGKMEM_BADOP(u_offset_t),
784 .gettype = SEGKMEM_BADOP(int),
785 .getvp = SEGKMEM_BADOP(int),
786 .advise = SEGKMEM_BADOP(int),
787 .dump = segkmem_dump,
788 .pagelock = segkmem_pagelock,
789 .setpagesize = SEGKMEM_BADOP(int),
790 .getmemid = segkmem_getmemid,
791 .capable = segkmem_capable,
792 };
793
794 int
795 segkmem_zio_create(struct seg *seg)
796 {
797 ASSERT(seg->s_as == &kas && RW_WRITE_HELD(&kas.a_lock));
798 seg->s_ops = &segkmem_ops;
799 seg->s_data = &zvp;
800 kas.a_size += seg->s_size;
801 return (0);
802 }
803
804 int
805 segkmem_create(struct seg *seg)
806 {
807 ASSERT(seg->s_as == &kas && RW_WRITE_HELD(&kas.a_lock));
808 seg->s_ops = &segkmem_ops;
809 seg->s_data = &kvp;
810 kas.a_size += seg->s_size;
|